From 5d6d1b984e33bde119a5322c6bc76e5c0e48f043 Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 10 Nov 2004 17:04:46 +0000 Subject: try to fix strange behavior of bvote check tmpfile size before save fav4 comment for DDOS git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2322 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/fav.c | 5 ++++- mbbsd/mail.c | 1 + mbbsd/vote.c | 30 ++++++++---------------------- 3 files changed, 13 insertions(+), 23 deletions(-) diff --git a/mbbsd/fav.c b/mbbsd/fav.c index 6b4cd316..daea0c5c 100644 --- a/mbbsd/fav.c +++ b/mbbsd/fav.c @@ -460,7 +460,10 @@ int fav_save(void) "%s %s", cuser.userid, ctime(&now)); return -1; } - Rename(buf, buf2); + + /* to avoid write failed */ + if (dashs(buf) != 0) + Rename(buf, buf2); return 0; } diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 5ba76b17..85b3170f 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -1389,6 +1389,7 @@ send_inner_mail(char *fpath, char *title, char *receiver) if (!searchuser(receiver)) return -2; + /* to avoid DDOS of disk */ sethomedir(genbuf, receiver); // XXX should we use MAX_EXKEEPMAIL instead? if (dashs(genbuf) >= 2048 * sizeof(fileheader_t)) { diff --git a/mbbsd/vote.c b/mbbsd/vote.c index 029bd581..1268f16f 100644 --- a/mbbsd/vote.c +++ b/mbbsd/vote.c @@ -44,8 +44,10 @@ void convert_first_vote(boardheader_t *fhp) if (dashf(buf2)) continue; // old style format should be removed later - if (link(buf, buf2) < 0) + if (link(buf, buf2) < 0) { vmsg(strerror(errno)); + unlink(buf); + } } } #endif @@ -233,12 +235,6 @@ b_result_one(vote_buffer_t *vbuf, boardheader_t * fh, int ind, int *total) fh->bvote--; - // FIXME wrong range? - if (fh->bvote == 0) - fh->bvote = 2; - else if (fh->bvote == 2) - fh->bvote = 1; - snprintf(vbuf->ballots, sizeof(vbuf->ballots), "%s%d", STR_bv_ballots, ind); snprintf(vbuf->control, sizeof(vbuf->control),"%s%d", STR_bv_control, ind); snprintf(vbuf->desc, sizeof(vbuf->desc), "%s%d", STR_bv_desc, ind); @@ -373,7 +369,7 @@ b_result(vote_buffer_t *vbuf, boardheader_t * fh) static int b_close(boardheader_t * fh, vote_buffer_t *vbuf) { - + // XXX what's it for ? if (fh->bvote == 2) { if (fh->vtime < now - 3 * 86400) { fh->bvote = 0; @@ -519,11 +515,7 @@ vote_view(vote_buffer_t *vbuf, char *bname, int vote_index) setbfile(buf, bname, vbuf->title); unlink(buf); - // XXX is it wrong? - if (fhp->bvote) - fhp->bvote--; - if (fhp->bvote == 2) - fhp->bvote = 1; + fhp->bvote--; if (substitute_record(fn_board, fhp, sizeof(*fhp), pos) == -1) outs(err_board_update); @@ -605,7 +597,9 @@ vote_maintain(char *bname) stand_title("Á|¿ì§ë²¼"); fhp = bcache + pos - 1; - /* CharlieL */ + if (fhp->bvote < 0) + fhp->bvote = 0; + if (fhp->bvote != 0) { #if 1 // convert the filenames of first vote @@ -752,14 +746,6 @@ vote_maintain(char *bname) fprintf(fp, "%3d,%3d\n", x * 30 + num, MAX(1, atoi(inbuf))); fclose(fp); - // XXX fix range - if (fhp->bvote == 2) - fhp->bvote = 0; - else if (fhp->bvote == 1) - fhp->bvote = 2; - else if (fhp->bvote == 2) - fhp->bvote = 1; - fhp->bvote++; if (substitute_record(fn_board, fhp, sizeof(*fhp), pos) == -1) -- cgit v1.2.3