diff options
Diffstat (limited to 'mail-client/mutt/files/mutt-1.5.13-paranoid-temp-file.patch')
-rw-r--r-- | mail-client/mutt/files/mutt-1.5.13-paranoid-temp-file.patch | 100 |
1 files changed, 0 insertions, 100 deletions
diff --git a/mail-client/mutt/files/mutt-1.5.13-paranoid-temp-file.patch b/mail-client/mutt/files/mutt-1.5.13-paranoid-temp-file.patch deleted file mode 100644 index 56ed1c23bb77..000000000000 --- a/mail-client/mutt/files/mutt-1.5.13-paranoid-temp-file.patch +++ /dev/null @@ -1,100 +0,0 @@ -commit f8c42c6286f3077fc8762ba2c8323026b736a3e8 -Author: roessler <roessler> -Date: Mon Oct 9 13:39:38 2006 +0000 - - From: Thomas Roessler <roessler@does-not-exist.org> - - Even more paranoid temporary file creation. - -diff --git a/lib.c b/lib.c -index aac0742..d672a8a 100644 ---- a/lib.c -+++ b/lib.c -@@ -481,14 +481,85 @@ int safe_rename (const char *src, const - return 0; - } - -+/* Create a temporary directory next to a file name */ -+ -+int mutt_mkwrapdir (const char *path, char *newfile, size_t nflen, -+ char *newdir, size_t ndlen) -+{ -+ const char *basename; -+ char parent[_POSIX_PATH_MAX]; -+ char *p; -+ int rv; -+ -+ strfcpy (parent, NONULL (path), sizeof (parent)); -+ -+ if ((p = strrchr (parent, '/'))) -+ { -+ *p = '\0'; -+ basename = p + 1; -+ } -+ else -+ { -+ strfcpy (parent, ".", sizeof (parent)); -+ basename = path; -+ } -+ -+ do -+ { -+ snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX"); -+ mktemp (newdir); -+ } -+ while ((rv = mkdir (newdir, 0700)) == -1 && errno == EEXIST); -+ -+ if (rv == -1) -+ return -1; -+ -+ snprintf (newfile, nflen, "%s/%s", newdir, NONULL(basename)); -+ return 0; -+} -+ -+int mutt_put_file_in_place (const char *path, const char *safe_file, const char *safe_dir) -+{ -+ int rv; -+ -+ rv = safe_rename (safe_file, path); -+ unlink (safe_file); -+ rmdir (safe_dir); -+ return rv; -+} -+ - int safe_open (const char *path, int flags) - { - struct stat osb, nsb; - int fd; - -- if ((fd = open (path, flags, 0600)) < 0) -- return fd; -+ if (flags & O_EXCL) -+ { -+ char safe_file[_POSIX_PATH_MAX]; -+ char safe_dir[_POSIX_PATH_MAX]; - -+ if (mutt_mkwrapdir (path, safe_file, sizeof (safe_file), -+ safe_dir, sizeof (safe_dir)) == -1) -+ return -1; -+ -+ if ((fd = open (safe_file, flags, 0600)) < 0) -+ { -+ rmdir (safe_dir); -+ return fd; -+ } -+ -+ if (mutt_put_file_in_place (path, safe_file, safe_dir) == -1) -+ { -+ close (fd); -+ return -1; -+ } -+ } -+ else -+ { -+ if ((fd = open (path, flags, 0600)) < 0) -+ return fd; -+ } -+ - /* make sure the file is not symlink */ - if (lstat (path, &osb) < 0 || fstat (fd, &nsb) < 0 || - compare_stat(&osb, &nsb) == -1) |