char *indexstr = NULL, *s, *start, *line, *cur, *colon, *next;
size_t len;
struct stat st;
-
+
fd = open(bouncefile, O_RDONLY);
if(fd < 0) {
log_error(LOG_ARGS, "Could not open bounceindexfile %s",
bouncefile);
}
+ if(st.st_size == 0) {
+ log_error(LOG_ARGS, "Bounceindexfile %s is size 0",
+ bouncefile);
+ return NULL;
+ }
+
start = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
if(start == MAP_FAILED) {
log_error(LOG_ARGS, "Could not mmap bounceindexfile");
return NULL;
}
-
-
+
+
for(next = cur = start; next < start + st.st_size; next++) {
if(*next == '\n') {
len = next - cur;
myfree(s);
myfree(line);
}
-
+
munmap(start, st.st_size);
close(fd);
addr = mystrdup(emails.emaillist[0]);
for(i = 0; i < emails.emailcount; i++)
myfree(emails.emaillist[i]);
- myfree(emails.emaillist);
+ myfree(emails.emaillist);
} else {
addr = NULL;
}
}
myfree(line);
}
-
+
return NULL;
}
i++;
}
address = lowcaseaddr;
-
+
if(number != NULL && probe != 0) {
fprintf(stderr, "You can only specify one of -n or -p\n");
fprintf(stderr, "%s -h for help\n", argv[0]);
myfree(a);
exit(EXIT_SUCCESS);
}
-
+
/* save the filename with '=' before replacing it with '@' */
bfilename = concatstr(3, listdir, "/bounce/", address);
rename(mailname, savename);
myfree(savename);
}
-
+
myfree(bfilename);
if(dsnbounce && address)
myfree(address);
}
regfree(®exp);
-
+
if (match != not) {
if (match) {
hdr = mystrdup(hdrs->strs[j]);
mlmmjunsub = concatstr(2, bindir, "/mlmmj-unsub");
mlmmjbounce = concatstr(2, bindir, "/mlmmj-bounce");
myfree(bindir);
-
+
while ((opt = getopt(argc, argv, "hVPm:L:")) != -1) {
switch(opt) {
case 'L':
S_IRUSR|S_IWUSR);
} while ((donemailfd < 0) && (errno == EEXIST));
-
+
if(donemailfd < 0) {
log_error(LOG_ARGS, "could not create %s", donemailname);
myfree(donemailname);
headerfilename = concatstr(2, listdir, "/control/customheaders");
hdrfd = open(headerfilename, O_RDONLY);
myfree(headerfilename);
-
+
/* footfd is checked in do_all_the_voodo_here(), see above */
footerfilename = concatstr(2, listdir, "/control/footer");
footfd = open(footerfilename, O_RDONLY);
delheaders->strs[delheaders->count++] = mystrdup("From ");
delheaders->strs[delheaders->count++] = mystrdup("Return-Path:");
delheaders->strs[delheaders->count] = NULL;
-
- subjectprefix = ctrlvalue(listdir, "prefix");
-
+
+ subjectprefix = ctrlvalue(listdir, "prefix");
+
if(do_all_the_voodo_here(rawmailfd, donemailfd, hdrfd, footfd,
(const char**)delheaders->strs, readhdrs,
&allheaders, subjectprefix) < 0) {
listaddr = getlistaddr(listdir);
alternates = ctrlvalues(listdir, "listaddress");
-
+
/* checking incoming mail's size */
maxmailsizestr = ctrlvalue(listdir, "maxmailsize");
if(maxmailsizestr) {
"-T", fromemails.emaillist[0],
"-F", fromaddr,
"-m", queuefilename, (char *)NULL);
-
+
log_error(LOG_ARGS, "execlp() of '%s' failed", mlmmjsend);
exit(EXIT_FAILURE);
}
}
/* discard malformed mail with invalid From: */
- if(fromemails.emailcount != 1) {
+ if(fromemails.emailcount != 1) {
for(i = 0; i < fromemails.emailcount; i++)
printf("fromemails.emaillist[%d] = %s\n",
i, fromemails.emaillist[i]);
addrtocc = !(statctrl(listdir, "tocc"));
if(addrtocc) {
for(i = 0; i < toemails.emailcount; i++) {
+ log_error(LOG_ARGS, "Found To: %s",
+ toemails.emaillist[i]);
for(j = 0; j < alternates->count; j++) {
chomp(alternates->strs[j]);
if(strcasecmp(alternates->strs[j],
}
}
for(i = 0; i < ccemails.emailcount; i++) {
+ log_error(LOG_ARGS, "Found Cc: %s",
+ ccemails.emaillist[i]);
for(j = 0; j < alternates->count; j++) {
chomp(alternates->strs[j]);
if(strcasecmp(alternates->strs[j],
myfree(alternates->strs[i]);
notoccdenymails = statctrl(listdir, "notoccdenymails");
-
+
if(addrtocc && !intocc) {
/* Don't send a mail about denial to the list, but silently
* discard and exit. Also don't in case of it being turned off
moderated = 1;
goto startaccess;
}
-
+
nosubonlydenymails = statctrl(listdir,
"nosubonlydenymails");
exit(EXIT_SUCCESS);
}
}
-
+
if(!moderated)
moderated = statctrl(listdir, "moderated");
if(moderated) {
/* XXX: toemails and ccemails etc. have to be myfree() */
exit(EXIT_SUCCESS);
}
-
+
execlp(mlmmjsend, mlmmjsend,
"-L", listdir,
"-m", donemailname, (char *)NULL);