[2] | 1 | import os |
---|
| 2 | import sys |
---|
| 3 | |
---|
| 4 | from trac.env import Environment |
---|
| 5 | from acct_mgr.api import AccountManager |
---|
| 6 | from acct_mgr.htfile import HtPasswdStore, HtDigestStore |
---|
| 7 | from acct_mgr.pwhash import HtPasswdHashMethod, HtDigestHashMethod |
---|
| 8 | |
---|
| 9 | env = Environment(sys.argv[1]) |
---|
| 10 | |
---|
| 11 | store = AccountManager(env).password_store |
---|
| 12 | if isinstance(store, HtPasswdStore): |
---|
| 13 | env.config.set('account-manager', 'hash_method', 'HtPasswdHashMethod') |
---|
| 14 | prefix = '' |
---|
| 15 | elif isinstance(store, HtDigestStore): |
---|
| 16 | env.config.set('account-manager', 'hash_method', 'HtDigestHashMethod') |
---|
| 17 | prefix = store.realm + ':' |
---|
| 18 | else: |
---|
| 19 | print >>sys.stderr, 'Unsupported password store:', store.__class__.__name__ |
---|
| 20 | sys.exit(1) |
---|
| 21 | |
---|
| 22 | password_file = os.path.join(env.path, env.config.get('account-manager', |
---|
| 23 | 'password_file')) |
---|
| 24 | hashes = [line.strip().split(':', 1) for line in open(password_file)] |
---|
| 25 | hashes = [(u,p) for u,p in hashes if p.startswith(prefix)] |
---|
| 26 | if hashes: |
---|
| 27 | db = env.get_db_cnx() |
---|
| 28 | cursor = db.cursor() |
---|
| 29 | cursor.executemany("INSERT INTO session_attribute " |
---|
| 30 | "(sid,authenticated,name,value) " |
---|
| 31 | "VALUES (%s,1,'password',%s)", |
---|
| 32 | hashes) |
---|
| 33 | db.commit() |
---|
| 34 | |
---|
| 35 | env.config.set('account-manager', 'password_store', 'SessionStore') |
---|
| 36 | env.config.save() |
---|