static int kick_out(online_users_t *up, online_user_info_t *ip) { char buf[STRLEN]; if (!HAS_PERM(PERM_USER) && !streq(ip->name, currentuser.userid)) return DONOTHING; if (streq(currentuser.userid, "guest")) return DONOTHING; if (ip->sid == session_get_id()) //% strlcpy(buf, "您要把【自己】踢出去吗", sizeof(buf)); strlcpy(buf, "\xc4\xfa\xd2\xaa\xb0\xd1\xa1\xbe\xd7\xd4\xbc\xba\xa1\xbf\xcc\xdf\xb3\xf6\xc8\xa5\xc2\xf0", sizeof(buf)); else //% snprintf(buf, sizeof(buf), "你要把 %s 踢出站外吗", ip->name); snprintf(buf, sizeof(buf), "\xc4\xe3\xd2\xaa\xb0\xd1 %s \xcc\xdf\xb3\xf6\xd5\xbe\xcd\xe2\xc2\xf0", ip->name); if (!askyn(buf, false, true)) return MINIUPDATE; if (bbs_kill(ip->sid, ip->pid, SIGHUP) == 0) { //% snprintf(buf, sizeof(buf), "%s 已被踢出站外", ip->name); snprintf(buf, sizeof(buf), "%s \xd2\xd1\xb1\xbb\xcc\xdf\xb3\xf6\xd5\xbe\xcd\xe2", ip->name); up->uptime = 0; return PARTUPDATE; } else { //% snprintf(buf, sizeof(buf), "%s 无法踢出站外", ip->name); snprintf(buf, sizeof(buf), "%s \xce\xde\xb7\xa8\xcc\xdf\xb3\xf6\xd5\xbe\xcd\xe2", ip->name); return MINIUPDATE; } }
// Prevent too many logins of same account. static int multi_user_check(void) { int max = get_login_quota(¤tuser); if (max == INT_MAX) return 0; int logins = INT_MAX; session_basic_info_t *res = get_my_sessions(); if (res) { logins = session_basic_info_count(res); } if (strcaseeq("guest", currentuser.userid) && logins >= max) { //% prints("\033[1;33m抱歉, 目前已有太多 \033[1;36mguest\033[33m, " prints("\033[1;33m\xb1\xa7\xc7\xb8, \xc4\xbf\xc7\xb0\xd2\xd1\xd3\xd0\xcc\xab\xb6\xe0 \033[1;36mguest\033[33m, " //% "请稍后再试。\033[m\n"); "\xc7\xeb\xc9\xd4\xba\xf3\xd4\xd9\xca\xd4\xa1\xa3\033[m\n"); session_basic_info_clear(res); return -1; } if (logins >= max) { //% prints("\033[1;32m为确保他人上站权益, " prints("\033[1;32m\xce\xaa\xc8\xb7\xb1\xa3\xcb\xfb\xc8\xcb\xc9\xcf\xd5\xbe\xc8\xa8\xd2\xe6, " //% "本站仅允许您用该帐号登录 %d 个。\n\033[m" "\xb1\xbe\xd5\xbe\xbd\xf6\xd4\xca\xd0\xed\xc4\xfa\xd3\xc3\xb8\xc3\xd5\xca\xba\xc5\xb5\xc7\xc2\xbc %d \xb8\xf6\xa1\xa3\n\033[m" //% "\033[1;36m您目前已经使用该帐号登录了 %d 个," "\033[1;36m\xc4\xfa\xc4\xbf\xc7\xb0\xd2\xd1\xbe\xad\xca\xb9\xd3\xc3\xb8\xc3\xd5\xca\xba\xc5\xb5\xc7\xc2\xbc\xc1\xcb %d \xb8\xf6\xa3\xac" //% "您必须断开其他的连接方能进入本站!\n\033[m", max, logins); "\xc4\xfa\xb1\xd8\xd0\xeb\xb6\xcf\xbf\xaa\xc6\xe4\xcb\xfb\xb5\xc4\xc1\xac\xbd\xd3\xb7\xbd\xc4\xdc\xbd\xf8\xc8\xeb\xb1\xbe\xd5\xbe\xa3\xa1\n\033[m", max, logins); //% bool kick = askyn("您想删除重复的连接吗", false, false); bool kick = askyn("\xc4\xfa\xcf\xeb\xc9\xbe\xb3\xfd\xd6\xd8\xb8\xb4\xb5\xc4\xc1\xac\xbd\xd3\xc2\xf0", false, false); if (kick) { bbs_kill(session_basic_info_sid(res, 0), session_basic_info_pid(res, 0), SIGHUP); report("kicked (multi-login)", currentuser.userid); session_basic_info_clear(res); sleep(2); res = get_my_sessions(); logins = session_basic_info_count(res); } session_basic_info_clear(res); if (logins >= max) { //% prints("\033[33m很抱歉,您已经用该帐号登录 %d 个," prints("\033[33m\xba\xdc\xb1\xa7\xc7\xb8\xa3\xac\xc4\xfa\xd2\xd1\xbe\xad\xd3\xc3\xb8\xc3\xd5\xca\xba\xc5\xb5\xc7\xc2\xbc %d \xb8\xf6\xa3\xac" //% "所以,此连线将被取消。\033[m\n", logins); "\xcb\xf9\xd2\xd4\xa3\xac\xb4\xcb\xc1\xac\xcf\xdf\xbd\xab\xb1\xbb\xc8\xa1\xcf\xfb\xa1\xa3\033[m\n", logins); return -1; } } return 0; }