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()); }
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); }
int more_web(char *fpath, int promptend) { char *ch; char genbuf[41]; if (ch = strstr(fpath, "mailto:")) { if (!HAS_PERM(PERM_LOGINOK)) { outmsg("[41m ±zªºÅv¤£¨¬µLªk¨Ï¥Îinternet mail... [m"); 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("[41m ¦¬«H¤Hemail ©Î ¼ÐÃD ¦³»~... [m"); } 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; } }