summaryrefslogtreecommitdiffstats
path: root/mbbsd/talk.c
diff options
context:
space:
mode:
authorkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2006-04-01 22:28:03 +0800
committerkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2006-04-01 22:28:03 +0800
commit68fb6de868a5e0daf128998cd60fe582f02dc287 (patch)
tree596b1a65c0ecf13b99408189fed9ccd2e4b45c64 /mbbsd/talk.c
parentfad5640e3ae7686f60becbb1130b9fd1f59c37d6 (diff)
downloadpttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar
pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.gz
pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.bz2
pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.lz
pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.xz
pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.zst
pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.zip
make it harder to multi-login by race condition.
prevent logout function reenter. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3319 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/talk.c')
-rw-r--r--mbbsd/talk.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/mbbsd/talk.c b/mbbsd/talk.c
index abfd0e52..cde23af9 100644
--- a/mbbsd/talk.c
+++ b/mbbsd/talk.c
@@ -265,16 +265,19 @@ int sync_outta_server(int sfd)
if(res<0)
return -1;
if(res==2) {
+ close(sfd);
outs("登入太頻繁, 為避免系統負荷過重, 請稍後再試\n");
refresh();
- sleep(10);
- abort_bbs(0);
+ sleep(30);
+ log_usies("REJECTLOGIN", NULL);
+ memset(currutmp, 0, sizeof(userinfo_t));
+ exit(0);
}
verbose_progress(0, &iBar, &dir, barMax);
if(toread(sfd, &nfs, sizeof(nfs))<0)
return -1;
- if(nfs<0 || nfs>=MAX_FRIEND) {
+ if(nfs<0 || nfs>MAX_FRIEND*2) {
fprintf(stderr, "invalid nfs=%d\n",nfs);
return -1;
}
@@ -282,6 +285,8 @@ int sync_outta_server(int sfd)
if(toread(sfd, fs, sizeof(fs[0])*nfs)<0)
return -1;
+ close(sfd);
+
verbose_progress(0, &iBar, &dir, barMax);
for(i=0; i<nfs; i++) {
if( SHM->uinfo[fs[i].index].uid != fs[i].uid )
@@ -317,9 +322,9 @@ void login_friend_online(void)
sfd = toconnect(OUTTACACHEHOST, OUTTACACHEPORT);
if(sfd>=0) {
int res=sync_outta_server(sfd);
- close(sfd);
- if(res==0)
+ if(res==0) // sfd will be closed if return 0
return;
+ close(sfd);
}
#endif