| 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() |
|---|