Linux 版 (精华区)
发信人: cucme (说你说我), 信区: Linux
标 题: [修改]innbbsd patch of bbslink.c(3)
发信站: 紫 丁 香 (Sun Aug 22 21:42:11 1999), 转信
发信人: Leeym (NULL) 看板: installbbs
发信站: Sun Jun 29 20:55:41 1997
转信站: ACEBBS!
innbbsd version: 0.5-beta4-sob-version.
目前即使转信设定完全正确, 如果作者张贴後立即砍掉,
bbslink 还是会送出「有问题的 cancel message」 .
我的作法是建立一个 struct my_outgo_bntp,
在检查 out.bntp 送出文章的同时亦记录在 my_outgo_bntp 中,
而随後检查 cancel.bntp 若发现里面的记录有列在 my_outgo_bntp 中则放弃.
亦即作者张贴後立即砍掉, 张贴写入 out.bntp, 砍掉写入 cancel.bntp,
则在同一次 bbslink 送信的动作中会尝试送出张贴和砍信的讯号.
此张贴的讯号会因为无法开启原张贴的档案而中断不送出.
因此随後送出的 cancel message 就成为所谓「有问题的 cancel message」
改法如下:
bbslink.c
:
#define MAX_OUTGO_POST 100 /* bbslink 一次处理的转出最大文章数量 */
typedef struct my_out_bntp
{
char *board, *filename, *userid, *nickname, *subject;
} my_out_bntp;
struct my_out_bntp out_bntp[MAX_OUTGO_POST];
int outgo_post=0;
int
is_outgo_post(board, filename, userid, nickname, subject)
char *board, *filename, *userid, *nickname, *subject;
{
int mypost;
for (mypost = 0; mypost < outgo_post; mypost++)
{
if (!strcmp(out_bntp[mypost].filename, filename))
if (!strcmp(out_bntp[mypost].userid, userid))
if (!strcmp(out_bntp[mypost].board, board))
if (!strcmp(out_bntp[mypost].nickname, nickname))
if (!strcmp(out_bntp[mypost].subject, subject)){
if (Verbose)
printf("bad_cancel: %s, %s(%s), %s, %s\n",
board, userid, nickname, subject, filename);
bbslog("bad_cancel: %s, %s(%s), %s, %s\n",
board, userid, nickname, subject, filename);
return 1;
}
}
return 0;
}
/* 以上为新增 define 和 function */
:
bntplink()
{
:
if (!NoVisit)
{
sprintf(bbslink_lockfile, "%s/.bbslink.visit", INNDHOME);
if (!Rename(fileglue("%s/out.bntp", INNDHOME), OUTING) &&
bbslink_get_lock(bbslink_lockfile))
{
:
/* subject field */
subject = ptr;
/* ptr = strchr(ptr, '\t'); if (ptr == NULL) continue; ptr++ = '\0'; */
+ if(outgo_post < MAX_OUTGO_POST){
+ out_bntp[outgo_post].board = board;
+ out_bntp[outgo_post].filename = filename;
+ out_bntp[outgo_post].userid = userid;
+ out_bntp[outgo_post].nickname = nickname;
+ out_bntp[outgo_post].subject = subject;
+ outgo_post++;
+ }
process_article(board, filename, userid, nickname, subject);
}
:
sprintf(cancelpost, "%s/cancel.bntp", INNDHOME);
if (isfile(cancelpost))
{
FILE *CANCELFILE;
if (bbslink_get_lock(cancelpost) && bbslink_get_lock(cancelfile))
{
sprintf(cancelfile, "%s.%d", cancelpost, getpid());
Rename(cancelpost, cancelfile);
CANCELFILE = fopen(cancelfile, "r");
while (fgets(result, sizeof result, CANCELFILE) != NULL)
{
:
subject = ptr;
/* ptr = strchr(ptr, '\t'); if (ptr == NULL) continue; ptr++ = '\0'; */
+ if(!is_outgo_post(board, filename, userid, nickname, subject))
process_cancel(board, filename, userid, nickname, subject);
}
fclose(CANCELFILE);
if (Verbose)
printf("Unlinking %s\n", cancelfile);
--
国立成功大学土木工程学系 88 级 校园网路爱好社 CCNS 李彦明
mailto:leeym@sun.civil.ncku.edu.tw http://www.civil.ncku.edu.tw/~leeym
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.118.243.5]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.243毫秒