diff options
Diffstat (limited to 'mbbsd/mail.c')
-rw-r--r-- | mbbsd/mail.c | 129 |
1 files changed, 60 insertions, 69 deletions
diff --git a/mbbsd/mail.c b/mbbsd/mail.c index 85f4c142..60f52e2b 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -12,7 +12,7 @@ setforward() char buf[80], ip[50] = "", yn[4]; FILE *fp; - sethomepath(buf, cuser.userid); + sethomepath(buf, cuser->userid); strcat(buf, "/.forward"); if ((fp = fopen(buf, "r"))) { fscanf(fp, "%s", ip); // XXX check buffer size @@ -58,7 +58,7 @@ built_mail_index() snprintf(genbuf, sizeof(genbuf), BBSHOME "/bin/buildir " BBSHOME "/home/%c/%s", - cuser.userid[0], cuser.userid); + cuser->userid[0], cuser->userid); move(22, 0); prints("\033[1;31m已經處理完畢!! 諸多不便 敬請原諒~\033[m"); pressanykey(); @@ -85,7 +85,7 @@ mailalert(char *userid) int mail_muser(userec_t muser, char *title, char *filename) { - return mail_id(muser.userid, title, filename, cuser.userid); + return mail_id(muser.userid, title, filename, cuser->userid); } /* Heat: 用id來寄信,內容則link準備好的檔案 */ @@ -140,7 +140,7 @@ m_internet() void m_init() { - sethomedir(currmaildir, cuser.userid); + sethomedir(currmaildir, cuser->userid); } int @@ -159,8 +159,8 @@ chkmailbox() mailsumlimit = 200; else mailsumlimit = 50; - mailsumlimit += cuser.exmailbox * 10; - mailmaxkeep = max_keepmail + cuser.exmailbox; + mailsumlimit += cuser->exmailbox * 10; + mailmaxkeep = max_keepmail + cuser->exmailbox; m_init(); if ((mailkeep = get_num_records(currmaildir, sizeof(fileheader_t))) > mailmaxkeep) { @@ -224,7 +224,7 @@ hold_mail(char *fpath, char *receiver) buf, sizeof(buf), LCECHO); if (buf[0] == 'y') - do_hold_mail(fpath, receiver, cuser.userid); + do_hold_mail(fpath, receiver, cuser->userid); } int @@ -289,7 +289,7 @@ do_send(char *userid, char *title) strlcpy(receiver, userid, sizeof(receiver)); sethomepath(genbuf, userid); stampfile(genbuf, &mhdr); - strlcpy(mhdr.owner, cuser.userid, sizeof(mhdr.owner)); + strlcpy(mhdr.owner, cuser->userid, sizeof(mhdr.owner)); strncpy(mhdr.title, save_title, TTLEN); if (vedit(genbuf, YEA, NULL) == -1) { unlink(genbuf); @@ -298,10 +298,10 @@ do_send(char *userid, char *title) } clear(); sethomefile(fpath, userid, FN_OVERRIDES); - i = belong(fpath, cuser.userid); + i = belong(fpath, cuser->userid); sethomefile(fpath, userid, FN_REJECT); - if (i || !belong(fpath, cuser.userid)) {/* Ptt: 用belong有點討厭 */ + if (i || !belong(fpath, cuser->userid)) {/* Ptt: 用belong有點討厭 */ sethomedir(fpath, userid); if (append_record_forward(fpath, &mhdr, sizeof(mhdr)) == -1) return -1; @@ -447,7 +447,7 @@ multi_send(char *title) strtok(ptr = genbuf + 3, " \n\r"); do { if (searchuser(ptr) && !InNameList(ptr) && - strcmp(cuser.userid, ptr)) { + strcmp(cuser->userid, ptr)) { AddNameList(ptr); reciper++; } @@ -525,7 +525,7 @@ multi_send(char *title) unlink(genbuf); Link(fpath, genbuf); - strlcpy(mymail.owner, cuser.userid, sizeof(mymail.owner)); + strlcpy(mymail.owner, cuser->userid, sizeof(mymail.owner)); strlcpy(mymail.title, save_title, sizeof(mymail.title)); mymail.filemode |= FILE_MULTI; /* multi-send flag */ sethomedir(genbuf, p->word); @@ -602,17 +602,17 @@ mail_all() setutmpmode(MAILALL); stand_title("寄信中..."); - sethomepath(genbuf, cuser.userid); + sethomepath(genbuf, cuser->userid); stampfile(genbuf, &mymail); unlink(genbuf); Link(fpath, genbuf); unlink(fpath); strcpy(fpath, genbuf); - strlcpy(mymail.owner, cuser.userid, sizeof(mymail.owner)); /* 站長 ID */ + strlcpy(mymail.owner, cuser->userid, sizeof(mymail.owner)); /* 站長 ID */ strlcpy(mymail.title, save_title, sizeof(mymail.title)); - sethomedir(genbuf, cuser.userid); + sethomedir(genbuf, cuser->userid); if (append_record_forward(genbuf, &mymail, sizeof(mymail)) == -1) outs(err_uid); @@ -622,13 +622,13 @@ mail_all() userid = SHM->userid[i]; if (strcmp(userid, STR_GUEST) && strcmp(userid, "new") && - strcmp(userid, cuser.userid)) { + strcmp(userid, cuser->userid)) { sethomepath(genbuf, userid); stampfile(genbuf, &mymail); unlink(genbuf); Link(fpath, genbuf); - strlcpy(mymail.owner, cuser.userid, sizeof(mymail.owner)); + strlcpy(mymail.owner, cuser->userid, sizeof(mymail.owner)); strlcpy(mymail.title, save_title, sizeof(mymail.title)); /* mymail.filemode |= FILE_MARKED; Ptt 公告改成不會mark */ sethomedir(genbuf, userid); @@ -649,8 +649,8 @@ mail_mbox() char cmd[100]; fileheader_t fhdr; - snprintf(cmd, sizeof(cmd), "/tmp/%s.uu", cuser.userid); - snprintf(fhdr.title, sizeof(fhdr.title), "%s 私人資料", cuser.userid); + snprintf(cmd, sizeof(cmd), "/tmp/%s.uu", cuser->userid); + snprintf(fhdr.title, sizeof(fhdr.title), "%s 私人資料", cuser->userid); doforward(cmd, &fhdr, 'Z'); return 0; } @@ -851,12 +851,6 @@ maildoent(int num, fileheader_t * ent) ent->date, ent->owner, color, mark, title); } -static int -m_idle(int ent, fileheader_t * fhdr, char *direct) -{ - t_idle(); - return FULLUPDATE; -} static int mail_del(int ent, fileheader_t * fhdr, char *direct) @@ -874,14 +868,14 @@ mail_del(int ent, fileheader_t * fhdr, char *direct) unlink(genbuf); if ((currmode & MODE_SELECT)) { int index; - sethomedir(genbuf, cuser.userid); + sethomedir(genbuf, cuser->userid); index = getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); delete_record(genbuf, sizeof(fileheader_t), index); } return DIRCHANGED; } } - return FULLUPDATE; + return TITLE_REDRAW; } static int @@ -1032,7 +1026,7 @@ mail_edit(int ent, fileheader_t * fhdr, char *direct) char genbuf[200]; if (!HAS_PERM(PERM_SYSOP) && - strcmp(cuser.userid, fhdr->owner) && + strcmp(cuser->userid, fhdr->owner) && strcmp("[備.忘.錄]", fhdr->owner)) return DONOTHING; @@ -1044,9 +1038,9 @@ mail_edit(int ent, fileheader_t * fhdr, char *direct) static int mail_nooutmail(int ent, fileheader_t * fhdr, char *direct) { - cuser.userlevel ^= PERM_NOOUTMAIL; - passwd_update(usernum, &cuser); - return FULLUPDATE; + cuser->userlevel ^= PERM_NOOUTMAIL; + passwd_update(usernum, cuser); + return TITLE_REDRAW; } @@ -1111,8 +1105,6 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct) move(2, 0); clrtoeol(); - move(3, 0); - clrtoeol(); move(1, 0); generalnamecomplete("轉錄本文章於看板:", xboard, sizeof(xboard), SHM->Bnumber, @@ -1120,10 +1112,10 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct) completeboard_permission, completeboard_getname); if (*xboard == '\0' || !haspostperm(xboard)) - return FULLUPDATE; + return TITLE_REDRAW; ent = 1; - if (HAS_PERM(PERM_SYSOP) || !strcmp(fhdr->owner, cuser.userid)) { + if (HAS_PERM(PERM_SYSOP) || !strcmp(fhdr->owner, cuser->userid)) { getdata(2, 0, "(1)原文轉載 (2)舊轉錄格式?[1] ", genbuf, 3, DOECHO); if (genbuf[0] != '2') { @@ -1154,7 +1146,7 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct) if (author) strlcpy(xfile.owner, fhdr->owner, sizeof(xfile.owner)); else - strlcpy(xfile.owner, cuser.userid, sizeof(xfile.owner)); + strlcpy(xfile.owner, cuser->userid, sizeof(xfile.owner)); strlcpy(xfile.title, xtitle, sizeof(xfile.title)); if (genbuf[0] == 'l') { xfile.filemode = FILE_LOCAL; @@ -1170,7 +1162,7 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct) write_header(xptr); strlcpy(currboard, xfpath, sizeof(currboard)); - fprintf(xptr, "※ [本文轉錄自 %s 信箱]\n\n", cuser.userid); + fprintf(xptr, "※ [本文轉錄自 %s 信箱]\n\n", cuser->userid); b_suckinfile(xptr, fname); addsignature(xptr, 0); @@ -1185,9 +1177,8 @@ mail_cross_post(int ent, fileheader_t * fhdr, char *direct) setbtotal(getbnum(xboard)); if (!xfile.filemode) outgo_post(&xfile, xboard); - cuser.numposts++; - passwd_update(usernum, &cuser); - outs("文章轉錄完成"); + cuser->numposts++; + outmsg("文章轉錄完成"); pressanykey(); currmode = currmode0; } @@ -1202,8 +1193,8 @@ mail_man() int mode0 = currutmp->mode; int stat0 = currstat; - sethomeman(buf, cuser.userid); - snprintf(buf1, sizeof(buf1), "%s 的信件夾", cuser.userid); + sethomeman(buf, cuser->userid); + snprintf(buf1, sizeof(buf1), "%s 的信件夾", cuser->userid); a_menu(buf1, buf, 1); currutmp->mode = mode0; currstat = stat0; @@ -1227,7 +1218,7 @@ mail_cite(int ent, fileheader_t * fhdr, char *direct) title[TTLEN] = '\0'; a_copyitem(fpath, title, 0, 1); - if (cuser.userlevel >= PERM_BM) { + if (cuser->userlevel >= PERM_BM) { move(2, 0); clrtoeol(); move(3, 0); @@ -1269,8 +1260,8 @@ mail_save(int ent, fileheader_t * fhdr, char *direct) strncpy(title + 3, fhdr->title, TTLEN - 3); title[TTLEN] = '\0'; a_copyitem(fpath, title, fhdr->owner, 1); - sethomeman(fpath, cuser.userid); - a_menu(cuser.userid, fpath, 1); + sethomeman(fpath, cuser->userid); + a_menu(cuser->userid, fpath, 1); return FULLUPDATE; } return DONOTHING; @@ -1289,7 +1280,7 @@ mail_waterball(int ent, fileheader_t * fhdr, char *direct) return 1; } if (!address[0]) - strlcpy(address, cuser.email, sizeof(address)); + strlcpy(address, cuser->email, sizeof(address)); move(b_lines - 8, 0); outs("水球整理程式:\n" "系統將會按照和不同人丟的水球各自獨立\n" @@ -1337,16 +1328,16 @@ mail_waterball(int ent, fileheader_t * fhdr, char *direct) cmode = (fname[0] != '0' && fname[0] != '1') ? 1 : fname[0] - '0'; snprintf(fname, sizeof(fname), BBSHOME "/jobspool/water.src.%s-%d", - cuser.userid, (int)now); + cuser->userid, (int)now); snprintf(genbuf, sizeof(genbuf), "cp " BBSHOME "/home/%c/%s/%s %s", - cuser.userid[0], cuser.userid, fhdr->filename, fname); + cuser->userid[0], cuser->userid, fhdr->filename, fname); system(genbuf); /* dirty code ;x */ snprintf(fname, sizeof(fname), BBSHOME "/jobspool/water.des.%s-%d", - cuser.userid, (int)now); + cuser->userid, (int)now); fp = fopen(fname, "wt"); assert(fp); - fprintf(fp, "%s\n%s\n%d\n", cuser.userid, address, cmode); + fprintf(fp, "%s\n%s\n%d\n", cuser->userid, address, cmode); fclose(fp); vmsg("設定完成, 系統將在下一個整點(尖峰時段除外)將資料寄給您"); return FULLUPDATE; @@ -1361,7 +1352,7 @@ static onekey_t mail_comms[] = { NULL, // Ctrl('F') built_mail_index, // Ctrl('G') NULL, // Ctrl('H') - m_idle, // Ctrl('I') KEY_TAB 9 + NULL, // Ctrl('I') NULL, // Ctrl('J') NULL, // Ctrl('K') NULL, // Ctrl('L') @@ -1454,7 +1445,7 @@ m_read() i_read(RMAIL, currmaildir, mailtitle, maildoent, mail_comms, -1); currbid = back_bid; curredit = 0; - currutmp->mailalert = load_mailalert(cuser.userid); + currutmp->mailalert = load_mailalert(cuser->userid); return 0; } else { outs("您沒有來信"); @@ -1473,11 +1464,11 @@ send_inner_mail(char *fpath, char *title, char *receiver) return -2; sethomepath(genbuf, receiver); stampfile(genbuf, &mymail); - if (!strcmp(receiver, cuser.userid)) { + if (!strcmp(receiver, cuser->userid)) { strlcpy(mymail.owner, "[" BBSNAME "]", sizeof(mymail.owner)); mymail.filemode = FILE_READ; } else - strlcpy(mymail.owner, cuser.userid, sizeof(mymail.owner)); + strlcpy(mymail.owner, cuser->userid, sizeof(mymail.owner)); strncpy(mymail.title, title, TTLEN); unlink(genbuf); Link(fpath, genbuf); @@ -1521,7 +1512,7 @@ bbs_sendmail(char *fpath, char *title, char *receiver) } else { snprintf(genbuf, sizeof(genbuf), "/usr/sbin/sendmail -f %s%s %s > /dev/null", - cuser.userid, str_mail_address, receiver); + cuser->userid, str_mail_address, receiver); fin = fopen(fpath, "r"); } fout = popen(genbuf, "w"); @@ -1530,9 +1521,9 @@ bbs_sendmail(char *fpath, char *title, char *receiver) if (fpath) fprintf(fout, "Reply-To: %s%s\nFrom: %s <%s%s>\n", - cuser.userid, str_mail_address, - cuser.username, - cuser.userid, str_mail_address); + cuser->userid, str_mail_address, + cuser->username, + cuser->userid, str_mail_address); fprintf(fout,"To: %s\nSubject: %s\n" "Mime-Version: 1.0\r\n" "Content-Type: text/plain; charset=\"big5\"\r\n" @@ -1593,8 +1584,8 @@ bsmtp(char *fpath, char *title, char *rcpt, int method) /* setup mail queue */ mqueue.mailtime = chrono; mqueue.method = method; - strlcpy(mqueue.sender, cuser.userid, sizeof(mqueue.sender)); - strlcpy(mqueue.username, cuser.username, sizeof(mqueue.username)); + strlcpy(mqueue.sender, cuser->userid, sizeof(mqueue.sender)); + strlcpy(mqueue.username, cuser->username, sizeof(mqueue.username)); strlcpy(mqueue.rcpt, rcpt, sizeof(mqueue.rcpt)); if (append_record("out/.DIR", (fileheader_t *) & mqueue, sizeof(mqueue)) < 0) return 0; @@ -1611,17 +1602,17 @@ doforward(char *direct, fileheader_t * fh, int mode) char genbuf[200]; if (!address[0]) - strlcpy(address, cuser.email, sizeof(address)); + strlcpy(address, cuser->email, sizeof(address)); if( mode == 'U' ){ - move(b_lines - 2, 0); + move(b_lines, 0); prints("將進行 uuencode 。若您不清楚什麼是 uuencode 請改用 F轉寄。"); } if (address[0]) { snprintf(genbuf, sizeof(genbuf), "確定轉寄給 [%s] 嗎(Y/N/Q)?[Y] ", address); - getdata(b_lines - 1, 0, genbuf, fname, 3, LCECHO); + getdata(b_lines, 0, genbuf, fname, 3, LCECHO); if (fname[0] == 'q') { outmsg("取消轉寄"); @@ -1650,7 +1641,7 @@ doforward(char *direct, fileheader_t * fh, int mode) snprintf(fname, sizeof(fname), "正轉寄給 %s, 請稍候...", address); outmsg(fname); - move(b_lines - 1, 0); + move(b_lines, 0); refresh(); /* 追蹤使用者 */ @@ -1658,7 +1649,7 @@ doforward(char *direct, fileheader_t * fh, int mode) char msg[200]; snprintf(msg, sizeof(msg), "%s mailforward to %s at %s", - cuser.userid, address, Cdate(&now)); + cuser->userid, address, Cdate(&now)); log_user(msg); } if (mode == 'Z') { @@ -1666,13 +1657,13 @@ doforward(char *direct, fileheader_t * fh, int mode) TAR_PATH " cfz /tmp/home.%s.tgz home/%c/%s; " MUTT_PATH " -a /tmp/home.%s.tgz -s 'home.%s.tgz' '%s' </dev/null;" "rm /tmp/home.%s.tgz", - cuser.userid, cuser.userid[0], cuser.userid, - cuser.userid, cuser.userid, address, cuser.userid); + cuser->userid, cuser->userid[0], cuser->userid, + cuser->userid, cuser->userid, address, cuser->userid); system(fname); return 0; snprintf(fname, sizeof(fname), TAR_PATH " cfz - home/%c/%s | " "/usr/bin/uuencode %s.tgz > %s", - cuser.userid[0], cuser.userid, cuser.userid, direct); + cuser->userid[0], cuser->userid, cuser->userid, direct); system(fname); strlcpy(fname, direct, sizeof(fname)); } else if (mode == 'U') { @@ -1748,7 +1739,7 @@ mail_justify(userec_t muser) sethomepath(buf1, muser.userid); stampfile(buf1, &mhdr); unlink(buf1); - strlcpy(mhdr.owner, cuser.userid, sizeof(mhdr.owner)); + strlcpy(mhdr.owner, cuser->userid, sizeof(mhdr.owner)); strncpy(mhdr.title, "[審核通過]", TTLEN); mhdr.filemode = 0; |