From dc4a5ff83cf6ae013deabb7e7e549a618a59ae92 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 29 Oct 2007 20:14:48 +0000 Subject: [PATCH] Sieve GETENVELOPE - fill in a bogus envelope from or to address if the supplied one is null, missing, or bogus. Doesn't deliver a vacation message but it's better than crashing. --- citadel/modules/pop3client/serv_pop3client.c | 10 ++++--- citadel/modules/sieve/serv_sieve.c | 28 ++++++++++++++++-- citadel/tuiconfig.c | 31 +++++++++++--------- 3 files changed, 49 insertions(+), 20 deletions(-) diff --git a/citadel/modules/pop3client/serv_pop3client.c b/citadel/modules/pop3client/serv_pop3client.c index 9705af7fa..89546015c 100644 --- a/citadel/modules/pop3client/serv_pop3client.c +++ b/citadel/modules/pop3client/serv_pop3client.c @@ -45,12 +45,13 @@ struct pop3aggr { char pop3host[128]; char pop3user[128]; char pop3pass[128]; + int keep; }; struct pop3aggr *palist = NULL; -void pop3_do_fetching(char *roomname, char *pop3host, char *pop3user, char *pop3pass, int delete_from_server) +void pop3_do_fetching(char *roomname, char *pop3host, char *pop3user, char *pop3pass, int keep) { int sock; char buf[SIZ]; @@ -174,7 +175,7 @@ void pop3_do_fetching(char *roomname, char *pop3host, char *pop3user, char *pop3 if (msgnum > 0L) { /* Message has been committed to the store */ - if (delete_from_server) { + if (!keep) { snprintf(buf, sizeof buf, "DELE %d\r", msglist[i]); lprintf(CTDL_DEBUG, "<%s\n", buf); if (sock_puts(sock, buf) <0) goto bail; @@ -233,6 +234,7 @@ void pop3client_scan_room(struct ctdlroom *qrbuf, void *data) extract_token(pptr->pop3host, buf, 1, '|', sizeof pptr->pop3host); extract_token(pptr->pop3user, buf, 2, '|', sizeof pptr->pop3user); extract_token(pptr->pop3pass, buf, 3, '|', sizeof pptr->pop3pass); + pptr->keep = extract_int(buf, 4); pptr->next = palist; palist = pptr; } @@ -270,8 +272,8 @@ void pop3client_scan(void) { ForEachRoom(pop3client_scan_room, NULL); while (palist != NULL) { - /* FIXME set delete_from_server to 1 if the user wants to */ - pop3_do_fetching(palist->roomname, palist->pop3host, palist->pop3user, palist->pop3pass, 0); + pop3_do_fetching(palist->roomname, palist->pop3host, + palist->pop3user, palist->pop3pass, palist->keep); pptr = palist; palist = palist->next; free(pptr); diff --git a/citadel/modules/sieve/serv_sieve.c b/citadel/modules/sieve/serv_sieve.c index fe485b41e..226b48255 100644 --- a/citadel/modules/sieve/serv_sieve.c +++ b/citadel/modules/sieve/serv_sieve.c @@ -387,8 +387,32 @@ int ctdl_getenvelope(sieve2_context_t *s, void *my) struct ctdl_sieve *cs = (struct ctdl_sieve *)my; lprintf(CTDL_DEBUG, "Action is GETENVELOPE\n"); - sieve2_setvalue_string(s, "to", cs->envelope_to); - sieve2_setvalue_string(s, "from", cs->envelope_from); + + if (cs->envelope_from != NULL) { + if ((cs->envelope_from[0] != '@')&&(cs->envelope_from[strlen(cs->envelope_from)-1] != '@')) { + sieve2_setvalue_string(s, "from", cs->envelope_from); + } + else { + sieve2_setvalue_string(s, "from", "invalid_envelope_from@example.org"); + } + } + else { + sieve2_setvalue_string(s, "from", "null_envelope_from@example.org"); + } + + + if (cs->envelope_to != NULL) { + if ((cs->envelope_to[0] != '@') && (cs->envelope_to[strlen(cs->envelope_to)-1] != '@')) { + sieve2_setvalue_string(s, "to", cs->envelope_to); + } + else { + sieve2_setvalue_string(s, "to", "invalid_envelope_to@example.org"); + } + } + else { + sieve2_setvalue_string(s, "to", "null_envelope_to@example.org"); + } + return SIEVE2_OK; } diff --git a/citadel/tuiconfig.c b/citadel/tuiconfig.c index 98e6e9626..79092322d 100644 --- a/citadel/tuiconfig.c +++ b/citadel/tuiconfig.c @@ -953,27 +953,28 @@ void do_pop3client_configuration(CtdlIPC *ipc) scr_printf( "### " " Remote POP3 host " " User name " - " Password " + "Keep on server? " "\n"); color(DIM_WHITE); scr_printf( "--- " "---------------------------- " "---------------------------- " - "---------------- " + "--------------- " "\n"); for (i=0; i