diff options
Diffstat (limited to 'mail/sendmail/files/patch-sendmail-deliver.c')
-rw-r--r-- | mail/sendmail/files/patch-sendmail-deliver.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/mail/sendmail/files/patch-sendmail-deliver.c b/mail/sendmail/files/patch-sendmail-deliver.c new file mode 100644 index 000000000000..a6c81e12774c --- /dev/null +++ b/mail/sendmail/files/patch-sendmail-deliver.c @@ -0,0 +1,64 @@ +diff -u -r8.928 deliver.c +--- sendmail/deliver.c 2002/01/10 03:23:29 8.928 ++++ sendmail/deliver.c 2002/02/04 23:32:05 +@@ -5141,11 +5141,17 @@ + } + (void) sm_strlcpy(targetfile, SafeFileEnv, sizeof targetfile); + realfile = targetfile + len; +- if (targetfile[len - 1] != '/') +- (void) sm_strlcat(targetfile, "/", sizeof targetfile); + if (*filename == '/') + filename++; +- (void) sm_strlcat(targetfile, filename, sizeof targetfile); ++ if (*filename != '\0') ++ { ++ /* paranoia: trailing / should be removed in readcf */ ++ if (targetfile[len - 1] != '/') ++ (void) sm_strlcat(targetfile, ++ "/", sizeof targetfile); ++ (void) sm_strlcat(targetfile, filename, ++ sizeof targetfile); ++ } + } + else if (mailer->m_rootdir != NULL) + { +@@ -5388,6 +5394,9 @@ + + if (realfile != targetfile) + { ++ char save; ++ ++ save = *realfile; + *realfile = '\0'; + if (tTd(11, 20)) + sm_dprintf("mailfile: chroot %s\n", targetfile); +@@ -5397,7 +5406,7 @@ + targetfile); + RETURN(EX_CANTCREAT); + } +- *realfile = '/'; ++ *realfile = save; + } + + if (tTd(11, 40)) +--- sendmail/readcf.c 2002/01/30 19:56:37 8.595 ++++ sendmail/readcf.c 2002/02/04 23:32:05 +@@ -2950,6 +2950,17 @@ + break; + + case O_SAFEFILEENV: /* chroot() environ for writing to files */ ++ if (*val == '\0') ++ break; ++ ++ /* strip trailing slashes */ ++ p = val + strlen(val) - 1; ++ while (p >= val && *p == '/') ++ *p-- = '\0'; ++ ++ if (*val == '\0') ++ break; ++ + SafeFileEnv = newstr(val); + break; + + |