bool cmd_deletescript(struct client_command_context *cmd) { struct client *client = cmd->client; struct sieve_storage *storage = client->storage; const char *scriptname; struct sieve_script *script; /* <scrip name>*/ if ( !client_read_string_args(cmd, TRUE, 1, &scriptname) ) return FALSE; script = sieve_storage_open_script (storage, scriptname, NULL); if ( script == NULL ) { client_send_storage_error(client, storage); return TRUE; } if ( sieve_script_delete(script, FALSE) < 0 ) { client_send_storage_error(client, storage); } else { client->deleted_count++; client_send_ok(client, "Deletescript completed."); } sieve_script_unref(&script); return TRUE; }
static int sieve_attribute_unset_script(struct mail_storage *storage, struct sieve_storage *svstorage, const char *scriptname) { struct sieve_script *script; const char *errstr; enum sieve_error error; int ret = 0; script = sieve_storage_open_script(svstorage, scriptname, NULL); if (script == NULL) { ret = -1; } else { ret = sieve_script_delete(script, TRUE); sieve_script_unref(&script); } if (ret < 0) { errstr = sieve_storage_get_last_error(svstorage, &error); if (error == SIEVE_ERROR_NOT_FOUND) { /* already deleted, ignore */ return 0; } mail_storage_set_critical(storage, "Failed to delete Sieve script '%s': %s", scriptname, errstr); return -1; } return 0; }
static int cmd_sieve_delete_run(struct doveadm_sieve_cmd_context *_ctx) { struct doveadm_sieve_delete_cmd_context *ctx = (struct doveadm_sieve_delete_cmd_context *)_ctx; struct sieve_storage *storage = _ctx->storage; const ARRAY_TYPE(const_string) *scriptnames = &ctx->scriptnames; const char *const *namep; struct sieve_script *script; enum sieve_error error; int ret = 0; array_foreach(scriptnames, namep) { const char *scriptname = *namep; int sret = 0; script = sieve_storage_open_script (storage, scriptname, NULL); if (script == NULL) { sret = -1; } else { if (sieve_script_delete(script, ctx->ignore_active) < 0) { (void)sieve_storage_get_last_error(storage, &error); sret = -1; } sieve_script_unref(&script); } if (sret < 0) { i_error("Failed to delete Sieve script: %s", sieve_storage_get_last_error(storage, &error)); doveadm_sieve_cmd_failed_error(_ctx, error); ret = -1; } } return ret; }