aboutsummaryrefslogtreecommitdiff
path: root/mail/sendmail/files/patch-sendmail-deliver.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/sendmail/files/patch-sendmail-deliver.c')
-rw-r--r--mail/sendmail/files/patch-sendmail-deliver.c64
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;
+
+