int user_deletedata(const char *userid, int wipe_user) { char *fname; /* delete seen state and mbox keys */ if(wipe_user) { seen_delete_user(userid); /* XXX what do we do about multiple backends? */ mboxkey_delete_user(userid); } /* delete subscriptions */ fname = user_hash_subs(userid); (void) unlink(fname); free(fname); /* delete quotas */ user_deletequotaroots(userid); /* delete sieve scripts */ user_deletesieve(userid); sync_log_user(userid); return 0; }
int main(int argc, char *argv[]) { char *alt_config = NULL; char cmd = '\0'; int opt; if ((geteuid()) == 0 && (become_cyrus(/*is_master*/0) != 0)) { fatal("must run as the Cyrus user", EC_USAGE); } while ((opt = getopt(argc, argv, "C:uUvmMacqnsb")) != EOF) { switch (opt) { case 'C': /* alt config file */ alt_config = optarg; break; case 'u': /* User */ cmd = 'u'; break; case 'U': /* UnUser */ cmd = 'U'; break; case 'v': /* sieVe */ cmd = 'v'; break; case 'm': /* Mailbox */ cmd = 'm'; break; case 'M': /* UnMailbox */ cmd = 'M'; break; case 'a': /* Append */ cmd = 'a'; break; case 'c': /* aCl */ cmd = 'c'; break; case 'q': /* Quota */ cmd = 'q'; break; case 'n': /* aNnotation */ cmd = 'n'; break; case 's': /* Seen */ cmd = 's'; break; case 'b': /* suBscription */ cmd = 'b'; break; } } /* need at least one value */ if ((argc - optind) < 1) usage(argv[0]); /* and not an empty string */ if (!argv[optind][0]) usage(argv[0]); if (cmd == 's' || cmd == 'b') { /* need a second value */ if ((argc - optind) < 2) usage(argv[0]); /* and not an empty string */ if (!argv[optind+1][0]) usage(argv[0]); } cyrus_init(alt_config, "cyr_synclog", 0, 0); sync_log_init(); switch(cmd) { case 'u': /* User */ sync_log_user(argv[optind]); break; case 'U': /* UnUser */ sync_log_unuser(argv[optind]); break; case 'v': /* sieVe */ sync_log_sieve(argv[optind]); break; case 'm': /* Mailbox */ sync_log_mailbox(argv[optind]); break; case 'M': /* UnMailbox */ sync_log_unmailbox(argv[optind]); break; case 'q': /* Quota */ sync_log_quota(argv[optind]); break; case 'n': /* aNnotation */ sync_log_annotation(argv[optind]); break; case 's': /* Seen */ sync_log_seen(argv[optind], argv[optind+1]); break; case 'b': /* suBscription */ sync_log_subscribe(argv[optind], argv[optind+1]); break; default: /* just as is! */ sync_log(argv[optind]); break; } sync_log_done(); cyrus_done(); return 0; }