bbsdenyadd.c
来自「bbs server linux平台下软件源码」· C语言 代码 · 共 245 行
C
245 行
/* * $Id: bbsdenyadd.c,v 1.21 2003/02/20 05:43:10 kcn Exp $ */#include "bbslib.h"struct deny { char id[80]; char exp[80]; char comment[80]; time_t free_time;} denyuser[1024];int denynum = 0;int loaddenyuser(char *board){ FILE *fp; char path[80], buf[256]; char *id, *nick; sprintf(path, "boards/%s/deny_users", board); fp = fopen(path, "r"); if (fp == 0) return; while (denynum < (sizeof(denyuser) / sizeof(denyuser[0]))) { if (fgets(buf, sizeof(buf), fp) == 0) break; id = strchr(buf, ' '); if (id != NULL) *id = '\0'; strcpy(denyuser[denynum].id, buf); strncpy(denyuser[denynum].exp, buf + 13, 30); nick = strrchr(buf + 13, '['); if (nick != NULL) { denyuser[denynum].free_time = atol(nick + 1); nick--; if (nick - buf > 43) { *nick = '\0'; strcpy(denyuser[denynum].comment, buf + 43); } } denynum++; } fclose(fp);}int savedenyuser(char *board){ FILE *fp; int i; char path[80], buf[256], *exp; sprintf(path, "boards/%s/deny_users", board); fp = fopen(path, "w"); if (fp == 0) return; for (i = 0; i < denynum; i++) { int m; exp = denyuser[i].exp; if (denyuser[i].id[0] == 0) continue; for (m = 0; exp[m]; m++) { if (exp[m] < 32 && exp[m] > 0) exp[m] = '.'; } fprintf(fp, "%-12.12s %-30.30s%s\x1b[%um\n", denyuser[i].id, denyuser[i].exp, denyuser[i].comment, denyuser[i].free_time); } fclose(fp);}int show_form(char *board){ printf("<center>%s -- 版务管理 [讨论区: %s]<hr color=\"green\">\n", BBSNAME, board); printf("<form action=\"bbsdenyadd\"><input type=\"hidden\" name=\"board\" value=\"%s\">", board); printf("封禁使用者<input name=\"userid\" size=\"12\"> 本版POST权 <input name=\"dt\" size=\"2\"> 天, 原因<input name=\"exp\" size=\"20\">\n"); printf("<input type=\"submit\" value=\"确认\"></form>");}int inform(bcache_t * bp, char *user, char *exp, int dt){ FILE *fn; char buf[80], title[80]; struct userec *usr; struct userec saveusr; int my_flag; char *board; /* * postinfo_t pi; */ time_t now; struct userec *lookupuser; /* * bzero(&pi, sizeof(pi)); */ board = bp->filename; usr = getcurrusr(); now = time(0); memcpy(&saveusr, usr, sizeof(saveusr)); sprintf(buf, "%s 取消 %s 在 %s 的 POST 权力", usr->userid, user, board); report(buf); /* * Haohmaru.4.1.自动发信通知并发文章于板上 */ sprintf(buf, "etc/%s.deny", usr->userid); fn = fopen(buf, "w+"); sprintf(title, "%s被取消在%s版的发文权限", user, board); if ((HAS_PERM(currentuser, PERM_SYSOP) || HAS_PERM(currentuser, PERM_OBOARDS)) && !chk_BM_instr(bp->BM, currentuser->userid)) { my_flag = 0; fprintf(fn, "寄信人: SYSOP (System Operator) \n"); fprintf(fn, "标 题: %s\n", title); fprintf(fn, "发信站: %s (%24.24s)\n", "BBS " NAME_BBS_CHINESE "站", ctime(&now)); fprintf(fn, "来 源: " NAME_BBS_ENGLISH "\n"); fprintf(fn, "\n"); fprintf(fn, "由于您在 \x1b[4m%s\x1b[m 版 \x1b[4m%s\x1b[m,我很遗憾地通知您, \n", board, exp); if (dt) fprintf(fn, "您被暂时取消在该版的发文权力 \x1b[4m%d\x1b[m 天,到期后请回复\n", dt); else fprintf(fn, "您被暂时取消在该版的发文权力,到期后请回复\n"); fprintf(fn, "此信申请恢复权限。\n"); fprintf(fn, "\n"); fprintf(fn, " " NAME_BBS_CHINESE NAME_SYSOP_GROUP "值班站务:\x1b[4m%s\x1b[m\n", usr->userid); fprintf(fn, " %s\n", ctime(&now)); strcpy(usr->userid, "SYSOP"); strcpy(usr->username, NAME_SYSOP); /* * strcpy(usr->realname, NAME_SYSOP); */ } else { my_flag = 1; fprintf(fn, "寄信人: %s \n", usr->userid); fprintf(fn, "标 题: %s\n", title); fprintf(fn, "发信站: %s (%24.24s)\n", "BBS " NAME_BBS_CHINESE "站", ctime(&now)); fprintf(fn, "来 源: %s \n", usr->lasthost); fprintf(fn, "\n"); fprintf(fn, "由于您在 \x1b[4m%s\x1b[m 版 \x1b[4m%s\x1b[m,我很遗憾地通知您, \n", board, exp); if (dt) fprintf(fn, "您被暂时取消在该版的发文权力 \x1b[4m%d\x1b[m 天,到期后请回复\n", dt); else fprintf(fn, "您被暂时取消在该版的发文权力,到期后请回复\n"); fprintf(fn, "此信申请恢复权限。\n"); fprintf(fn, "\n"); fprintf(fn, " " NAME_BM ":\x1b[4m%s\x1b[m\n", usr->userid); fprintf(fn, " %s\n", ctime(&now)); } fclose(fn); mail_file(getcurruserid(), buf, user, title, BBSPOST_MOVE, NULL); fn = fopen(buf, "w+"); fprintf(fn, "由于 \x1b[4m%s\x1b[m 在 \x1b[4m%s\x1b[m 版的 \x1b[4m%s\x1b[m 行为,\n", user, board, exp); if (dt) fprintf(fn, "被暂时取消在本版的发文权力 \x1b[4m%d\x1b[m 天。\n", dt); else fprintf(fn, "您被暂时取消在该版的发文权力,到期后请回复\n"); if (my_flag == 0) fprintf(fn, " " NAME_BBS_CHINESE NAME_SYSOP_GROUP "值班站务:\x1b[4m%s\x1b[m\n", saveusr.userid); else fprintf(fn, " " NAME_BM ":\x1b[4m%s\x1b[m\n", usr->userid); fprintf(fn, " %s\n", ctime(&now)); fclose(fn); /* * pi.userid = usr->userid; * pi.username = usr->username; * pi.title = title; * pi.board = board; * pi.local = 1; * pi.anony = 0; * pi.access = (FILE_READ << 8) | (FILE_MARKED | FILE_FORWARDED); */ post_file(usr, "", buf, board, title, 0, 2); memcpy(usr, &saveusr, sizeof(saveusr)); sprintf(title, "%s 被 %s 封禁本版POST权", user, usr->userid); getuser(user, &lookupuser); if (HAS_PERM(lookupuser, PERM_BOARDS)) sprintf(title, "%s 封某版" NAME_BM " %s 在 %s", usr->userid, user, board); else sprintf(title, "%s 封 %s 在 %s", usr->userid, user, board); post_file(usr, "", buf, "denypost", title, 0, 8); unlink(buf); printf("系统已经发信通知了%s.<br>\n", user);}int main(){ int i; char exp[80], board[80], *userid; int dt; struct userec *u = NULL; bcache_t *bp; struct tm *tmtime; time_t undenytime; char buf[STRLEN]; struct boardheader bh; init_all(); if (!loginok) http_fatal("您尚未登录, 请先登录"); strsncpy(board, getparm("board"), 30); strsncpy(exp, getparm("exp"), 30); dt = atoi(getparm("dt")); if (getboardnum(board, &bh) == 0 || !check_read_perm(currentuser, &bh)) http_fatal("错误的讨论区"); if (!has_BM_perm(currentuser, board)) http_fatal("你无权进行本操作"); loaddenyuser(board); userid = getparm("userid"); if (userid[0] == 0) return show_form(board); if (getuser(userid, &u) == 0) http_fatal("错误的使用者帐号"); strcpy(userid, u->userid); if (dt < 1 || dt > 70) http_fatal("请输入被封天数(1-70)"); if (exp[0] == 0) http_fatal("请输入说明"); for (i = 0; i < denynum; i++) { if (!strcasecmp(denyuser[i].id, userid)) http_fatal("此用户已经被封"); } if (denynum > 512) http_fatal("太多人被封了"); strsncpy(denyuser[denynum].id, userid, 13); strsncpy(denyuser[denynum].exp, exp, 30); undenytime = time(0) + dt * 86400; tmtime = gmtime(&undenytime); sprintf(buf, "%-12.12s %2d月%2d日解", getcurruserid(), tmtime->tm_mon + 1, tmtime->tm_mday); strsncpy(denyuser[denynum].comment, buf, STRLEN); denyuser[denynum].free_time = undenytime; denynum++; savedenyuser(board); printf("封禁 %s 成功<br>\n", userid); bp = getbcache(board); inform(bp, userid, exp, dt); printf("[<a href=\"bbsdenyall?board=%s\">返回被封帐号名单</a>]", http_encode_string(board, sizeof(board))); http_quit();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?