#include "ctrlvalue.h"
#include "stdbool.h"
#include "getaddrsfromfd.h"
+#include "utils.h"
static int addtohdr = 0;
static int prepmailinmem = 0;
gotsigterm = 1;
}
-char *get_index_from_filename(const char *filename)
+int
+get_index_from_filename(const char *filename)
{
- char *myfilename, *indexstr, *ret;
+ char *myfilename, *indexstr;
+ int ret;
size_t len;
myfilename = xstrdup(filename);
- if (!myfilename) {
- return NULL;
- }
-
len = strlen(myfilename);
if (len > 9 && (strcmp(myfilename + len - 9, "/mailfile") == 0)) {
myfilename[len - 9] = '\0';
indexstr = myfilename;
}
- ret = xstrdup(indexstr);
+ ret = strtoim(indexstr, 0, INT_MAX, NULL);
free(myfilename);
return ret;
const char *listdir)
{
char *bounceaddr, *myrecipient, *mylistadr;
- char *indexstr, *listdomain, *a = NULL, *mymailfilename;
+ char *listdomain, *a = NULL, *mymailfilename;
char *staticbounceaddr, *staticbounceaddr_localpart;
char *staticbounceaddr_domain;
+ int index;
mymailfilename = xstrdup(mailfilename);
if (!mymailfilename) {
return NULL;
}
- indexstr = get_index_from_filename(mymailfilename);
- if (!indexstr) {
- free(mymailfilename);
- return NULL;
- }
+ index = get_index_from_filename(mymailfilename);
myrecipient = xstrdup(recipient);
if (!myrecipient) {
}
if (staticbounceaddr) {
- xasprintf(&bounceaddr, "%s%s%s-bounces-%s-%s@%s",
+ xasprintf(&bounceaddr, "%s%s%s-bounces-%d-%s@%s",
staticbounceaddr_localpart, listdelim, mylistadr,
- indexstr, myrecipient, staticbounceaddr_domain);
+ index, myrecipient, staticbounceaddr_domain);
free(staticbounceaddr);
free(staticbounceaddr_localpart);
free(staticbounceaddr_domain);
} else {
- xasprintf(&bounceaddr, "%s%sbounces-%s-%s@%s", mylistadr, listdelim,
- indexstr, myrecipient, listdomain);
+ xasprintf(&bounceaddr, "%s%sbounces-%d-%s@%s", mylistadr, listdelim,
+ index, myrecipient, listdomain);
}
free(myrecipient);
free(mylistadr);
- free(indexstr);
free(mymailfilename);
return bounceaddr;
return 0;
}
-int requeuemail(const char *listdir, const char *index, struct strlist *addrs,
+int requeuemail(const char *listdir, int index, struct strlist *addrs,
int addrcount)
{
int addrfd, i;
char *dirname, *addrfilename;
- dirname = concatstr(3, listdir, "/requeue/", index);
+ xasprintf(&dirname, "%s/requeue/%d", listdir, index);
if(mkdir(dirname, 0750) < 0 && errno != EEXIST) {
log_error(LOG_ARGS, "Could not mkdir(%s) for "
"requeueing. Mail cannot "
const char *mlmmjbounce, const char *hdrs, size_t hdrslen,
const char *body, size_t bodylen)
{
- int res = 0, i, status;
- char *bounceaddr, *addr, *index;
+ int res = 0, i, status, index;
+ char *bounceaddr, *addr;
for(i = 0; i < addrs->count; i++) {
addr = addrs->strs[i];
"shutting down.");
index = get_index_from_filename(archivefilename);
status = requeuemail(listdir, index, addrs, i);
- free(index);
return status;
}
if(from) {
/* we failed, so save the addresses and bail */
index = get_index_from_filename(archivefilename);
status = requeuemail(listdir, index, addrs, i);
- free(index);
return status;
}
}
char *mlmmjbounce = NULL, *bindir, *mailmap, *probefile, *a;
char *body = NULL, *hdrs = NULL, *verp = NULL;
char *listname, *listfqdn, *verpfrom;
- char strindex[32], *reply, *smtphelo, *requeuefilename;
+ char *reply, *smtphelo, *requeuefilename;
ssize_t memmailsize = 0;
DIR *subddir;
struct dirent *dp;
mindex);
}
- snprintf(strindex, sizeof(strindex), "%d", mindex);
-
if(!relayhost)
relayhost = ctrlvalue(listdir, "relayhost");
if(!relayhost)
listdelim = getlistdelim(listdir);
listname = genlistname(listaddr);
listfqdn = genlistfqdn(listaddr);
- verpfrom = concatstr(6, listname, listdelim, "bounces-",
- strindex, "@", listfqdn);
+ xasprintf(&verpfrom, "%s%sbounces-%d@%s", listname, listdelim,
+ mindex, listfqdn);
free(listname);
free(listfqdn);
bodylen, verp);
if(sendres)
requeuemail(listdir,
- strindex,
+ mindex,
&stl, 0);
} else {
sendres = send_mail_many_list(
hdrs, hdrslen, body, bodylen,
verp);
if(sendres)
- requeuemail(listdir, strindex, &stl,
+ requeuemail(listdir, mindex, &stl,
0);
} else {
sendres = send_mail_many_list(sockfd, NULL,