int main(int argc, char *argv[]) { extern char *optarg; int opt, r = 0, expire_days = 0; char *alt_config = NULL; if (geteuid() == 0) fatal("must run as the Cyrus user", EC_USAGE); while ((opt = getopt(argc, argv, "C:E:")) != EOF) { switch (opt) { case 'C': /* alt config file */ alt_config = optarg; break; case 'E': if (expire_days) usage(); expire_days = atoi(optarg); break; default: usage(); break; } } if (!expire_days) usage(); cyrus_init(alt_config, "delivered_expire", 0); if (duplicate_init(NULL, 0) != 0) { fprintf(stderr, "cyr_expire: unable to init duplicate delivery database\n"); exit(1); } /* purge deliver.db entries of expired messages */ r = duplicate_prune(expire_days, NULL); duplicate_done(); cyrus_done(); exit(r); }
struct imap_sieve *imap_sieve_init(struct mail_user *user, const struct lda_settings *lda_set) { struct sieve_environment svenv; struct imap_sieve *isieve; bool debug = user->mail_debug; pool_t pool; pool = pool_alloconly_create("imap_sieve", 256); isieve = p_new(pool, struct imap_sieve, 1); isieve->pool = pool; isieve->user = user; isieve->lda_set = lda_set; isieve->dup_ctx = duplicate_init(user); memset(&svenv, 0, sizeof(svenv)); svenv.username = user->username; (void)mail_user_get_home(user, &svenv.home_dir); svenv.hostname = lda_set->hostname; svenv.base_dir = user->set->base_dir; svenv.flags = SIEVE_FLAG_HOME_RELATIVE; svenv.location = SIEVE_ENV_LOCATION_MS; svenv.delivery_phase = SIEVE_DELIVERY_PHASE_POST; isieve->home_dir = p_strdup(pool, svenv.home_dir); isieve->svinst = sieve_init (&svenv, &mail_sieve_callbacks, isieve, debug); isieve->ext_imapsieve = sieve_extension_replace (isieve->svinst, &imapsieve_extension, TRUE); isieve->master_ehandler = sieve_master_ehandler_create (isieve->svinst, NULL, 0); // FIXME: prefix? sieve_system_ehandler_set(isieve->master_ehandler); sieve_error_handler_accept_infolog(isieve->master_ehandler, TRUE); sieve_error_handler_accept_debuglog(isieve->master_ehandler, debug); return isieve; }
int main(int argc, char *argv[]) { extern char *optarg; int opt, r = 0; char *alt_file = NULL; char *alt_config = NULL; char *days = NULL; int flag = 0; enum { DUMP, PRUNE, NONE } op = NONE; if (geteuid() == 0) fatal("must run as the Cyrus user", EC_USAGE); while ((opt = getopt(argc, argv, "C:drE:f:")) != EOF) { switch (opt) { case 'C': /* alt config file */ alt_config = optarg; break; case 'd': if (op == NONE) op = DUMP; else usage(); break; case 'f': if (alt_file == NULL) alt_file = optarg; else usage (); break; case 'E': if (op == NONE) op = PRUNE; else usage(); /* deprecated, but we still support it */ days = optarg; break; default: usage(); break; } } switch (op) { case PRUNE: { char buf[4096]; fprintf(stderr, "ctl_deliver -E is deprecated: " "using cyr_expire -E instead\n"); r = snprintf(buf, sizeof(buf), "%s/cyr_expire", SERVICE_PATH); if(r < 0 || r >= sizeof(buf)) { fatal("cyr_expire command buffer not sufficiently big", EC_CONFIG); } if (alt_config) execl(buf, buf, "-C", alt_config, "-E", days, NULL); else execl(buf, buf, "-E", days, NULL); break; } case DUMP: cyrus_init(alt_config, "ctl_deliver", 0); if (duplicate_init(alt_file, flag) != 0) { fprintf(stderr, "ctl_deliver: unable to init duplicate delivery database\n"); exit(1); } printf("it is NOW: %d\n", (int) time(NULL)); printf("got %d entries\n", duplicate_dump(stdout)); r = 0; duplicate_done(); cyrus_done(); break; case NONE: r = 2; usage(); break; } return r; }