+def GenDBM(accounts, File, key):
+ Fdb = None
+ try:
+ OldMask = os.umask(0022)
+ # nothing else does the fsync stuff, so why do it here?
+ fn = os.path.join(prefix,File).encode('ascii', 'ignore')
+ fntmp = os.path.join(prefix,File + '.tmp').encode('ascii', 'ignore')
+ try:
+ posix.remove(fntmp)
+ except:
+ pass
+
+ Fdb = dbm.open(fntmp, "c")
+ os.umask(OldMask)
+
+ # Write out the email address for each user
+ for a in accounts:
+ if not key in a: continue
+ value = a[key]
+ user = a['uid']
+ Fdb[user] = value
+
+ Fdb.close()
+ posix.rename(fntmp,fn)
+ # Oops, something unspeakable happened.
+ except:
+ Fdb.close()
+ raise
+