summaryrefslogtreecommitdiffstats
path: root/mbbsd/merge.c
diff options
context:
space:
mode:
authorptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-06-26 10:03:37 +0800
committerptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-06-26 10:03:37 +0800
commit450ad26421aa1c38700dddc8899a3522e1cc5442 (patch)
tree92cd9e2cacca48bb627263c985b69f84037081d5 /mbbsd/merge.c
parent42d9500f4b43e6f6c5680d1a2fd5065164698d1f (diff)
downloadpttbbs-ptt.fpg@2092.tar
pttbbs-ptt.fpg@2092.tar.gz
pttbbs-ptt.fpg@2092.tar.bz2
pttbbs-ptt.fpg@2092.tar.lz
pttbbs-ptt.fpg@2092.tar.xz
pttbbs-ptt.fpg@2092.tar.zst
pttbbs-ptt.fpg@2092.zip
Merge bbs merge moduleptt.fpg@2092
usage: make -D BBSMERGE to enable this module git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2091 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/merge.c')
-rw-r--r--mbbsd/merge.c203
1 files changed, 203 insertions, 0 deletions
diff --git a/mbbsd/merge.c b/mbbsd/merge.c
new file mode 100644
index 00000000..6a75328c
--- /dev/null
+++ b/mbbsd/merge.c
@@ -0,0 +1,203 @@
+/* $Id: merge.c 2060 2004-06-11 17:18:06Z Ptt $ */
+#define _XOPEN_SOURCE
+#define _ISOC99_SOURCE
+/* this is a interface provided when we merge BBS */
+#include "bbs.h"
+#include "fpg.h"
+
+int
+m_fpg()
+{
+ char genbuf[256], buf[256], userid[25], passbuf[24], msg[2048]="";
+ int count=0, i;
+ FILE *fp;
+ ACCT man;
+ time_t d;
+
+ clear();
+ move(1,0);
+
+ outs(
+ " �p����������,\n"
+ " ����骺�ϥΪ��ಾ�ӤH�겣�H�έ��n�H�θ��, �ɦ������w��������.\n"
+ " �p�G�z���ݭn, �Ъ�����[Enter]���}.\n"
+ " -----------------------------------------------------------------\n"
+ " �S�O�m�{:\n"
+ " ���F�b���w��,�z�u���s��T���K�X���~�����|,�Фp�߿�J.\n"
+ " �s��T�����~�z���ܨ��\\��N�|�Q�}�@��ê����q������.\n"
+ " �Ф��n�b�ܨ��L�{�������`�_�u, ��N�_�u�ܥb�~�H�������ϭ�.\n"
+ );
+
+
+ if(search_ulistn(usernum,2))
+ {vmsg("�еn�X��L����, �H�K�ܨ�����"); return 0;}
+ do
+ {
+ if(!getdata(10,0, " �p����ID [�^��j�p�g�n�������T]:", userid, 20,
+ DOECHO)) return 0;
+ if(bad_user_id(userid)) continue;
+ sprintf(genbuf, "/home/bbs/fpg/home/%c/%s.ACT",userid[0], userid);
+ if(!(fp=fopen(genbuf, "r")))
+ {
+ vmsg("�d�L���H�Τw�g�פJ�L..�Ъ`�N�j�p�g ");
+ continue;
+ }
+ count = fread(&man, sizeof(man), 1, fp);
+ fclose(fp);
+ }while(!count);
+ count = 0;
+ do{
+ getdata(11,0, " �p�����K�X:", passbuf, sizeof(passbuf),
+ NOECHO);
+ if(++count>=3)
+ {
+ cuser.userlevel |= PERM_VIOLATELAW;
+ cuser.vl_count++;
+ passwd_update(usernum, &cuser);
+ post_violatelaw(cuser.userid, "[PTTĵ��]", "���դp���b�����~�T��",
+ "�H�k�[��");
+ mail_violatelaw(cuser.userid, "[PTTĵ��]", "���դp���b�����~�T��",
+ "�H�k�[��");
+
+ return 0;
+ }
+ } while(!checkpasswd(man.passwd, passbuf));
+ if(!dashf(genbuf)) // avoid multi-login
+ {
+ vmsg("�d�L���H�Τw�g�פJ�L..�Ъ`�N�j�p�g ");
+ return 0;
+ }
+ sprintf(buf,"%s.done",genbuf);
+ rename(genbuf,buf);
+ move(12,0);
+ clrtobot();
+#ifdef MERGEMONEY
+ reload_money();
+ sprintf(buf,
+ "�z�������� %d ���⦨ Ptt ���� %d (�ײv 155:1), \n"
+ " �즳 %d �פJ��@�� %d\n",
+ man.money, man.money/155, cuser.money, cuser.money + man.money/155);
+ demoney(man.money/155);
+ strcat(msg, buf);
+#endif
+
+ i = cuser.exmailbox + man.mailk + man.keepmail;
+ if (i > 1000) i = 1000;
+ sprintf(buf, "�z�����H�c�� %d : %d, �즳 %d �פJ��@�� %d\n",
+ man.mailk, man.keepmail, cuser.exmailbox, cuser.exmailbox );
+ strcat(msg, buf);
+ cuser.exmailbox = i;
+
+ if(cuser.firstlogin > man.firstlogin) d = man.firstlogin;
+ else d = cuser.firstlogin;
+ sprintf(buf, "�����U��� %s ", Cdatedate(&(man.firstlogin)));
+ strcat(msg,buf);
+ sprintf(buf, "���b�����U��� %s �N�� ",Cdatedate(&(cuser.firstlogin)));
+ strcat(msg,buf);
+ sprintf(buf, "�N�� %s\n", Cdatedate(&d) );
+ strcat(msg,buf);
+ cuser.firstlogin = d;
+
+ if(cuser.numlogins < man.numlogins) i = man.numlogins;
+ else i = cuser.numlogins;
+
+ sprintf(buf, "���i������ %d ���b�� %d �N�� %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 ���b�� %d �N�� %d\n",
+ man.numposts,cuser.numposts,i);
+ strcat(msg,buf);
+ cuser.numposts = i;
+ outs(msg);
+ while(search_ulistn(usernum,2))
+ {vmsg("�бN���ФW����L�u����! �A�~��");}
+ passwd_update(usernum, &cuser);
+ sethomeman(genbuf, cuser.userid);
+ mkdir(genbuf, 0600);
+ sprintf(buf, "tar zxvf home/%c/%s.tgz>/dev/null",
+ userid[0], userid);
+ chdir("fpg");
+ system(buf);
+ chdir(BBSHOME);
+
+ if (getans("�O�_�פJ�ӤH�H�c? (Y/n)")!='n')
+ {
+ sethomedir(buf, cuser.userid);
+ sprintf(genbuf, "fpg/home/bbs/home/%c/%s/.DIR",
+ userid[0], userid);
+ merge_dir(buf, genbuf);
+ strcat(msg, "�פJ�ӤH�H�c\n");
+ }
+ if(getans("�O�_�פJ�ӤH�H�c��ذ�? (Y/n)")!='n')
+ {
+ sprintf(buf,
+ "mv fpg/home/bbs/home/%c/%s/man home/%c/%s/man",
+ userid[0], userid,
+ cuser.userid[0], cuser.userid);
+ system(buf);
+ strcat(msg, "�פJ�ӤH�H�c��ذ�\n");
+ }
+ if(getans("�O�_�פJ�n�ͦW��? (�|�л\\�{���]�w, ID�i��O���P�H)? (y/N)")=='y')
+ {
+ sethomefile(genbuf, cuser.userid, "overrides");
+ sprintf(buf, "fpg/home/bbs/home/%c/%s/overrides",userid[0],userid);
+ Copy(buf, genbuf);
+ strcat(buf, genbuf);
+ friend_load(FRIEND_OVERRIDE);
+ strcat(msg, "�פJ�n��������\n");
+ }
+ sprintf(buf, "�b���פJ���i %s -> %s ", userid, cuser.userid);
+ post_msg("Security", buf, msg, "[�t�Φw����]");
+ sprintf(buf, "fpg/home/bbs/home/%c/%s/PttID", userid[0],userid);
+ if((fp = fopen(buf, "w")))
+ {
+ fprintf(fp, "%s\n", cuser.userid);
+ fprintf(fp, "%s", msg);
+ fclose(fp);
+ }
+
+ vmsg("���߱z�����b���ܨ�..");
+ return 0;
+}
+
+void
+m_fpg_brd(char *bname, char *fromdir)
+{
+ char fbname[25], buf[256];
+ fileheader_t fh;
+
+ fromdir[0]=0;
+ do{
+
+ if(!getdata(20,0, "�p�����O�W [�^��j�p�g�n�������T]:", fbname, 20,
+ DOECHO)) return;
+ }
+ while(invalid_brdname(fbname));
+
+ sprintf(buf, "fpg/boards/%s.inf", fbname);
+ if(!dashf(buf))
+ {
+ vmsg("�L���ݪO");
+ return;
+ }
+ chdir("fpg");
+ sprintf(buf, "tar zxf boards/%s.tgz >/dev/null",fbname);
+ system(buf);
+ sprintf(buf, "tar zxf boards/%s.man.tgz >/dev/null", fbname);
+ system(buf);
+ chdir(BBSHOME);
+ sprintf(buf, "mv fpg/home/bbs/man/boards/%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, "fpg/home/bbs/boards/%s/.DIR", fbname);
+ vmsg("�Y�N�פJ %s �����..�����ݭn�@�I�ɶ�",fbname);
+}