diff --git a/subscribe.c b/subscribe.c index 21957a0..598fa71 100644 --- a/subscribe.c +++ b/subscribe.c @@ -174,6 +174,43 @@ AddAddress(struct Mail * MailStruct, } return 0; } + + else if (ListConfig->subtype == SUBSCRIPTION_ACKED && !g_is_approved) + { + /* Require confirmation. */ + + char* command = text_easy_sprintf("unsubscribe %s %s", address, listname); + char* cookie = queue_command(MailStruct, command); + + /* Notify the owner. */ + + fh = vOpenMailer(envelope, address, NULL); + if (fh != NULL) + { + fprintf(fh, "From: petidomo-approve@%s (Petidomo Mailing List Server)\n", ListConfig->fqdn); + fprintf(fh, "To: %s\n", address); + fprintf(fh, "Subject: Petidomo: CONFIRM %s@%s: Request from \"%s\"\n", listname, ListConfig->fqdn, originator); + fprintf(fh, "Precedence: junk\n"); + fprintf(fh, "Sender: %s\n", envelope); + fprintf(fh, "\n"); + buffer = text_easy_sprintf("Per request from \"%s\", the address \"%s\" should be subscribed to " \ + "the mailing list \"%s\". This will not happen unless you confirm the " \ + "request by replying to this mail and citing the string", + originator, address, listname); + text_wordwrap(buffer, 70); + fprintf(fh, "%s\n", buffer); + fprintf(fh, "\n %s\n\n", cookie); + fprintf(fh, "in your reply.\n"); + CloseMailer(fh); + } + else + { + syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner); + return -1; + } + + return 0; + } } /* Check whether the address is subscribed already. */ diff --git a/unsubscribe.c b/unsubscribe.c index 483c8ae..6ce792b 100644 --- a/unsubscribe.c +++ b/unsubscribe.c @@ -176,6 +176,44 @@ DeleteAddress(struct Mail * MailStruct, } return 0; } + + else if (ListConfig->subtype == SUBSCRIPTION_ACKED && !g_is_approved) + { + /* Require confirmation. */ + + char* command = text_easy_sprintf("unsubscribe %s %s", address, listname); + char* cookie = queue_command(MailStruct, command); + + /* Notify the owner. */ + + fh = vOpenMailer(envelope, address, NULL); + if (fh != NULL) + { + fprintf(fh, "From: petidomo-approve@%s (Petidomo Mailing List Server)\n", ListConfig->fqdn); + fprintf(fh, "To: %s\n", address); + fprintf(fh, "Subject: Petidomo: CONFIRM %s@%s: Request from \"%s\"\n", listname, ListConfig->fqdn, originator); + fprintf(fh, "Precedence: junk\n"); + fprintf(fh, "Sender: %s\n", envelope); + fprintf(fh, "\n"); + buffer = text_easy_sprintf("Per request from \"%s\", the address \"%s\" should be unsubscribed from " \ + "the mailing list \"%s\". This will not happen unless you confirm the " \ + "request by replying to this mail and citing the string", + originator, address, listname); + text_wordwrap(buffer, 70); + fprintf(fh, "%s\n", buffer); + fprintf(fh, "\n %s\n\n", cookie); + fprintf(fh, "in your reply.\n"); + CloseMailer(fh); + } + else + { + syslog(LOG_ERR, "Failed to send email to \"%s\"!", owner); + return -1; + } + + return 0; + } + } /* Okay, remove the address from the list. */