# mailboxes to update during file traversal
acl_mailboxes = None
# acls retrieved from a file
- file_acls = None
+ _file_acls = None
def __init__(self):
"""Creates a connection and a user session."""
self.created_mailboxes = []
self.acl_mailboxes = []
- self.file_acls = {}
+ self._file_acls = {}
@classmethod
def _message_read(cls, filename):
return message
- def load_mailbox_list(self, mboxlistfile, original_user):
+ def get_mailbox_acls(self, mailbox, original_user):
+ """Get the acls loaded from a file for a given mailbox.
+ Should be used for access of mailbox acls instead of attribute"""
+
+ # translate the mailbox to internal stored format
+ internal_mailbox = mailbox.replace("INBOX/", "user/" + original_user + "/")
+ internal_mailbox = internal_mailbox.replace(".", "^")
+ internal_mailbox = internal_mailbox.replace("/", ".")
+ logging.debug("Get acls for mailbox %s translated as %s", mailbox, internal_mailbox)
+
+ # retrieve from internal dicitonary attribute of file acls
+ try:
+ mb_acls = self._file_acls[internal_mailbox]
+ except KeyError:
+ # no rights for the mailbox were found and warn if acl file loaded
+ if len(self._file_acls) > 0:
+ logging.warning("Could not find the acls for mailbox %s %s", mailbox, self._file_acls.keys())
+ mb_acls = {}
+
+ return mb_acls
+
+ def load_mailbox_list(self, mboxlistfile):
"""Load the list of mailboxes and acl rights for each from file."""
try:
aclstr = linedata[1]
# changes acls key encoding to internal cyrus format and makes it absolute (as folder).
- key = linedata[0].replace("INBOX/", "user/" + original_user + "/")
- key = key.replace(".", "^")
- key = key.replace("/", ".")
-
+ key = linedata[0]
+
# loop through acl rights string and build dictionary of users and rights
while(aclstr != ""):
try:
logging.warning("Illegal acl string in mailbox list dump: %s", line)
aclstr = ""
continue
- aclstr = acldata[2]
acls[acldata[0]] = acldata[1]
+ aclstr = acldata[2]
- self.file_acls[key] = acls
+ self._file_acls[key] = acls
except IOError:
logging.warning("Could not open mboxlist file %s", mboxlistfile)
dummy_filename = None
# dummy file descriptor to be used for parsing the acls
dummy_file = None
- # dummy original user
- dummy_user = None
# wrong naming conventions are due to python unittest library requirement
def setUp(self):
self.dummy_file = open(self.dummy_filename, "w")
self.dummy_file.write("user.00schneider\t0 default 00schneider\tlrswipkxtecda\t\n"
"user.mit^punkt.Gesendete Objekte\t0 default mit.punkt\tlrswipktecda\t\n"
- "user.00schneider.ibx_poped\t0 default 00schneider\tlrswipkxtecda\t\n"
+ "user.00schneider.Gesendete Objekte\t0 default 00schneider\tlrswipkxtecda\t\n"
"user.00schneider.ibx_sub\t0 default 00schneider\tlrswpkxtecda\t\n"
"user.abrus\t0 default abrus\tlrswipkxtecda\t\n"
"user.abrus.Aufgaben\t0 default abrus\tlrswipkxtecda\tabrus2\tlrswikxtecda\t\n"
def test_mboxlist_parsed_line1(self):
"""Test whether a line was parsed correctly."""
- self.file_iter.load_mailbox_list(self.dummy_filename, self.dummy_user)
- self.assertIn("user^00schneider", self.file_iter.file_acls)
- self.assertIn("00schneider", self.file_iter.file_acls["user^00schneider"])
- self.assertEqual(self.file_iter.file_acls["user^00schneider"]["00schneider"], "lrswipkxtecda", "Wrong acls were parsed for a user.")
+ self.file_iter.load_mailbox_list(self.dummy_filename)
+ self.assertEqual(len(self.file_iter.get_mailbox_acls("INBOX/Gesendete Objekte", "00schneider")), 1)
+ self.assertIn("00schneider", self.file_iter.get_mailbox_acls("INBOX/Gesendete Objekte", "00schneider"))
+ self.assertEqual(self.file_iter.get_mailbox_acls("INBOX/Gesendete Objekte", "00schneider")["00schneider"], "lrswipkxtecda", "Wrong acls were parsed for a user.")
def test_mboxlist_parsed_line2(self):
"""Test whether a line was parsed correctly."""
- self.file_iter.load_mailbox_list(self.dummy_filename, self.dummy_user)
- self.assertIn("user^mit^punkt^Gesendete Objekte", self.file_iter.file_acls)
- self.assertIn("mit.punkt", self.file_iter.file_acls["user^mit^punkt^Gesendete Objekte"])
- self.assertEqual(self.file_iter.file_acls["user^mit^punkt^Gesendete Objekte"]["mit.punkt"], "lrswipktecda", "Wrong acls were parsed for a user.")
-
+ self.file_iter.load_mailbox_list(self.dummy_filename)
+ self.assertEqual(len(self.file_iter.get_mailbox_acls("INBOX/Gesendete Objekte", "mit.punkt")), 1)
+ self.assertIn("mit.punkt", self.file_iter.get_mailbox_acls("INBOX/Gesendete Objekte", "mit.punkt"))
+ self.assertEqual(self.file_iter.get_mailbox_acls("INBOX/Gesendete Objekte", "mit.punkt")["mit.punkt"], "lrswipktecda", "Wrong acls were parsed for a user.")
+
def test_mboxlist_totals(self):
"""Test whether there are missing parsed lines, mailboxs, and users."""
- self.file_iter.load_mailbox_list(self.dummy_filename, self.dummy_user)
- self.assertEqual(len(self.file_iter.file_acls), 13)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 2)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
- self.assertEqual(len(self.file_iter.file_acls.popitem()[1]), 1)
-
+ self.file_iter.load_mailbox_list(self.dummy_filename)
+ self.assertEqual(len(self.file_iter._file_acls), 13)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 2)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+ self.assertEqual(len(self.file_iter._file_acls.popitem()[1]), 1)
+
if __name__ == '__main__':
unittest.main()
\ No newline at end of file