]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
Reduce subscription confirmation address length to fit RFC 5321
authorGeert Stappers <stappers@stappers.it>
Thu, 25 May 2017 07:17:55 +0000 (09:17 +0200)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 20 Oct 2022 11:10:35 +0000 (13:10 +0200)
The local part of mailing list subscription confirmation addresses
formed of:

  mailing-list-name "+confsub-" 16-random-hex "-" sender-address

can get very long, especially if sender-address is long.
However, RFC limits it at 64 characters.

Closes http://mlmmj.org/bugs/bug.php?id=63

Reported-by: mgorny@gentoo.org
src/mlmmj-sub.c
src/mlmmj-unsub.c
src/strgen.c

index 3335817c011a2d2183348f8e04d353c45fccbcf6..5c8c1aefe06d374db2ac5687cd7f6c2fc8675e19 100644 (file)
@@ -413,7 +413,7 @@ void generate_subconfirm(const char *listdir, const char *listaddr,
         do {
                 myfree(confirmfilename);
                 myfree(randomstr);
-               randomstr = random_plus_addr(subaddr);
+               randomstr = random_str();
                 confirmfilename = concatstr(3, listdir, "/subconf/",
                                            randomstr);
 
index 0fa42a1134b17e977fe2044b8a09045045c31a8f..8e13f3cac5ce8b38806fc0779d7d5ebac87a1429 100644 (file)
@@ -171,7 +171,7 @@ void generate_unsubconfirm(const char *listdir, const char *listaddr,
         do {
                 myfree(confirmfilename);
                 myfree(randomstr);
-               randomstr = random_plus_addr(subaddr);
+               randomstr = random_str();
                 confirmfilename = concatstr(3, listdir, "/unsubconf/",
                                            randomstr);
 
index f13db47aa77bff5d7ab03f32f7cee1be72c90d38..673f44a2a291e7ebb3fbe0733b3f42ae6b78533c 100644 (file)
 
 char *random_str()
 {
-       size_t len = 17;
+       size_t len = 17; /* sixteen hex digits plus terminating zero */
        char *dest = mymalloc(len);
 
        snprintf(dest, len, "%08x%08x", random_int(), random_int());
-
-       return dest;
-}
-
-char *random_plus_addr(const char *addr)
-{
-       size_t len = strlen(addr) + 128;
-       char *dest = mymalloc(len);
-       char *atsign;
-       char *tmpstr;
-
-       tmpstr = mymalloc(len);
-       snprintf(tmpstr, len, "%s", addr);
-
-       atsign = strchr(tmpstr, '@');
-       MY_ASSERT(atsign);
-       *atsign = '=';
-
-       snprintf(dest, len, "%08x%08x-%s", random_int(), random_int(), tmpstr);
-
-       myfree(tmpstr);
        
        return dest;
 }