+ header ('Listing %d local accounts with no site - and similar remote accounts'%len(orphans))
+ index=0
+ for local in orphans:
+ index+=1
+ list_person ("%3d"%index,local)
+ for related in get_related(local['email']):
+ list_person("dup",related)
+ if options.delete:
+ delete_default = not local['enabled']
+ delete_local(local,delete_default,options)
+
+def main_duplicates(options):
+
+ header ('Listing all duplicate accounts')
+ locals = GetPersons({'peer_id':None,'-SORT':'email'})
+ locals.sort(sort_email)
+ index=0
+ for local in locals:
+ remotes=GetPersons({'email':local['email'],'~peer_id':None})
+ if remotes:
+ index+=1
+ list_person('%3d'%index,local)
+ for remote in remotes:
+ list_person('dup',remote)
+ if options.delete:
+ delete_default = not local['enabled']
+ delete_local(local,delete_default,options)
+
+def run (options):
+ main_orphans(options)
+ main_duplicates(options)
+
+def main():
+
+ usage="%prog [ -- options]"
+
+ parser = OptionParser(usage=usage)
+ parser.add_option("-l","--log", dest="log", action="store_true",default=False,
+ help="write current status in /var/log/accounts")
+ parser.add_option("-d","--delete", dest="delete", action="store_true",default=False,
+ help="interactively delete extraneous accounts")
+ parser.add_option("-n","--dry-run", dest="dry_run", action="store_true",default=False,
+ help="go through the delete prompting but does not delete")
+
+ (options,args) = parser.parse_args()
+ if len(args)!=0:
+ parser.error("Unexpected arguments",args)
+
+ if options.dry_run: options.delete=True
+
+ if options.log:
+ options.delete=False
+ run_in_log(options)
+ else:
+ run(options)