Save password passing and normal local connection enabled
authorPlamen Dimitrov <plamen.dimitrov@intra2net.com>
Wed, 11 Jul 2012 09:03:44 +0000 (11:03 +0200)
committerPlamen Dimitrov <plamen.dimitrov@intra2net.com>
Wed, 11 Jul 2012 09:03:44 +0000 (11:03 +0200)
src/imap_restore_mail.py
src/mail_iterator.py

index e991398..cfdf9cf 100644 (file)
@@ -15,13 +15,13 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 '''
 import logging
-import argparse
+import argparse, getpass
 from mail_iterator import MailIterator
 from file_iterator import FileIterator
 from warnings_handler import WarningsHandler
 
 # logging settings
-LOG_FILENAME = "restore_mail_inject.log"
+LOG_FILENAME = "imap_restore_mail.log"
 LOG_FILE_LEVEL = logging.DEBUG
 LOG_SHELL_LEVEL = logging.INFO
 LOG_UNCLEAN_EXIT_LEVEL = logging.WARNING
@@ -36,11 +36,8 @@ def main():
           args.user, args.folder, args.srcdir)
 
     # connect to unix socket or server
-    if(args.unix_socket_disabled):
-        session = MailIterator(args.user)
-    else:
-        session = MailIterator(args.user)
-        #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
+    psw = getpass.getpass()
+    session = MailIterator(args.user, psw)
     storage = FileIterator()
 
     # retrieve mailbox list from the mailbox list file
@@ -81,20 +78,18 @@ def configure_args():
 
     # parse arguments
     parser = argparse.ArgumentParser(description="Tool to inject mails via IMAP.")
+    parser.add_argument('-s', '--sourcedir', dest='srcdir', action='store',
+                        required=True, help='folder to read mail from')
     parser.add_argument('-u', '--username', dest='user', action='store',
                         required=True, help='user to store mails to')
+    parser.add_argument('-o', '--ouser', dest='ouser', action='store',
+                        default="", help='name of the original user (=username if not specified)')
     parser.add_argument('-f', '--foldername', dest='folder', action='store',
                         default="INBOX", help='folder to store mails to - if not specified we overwrite INBOX')
-    parser.add_argument('-s', '--sourcedir', dest='srcdir', action='store',
-                        required=True, help='folder to read mail from')
     parser.add_argument('-m', '--mboxlistfile', dest='mboxlistfile', action='store',
                         default="", help='mboxlist file (flat file format) to read the ACLs from')
-    parser.add_argument('-o', '--ouser', dest='ouser', action='store',
-                        default="", help='name of the original user (=username if not specified)')
     parser.add_argument('-a', '--append', dest='append', action='store_true',
                         default=False, help="append mails, don't delete anything")
-    parser.add_argument('-n', '--normal', dest='unix_socket_disabled', action='store_true',
-                        default=False, help='disable unix socket usage for the IMAP connection')
     args = parser.parse_args()
 
     if (args.folder != "INBOX"):
index e7c7f8f..12ed42d 100644 (file)
@@ -24,6 +24,8 @@ MAILBOX_RESP = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)'
 UIDVAL_RESP = re.compile(r'(?P<name>.*) \(UIDVALIDITY (?P<uidval>.*)\)')
 ACLS_RESP = re.compile(b'(?P<user>.*) (?P<acls>.*)')
 
+SERVER = "localhost"
+
 class MailIterator:
     """This class communicates with the e-mail server."""
 
@@ -35,27 +37,33 @@ class MailIterator:
     # logged in status
     logged_in = None
 
-    def __init__(self, username, server = "intranator.m.i2n"):
+    def __init__(self, username, password):
         """Creates a connection and a user session."""
 
         # connect to server
         try:
-            self.mail_con = imaplib.IMAP4(server)
-            # MODIFIED
-            imap_socket = socket.socket(socket.AF_UNIX)
-            imap_socket.connect("/var/imap/socket/imap")
-            self.mail_con.sock = imap_socket
-            self.mail_con.file = self.mail_con.sock.makefile('rb')
-            logging.info("Connected to mail server %s", server)
+            self.mail_con = imaplib.IMAP4(SERVER)
+
+            # socket functionality (currently unavailable)
+            #imap_socket = socket.socket(socket.AF_UNIX)
+            #imap_socket.connect("/var/imap/socket/imap")
+            #self.mail_con.sock = imap_socket
+            #self.mail_con.file = self.mail_con.sock.makefile('rb')
+
+            logging.info("Connected to %s", SERVER)
         except (socket.error, self.mail_con.error) as ex:
             logging.error("Could not connect to host: %s", ex)
             sys.exit()
 
         # log in
         try:
-            self.mail_con.login("cyrus", "geheim")
-            self.logged_in = True
+
+            # proxy authentication
+            #self.mail_con.login("cyrus", "geheim")
             #self.mail_con.proxyauth(username)
+
+            self.mail_con.login(username, password)
+            self.logged_in = True
             logging.info("Logged in as %s.", username)
         except self.mail_con.error as ex:
             self.logged_in = False