summaryrefslogtreecommitdiffstats
path: root/util/bbsmail.c
diff options
context:
space:
mode:
authorin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-17 17:09:52 +0800
committerin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-17 17:09:52 +0800
commitda0575f3a383237dc9192d1c7ea54c7df9a8c8a6 (patch)
tree06c279106b53759b5dbe8dd6931f54a9fb6f3072 /util/bbsmail.c
parent440d1c00eb77739f182ced3fca9fc312d767cf7f (diff)
downloadpttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.tar
pttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.tar.gz
pttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.tar.bz2
pttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.tar.lz
pttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.tar.xz
pttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.tar.zst
pttbbs-da0575f3a383237dc9192d1c7ea54c7df9a8c8a6.zip
add stampfilefd() to avoid race condition
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1998 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'util/bbsmail.c')
-rw-r--r--util/bbsmail.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/util/bbsmail.c b/util/bbsmail.c
index a58d5763..2ca997b8 100644
--- a/util/bbsmail.c
+++ b/util/bbsmail.c
@@ -78,7 +78,7 @@ void str_decode_M3(unsigned char *str);
int mail2bbs(char *userid)
{
- int uid;
+ int uid, fd;
fileheader_t mymail;
char genbuf[512], title[512], sender[512], filename[512], *ip, *ptr;
time_t tmp_time;
@@ -156,9 +156,6 @@ int mail2bbs(char *userid)
if( strchr(sender, '@') == NULL ) /* ¥Ñ local host ±H«H */
strcat(sender, "@" MYHOSTNAME);
-/* allocate a file for the new mail */
- stampfile(filename, &mymail);
-
#ifdef HMM_USE_ANTI_SPAM
for (n = 0; notitle[n]; n++)
if (strstr(title, notitle[n]))
@@ -178,11 +175,9 @@ int mail2bbs(char *userid)
}
#endif
- if ((fout = fopen(filename, "w")) == NULL)
- {
- printf("Cannot open %s\n", filename);
+ if( (fd = stampfilefd(filename, &mymail)) == -1 ||
+ (fout = fdopen(fd, "wt")) == NULL )
return -1;
- }
if (!title[0])
sprintf(title, "¨Ó¦Û %.64s", sender);