X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fmhstoresbr.c;h=ca03bda8677dd4e62da40e4399d8de2fc4420efb;hb=25e812757fa325d017b47144923dcad62b66399d;hp=f5e3347d3a4d16af89e11147cd0e5a9cd95c6c77;hpb=dd1c5703125bb10f78add2488ce32e83c523cfbb;p=mmh diff --git a/uip/mhstoresbr.c b/uip/mhstoresbr.c index f5e3347..ca03bda 100644 --- a/uip/mhstoresbr.c +++ b/uip/mhstoresbr.c @@ -177,7 +177,7 @@ store_switch (CT ct) /* * Generic routine to store a MIME content. - * (audio, video, image, text, message/rfc922) + * (audio, video, image, text, message/rfc822) */ static int @@ -1129,7 +1129,7 @@ next_version (char *file, enum clobber_policy_t clobber_policy) { } for (version = 1; version < max_versions; ++version) { - struct stat st; + int fd; switch (clobber_policy) { case NMH_CLOBBER_AUTO: { @@ -1151,7 +1151,15 @@ next_version (char *file, enum clobber_policy_t clobber_policy) { return NULL; } - if (stat (buffer, &st) == NOTOK) { + /* Actually (try to) create the file here to avoid a race + condition on file naming + creation. This won't solve the + problem with old NFS that doesn't support O_EXCL, though. + Let the umask strip off permissions from 0666 as desired. + That's what fopen () would do if it was creating the file. */ + if ((fd = open (buffer, O_CREAT | O_EXCL, + S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | + S_IROTH | S_IWOTH)) >= 0) { + close (fd); break; } }