bool cmd_listscripts(struct client_command_context *cmd) { struct client *client = cmd->client; struct sieve_storage_list_context *ctx; const char *scriptname; bool active; string_t *str; /* no arguments */ if ( !client_read_no_args(cmd) ) return FALSE; if ( (ctx = sieve_storage_list_init(client->storage)) == NULL ) { client_send_storage_error(client, client->storage); return TRUE; } /* FIXME: This will be quite slow for large script lists. Implement * some buffering to fix this. Wont truely be an issue with managesieve * though. */ while ((scriptname = sieve_storage_list_next(ctx, &active)) != NULL) { T_BEGIN { str = t_str_new(128); managesieve_quote_append_string(str, scriptname, FALSE); if ( active ) str_append(str, " ACTIVE"); client_send_line(client, str_c(str)); } T_END; } if ( sieve_storage_list_deinit(&ctx) < 0 ) { client_send_storage_error(client, client->storage); return TRUE; } client_send_ok(client, "Listscripts completed."); return TRUE; }
static int sieve_attribute_iter_script_init(struct sieve_mailbox_attribute_iter *siter) { struct mail_user *user = siter->iter.box->storage->user; struct sieve_storage *svstorage; int ret; if (user->mail_debug) i_debug("doveadm-sieve: Iterating Sieve mailbox attributes"); if ((ret = mail_sieve_user_init(user, &svstorage)) <= 0) return ret; siter->sieve_list = sieve_storage_list_init(svstorage); if (siter->sieve_list == NULL) { mail_storage_set_critical(siter->iter.box->storage, "Failed to iterate sieve scripts: %s", sieve_storage_get_last_error(svstorage, NULL)); return -1; } siter->name = str_new(default_pool, 128); str_append(siter->name, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES); return 0; }