Mercurial > hg > mlmmj
view src/listcontrol.c @ 18:f54f95a4c53e
changed to use log_error() all over
author | mortenp |
---|---|
date | Thu, 22 Apr 2004 23:15:53 +1000 |
parents | 762570b02394 |
children | 65d01831c0eb |
line wrap: on
line source
/* Copyright (C) 2003 Mads Martin Joergensen <mmj at mmj.dk> * * $Id$ * * This file is redistributable under version 2 of the GNU General * Public License as described at http://www.gnu.org/licenses/gpl.txt */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> #include "mlmmj.h" #include "header_token.h" #include "listcontrol.h" #include "find_email_adr.h" #include "strgen.h" #include "send_help.h" #include "log_error.c" int listcontrol(const char *mailfilename, const char *listdir, const char *controladdr) { char *atsign; char *recipdelimsign; char tmpstr[READ_BUFSIZE]; char *tokenvalue; char *confstr; char *controlstr; char *conffilename; FILE *mailfile, *tempfile; struct email_container fromemails; size_t len; if((mailfile = fopen(mailfilename, "r")) == NULL) { log_error("listcontrol, could not open mail"); exit(EXIT_FAILURE); } recipdelimsign = index(controladdr, RECIPDELIM); atsign = index(controladdr, '@'); len = atsign - recipdelimsign; controlstr = malloc(len); snprintf(controlstr, len, "%s", recipdelimsign + 1); tokenvalue = find_header_file(mailfile, tmpstr, "From:"); fclose(mailfile); unlink(mailfilename); find_email_adr(tmpstr, &fromemails); printf("controlstr = [%s]\n", controlstr); if(strncasecmp(controlstr, "subscribe", 9) == 0) { free(controlstr); if(index(fromemails.emaillist[0], '@')) { execlp(BINDIR"mlmmj-subscribe", "mlmmj-subscribe", "-L", listdir, "-a", fromemails.emaillist[0], "-C", 0); log_error("execlp() of "BINDIR"mlmmj-subscribe failed"); exit(EXIT_FAILURE); } else /* Not a valid From: address, so we silently ignore */ exit(EXIT_SUCCESS); } else if(strncasecmp(controlstr, "confsub-", 8) == 0) { len -= 7; confstr = malloc(len); snprintf(confstr, len, "%s", controlstr + 8); free(controlstr); conffilename = concatstr(3, listdir, "/subconf/", confstr); if((tempfile = fopen(conffilename, "r"))) { fgets(tmpstr, READ_BUFSIZE, tempfile); fclose(tempfile); if(strncasecmp(tmpstr, fromemails.emaillist[0], strlen(tmpstr)) == 0) { unlink(conffilename); execlp(BINDIR"mlmmj-subscribe", "mlmmj-subscribe", "-L", listdir, "-a", tmpstr, "-c", 0); log_error("execlp() of "BINDIR"mlmmj-subscribe" " failed"); exit(EXIT_FAILURE); } else { /* Not proper confirm */ exit(EXIT_SUCCESS); } } else /* Not a confirm so silently ignore */ exit(EXIT_SUCCESS); } else if(strncasecmp(controlstr, "unsubscribe", 11) == 0) { free(controlstr); if(index(fromemails.emaillist[0], '@')) { execlp(BINDIR"mlmmj-unsubscribe", "mlmmj-unsubscribe", "-L", listdir, "-a", fromemails.emaillist[0], "-C", 0); log_error("execlp() of "BINDIR"mlmmj-unsubscribe" " failed"); exit(EXIT_FAILURE); } else /* Not a valid From: address, so we silently ignore */ exit(EXIT_SUCCESS); } else if(strncasecmp(controlstr, "confunsub-", 10) == 0) { len -= 9; confstr = malloc(len); snprintf(confstr, len, "%s", controlstr + 10); free(controlstr); conffilename = concatstr(3, listdir, "/unsubconf/", confstr); if((tempfile = fopen(conffilename, "r"))) { fgets(tmpstr, READ_BUFSIZE, tempfile); fclose(tempfile); if(strncasecmp(tmpstr, fromemails.emaillist[0], strlen(tmpstr)) == 0) { unlink(conffilename); execlp(BINDIR"mlmmj-unsubscribe", "mlmmj-unsubscribe", "-L", listdir, "-a", tmpstr, "-c", 0); log_error("execlp() of " BINDIR"mlmmj-unsubscribe failed"); exit(EXIT_FAILURE); } else { exit(EXIT_SUCCESS); } } else /* Not a confirm so silently ignore */ exit(EXIT_SUCCESS); } else if(strncasecmp(controlstr, "help", 4) == 0) { printf("Help wanted!\n"); free(controlstr); if(index(fromemails.emaillist[0], '@')) send_help(listdir, fromemails.emaillist[0]); } return 0; }