summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2002-11-14 07:15:58 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2002-11-14 07:15:58 +0000
commit7ce94cbd90c52e0b72e021f1058f6291ae47ed0d (patch)
tree3d454288e51dd68b094e4ad5cedc5d0fe8fb4655
parentd8f04cb71471e2fcd21611068fe6c1424a4ee1cc (diff)
downloadmailutils-7ce94cbd90c52e0b72e021f1058f6291ae47ed0d.tar.gz
mailutils-7ce94cbd90c52e0b72e021f1058f6291ae47ed0d.tar.bz2
Implemented stop, keep, discard and fileinto.
-rw-r--r--libsieve/actions.c62
1 files changed, 53 insertions, 9 deletions
diff --git a/libsieve/actions.c b/libsieve/actions.c
index 20db0276b..8fd011021 100644
--- a/libsieve/actions.c
+++ b/libsieve/actions.c
@@ -26,38 +26,82 @@
#include <sieve.h>
int
-sieve_action_stop (sieve_machine_t *mach, list_t args, list_t tags)
+sieve_action_stop (sieve_machine_t mach, list_t args, list_t tags)
{
+ sieve_log_action (mach, "STOP", NULL);
+ mach->pc = 0;
return 0;
}
int
-sieve_action_keep (sieve_machine_t *mach, list_t args, list_t tags)
+sieve_action_keep (sieve_machine_t mach, list_t args, list_t tags)
{
+ sieve_log_action (mach, "KEEP", NULL);
return 0;
}
int
-sieve_action_discard (sieve_machine_t *mach, list_t args, list_t tags)
+sieve_action_discard (sieve_machine_t mach, list_t args, list_t tags)
{
+ sieve_log_action (mach, "DISCARD", NULL);
+ if (sieve_is_dry_run (mach))
+ return 0;
+ sieve_mark_deleted (mach->msg, 1);
return 0;
}
int
-sieve_action_fileinto (sieve_machine_t *mach, list_t args, list_t tags)
+sieve_action_fileinto (sieve_machine_t mach, list_t args, list_t tags)
{
- return 0;
+ int rc;
+ sieve_value_t *val = sieve_value_get (args, 0);
+ if (!val)
+ {
+ sieve_error (mach, "fileinto: can't get filename!");
+ sieve_abort (mach);
+ }
+ sieve_log_action (mach, "FILEINTO", "delivering into %s", val->v.string);
+ if (sieve_is_dry_run (mach))
+ return 0;
+
+ rc = message_save_to_mailbox (mach->msg, mach->ticket, mach->mu_debug,
+ val->v.string);
+ if (rc)
+ sieve_error (mach, "fileinto: cannot save to mailbox: %s",
+ mu_errstring (rc));
+ else
+ sieve_mark_deleted (mach->msg, 1);
+
+ return rc;
}
int
-sieve_action_reject (sieve_machine_t *mach, list_t args, list_t tags)
+sieve_action_reject (sieve_machine_t mach, list_t args, list_t tags)
{
+ sieve_value_t *val = sieve_value_get (args, 0);
+ if (!val)
+ {
+ sieve_error (mach, "redirect: can't get text!");
+ sieve_abort (mach);
+ }
+ sieve_log_action (mach, "REJECT", NULL);
+ if (sieve_is_dry_run (mach))
+ return 0;
return 0;
}
int
-sieve_action_redirect (sieve_machine_t *mach, list_t args, list_t tags)
+sieve_action_redirect (sieve_machine_t mach, list_t args, list_t tags)
{
+ sieve_value_t *val = sieve_value_get (args, 0);
+ if (!val)
+ {
+ sieve_error (mach, "redirect: can't get address!");
+ sieve_abort (mach);
+ }
+ sieve_log_action (mach, "REDIRECT", "to %s", val->v.string);
+ if (sieve_is_dry_run (mach))
+ return 0;
return 0;
}
@@ -71,8 +115,8 @@ sieve_register_standard_actions ()
{
sieve_register_action ("stop", sieve_action_stop, NULL, NULL, 1);
sieve_register_action ("keep", sieve_action_keep, NULL, NULL, 1);
- sieve_register_action ("discard", sieve_action_keep, NULL, NULL, 1);
- sieve_register_action ("fileinto", sieve_action_keep, fileinto_args,
+ sieve_register_action ("discard", sieve_action_discard, NULL, NULL, 1);
+ sieve_register_action ("fileinto", sieve_action_fileinto, fileinto_args,
NULL, 1);
sieve_register_action ("reject", sieve_action_reject, fileinto_args,
NULL, 0);

Return to:

Send suggestions and report system problems to the System administrator.