From f72ba42a5466a37e2a59cfc27822af58f64be854 Mon Sep 17 00:00:00 2001 From: Plamen Dimitrov Date: Wed, 11 Jul 2012 11:03:44 +0200 Subject: [PATCH] Save password passing and normal local connection enabled --- src/imap_restore_mail.py | 21 ++++++++------------- src/mail_iterator.py | 28 ++++++++++++++++++---------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/imap_restore_mail.py b/src/imap_restore_mail.py index e991398..cfdf9cf 100644 --- a/src/imap_restore_mail.py +++ b/src/imap_restore_mail.py @@ -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"): diff --git a/src/mail_iterator.py b/src/mail_iterator.py index e7c7f8f..12ed42d 100644 --- a/src/mail_iterator.py +++ b/src/mail_iterator.py @@ -24,6 +24,8 @@ MAILBOX_RESP = re.compile(r'\((?P.*?)\) "(?P.*)" (?P.*)' UIDVAL_RESP = re.compile(r'(?P.*) \(UIDVALIDITY (?P.*)\)') ACLS_RESP = re.compile(b'(?P.*) (?P.*)') +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 -- 1.7.1