From: Kevin C. <ke...@us...> - 2006-03-17 14:07:31
|
Update of /cvsroot/mailmanager/MailManager/support In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14506/support Modified Files: Tag: RELENG_2_1 Database.py login.py Log Message: - Message loops are now caught based on presence of X-MailManager header - Migration code improved to fit with the design proposed in the development documentation - TID in subject lines is now optional, based on database settings although no UI pages allow this to be configured Index: Database.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/support/Database.py,v retrieving revision 1.2.2.3 retrieving revision 1.2.2.4 diff -u -d -r1.2.2.3 -r1.2.2.4 --- Database.py 14 Mar 2006 00:59:45 -0000 1.2.2.3 +++ Database.py 17 Mar 2006 14:07:10 -0000 1.2.2.4 @@ -16,110 +16,188 @@ # databases, and I'm refactoring them into here! I'd rather roll it into a # factory-like thing later, but this'll do for now. sql_mapping = { - 'postgres': { - 'sql_now' : 'CURRENT_TIMESTAMP', - 'sql_delimiter': ';', - 'sql_boolean': 'BOOL', - 'sql_binary': 'BYTEA', - 'sql_interval': 'BIGINT', - 'sql_database': 'postgres', - 'sql_deferrable': '', - 'sql_datetimestamp': 'TIMESTAMP', - 'sql_initdefer': '', - 'sql_indexlimit': '', - 'sql_serialpkey': 'SERIAL PRIMARY KEY', - 'sql_serial': 'SERIAL', - 'sql_tabletype': '', - 'sql_charset': '', - 'sql_true': '\'t\'', - 'sql_false': '\'f\'', - 'sql_varchar': 'VARCHAR', - 'sql_smalltext': 'TEXT', - 'sql_largetext': 'TEXT', - 'sql_integer': 'INT', - 'sql_textsearch': True, - 'sql_truevar': 't', - 'sql_falsevar': 'f', - 'suboptimise': True, - }, - 'mysql': { - 'sql_now' : 'CURRENT_TIMESTAMP', - 'sql_delimiter': '\0', - 'sql_boolean': 'BOOL', - 'sql_binary': 'LONGBLOB', - 'sql_interval': 'BIGINT', - 'sql_database': 'mysql', - 'sql_deferrable': '', - 'sql_datetimestamp': 'DATETIME', - 'sql_initdefer': '', - 'sql_indexlimit': '(255)', - 'sql_serialpkey': 'INT PRIMARY KEY AUTO_INCREMENT', - 'sql_serial': 'INT NOT NULL AUTO_INCREMENT', - 'sql_tabletype': 'TYPE=InnoDB', - 'sql_charset': 'DEFAULT CHARSET=UTF8', - 'sql_true': 1, - 'sql_false': 0, - 'sql_truevar': 1, - 'sql_falsevar': 0, - 'sql_varchar': 'VARCHAR', - 'sql_smalltext': 'TEXT', - 'sql_largetext': 'TEXT', - 'sql_integer': 'INT', - 'sql_textsearch': True, - 'mysql_max_allowed_packet': 32 * 1024 * 1024, - 'suboptimise': False, - }, - 'oracle': { - 'sql_now' : 'CURRENT_TIMESTAMP', - 'sql_delimiter': '/', - 'sql_boolean': "CHAR(1)", - 'sql_binary': 'BLOB', - 'sql_interval': 'NUMBER', - 'sql_database': 'oracle', - 'sql_deferrable': '', - 'sql_datetimestamp': 'TIMESTAMP', - 'sql_initdefer': '', - 'sql_indexlimit': '', - 'sql_serialpkey': 'INTEGER PRIMARY KEY', - 'sql_serialpkey': 'INTEGER', - 'sql_tabletype': '', - 'sql_charset': '', - 'sql_true': '\'t\'', - 'sql_false': '\'f\'', - 'sql_truevar': 't', - 'sql_falsevar': 'f', - 'sql_varchar': 'VARCHAR2' , - 'sql_smalltext': 'VARCHAR(2048)' , - 'sql_largetext': 'CLOB', - 'sql_integer': 'INTEGER', - 'sql_textsearch': True, - 'suboptimise': False, - }, - 'mssql': { - 'sql_now' : 'CURRENT_TIMESTAMP', - 'sql_delimiter': ';', - 'sql_boolean': 'TINYINT', - 'sql_binary': 'IMAGE', - 'sql_interval': 'BIGINT', - 'sql_database': 'mssql', - 'sql_deferrable': '', - 'sql_datetimestamp': 'DATETIME', - 'sql_initdefer': '', - 'sql_indexlimit': '', - 'sql_serialpkey': 'INT PRIMARY KEY', - 'sql_serialpkey': 'INT', - 'sql_tabletype': '', - 'sql_charset': '', - 'sql_true': 1, - 'sql_false': 0, - 'sql_truevar': 0, - 'sql_falsevar': 1, - 'sql_varchar': 'VARCHAR', - 'sql_smalltext': 'VARCHAR(994)', - 'sql_largetext': 'TEXT', - 'sql_integer': 'INT', - 'sql_textsearch': False, - 'suboptimise': True, + 'v2_1' : { + 'postgres': { + 'sql_now' : 'CURRENT_TIMESTAMP', + 'sql_delimiter': ';', + 'sql_boolean': 'BOOL', + 'sql_binary': 'BYTEA', + 'sql_interval': 'BIGINT', + 'sql_database': 'postgres', + 'sql_deferrable': '', + 'sql_datetimestamp': 'TIMESTAMP', + 'sql_initdefer': '', + 'sql_indexlimit': '', + 'sql_serialpkey': 'SERIAL PRIMARY KEY', + 'sql_serial': 'SERIAL', + 'sql_tabletype': '', + 'sql_charset': '', + 'sql_true': '\'t\'', + 'sql_false': '\'f\'', + 'sql_varchar': 'VARCHAR', + 'sql_smalltext': 'TEXT', + 'sql_largetext': 'TEXT', + 'sql_integer': 'INT', + 'sql_textsearch': True, + 'sql_truevar': 't', + 'sql_falsevar': 'f', + 'suboptimise': True, + }, + 'mysql': { + 'sql_now' : 'CURRENT_TIMESTAMP', + 'sql_delimiter': '\0', + 'sql_boolean': 'BOOL', + 'sql_binary': 'LONGBLOB', + 'sql_interval': 'BIGINT', + 'sql_database': 'mysql', + 'sql_deferrable': '', + 'sql_datetimestamp': 'DATETIME', + 'sql_initdefer': '', + 'sql_indexlimit': '(255)', + 'sql_serialpkey': 'INT PRIMARY KEY AUTO_INCREMENT', + 'sql_serial': 'INT NOT NULL AUTO_INCREMENT', + 'sql_tabletype': 'TYPE=InnoDB', + 'sql_charset': 'DEFAULT CHARSET=UTF8', + 'sql_true': 1, + 'sql_false': 0, + 'sql_truevar': 1, + 'sql_falsevar': 0, + 'sql_varchar': 'VARCHAR', + 'sql_smalltext': 'TEXT', + 'sql_largetext': 'TEXT', + 'sql_integer': 'INT', + 'sql_textsearch': True, + 'mysql_max_allowed_packet': 32 * 1024 * 1024, + 'suboptimise': False, + }, + 'oracle': { + 'sql_now' : 'CURRENT_TIMESTAMP', + 'sql_delimiter': '/', + 'sql_boolean': "CHAR(1)", + 'sql_binary': 'BLOB', + 'sql_interval': 'NUMBER', + 'sql_database': 'oracle', + 'sql_deferrable': '', + 'sql_datetimestamp': 'TIMESTAMP', + 'sql_initdefer': '', + 'sql_indexlimit': '', + 'sql_serialpkey': 'INTEGER PRIMARY KEY', + 'sql_serialpkey': 'INTEGER', + 'sql_tabletype': '', + 'sql_charset': '', + 'sql_true': '\'t\'', + 'sql_false': '\'f\'', + 'sql_truevar': 't', + 'sql_falsevar': 'f', + 'sql_varchar': 'VARCHAR2' , + 'sql_smalltext': 'VARCHAR(2048)' , + 'sql_largetext': 'CLOB', + 'sql_integer': 'INTEGER', + 'sql_textsearch': True, + 'suboptimise': False, + }, + 'mssql': { + 'sql_now' : 'CURRENT_TIMESTAMP', + 'sql_delimiter': ';', + 'sql_boolean': 'TINYINT', + 'sql_binary': 'IMAGE', + 'sql_interval': 'BIGINT', + 'sql_database': 'mssql', + 'sql_deferrable': '', + 'sql_datetimestamp': 'DATETIME', + 'sql_initdefer': '', + 'sql_indexlimit': '', + 'sql_serialpkey': 'INT PRIMARY KEY', + 'sql_serialpkey': 'INT', + 'sql_tabletype': '', + 'sql_charset': '', + 'sql_true': 1, + 'sql_false': 0, + 'sql_truevar': 0, + 'sql_falsevar': 1, + 'sql_varchar': 'VARCHAR', + 'sql_smalltext': 'VARCHAR(994)', + 'sql_largetext': 'TEXT', + 'sql_integer': 'INT', + 'sql_textsearch': False, + 'suboptimise': True, + } + }, + + 'v2_0' : { + 'postgres': { + 'sql_delimiter' : ';', + 'sql_boolean' : 'BOOL', + 'sql_binary' : 'BYTEA', + 'sql_interval' : 'BIGINT', + 'sql_database' : 'postgres', + 'sql_deferrable' : '', + 'sql_datetimestamp' : 'TIMESTAMP', + 'sql_initdefer' : '', + 'sql_indexlimit' : '', + 'sql_serialpkey' : 'SERIAL PRIMARY KEY', + 'sql_tabletype' : '', + 'sql_charset' : '', + 'sql_true' : '\'t\'', + 'sql_false' : '\'f\'', + 'sql_varchar' : 'VARCHAR', + 'sql_smalltext' : 'TEXT', + 'sql_largetext' : 'TEXT', + 'sql_integer' : 'INT', + 'sql_textsearch' : True, + 'sql_truevar' : 't', + 'sql_falsevar' : 'f', + 'suboptimise' : True, + }, + 'mysql': { + 'sql_delimiter' : '\0', + 'sql_boolean' : 'BOOL', + 'sql_binary' : 'LONGBLOB', + 'sql_interval' : 'BIGINT', + 'sql_database' : 'mysql', + 'sql_deferrable' : '', + 'sql_datetimestamp' : 'DATETIME', + 'sql_initdefer' : '', + 'sql_indexlimit' : '(255)', + 'sql_serialpkey' : 'INT PRIMARY KEY AUTO_INCREMENT', + 'sql_tabletype' : 'TYPE=InnoDB', + 'sql_charset' : 'DEFAULT CHARSET=UTF8', + 'sql_true' : 1, + 'sql_false' : 0, + 'sql_truevar' : 1, + 'sql_falsevar' : 0, + 'sql_varchar' : 'VARCHAR', + 'sql_smalltext' : 'TEXT', + 'sql_largetext' : 'TEXT', + 'sql_integer' : 'INT', + 'sql_textsearch' : True, + 'mysql_max_allowed_packet' : 32 * 1024 * 1024, + 'suboptimise' : False, + }, + 'oracle': { + 'sql_delimiter' : '/', + 'sql_boolean' : "CHAR(1)", + 'sql_binary' : 'BLOB', + 'sql_interval' : 'NUMBER', + 'sql_database' : 'oracle', + 'sql_deferrable' : '', + 'sql_datetimestamp' : 'TIMESTAMP', + 'sql_initdefer' : '', + 'sql_indexlimit' : '', + 'sql_serialpkey' : 'INTEGER PRIMARY KEY', + 'sql_tabletype' : '', + 'sql_charset' : '', + 'sql_true' : '\'t\'', + 'sql_false' : '\'f\'', + 'sql_truevar' : 't', + 'sql_falsevar' : 'f', + 'sql_varchar' : 'VARCHAR2', + 'sql_smalltext' : 'VARCHAR(2048)', + 'sql_largetext' : 'CLOB', + 'sql_integer' : 'INTEGER', + 'sql_textsearch' : True, + 'suboptimise' : False, + }, } } @@ -127,37 +205,37 @@ """ The general interface for creating MailManager databases. Everything that registers itself with the DatabaseFactory should implement all of these methods. - + I don't know if one is supposed to specify __init__() methods in the interface, so I won't, but each object which implements this specification must have an __init__() method which matches the signature: - + def __init__(mm_user, mm_pass, su_user, su_pass, db_host, db_port, db_name) """ - + def createDatabase(self, db_name = None): """ Create a new database, including any text indexing functionality. If no database name is specified, default to the database name specified at init time. """ pass - + def dropDatabase(self, dbname = None): """ Drop the specified MailManager database. If None, default to the database specified at init time. """ pass - + def createUser(self, username = None, password = None): """ Create the specified user. If no username and password are specified, it's a shortcut for creating the mm user specified at init time. """ pass - + def dropUser(self, username = None): - """ Drop the specified user. If no username is specified, it's a + """ Drop the specified user. If no username is specified, it's a shortcut for dropping the mm user specified at init time. """ pass Index: login.py =================================================================== RCS file: /cvsroot/mailmanager/MailManager/support/login.py,v retrieving revision 1.1.2.9 retrieving revision 1.1.2.10 diff -u -d -r1.1.2.9 -r1.1.2.10 --- login.py 16 Mar 2006 22:29:35 -0000 1.1.2.9 +++ login.py 17 Mar 2006 14:07:10 -0000 1.1.2.10 @@ -93,8 +93,8 @@ return (abs(struct.unpack('l', os.urandom(4))[0]) / (0.0 + ~(1 << 31))) -def genPasswd(random, length = 8, chars = (string.letters + string.digits)): - return ''.join([ random.choice(chars) for i in range(length) ]) +def genPasswd(rng, length = 8, chars = (string.letters + string.digits)): + return ''.join([ rng.choice(chars) for i in range(length) ]) @@ -401,16 +401,16 @@ ac = base64.encodestring(('%s:%s' % (name, pw))) pyver = sys.version_info if pyver[0] > 2 or (pyver[0] == 2 and pyver[1] >= 4): - random = NewSecureRandom() + rng = NewSecureRandom() else: if sys.platform.startswith('win'): warnings.warn(Warning("Insecure random number generator being used")) - random = random.Random() + rng = random.Random() else: print "Loading random" - random = SecureRandom(paranoid=True) + rng = SecureRandom(paranoid=True) print "Done" - sess_id = genPasswd(random, length=16) + sess_id = genPasswd(rng, length=16) print "Got PW" req._auth = ('Basic %s' % ac) resp._auth = 1 |