summaryrefslogtreecommitdiffstats
path: root/console/merge.c
diff options
context:
space:
mode:
Diffstat (limited to 'console/merge.c')
-rw-r--r--console/merge.c237
1 files changed, 237 insertions, 0 deletions
diff --git a/console/merge.c b/console/merge.c
new file mode 100644
index 00000000..913f94f5
--- /dev/null
+++ b/console/merge.c
@@ -0,0 +1,237 @@
+/* $Id$ */
+#define _XOPEN_SOURCE
+#define _ISOC99_SOURCE
+/* this is a interface provided when we merge BBS */
+#include "bbs.h"
+#include "fpg.h"
+
+int
+m_sob(void)
+{
+ char genbuf[256], buf[256], userid[25], passbuf[24], msg[2048]="";
+ int count=0, i, isimported=0, corrected;
+ FILE *fp;
+ sobuserec man;
+ time4_t d;
+
+ clear();
+ move(1,0);
+
+ outs(
+ " 請注意 這是只給陽光沙灘使用者!\n"
+ " 讓沙灘的使用者轉移個人資產以及重要信用資料, 享有平等安全的環境.\n"
+ " 如果您不需要, 請直離開.\n"
+ " -----------------------------------------------------------------\n"
+ " 特別叮嚀:\n"
+ " 為了帳號安全,您只有連續十次密碼錯誤的機會,請小心輸入.\n"
+ " 連續次錯誤您的變身功\能就會被開罰單並直接通知站長.\n"
+ " 請不要在變身過程中不正常斷線, 刻意斷線變半獸人站長不救唷.\n"
+ );
+
+ if(getkey("是否要繼續?(y/N)")!='y') return 0;
+ if(search_ulistn(usernum,2))
+ {vmsg("請登出其他視窗, 以免變身失敗"); return 0;}
+ do
+ {
+ if(!getdata(10,0, " 沙灘的ID [大小寫要完全正確]:", userid, 20,
+ DOECHO)) return 0;
+ if(bad_user_id(userid)) continue;
+ sprintf(genbuf, "sob/passwd/%c/%s.inf",userid[0], userid);
+ if(!(fp=fopen(genbuf, "r")))
+ {
+ isimported = 1;
+ strcat(genbuf, ".done");
+ if(!(fp=fopen(genbuf, "r")))
+ {
+ vmsg("查無此人或已經匯入過..請注意大小寫 ");
+ isimported = 0;
+ continue;
+ }
+ }
+ count = fread(&man, sizeof(man), 1, fp);
+ fclose(fp);
+ }while(!count);
+ count = 0;
+ do{
+ if(!getdata(11,0, " 沙灘的密碼:", passbuf, sizeof(passbuf),
+ NOECHO)) return 0;
+ if(++count>=10)
+ {
+ cuser.userlevel |= PERM_VIOLATELAW;
+ cuser.vl_count++;
+ passwd_update(usernum, &cuser);
+ post_violatelaw(cuser.userid, "[PTT警察]", "測試帳號錯誤十次",
+ "違法觀察");
+ mail_violatelaw(cuser.userid, "[PTT警察]", "測試帳號錯誤十次",
+ "違法觀察");
+
+ return 0;
+ }
+ if(!(corrected = checkpasswd(man.passwd, passbuf)))
+ vmsg("密碼錯誤");
+ } while(!corrected);
+ move(12,0);
+ clrtobot();
+
+ if(!isimported)
+ {
+ if(!dashf(genbuf)) // avoid multi-login
+ {
+ vmsg("請不要嘗試多重id踹匯入");
+ return 0;
+ }
+ sprintf(buf,"%s.done",genbuf);
+ rename(genbuf,buf);
+#ifdef MERGEMONEY
+
+ reload_money();
+
+ sprintf(buf,
+ "您的沙灘鸚鵡螺 %10d 換算成 " MONEYNAME " 幣為 %9d (匯率 22:1), \n"
+ " 沙灘貝殼有 %10d 換算為 " MONEYNAME " 幣為 %9d (匯率 222105:1), \n"
+ " 原有 %10d 匯入後共有 %d\n",
+ (int)man.goldmoney, (int)man.goldmoney/22,
+ (int)man.silvermoney, (int)man.silvermoney/222105,
+ cuser.money,
+ (int)(cuser.money + man.goldmoney/22 + man.silvermoney/222105));
+ demoney(man.goldmoney/22 + man.silvermoney/222105 );
+ strcat(msg, buf);
+#endif
+
+ i = cuser.exmailbox + man.exmailbox + man.exmailboxk/2000;
+ if (i > MAX_EXKEEPMAIL) i = MAX_EXKEEPMAIL;
+ sprintf(buf, "您的沙灘信箱有 %d (%dk), 原有 %d 匯入後共有 %d\n",
+ man.exmailbox, man.exmailboxk, cuser.exmailbox, i);
+ strcat(msg, buf);
+ cuser.exmailbox = i;
+
+ if(man.userlevel & PERM_MAILLIMIT)
+ {
+ sprintf(buf, "開啟信箱無上限\n");
+ strcat(msg, buf);
+ cuser.userlevel |= PERM_MAILLIMIT;
+ }
+
+ if (cuser.firstlogin > man.firstlogin)
+ d = man.firstlogin;
+ else
+ d = cuser.firstlogin;
+ cuser.firstlogin = d;
+
+ if (cuser.numlogins < man.numlogins)
+ i = man.numlogins;
+ else
+ i = cuser.numlogins;
+
+ sprintf(buf, "沙灘進站次數 %d 此帳號 %d 將取 %d \n", man.numlogins,
+ cuser.numlogins, i);
+ strcat(msg,buf);
+ cuser.numlogins = i;
+
+ if (cuser.numposts < man.numposts )
+ i = man.numposts;
+ else
+ i = cuser.numposts;
+ sprintf(buf, "沙灘文章次數 %d 此帳號 %d 將取 %d\n",
+ man.numposts,cuser.numposts,i);
+ strcat(msg,buf);
+ cuser.numposts = i;
+ outs(msg);
+ while (search_ulistn(usernum,2))
+ {vmsg("請將重覆上站其他線關閉! 再繼續");}
+ passwd_update(usernum, &cuser);
+ }
+ sethomeman(genbuf, cuser.userid);
+ mkdir(genbuf, 0600);
+ sprintf(buf, "tar zxvf %c/%s.tar.gz>/dev/null",
+ userid[0], userid);
+ chdir("sob/home");
+ system(buf);
+ chdir(BBSHOME);
+
+ if (getans("是否匯入個人信箱? (Y/n)")!='n')
+ {
+ sethomedir(buf, cuser.userid);
+ sprintf(genbuf, "sob/home/%c/%s/.DIR",
+ userid[0], userid);
+ merge_dir(buf, genbuf, 1);
+ strcat(msg, "匯入個人信箱\n");
+ }
+ if(getans("是否匯入個人信箱精華區(個人作品集)? (會覆蓋\現有設定) (y/N)")=='y')
+ {
+ fileheader_t fh;
+ sprintf(buf,
+ "rm -rd home/%c/%s/man>/dev/null ; "
+ "mv sob/home/%c/%s/man home/%c/%s>/dev/null;"
+ "mv sob/home/%c/%s/gem home/%c/%s/man>/dev/null",
+ cuser.userid[0], cuser.userid,
+ userid[0], userid,
+ cuser.userid[0], cuser.userid,
+ userid[0], userid,
+ cuser.userid[0], cuser.userid);
+ system(buf);
+ strcat(msg, "匯入個人信箱精華區(個人作品集)\n");
+ sprintf(buf,"home/%c/%s/man/gem", cuser.userid[0], cuser.userid);
+ if(dashd(buf))
+ {
+ strcat(fh.title, "◆ 個人作品集");
+ strcat(fh.filename, "gem");
+ sprintf(fh.owner, cuser.userid);
+ sprintf(buf, "home/%c/%s/man/.DIR", cuser.userid[0], cuser.userid);
+ append_record(buf, &fh, sizeof(fh));
+ }
+ }
+ if(getans("是否匯入好友名單? (會覆蓋\現有設定, ID可能是不同人)? (y/N)")=='y')
+ {
+ sethomefile(genbuf, cuser.userid, "overrides");
+ sprintf(buf, "sob/home/%c/%s/overrides",userid[0],userid);
+ Copy(buf, genbuf);
+ strcat(buf, genbuf);
+ friend_load(FRIEND_OVERRIDE);
+ strcat(msg, "匯入好友名單\n");
+ }
+ sprintf(buf, "帳號匯入報告 %s -> %s ", userid, cuser.userid);
+ post_msg(GLOBAL_SECURITY, buf, msg, "[系統安全局]");
+
+ vmsg("恭喜您完成帳號變身..");
+ return 0;
+}
+
+void
+m_sob_brd(char *bname, char *fromdir)
+{
+ char fbname[25], buf[256];
+ fileheader_t fh;
+
+ fromdir[0]=0;
+ do{
+
+ if(!getdata(20,0, "SOB的板名 [英文大小寫要完全正確]:", fbname, 20,
+ DOECHO)) return;
+ }
+ while((invalid_brdname(fbname)&1));
+
+ sprintf(buf, "sob/man/%s.tar.gz", fbname);
+ if(!dashf(buf))
+ {
+ vmsg("無此看板");
+ return;
+ }
+ chdir(BBSHOME"/sob/boards");
+ sprintf(buf, "tar zxf %s.tar.gz >/dev/null",fbname);
+ system(buf);
+ chdir(BBSHOME"/sob/man");
+ sprintf(buf, "tar zxf %s.tar.gz >/dev/null", fbname);
+ system(buf);
+ chdir(BBSHOME);
+ sprintf(buf, "mv sob/man/%s man/boards/%c/%s", fbname,
+ bname[0], bname);
+ system(buf);
+ sprintf(fh.title, "◆ %s 精華區", fbname);
+ sprintf(fh.filename, fbname);
+ sprintf(fh.owner, cuser.userid);
+ sprintf(buf, "man/boards/%c/%s/.DIR", bname[0], bname);
+ append_record(buf, &fh, sizeof(fh));
+ sprintf(fromdir, "sob/boards/%s/.DIR", fbname);
+ vmsgf("即將匯入 %s 板資料..按鍵後需要一點時間",fbname);
+}