Example #1
0
int bbsnet_report(char *station, char *addr, long id, int mode)
{
    struct fileheader fh;
    char buf[1024];
    char fname[256];
    time_t now;
    FILE *fp;

    bzero(&fh, sizeof(fh));
    setbpath(buf, BBSNET_LOG_BOARD);
    GET_POSTFILENAME(fname, buf);
    strncpy(fh.filename, fname, sizeof(fh.filename)-1);
    fh.filename[sizeof(fh.filename)-1] = '\0';
    setbfile(fname, BBSNET_LOG_BOARD, fh.filename);
    now = time(NULL);
    strcpy(fh.owner, "deliver");
    fh.innflag[0] = 'L';
    fh.innflag[1] = 'L';
    if (mode == 0)
        snprintf(fh.title, ARTICLE_TITLE_LEN, "[%ld]%s穿梭到%s", id, user, station);
    else
        snprintf(fh.title, ARTICLE_TITLE_LEN, "[%ld]%s结束到%s的穿梭", id, user, station);

    if ((fp = fopen(fname, "w")) == NULL)
        return -1;
    fprintf(fp, "发信人: deliver (自动发信系统), 信区: %s\n", BBSNET_LOG_BOARD);
    fprintf(fp, "标  题: %s\n", fh.title);
    fprintf(fp, "发信站: %s (%24.24s)\n\n", BBS_FULL_NAME, ctime(&now));
    fprintf(fp, "    \033[1;33m%s\033[m 于 \033[1;37m%24.24s\033[m 利用本站bbsnet程序,\n",
            user, ctime(&now));
    if (mode == 0) {
        fprintf(fp, "    穿梭到 \033[1;32m%s\033[m 站, 地址为\033[1;31m%s\033[m.\n",
                station, addr);
    } else {
        int t;
        int h;
        fprintf(fp, "    结束到 \033[1;32m%s\033[m 站的穿梭, 地址为\033[1;31m%s\033[m.\n",
                station, addr);
        t = now - id;
        if (t < 2400)
            sprintf(buf, "\033[1;32m%d\033[m分钟", t/60);
        else {
            h = t / 2400;
            t -= h * 2400;
            sprintf(buf, "\033[1;32m%d\033[m小时\033[1;32m%d\033[m分钟", h, t/60);
        }
        fprintf(fp, "    本次穿梭一共用了 %s.\n", buf);
    }
    fprintf(fp, "    该用户从 \033[1;31m%s\033[m 登录本站.\n", getSession()->fromhost);
    fclose(fp);

    return after_post(NULL, &fh, BBSNET_LOG_BOARD, NULL, 0, getSession());
}
Example #2
0
void add_bbsboard(const board_t *pbt)
{
    struct boardheader newboard;
    char vbuf[PATHLEN], buf[PATHLEN];
    int bid;

    if (!pbt)
        return;
    memset(&newboard, 0, sizeof(newboard));
    strcpy(newboard.filename, pbt->name);
    strcpy(newboard.title, "0[待定]      版面中文名称待定");
    if (getbid(newboard.filename, NULL) > 0) {
        clean_ipc();
        error("%s: getbid error", newboard.filename);
    }
    strcpy(vbuf, "vote/");
    strcat(vbuf, newboard.filename);
    setbpath(buf, newboard.filename);
    /*
     * keep old files.
     * f_rm(buf);
     * f_rm(vbuf);
     */
    if (wrapped_mkdir(buf, 0755) == -1 || wrapped_mkdir(vbuf, 0755) == -1) {
        clean_ipc();
        error("%s: mkdir error", newboard.filename);
    }
    snprintf(newboard.ann_path, 127, "%s/%s", groups[0], newboard.filename);
    newboard.ann_path[127] = '\0';

    /* 默认权限 */
    newboard.level = PERM_SYSOP;

    if (pbt->type == X)
        newboard.level |= PERM_POSTMASK;
    else if (pbt->type == o)
        newboard.level = 0;

    if (add_board(&newboard) == -1) {
        clean_ipc();
        error("%s: add_board error", newboard.filename);
    }
    if ((bid = getbid(newboard.filename, NULL)) == 0) {
        clean_ipc();
        error("%s: getbid error", newboard.filename);
    }

    sprintf(buf, "add board %s", newboard.filename);
    bbslog("user", "%s", buf);
    usage(buf);
}
Example #3
0
File: more.c Project: yrchen/Athena
int
more_web(char *fpath, int promptend)
{
  char *ch;
  char genbuf[41];

  if (ch = strstr(fpath, "mailto:"))
  {
    if (!HAS_PERM(PERM_LOGINOK))
    {
      outmsg(" ±zªºÅv­­¤£¨¬µLªk¨Ï¥Îinternet mail... ");
      return 0;
    }
    if (!not_addr(&ch[7]) &&
	getdata(b_lines - 1, 0, "[±H«H]¥DÃD¡G", genbuf, 40, DOECHO, 0))
    {
      do_send(&ch[7], genbuf);
    }
    else
    {
      outmsg(" ¦¬«H¤Hemail ©Î ¼ÐÃD ¦³»~... ");
    }
    return 0;
  }
#if 0
  if (ch = strstr(fpath, "gopher://"))
  {
    ITEM item;
    strcpy(item.X.G.server, &ch[9]);
    strcpy(item.X.G.path, "1/");
    item.X.G.port = 70;
    gem(fpath, &item, 0);
    return 0;
  }
#endif
  /* wildcat : ¤ä´©ª½±µ¶i¤J¬ÝªO */
  if (ch = strstr(fpath, "board://"))
  {
    char bname[20], bpath[60], oldch[STRLEN];
    struct stat st;
    int mode0 = currutmp->mode;
    int stat0 = currstat;
    int pos;
    boardheader *bhdr, *getbcache();

    strcpy(oldch, ch);
    strcpy(bname, strtok(oldch + 8, "#"));
    setbpath(bpath, bname);
    if ((*bname == '\0') || (stat(bpath, &st) == -1))
    {
      pressanykey(err_bid);
      return RC_FULL;
    }

    if (bhdr = getbcache(bname))
    {
      if (Ben_Perm(bhdr) != 1)
      {
	pressanykey("§A¨S¦³¶i¤J¸ÓªOªºÅv­­");
	return 0;
      }
    }
    else
    {
      pressanykey("§A¨S¦³¶i¤J¸ÓªOªºÅv­­");
      return 0;
    }
    /* shakalaca.000123: ¤ä´©¬Ý¬Y¤@½g */
    if (ch = strstr(fpath, "#"))
    {
      fileheader fhdr;

      pos = atoi(ch + 1);
      setbdir(bpath, bname);
      rec_get(bpath, &fhdr, sizeof(fileheader), pos);
      setbfile(bpath, bname, fhdr.filename);
      more(bpath, 0);
    }
    else
    {
      /* shakalaca.000124: ¸Ñ¨M "¥¼Åª" °ÝÃD.. */
      brc_initial(bname);
      Read();
    }

    currutmp->mode = mode0;
    currstat = stat0;
    return 0;
  }
}