int length;
int num_parms;
struct sdm_userdata u;
-
+ int changes_made = 0;
memset(&u, 0, sizeof(struct sdm_userdata));
}
else if ((length>= 6) && (!strncasecmp(parms[0], "PUTSCRIPT", 9))){
cmd_mgsve_putscript(num_parms, parms, &u);
+ changes_made = 1;
}
else if ((length>= 6) && (!strncasecmp(parms[0], "LISTSCRIPT", 10))){
cmd_mgsve_listscript(num_parms, parms,&u);
}
else if ((length>= 6) && (!strncasecmp(parms[0], "SETACTIVE", 9))){
cmd_mgsve_setactive(num_parms, parms,&u);
+ changes_made = 1;
}
else if ((length>= 6) && (!strncasecmp(parms[0], "GETSCRIPT", 9))){
cmd_mgsve_getscript(num_parms, parms, &u);
}
else if ((length>= 6) && (!strncasecmp(parms[0], "DELETESCRIPT", 11))){
cmd_mgsve_deletescript(num_parms, parms, &u);
+ changes_made = 1;
}
- msiv_store(&u);
+ msiv_store(&u, changes_made);
}
else {
/// todo: log this.
/*
* Write our citadel sieve config back to disk
+ *
+ * (Set yes_write_to_disk to nonzero to make it actually write the config;
+ * otherwise it just frees the data structures.)
*/
-void rewrite_ctdl_sieve_config(struct sdm_userdata *u) {
+void rewrite_ctdl_sieve_config(struct sdm_userdata *u, int yes_write_to_disk) {
char *text;
struct sdm_script *sptr;
struct sdm_vacation *vptr;
}
/* Rewrite the config if we have to */
- if (u.lastproc > orig_lastproc) {
- rewrite_ctdl_sieve_config(&u);
- }
+ rewrite_ctdl_sieve_config(&u, (u.lastproc > orig_lastproc) ) ;
}
}
}
-void msiv_store(struct sdm_userdata *u) {
- rewrite_ctdl_sieve_config(u);
+void msiv_store(struct sdm_userdata *u, int yes_write_to_disk) {
+ rewrite_ctdl_sieve_config(u, yes_write_to_disk);
}
char *script_content = NULL;
struct sdm_script *s;
int i;
+ int changes_made = 0;
memset(&u, 0, sizeof(struct sdm_userdata));
cprintf("%d Transmit script now\n", SEND_LISTING);
script_content = CtdlReadMessageBody("000", config.c_maxmsglen, NULL, 0);
msiv_putscript(&u, script_name, script_content);
+ changes_made = 1;
}
else {
cprintf("%d Invalid script name.\n", ERROR + ILLEGAL_VALUE);
extract_token(script_name, argbuf, 1, '|', sizeof script_name);
if (msiv_setactive(&u, script_name) == 0) {
cprintf("%d ok\n", CIT_OK);
+ changes_made = 1;
}
else {
cprintf("%d Script '%s' does not exist.\n",
i = msiv_deletescript(&u, script_name);
if (i == 0) {
cprintf("%d ok\n", CIT_OK);
+ changes_made = 1;
}
else if (i == 1) {
cprintf("%d Script '%s' does not exist.\n",
cprintf("%d Invalid subcommand\n", ERROR + CMD_NOT_SUPPORTED);
}
- msiv_store(&u);
+ msiv_store(&u, changes_made);
}
void perform_sieve_processing(void);
void msiv_load(struct sdm_userdata *u);
-void msiv_store(struct sdm_userdata *u);
+void msiv_store(struct sdm_userdata *u, int changes_made);
int msiv_setactive(struct sdm_userdata *u, char *script_name);
char *msiv_getscript(struct sdm_userdata *u, char *script_name);
int msiv_deletescript(struct sdm_userdata *u, char *script_name);