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毫秒