int open_subscriber_directory(int listfd, enum subtype typesub, const char **dir);
bool unsubscribe(int listfd, const char *address, enum subtype typesub);
bounce_t bouncemail(int listfd, const char *theaddress, const char *identifier);
+void save_lastbouncedmsg(int listfd, const char *address, const char *mailname);
#define MY_ASSERT(expression) if (!(expression)) { \
errno = 0; \
int opt, dsnbounce = 0;
char *listdir = NULL, *address = NULL, *number = NULL;
const char *thisaddr;
- char *bindir, *mlmmjsend, *savename;
- char *mailname = NULL, *bfilename, *a;
+ char *bindir, *mlmmjsend, *a;
+ const char *mailname = NULL;
int probe = 0;
struct stat st;
uid_t uid;
#endif
bret = bouncemail(listfd, lowercase(thisaddr), number);
- if (bret == BOUNCE_DONE && mailname != NULL) {
- bfilename = lowercase(thisaddr);
- xasprintf(&savename, "bounce/%s.lastmsg", bfilename);
- renameat(AT_FDCWD, mailname, listfd, savename);
- free(savename);
- free(bfilename);
- }
- if (mailname)
- unlink(mailname);
+ if (bret == BOUNCE_DONE && mailname != NULL)
+ save_lastbouncedmsg(listfd, thisaddr, mailname);
free(address);
+ if (bret == BOUNCE_OK && mailname != NULL)
+ unlink(mailname);
return (bret == BOUNCE_FAIL ? EXIT_FAILURE : EXIT_SUCCESS);
}
return (BOUNCE_DONE);
}
+
+void
+save_lastbouncedmsg(int listfd, const char *address, const char *mailname)
+{
+ char *savename, *fname;
+
+ fname = lowercase(address);
+
+ xasprintf(&savename, "bounce/%s.lastmsg", fname);
+ renameat(AT_FDCWD, mailname, listfd, savename);
+ free(savename);
+ free(fname);
+}