diff options
author | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-06-26 10:03:37 +0800 |
---|---|---|
committer | ptt <ptt@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-06-26 10:03:37 +0800 |
commit | 450ad26421aa1c38700dddc8899a3522e1cc5442 (patch) | |
tree | 92cd9e2cacca48bb627263c985b69f84037081d5 /mbbsd/merge.c | |
parent | 42d9500f4b43e6f6c5680d1a2fd5065164698d1f (diff) | |
download | pttbbs-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.c | 203 |
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); +} |