int uinfo_query(struct userec *u, int real, int unum) { struct userec newinfo; char ans[3], buf[STRLEN], genbuf[128]; char src[STRLEN], dst[STRLEN]; int i, fail = 0 ; #ifdef MAILCHANGED int netty_check = 0; #endif time_t now; struct tm *tmnow; memcpy(&newinfo, u, sizeof(currentuser)); getdata(t_lines - 1, 0, real ? "��ѡ�� (0)���� (1)������ (2)�趨���� (3) �� ID ==> [0]" : "��ѡ�� (0)���� (1)������ (2)�趨���� (3) ѡǩ���� ==> [0]", ans, 2, DOECHO, YEA); clear(); refresh(); now = time(0); tmnow = localtime(&now); i = 3; move(i++, 0); if (ans[0] != '3' || real) prints("ʹ���ߴ���: %s\n", u->userid); switch (ans[0]) { case '1': move(1, 0); prints("��������,ֱ�Ӱ� <ENTER> ����ʹ�� [] �ڵ����ϡ�\n"); sprintf(genbuf, "�dz� [%s]: ", u->username); getdata(i++, 0, genbuf, buf, NAMELEN, DOECHO, YEA); if (buf[0]) strncpy(newinfo.username, buf, NAMELEN); sprintf(genbuf, "��ʵ���� [%s]: ", u->realname); getdata(i++, 0, genbuf, buf, NAMELEN, DOECHO, YEA); if (buf[0]) strncpy(newinfo.realname, buf, NAMELEN); sprintf(genbuf, "��ס��ַ [%s]: ", u->address); getdata(i++, 0, genbuf, buf, STRLEN - 10, DOECHO, YEA); if (buf[0]) strncpy(newinfo.address, buf, NAMELEN); sprintf(genbuf, "�������� [%s]: ", u->email); getdata(i++, 0, genbuf, buf, 48, DOECHO, YEA); if (buf[0]) { #ifdef MAILCHECK #ifdef MAILCHANGED if(u->uid == usernum) netty_check = 1; #endif #endif strncpy(newinfo.email, buf, 48); } sprintf(genbuf, "�ն˻���̬ [%s]: ", u->termtype); getdata(i++, 0, genbuf, buf, 16, DOECHO, YEA); if (buf[0]) strncpy(newinfo.termtype, buf, 16); sprintf(genbuf, "������ [%d]: ", u->birthyear + 1900); getdata(i++, 0, genbuf, buf, 5, DOECHO, YEA); if ( buf[0] && atoi(buf) > 1920 && atoi(buf) < 1998) newinfo.birthyear = atoi(buf) - 1900; sprintf(genbuf, "������ [%d]: ", u->birthmonth); getdata(i++, 0, genbuf, buf, 3, DOECHO, YEA); if (buf[0] && atoi(buf) >= 1 && atoi(buf) <= 12) newinfo.birthmonth = atoi(buf); sprintf(genbuf, "������ [%d]: ", u->birthday); getdata(i++, 0, genbuf, buf, 3, DOECHO, YEA); if (buf[0] && atoi(buf) >= 1 && atoi(buf) <= 31) newinfo.birthday = atoi(buf); sprintf(genbuf, "�Ա�(M.��)(F.Ů) [%c]: ", u->gender); getdata(i++, 0, genbuf, buf, 2, DOECHO, YEA); if (buf[0]) { if (strchr("MmFf", buf[0])) newinfo.gender = toupper(buf[0]); } if (real) uinfo_change1(i,u,&newinfo); break; case '2': if (!real) { getdata(i++, 0, "������ԭ����: ", buf, PASSLEN, NOECHO, YEA); if (*buf == '\0' || !checkpasswd(u->passwd, buf)) { prints("\n\n�ܱ�Ǹ, ����������벻��ȷ��\n"); fail++; break; } } getdata(i++, 0, "���趨������: ", buf, PASSLEN, NOECHO, YEA); if (buf[0] == '\0') { prints("\n\n�����趨ȡ��, ����ʹ�þ�����\n"); fail++; break; } strncpy(genbuf, buf, PASSLEN); getdata(i++, 0, "����������������: ", buf, PASSLEN, NOECHO, YEA); if (strncmp(buf, genbuf, PASSLEN)) { prints("\n\n������ȷ��ʧ��, ���趨�����롣\n"); fail++; break; } buf[8] = '\0'; strncpy(newinfo.passwd, genpasswd(buf), ENCPASSLEN); break; case '3': if (!real) { sprintf(genbuf, "Ŀǰʹ��ǩ���� [%d]: ", u->signature); getdata(i++, 0, genbuf, buf, 16, DOECHO, YEA); if (atoi(buf) > 0) newinfo.signature = atoi(buf); } else { struct user_info uin; extern int t_cmpuids(); if(t_search_ulist(&uin, t_cmpuids, unum, NA, NA)!=0) { prints("\n�Բ��𣬸��û�Ŀǰ�������ϡ�"); fail++; } else if(!strcmp(lookupuser.userid,"SYSOP")) { prints("\n�Բ����㲻������ SYSOP �� ID��"); fail++; } else { getdata(i++,0,"�µ�ʹ���ߴ���: ",genbuf,IDLEN+1,DOECHO, YEA); if (*genbuf != '\0') { if (getuser(genbuf)) { prints("\n�Բ���! �Ѿ���ͬ�� ID ��ʹ����\n"); fail++; } else { strncpy(newinfo.userid, genbuf, IDLEN + 2); } } else fail ++; } } break; default: clear(); return 0; } if (fail != 0) { pressreturn(); clear(); return 0; } if (askyn("ȷ��Ҫ�ı���", NA, YEA) == YEA) { if (real) { char secu[STRLEN]; sprintf(secu, "�� %s �Ļ������ϻ����롣", u->userid); securityreport1(secu); } if (strcmp(u->userid, newinfo.userid)) { sprintf(src, "mail/%c/%s", toupper(u->userid[0]), u->userid); sprintf(dst, "mail/%c/%s", toupper(newinfo.userid[0]), newinfo.userid); rename(src, dst); sethomepath(src, u->userid); sethomepath(dst, newinfo.userid); rename(src, dst); sethomefile(src, u->userid, "register"); unlink(src); sethomefile(src, u->userid, "register.old"); unlink(src); setuserid(unum, newinfo.userid); } if(!strcmp(u->userid, currentuser.userid)) { extern int WishNum; strncpy(uinfo.username,newinfo.username,NAMELEN); WishNum = 9999; } #ifdef MAILCHECK #ifdef MAILCHANGED if ((netty_check == 1)&&!HAS_PERM(PERM_SYSOP)) { sprintf(genbuf, "%s", BBSHOST); if ( (!strstr(newinfo.email, genbuf)) && (!invalidaddr(newinfo.email)) && (!invalid_email(newinfo.email))) { strcpy(u->email, newinfo.email); send_regmail(u); } else { move(t_lines - 5, 0); prints("\n������ĵ����ʼ���ַ ��[1;33m%s[m��\n",newinfo.email); prints("ˡ���ܱ�վ���ϣ�ϵͳ����Ͷ��ע���ţ������������...\n"); pressanykey(); return 0; } } #endif #endif memcpy(u, &newinfo, (size_t)sizeof(currentuser)); #ifdef MAILCHECK #ifdef MAILCHANGED if ((netty_check == 1)&&!HAS_PERM(PERM_SYSOP)) { newinfo.userlevel &= ~(PERM_LOGINOK | PERM_PAGE | PERM_MESSAGE); sethomefile(src, newinfo.userid, "register"); sethomefile(dst, newinfo.userid, "register.old"); rename(src, dst); } #endif #endif substitute_record(PASSFILE, &newinfo, sizeof(newinfo), unum); } clear(); return 0; }
void check_register_info() { struct userec *urec = ¤tuser; FILE *fout; char buf[192], buf2[STRLEN]; #ifdef MAILCHECK char ans[4]; #ifdef CODE_VALID int i; #endif #endif if (!(urec->userlevel & PERM_LOGIN)) { urec->userlevel = 0; return; } #ifdef NEWCOMERREPORT if (urec->numlogins == 1) { clear(); sprintf(buf, "tmp/newcomer.%s", currentuser.userid); if ((fout = fopen(buf, "w")) != NULL) { fprintf(fout, "��Һ�,\n\n"); fprintf(fout, "���� %s (%s), ���� %s\n", currentuser.userid, urec->username, fromhost); fprintf(fout, "����%s������վ����, ���Ҷ��ָ�̡�\n", (urec->gender == 'M') ? "С��" : "СŮ��"); move(2, 0); prints("�dz���ӭ %s ���ٱ�վ��ϣ�������ڱ�վ�ҵ������Լ���һƬ��գ�\n\n", currentuser.userid); prints("����������̵ĸ��˼��, ��վ����ʹ���ߴ���к�\n"); prints("(����������, д���ֱ�Ӱ� <Enter> ����)...."); getdata(6, 0, ":", buf2, 75, DOECHO, YEA); if (buf2[0] != '\0') { fprintf(fout, "\n\n���ҽ���:\n\n"); fprintf(fout, "%s\n", buf2); getdata(7, 0, ":", buf2, 75, DOECHO, YEA); if (buf2[0] != '\0') { fprintf(fout, "%s\n", buf2); getdata(8, 0, ":", buf2, 75, DOECHO, YEA); if (buf2[0] != '\0') { fprintf(fout, "%s\n", buf2); } } } fclose(fout); sprintf(buf2, "������·: %s", urec->username); Postfile(buf, "newcomers", buf2, 2); unlink(buf); } pressanykey(); } #endif #ifdef PASSAFTERTHREEDAYS if (urec->lastlogin - urec->firstlogin < 3 * 86400) { if (!HAS_PERM(PERM_SYSOP)) { set_safe_record(); urec->userlevel &= ~(PERM_DEFAULT); urec->userlevel |= PERM_LOGIN; substitut_record(PASSFILE, urec, sizeof(struct userec), usernum); ansimore("etc/newregister", YEA); return; } } #endif #ifndef FDQUAN //������� while (!HAS_PERM(PERM_BINDMAIL)) { clear(); if (HAS_PERM(PERM_REGISTER)) { while (askyn("�Ƿ��������", NA, NA)== NA) //add by eefree.06.7.20 { if (askyn("�Ƿ���дУ����Ϣ", NA, NA) == NA) { clear(); continue; } check_reg_extra(); return; } //add end. } check_reg_mail(); } #endif clear(); if (HAS_PERM(PERM_REGISTER)) return; #ifndef AUTOGETPERM if (check_register_ok()) { #endif set_safe_record(); urec->userlevel |= PERM_DEFAULT; substitut_record(PASSFILE, urec, sizeof(struct userec), usernum); return; #ifndef AUTOGETPERM } #endif #ifdef MAILCHECK #ifdef CODE_VALID sethomefile(buf, currentuser.userid, ".regpass"); if (dashf(buf)) { move(13, 0); prints("����δͨ�����ȷ��... \n"); prints("�����ڱ�������ע��ȷ������, \"��֤����\"����Ϊ���ȷ��\n"); prints("һ���� %d ���ַ�, ��Сд���в���, ��ע��.\n", RNDPASSLEN); prints("����ȡ�������������� [Enter] ��.\n"); prints("[1;33m��ע��, ����������һ����֤�������������������룡[m\n"); if ((fout = fopen(buf, "r")) != NULL) { fscanf(fout, "%s", buf2); fclose(fout); for (i = 0; i < 3; i++) { move(18, 0); prints("������ %d �λ���\n", 3 - i); getdata(19,0,"��������֤����: ",genbuf,(RNDPASSLEN+1),DOECHO,YEA); if (strcmp(genbuf, "") != 0) { if (strcmp(genbuf, buf2) != 0) continue; else break; } } } else i = 3; if (i == 3) { prints("������֤ʧ��! ����Ҫ��дע�ᵥ�����ȷ������ȷ���������\n"); getdata(22,0,"��ѡ��1.��ע�ᵥ 2.����ȷ���� [1]:",ans,2,DOECHO,YEA); if(ans[0] == '2') { send_regmail(¤tuser); pressanykey(); } else x_fillform(); } else { set_safe_record(); urec->userlevel |= PERM_DEFAULT; substitut_record(PASSFILE, urec,sizeof(struct userec), usernum); prints("������!! ����˳����ɱ�վ��ʹ����ע������,\n"); prints("������������ӵ��һ��ʹ���ߵ�Ȩ��������...\n"); unlink(buf); mail_file("etc/smail", "SYSOP", "��ӭ���뱾վ����"); pressanykey(); } return; } #endif if ( (!strstr(urec->email, BBSHOST)) && (!invalidaddr(urec->email)) && (!invalid_email(urec->email))) { move(13, 0); prints("���ĵ������� ����ͨ��������֤... \n"); prints(" ��վ�����ϼ�һ����֤�Ÿ���,\n"); prints(" ��ֻҪ�� %s ����, �Ϳ��Գ�Ϊ��վ�ϸ���.\n\n", urec->email); prints(" ��Ϊ��վ�ϸ���, �������и����Ȩ���!\n"); prints(" ��Ҳ����ֱ����дע�ᵥ��Ȼ��ȴ�վ�����ֹ���֤��\n"); getdata(21,0,"��ѡ��1.��ע�ᵥ 2.��ȷ���� [1]: ",ans,2,DOECHO,YEA); if(ans[0] == '2') { send_regmail(¤tuser); getdata(21,0,"ȷ�����Ѽij�, ��������Ŷ!! ",ans, 2, DOECHO, YEA); return; } } #endif /* Following line modified by Amigo 2002.04.23. Fill form only when no new letter. */ /* x_fillform();*/ if (!chkmail()) x_fillform(); }