summaryrefslogtreecommitdiffstats
path: root/mbbsd/user.c
diff options
context:
space:
mode:
Diffstat (limited to 'mbbsd/user.c')
-rw-r--r--mbbsd/user.c108
1 files changed, 69 insertions, 39 deletions
diff --git a/mbbsd/user.c b/mbbsd/user.c
index 6ce507d7..739ab1e4 100644
--- a/mbbsd/user.c
+++ b/mbbsd/user.c
@@ -539,6 +539,7 @@ uinfo_query(userec_t *u, int adminmode, int unum)
int ans;
char buf[STRLEN];
char genbuf[200];
+ char pre_confirmed = 0;
int y = 0;
int perm_changed;
int mail_changed;
@@ -861,12 +862,34 @@ uinfo_query(userec_t *u, int adminmode, int unum)
fail++;
break;
}
- } else {
+ }
+ if (!getdata(y++, 0, "�г]�w�s�K�X�G", buf, PASSLEN, NOECHO)) {
+ outs("\n\n�K�X�]�w����, �~��ϥ��±K�X\n");
+ fail++;
+ break;
+ }
+ strlcpy(genbuf, buf, PASSLEN);
+
+ move(y+1, 0);
+ outs("�Ъ`�N�]�w�K�X�u���e�K�Ӧr�����ġA�W�L���N�۰ʩ����C");
+
+ getdata(y++, 0, "���ˬd�s�K�X�G", buf, PASSLEN, NOECHO);
+ if (strncmp(buf, genbuf, PASSLEN)) {
+ outs("\n\n�s�K�X�T�{����, �L�k�]�w�s�K�X\n");
+ fail++;
+ break;
+ }
+ buf[8] = '\0';
+ strlcpy(x.passwd, genpasswd(buf), sizeof(x.passwd));
+
+ // for admin mode, do verify after.
+ if (adminmode)
+ {
FILE *fp;
- char witness[3][32], title[100];
+ char witness[3][IDLEN+1], title[100];
int uid;
for (i = 0; i < 3; i++) {
- if (!getdata(19 + i, 0, "�п�J��U�ҩ����ϥΪ̡G",
+ if (!getdata(y + i, 0, "�п�J��U�ҩ����ϥΪ̡G",
witness[i], sizeof(witness[i]), DOECHO)) {
outs("\n����J�h�L�k���\n");
fail++;
@@ -882,50 +905,41 @@ uinfo_query(userec_t *u, int adminmode, int unum)
outs("\n���U���W�L�b�~�A���s��J\n");
i--;
}
- strcpy(witness[i], atuser.userid);
- // Adjust upper or lower case
+ // Adjust upper or lower case
+ strlcpy(witness[i], atuser.userid, sizeof(witness[i]));
}
}
- if (i < 3)
+ y += 3;
+
+ if (i < 3 || fail > 0 || getans(msg_sure_ny) != 'y')
+ {
+ fail++;
break;
+ }
+ pre_confirmed = 1;
sprintf(title, "%s ���K�X���]�q�� (by %s)",u->userid, cuser.userid);
unlink("etc/updatepwd.log");
- if(! (fp = fopen("etc/updatepwd.log", "w")))
- break;
+ if(! (fp = fopen("etc/updatepwd.log", "w")))
+ {
+ move(b_lines-1, 0); clrtobot();
+ outs("�t�ο��~: �L�k�إ߳q���ɡA�Ц� " GLOBAL_BUGREPORT " ���i�C");
+ fail++; pre_confirmed = 0;
+ break;
+ }
- fprintf(fp, "%s �n�D�K�X���]:\n"
- "���ҤH�� %s, %s, %s",
- u->userid, witness[0], witness[1], witness[2] );
- fclose(fp);
+ fprintf(fp, "%s �n�D�K�X���]:\n"
+ "���ҤH�� %s, %s, %s",
+ u->userid, witness[0], witness[1], witness[2] );
+ fclose(fp);
- post_file(GLOBAL_SECURITY, title, "etc/updatepwd.log", "[�t�Φw����]");
+ post_file(GLOBAL_SECURITY, title, "etc/updatepwd.log", "[�t�Φw����]");
mail_id(u->userid, title, "etc/updatepwd.log", cuser.userid);
for(i=0; i<3; i++)
- {
- mail_id(witness[i], title, "etc/updatepwd.log", cuser.userid);
- }
- y = 20;
- }
-
- if (!getdata(y++, 0, "�г]�w�s�K�X�G", buf, PASSLEN, NOECHO)) {
- outs("\n\n�K�X�]�w����, �~��ϥ��±K�X\n");
- fail++;
- break;
- }
- strlcpy(genbuf, buf, PASSLEN);
-
- move(y+1, 0);
- outs("�Ъ`�N�]�w�K�X�u���e�K�Ӧr�����ġA�W�L���N�۰ʩ����C");
-
- getdata(y++, 0, "���ˬd�s�K�X�G", buf, PASSLEN, NOECHO);
- if (strncmp(buf, genbuf, PASSLEN)) {
- outs("\n\n�s�K�X�T�{����, �L�k�]�w�s�K�X\n");
- fail++;
- break;
+ {
+ mail_id(witness[i], title, "etc/updatepwd.log", cuser.userid);
+ }
}
- buf[8] = '\0';
- strlcpy(x.passwd, genpasswd(buf), sizeof(x.passwd));
break;
case '3':
@@ -947,8 +961,16 @@ uinfo_query(userec_t *u, int adminmode, int unum)
char reason[STRLEN];
char title[STRLEN], msg[1024];
while (!getdata(b_lines-3, 0, "�п�J�z�ѥH�ܭt�d�G", reason, 50, DOECHO));
- snprintf(title, sizeof(title), "�R��ID: %s (����: %s)", x.userid, cuser.userid);
- snprintf(msg, sizeof(msg), "�b�� %s �ѯ��� %s ����R���A�z��:\n %s\n\n"
+ if (getans(msg_sure_ny) != 'y')
+ {
+ fail++;
+ break;
+ }
+ pre_confirmed = 1;
+ snprintf(title, sizeof(title),
+ "�R��ID: %s (����: %s)", x.userid, cuser.userid);
+ snprintf(msg, sizeof(msg),
+ "�b�� %s �ѯ��� %s ����R���A�z��:\n %s\n\n"
"�u��m�W:%s\n���}:%s\n�{�Ҹ��:%s\nEmail:%s\n",
x.userid, cuser.userid, reason,
x.realname, x.address, x.justify, x.email);
@@ -977,7 +999,15 @@ uinfo_query(userec_t *u, int adminmode, int unum)
pressanykey();
return;
}
- if (getans(msg_sure_ny) == 'y') {
+
+ if (!pre_confirmed)
+ {
+ if (getans(msg_sure_ny) != 'y')
+ return;
+ }
+
+ // now confirmed.
+ if (1) {
if (perm_changed) {
post_change_perm(changefrom, x.userlevel, cuser.userid, x.userid);
#ifdef PLAY_ANGEL