回精華區
作者itoc, 信區: itoc
標題[修正] bmtad.c 寄信給精華區
時間04/01/14
作者: itoc (League) 看板: plan
標題: [修正] bmtad.c 寄信給精華區
時間: 2004/01/14 Wed 11:04:38                           Updated: 2004/01/14

  直接寄信到精華區收錄
  (這很暴力的,什麼來源都不檢查的 :p)

: bmtad.c:bbs_gem() 新增在 bbs_brd() 後面

static int
bbs_gem(ap, data, brdname)      /* itoc.030323: 寄信給精華區 */
  Agent *ap;
  char *data;
  char *brdname;
{
  HDR hdr;
  int fd, method, sno;
  FILE *fp;
  char folder[80], buf[256], from[256], *author, *fpath, *title;

  fp = flog;
  sno = ap->sno;

  sprintf(folder, "gem/brd/%s/%s", brdname, FN_DIR);

  /* allocate a file for the new post */

  fpath = ap->fpath;
  method = *fpath ? HDR_LINK | 'A' : 'A';
  if ((fd = hdr_stamp(folder, method, &hdr, fpath)) < 0)
  {
    fprintf(fp, "MAIL-\t[%d] <%s> stamp error\n", sno, brdname);
    return -2;
  }

  author = ap->addr;
  title = ap->nick;
  sprintf(ap->memo, "%s -> %s", author, brdname);

  if (*title)
    sprintf(from, "%s (%s)", author, title);
  else
    strcpy(from, author);

  title = ap->title;
  if (method == 'A')
  {
    if (!*title)
      sprintf(title, "來自 %.64s", author);

    sprintf(buf, "發信人: %.50s 看板: %s\n標  題: %.72s\n發信站: %s\n\n",
      from, brdname, title, Btime(&hdr.chrono));

    write(fd, buf, strlen(buf));
    write(fd, data, ap->data + ap->used - data);
    close(fd);
  }

  hdr.xmode = 0;
  str_ncpy(hdr.owner, author, sizeof(hdr.owner));
  str_ncpy(hdr.title, title, sizeof(hdr.title));
  rec_add(folder, &hdr, sizeof(HDR));

  fprintf(fp, "%d\t%s\t%s\t%s/%s\n", sno, author, title, brdname, hdr.xname);
  ap->xrcpt++;
  ap->xdata += ap->used;

  mta_memo(ap, 0);
  return 0;
}

: bmtad.c:is_rcpt()

    else if (!str_cmp(str, ".brd"))
    {
      *str = '\0';
      if (getbrdname(rcpt))
      {
        *letter = 0;
        return 0;
      }
    }
+   else if (!str_cmp(str, ".gem"))
+   {
+     *str = '\0';
+     if (getbrdname(rcpt))
+     {
+       *letter = 2;
+       return 0;
+     }
+   }

: bmtad.c:mta_mailer()

    do
    {
      str = rcpt->userid;
-     if (ap->letter)
-       bbs_mail(ap, data, str);
-     else
-       bbs_brd(ap, data, str);
+     if (ap->letter == 0)
+       bbs_brd(ap, data, str);
+     else if (ap->letter == 1)
+       bbs_mail(ap, data, str);
+     else if (ap->letter == 2)
+       bbs_gem(ap, data, str);
    } while (rcpt = rcpt->rnext);


--
□ 本文章由 itocitoc.Dorm11.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻