From: Geert Stappers Date: Thu, 25 May 2017 07:17:55 +0000 (+0200) Subject: Reduce subscription confirmation address length to fit RFC 5321 X-Git-Tag: RELEASE_1_4_0a1~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6412d2b2b105d18f2fe77715a5deaec5f9b79c44;p=thirdparty%2Fmlmmj.git Reduce subscription confirmation address length to fit RFC 5321 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 --- diff --git a/src/mlmmj-sub.c b/src/mlmmj-sub.c index 3335817c..5c8c1aef 100644 --- a/src/mlmmj-sub.c +++ b/src/mlmmj-sub.c @@ -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); diff --git a/src/mlmmj-unsub.c b/src/mlmmj-unsub.c index 0fa42a11..8e13f3ca 100644 --- a/src/mlmmj-unsub.c +++ b/src/mlmmj-unsub.c @@ -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); diff --git a/src/strgen.c b/src/strgen.c index f13db47a..673f44a2 100644 --- a/src/strgen.c +++ b/src/strgen.c @@ -40,31 +40,10 @@ 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; }