diff options
author | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-08-08 14:49:40 +0800 |
---|---|---|
committer | victor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-08-08 14:49:40 +0800 |
commit | 299369f41fae2c8ab2886ef41ad24815241707aa (patch) | |
tree | 6e35e4527fe15ae8e7484e492e976394da97a22b /mbbsd/admin.c | |
parent | 0472f505661582dcaccf2d1a024abf14f2c75e5b (diff) | |
download | pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.tar pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.tar.gz pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.tar.bz2 pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.tar.lz pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.tar.xz pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.tar.zst pttbbs-299369f41fae2c8ab2886ef41ad24815241707aa.zip |
fix race condition of user registeration (as well as while restoring a
backed-up account):
Procoess A Process B
====================== =====================
uid = searchuser("")
uid = searchuser("")
setuserid(uid, userid)
setuserid(uid, userid)
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3007 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/admin.c')
-rw-r--r-- | mbbsd/admin.c | 16 |
1 files changed, 1 insertions, 15 deletions
diff --git a/mbbsd/admin.c b/mbbsd/admin.c index cb79582c..eb6b47d1 100644 --- a/mbbsd/admin.c +++ b/mbbsd/admin.c @@ -141,21 +141,7 @@ search_key_user(const char *passwdfile, int mode) outs("目前的PASSWDS檔沒有此id " "請先new一個這個id的帳號"); } else { - int allocid = getnewuserid(); - - if (allocid > MAX_USERS || allocid <= 0) { - fprintf(stderr, "本站人口已達飽和!\n"); - exit(1); - } - if (passwd_update(allocid, &user) == -1) { - fprintf(stderr, "客滿了,再見!\n"); - exit(1); - } - setuserid(allocid, user.userid); - if (!searchuser(user.userid, NULL)) { - fprintf(stderr, "無法建立帳號\n"); - exit(1); - } + setupnewuser(&user); fclose(fp1); return 0; } |