]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
factorize the code to save the last bounced mail
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 27 Dec 2022 13:04:02 +0000 (14:04 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 27 Dec 2022 13:04:02 +0000 (14:04 +0100)
include/mlmmj.h
src/mlmmj-bounce.c
src/mlmmj.c

index 399ab48158496489d9f9e6b631d9579de6738094..eefd13b50d0acf7695b6a005417299df804dab2a 100644 (file)
@@ -109,6 +109,7 @@ time_t extract_bouncetime(char *line, const char **errstr);
 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; \
index c7140e6c95ce698667aecbfe4b48ab07d01fd67d..67fa82928923eb10a69ca064f3a00ace3a8dd292 100644 (file)
@@ -241,8 +241,8 @@ int main(int argc, char **argv)
        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;
@@ -344,16 +344,11 @@ int main(int argc, char **argv)
 #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);
 }
index 82156b79986b1670a4aee5f9084e72c65698dd63..2bd0517c038dbe50f8bc422fcf849181ca56677c 100644 (file)
@@ -370,3 +370,16 @@ bouncemail(int listfd, const char *theaddress, const char *identifier)
 
        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);
+}