diff options
author | Rolf Eike Beer <eike@sf-mail.de> | 2019-10-26 19:30:11 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2019-11-17 10:30:35 +0100 |
commit | 6248c40cc4b4411223a9a4f1bf98204c4c05f147 (patch) | |
tree | 926cc9b3e57b59de6bc9ee7570b188cddb6783ea /net-mail/vpopmail/files | |
parent | app-misc/cargo-license: new package (diff) | |
download | gentoo-6248c40cc4b4411223a9a4f1bf98204c4c05f147.tar.gz gentoo-6248c40cc4b4411223a9a4f1bf98204c4c05f147.tar.bz2 gentoo-6248c40cc4b4411223a9a4f1bf98204c4c05f147.zip |
net-mail/vpopmail: add 2 more patches
Things I hit during testing.
Signed-off-by: Rolf Eike Beer <eike@sf-mail.de>
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'net-mail/vpopmail/files')
-rw-r--r-- | net-mail/vpopmail/files/vpopmail-5.4.33-check-crypt-return-value-for-NULL.patch | 146 | ||||
-rw-r--r-- | net-mail/vpopmail/files/vpopmail-5.4.33-use-proper-printf-format-strings.patch | 217 |
2 files changed, 363 insertions, 0 deletions
diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-check-crypt-return-value-for-NULL.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-check-crypt-return-value-for-NULL.patch new file mode 100644 index 000000000000..cfe5ce90e07f --- /dev/null +++ b/net-mail/vpopmail/files/vpopmail-5.4.33-check-crypt-return-value-for-NULL.patch @@ -0,0 +1,146 @@ +From b3a21a4a6d7af3dc14417c89ec2ef2732a24939b Mon Sep 17 00:00:00 2001 +From: Rolf Eike Beer <eike@sf-mail.de> +Date: Sat, 26 Oct 2019 18:14:13 +0200 +Subject: [PATCH 1/2] check crypt() return value for NULL + +Passing NULL to strcmp() would lead to a crash otherwise. +--- + vcdb.c | 7 ++++++- + vchkpw.c | 11 +++++++++-- + vldap.c | 8 +++++++- + vmysql.c | 8 +++++++- + vpgsql.c | 8 +++++++- + vsybase.c | 8 +++++++- + 6 files changed, 43 insertions(+), 7 deletions(-) + +diff --git a/vcdb.c b/vcdb.c +index 55c1cb5..1bf9cd8 100644 +--- a/vcdb.c ++++ b/vcdb.c +@@ -1160,7 +1160,12 @@ void vcdb_strip_char( char *instr ) + + int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw) + { ++ const char *c; + if ( vpw == NULL ) return(-1); + +- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd)); ++ c = crypt(clear_pass,vpw->pw_passwd); ++ ++ if ( c == NULL ) return(-1); ++ ++ return(strcmp(c,vpw->pw_passwd)); + } +diff --git a/vchkpw.c b/vchkpw.c +index d7d4351..a7c4b9e 100644 +--- a/vchkpw.c ++++ b/vchkpw.c +@@ -607,6 +607,7 @@ void login_system_user() + struct spwd *spw; + #endif + struct passwd *pw; ++ const char *c; + + if ((pw=getpwnam(TheUser)) == NULL ) { + snprintf(LogLine, sizeof(LogLine), "%s: system user not found %s:%s", +@@ -626,9 +627,15 @@ void login_system_user() + vchkpw_exit(22); + } + +- if ( strcmp(crypt(ThePass,spw->sp_pwdp),spw->sp_pwdp) != 0 ) { ++ c = crypt(ThePass,spw->sp_pwdp); ++ ++ if ( c == NULL ) vchkpw_exit(24); ++ if ( strcmp(c,spw->sp_pwdp) != 0 ) { + #else +- if ( strcmp(crypt(ThePass,pw->pw_passwd),pw->pw_passwd) != 0 ) { ++ c = crypt(ThePass,pw->pw_passwd); ++ ++ if ( c == NULL ) vchkpw_exit(24); ++ if ( strcmp(c,pw->pw_passwd) != 0 ) { + #endif + if (ENABLE_LOGGING==1||ENABLE_LOGGING==2) { + snprintf(LogLine, sizeof(LogLine), "%s: system password fail %s:%s", +diff --git a/vldap.c b/vldap.c +index 75329ef..5fcce99 100644 +--- a/vldap.c ++++ b/vldap.c +@@ -1495,10 +1495,16 @@ void *safe_malloc (size_t siz) { + /***************************************************************************/ + + int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw) { ++ const char *c; ++ + if ( vpw == NULL ) + return(-1); + +- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd)); ++ c = crypt(clear_pass,vpw->pw_passwd); ++ ++ if ( c == NULL ) return(-1); ++ ++ return(strcmp(c,vpw->pw_passwd)); + } + + /***************************************************************************/ +diff --git a/vmysql.c b/vmysql.c +index 4215a39..c5173d9 100644 +--- a/vmysql.c ++++ b/vmysql.c +@@ -1862,7 +1862,13 @@ int vdel_limits(const char *domain) + /************************************************************************/ + int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw) + { ++ const char *c; ++ + if ( vpw == NULL ) return(-1); + +- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd)); ++ c = crypt(clear_pass,vpw->pw_passwd); ++ ++ if ( c == NULL ) return(-1); ++ ++ return(strcmp(c,vpw->pw_passwd)); + } +diff --git a/vpgsql.c b/vpgsql.c +index c55b9e2..b5dd40b 100644 +--- a/vpgsql.c ++++ b/vpgsql.c +@@ -1667,8 +1667,14 @@ void vcreate_vlog_table() + + int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw) + { ++ const char *c; ++ + if ( vpw == NULL ) return(-1); + +- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd)); ++ c = crypt(clear_pass,vpw->pw_passwd); ++ ++ if ( c == NULL ) return(-1); ++ ++ return(strcmp(c,vpw->pw_passwd)); + } + +diff --git a/vsybase.c b/vsybase.c +index c6d7234..26f7447 100644 +--- a/vsybase.c ++++ b/vsybase.c +@@ -640,7 +640,13 @@ int vshow_ip_map( int first, char *ip, char *domain); + + int vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw) + { ++ const char *c; ++ + if ( vpw == NULL ) return(-1); + +- return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd)); ++ c = crypt(clear_pass,vpw->pw_passwd); ++ ++ if ( c == NULL ) return(-1); ++ ++ return(strcmp(c,vpw->pw_passwd)); + } +-- +2.16.4 + diff --git a/net-mail/vpopmail/files/vpopmail-5.4.33-use-proper-printf-format-strings.patch b/net-mail/vpopmail/files/vpopmail-5.4.33-use-proper-printf-format-strings.patch new file mode 100644 index 000000000000..a0967166c1cf --- /dev/null +++ b/net-mail/vpopmail/files/vpopmail-5.4.33-use-proper-printf-format-strings.patch @@ -0,0 +1,217 @@ +From 8ebcfc44379708521c41193057bb1549a3c1a2eb Mon Sep 17 00:00:00 2001 +From: Rolf Eike Beer <eike@sf-mail.de> +Date: Sat, 26 Oct 2019 18:25:12 +0200 +Subject: [PATCH 2/2] use proper printf format strings + +--- + maildirquota.c | 4 ++-- + vlimits.c | 8 ++++---- + vlistlib.c | 2 +- + vmoddomlimits.c | 8 ++++---- + vpopmail.c | 17 +++++++++-------- + vpopmaild.c | 20 ++++++++++---------- + vusagec.c | 2 +- + 7 files changed, 31 insertions(+), 30 deletions(-) + +diff --git a/maildirquota.c b/maildirquota.c +index 1c3dd44..11a0ce3 100644 +--- a/maildirquota.c ++++ b/maildirquota.c +@@ -400,7 +400,7 @@ static int maildirsize_read(const char *filename, /* The filename */ + first=0; + continue; + } +- sscanf(q, "%llu %llu", &n, &c); ++ sscanf(q, "%" PRIu64 " %" PRIu64 "", &n, &c); + *sizeptr += n; + *cntptr += c; + ++ *nlines; +@@ -806,7 +806,7 @@ int n; + niov=2; + } + +- sprintf(u.buf, "%llu %llu\n", maildirsize_size, maildirsize_cnt); ++ sprintf(u.buf, "%" PRIu64 " %" PRIu64 "\n", maildirsize_size, maildirsize_cnt); + iov[niov].iov_base=u.buf; + iov[niov].iov_len=strlen(u.buf); + +diff --git a/vlimits.c b/vlimits.c +index af336d2..c4d76ba 100644 +--- a/vlimits.c ++++ b/vlimits.c +@@ -480,10 +480,10 @@ int vlimits_write_limits_file(const char *dir, const struct vlimits *limits) + fprintf(fs, "maxforwards: %d\n", limits->maxforwards); + fprintf(fs, "maxautoresponders: %d\n", limits->maxautoresponders); + fprintf(fs, "maxmailinglists: %d\n", limits->maxmailinglists); +- fprintf(fs, "quota: %llu\n", limits->diskquota); +- fprintf(fs, "maxmsgcount: %llu\n", limits->maxmsgcount); +- fprintf(fs, "default_quota: %llu\n", limits->defaultquota); +- fprintf(fs, "default_maxmsgcount: %llu\n", limits->defaultmaxmsgcount); ++ fprintf(fs, "quota: %" PRIu64 "\n", limits->diskquota); ++ fprintf(fs, "maxmsgcount: %" PRIu64 "\n", limits->maxmsgcount); ++ fprintf(fs, "default_quota: %" PRIu64 "\n", limits->defaultquota); ++ fprintf(fs, "default_maxmsgcount: %" PRIu64 "\n", limits->defaultmaxmsgcount); + if (limits->disable_pop) fprintf(fs, "disable_pop\n"); + if (limits->disable_imap) fprintf(fs, "disable_imap\n"); + if (limits->disable_dialup) fprintf(fs, "disable_dialup\n"); +diff --git a/vlistlib.c b/vlistlib.c +index 110a93e..cbb8242 100644 +--- a/vlistlib.c ++++ b/vlistlib.c +@@ -488,7 +488,7 @@ void ezmlm_decode( listInfoType *LI ) { + if( (fs=fopen(TmpBuf, "r")) !=NULL ) { + if(fgets(TmpBuf2, sizeof(TmpBuf2), fs)) { + Tmp = strtok( TmpBuf2, ":" ); +- printf( " First Token: %s Len: %d\n", Tmp, strlen( Tmp )); ++ printf( " First Token: %s Len: %zu\n", Tmp, strlen( Tmp )); + if( NULL != Tmp ) { + for(i=0; i<strlen(Tmp); i++) LI->SQLHost[i] = Tmp[i]; + LI->SQLHost[i] = (char) 0; +diff --git a/vmoddomlimits.c b/vmoddomlimits.c +index cff906a..7a9c8b8 100644 +--- a/vmoddomlimits.c ++++ b/vmoddomlimits.c +@@ -207,10 +207,10 @@ int main(int argc, char *argv[]) + printf ((limits.perm_defaultquota & VLIMIT_DISABLE_DELETE ? "DENY_DELETE " :"ALLOW_DELETE ") ); + + printf("\n"); +- printf("Domain Quota: %llu MB\n", limits.diskquota); +- printf("Default User Quota: %llu bytes\n", limits.defaultquota); +- printf("Max Domain Messages: %llu\n", limits.maxmsgcount); +- printf("Default Max Messages per User: %llu\n", limits.defaultmaxmsgcount); ++ printf("Domain Quota: %" PRIu64 " MB\n", limits.diskquota); ++ printf("Default User Quota: %" PRIu64 " bytes\n", limits.defaultquota); ++ printf("Max Domain Messages: %" PRIu64 "\n", limits.maxmsgcount); ++ printf("Default Max Messages per User: %" PRIu64 "\n", limits.defaultmaxmsgcount); + return(vexit(0)); + } + +diff --git a/vpopmail.c b/vpopmail.c +index 3b6a3e5..c389c7c 100644 +--- a/vpopmail.c ++++ b/vpopmail.c +@@ -31,6 +31,7 @@ + #include <fcntl.h> + #include <time.h> + #include <dirent.h> ++#include <inttypes.h> + #include <pwd.h> + #include "config.h" + #ifdef HAVE_ERR_H +@@ -737,13 +738,13 @@ int vadduser( char *username, char *domain, char *password, char *gecos, + + if (limits.defaultquota > 0) { + if (limits.defaultmaxmsgcount > 0) +- snprintf (quota, sizeof(quota), "%lluS,%lluC", limits.defaultquota, ++ snprintf (quota, sizeof(quota), "%" PRIu64 "S,%" PRIu64 "C", limits.defaultquota, + limits.defaultmaxmsgcount); + else +- snprintf (quota, sizeof(quota), "%lluS", limits.defaultquota); ++ snprintf (quota, sizeof(quota), "%" PRIu64 "S", limits.defaultquota); + } else { + if (limits.defaultmaxmsgcount > 0) +- snprintf (quota, sizeof(quota), "%lluC", limits.defaultmaxmsgcount); ++ snprintf (quota, sizeof(quota), "%" PRIu64 "C", limits.defaultmaxmsgcount); + else + strcpy (quota, "NOQUOTA"); + } +@@ -3822,11 +3823,11 @@ static char tempquota[128]; + + if (quota_count == 0) + if (quota_size == 0) strcpy (tempquota, ""); /* invalid quota */ +- else sprintf (tempquota, "%lluS", quota_size); ++ else sprintf (tempquota, "%" PRIu64 "S", quota_size); + else if (quota_size == 0) +- sprintf (tempquota, "%lluC", quota_count); ++ sprintf (tempquota, "%" PRIu64 "C", quota_count); + else +- sprintf (tempquota, "%lluS,%lluC", quota_size, quota_count); ++ sprintf (tempquota, "%" PRIu64 "S,%" PRIu64 "C", quota_size, quota_count); + + return tempquota; + } +@@ -4050,8 +4051,8 @@ int qnprintf (char *buffer, size_t size, const char *format, ...) + snprintf (n, sizeof(n), "%u", va_arg (ap, unsigned int)); + break; + +- case 'S': +- snprintf(n, sizeof(n), "%llu", va_arg(ap, storage_t)); ++ case 'S': ++ snprintf(n, sizeof(n), "%" PRIu64, va_arg(ap, storage_t)); + break; + + case 'l': +diff --git a/vpopmaild.c b/vpopmaild.c +index f257a52..9cf2981 100644 +--- a/vpopmaild.c ++++ b/vpopmaild.c +@@ -2280,13 +2280,13 @@ int get_limits() + mylimits.maxautoresponders); wait_write(); + snprintf(WriteBuf,sizeof(WriteBuf), "max_mailinglists %d" RET_CRLF, + mylimits.maxmailinglists); wait_write(); +- snprintf(WriteBuf,sizeof(WriteBuf), "disk_quota %llu" RET_CRLF, ++ snprintf(WriteBuf,sizeof(WriteBuf), "disk_quota %" PRIu64 RET_CRLF, + mylimits.diskquota); wait_write(); +- snprintf(WriteBuf,sizeof(WriteBuf), "max_msgcount %llu" RET_CRLF, ++ snprintf(WriteBuf,sizeof(WriteBuf), "max_msgcount %" PRIu64 RET_CRLF, + mylimits.maxmsgcount); wait_write(); +- snprintf(WriteBuf,sizeof(WriteBuf), "default_quota %llu" RET_CRLF, ++ snprintf(WriteBuf,sizeof(WriteBuf), "default_quota %" PRIu64 RET_CRLF, + mylimits.defaultquota); wait_write(); +- snprintf(WriteBuf,sizeof(WriteBuf), "default_maxmsgcount %llu" RET_CRLF, ++ snprintf(WriteBuf,sizeof(WriteBuf), "default_maxmsgcount %" PRIu64 RET_CRLF, + mylimits.defaultmaxmsgcount); wait_write(); + + if (mylimits.disable_pop) +@@ -2625,9 +2625,9 @@ int get_user_size() + + snprintf(WriteBuf, sizeof(WriteBuf), "%s", RET_OK_MORE); + wait_write(); +- snprintf(WriteBuf, sizeof(WriteBuf), "size %llu" RET_CRLF, bytes); ++ snprintf(WriteBuf, sizeof(WriteBuf), "size %" PRIu64 RET_CRLF, bytes); + wait_write(); +- snprintf(WriteBuf, sizeof(WriteBuf), "count %llu" RET_CRLF, cnt); ++ snprintf(WriteBuf, sizeof(WriteBuf), "count %" PRIu64 RET_CRLF, cnt); + wait_write(); + snprintf(WriteBuf, sizeof(WriteBuf), "%s", "." RET_CRLF); + +@@ -2680,9 +2680,9 @@ int get_domain_size() + } else { + snprintf(WriteBuf, sizeof(WriteBuf), "user %s@%s" RET_CRLF, tmpvpw->pw_name, domain); + wait_write(); +- snprintf(WriteBuf, sizeof(WriteBuf), "size %llu" RET_CRLF, bytes); ++ snprintf(WriteBuf, sizeof(WriteBuf), "size %" PRIu64 RET_CRLF, bytes); + wait_write(); +- snprintf(WriteBuf, sizeof(WriteBuf), "count %llu" RET_CRLF, cnt); ++ snprintf(WriteBuf, sizeof(WriteBuf), "count %" PRIu64 RET_CRLF, cnt); + wait_write(); + totalbytes += (unsigned long)bytes; + totalcnt += (unsigned int)cnt; +@@ -2691,9 +2691,9 @@ int get_domain_size() + + snprintf(WriteBuf, sizeof(WriteBuf), "domain %s" RET_CRLF, domain); + wait_write(); +- snprintf(WriteBuf, sizeof(WriteBuf), "size %llu" RET_CRLF, totalbytes); ++ snprintf(WriteBuf, sizeof(WriteBuf), "size %" PRIu64 RET_CRLF, totalbytes); + wait_write(); +- snprintf(WriteBuf, sizeof(WriteBuf), "count %llu" RET_CRLF, totalcnt); ++ snprintf(WriteBuf, sizeof(WriteBuf), "count %" PRIu64 RET_CRLF, totalcnt); + wait_write(); + snprintf(WriteBuf, sizeof(WriteBuf), "%s", "." RET_CRLF); + +diff --git a/vusagec.c b/vusagec.c +index c32c2fe..5cc6dda 100644 +--- a/vusagec.c ++++ b/vusagec.c +@@ -67,7 +67,7 @@ int main(int argc, char *argv[]) + if (uusage == -1) + printf("%s: No data available\n", argv[i]); + else +- printf("%s: %llu byte(s) in %llu file(s)\n", *(argv[i]) == '@' ? (argv[i] + 1) : argv[i], uusage, musage); ++ printf("%s: %" PRIu64 " byte(s) in %" PRIu64 " file(s)\n", *(argv[i]) == '@' ? (argv[i] + 1) : argv[i], uusage, musage); + } + + client_close(handle); +-- +2.16.4 + |