diff options
Diffstat (limited to 'mbbsd/register.c')
-rw-r--r-- | mbbsd/register.c | 296 |
1 files changed, 148 insertions, 148 deletions
diff --git a/mbbsd/register.c b/mbbsd/register.c index a3fa13ef..f2b50a9b 100644 --- a/mbbsd/register.c +++ b/mbbsd/register.c @@ -1,24 +1,26 @@ -/* $Id: register.c,v 1.5 2002/06/04 13:08:34 in2 Exp $ */ +/* $Id: register.c,v 1.6 2002/07/05 17:10:28 in2 Exp $ */ #define _XOPEN_SOURCE #include "bbs.h" /* password encryption */ -static char pwbuf[14]; +static char pwbuf[14]; + +char * +genpasswd(char *pw) +{ + if (pw[0]) { + char saltc[2], c; + int i; -char *genpasswd(char *pw) { - if(pw[0]) { - char saltc[2], c; - int i; - i = 9 * getpid(); saltc[0] = i & 077; saltc[1] = (i >> 6) & 077; - - for(i = 0; i < 2; i++) { + + for (i = 0; i < 2; i++) { c = saltc[i] + '.'; - if(c > '9') + if (c > '9') c += 7; - if(c > 'Z') + if (c > 'Z') c += 6; saltc[i] = c; } @@ -28,34 +30,39 @@ char *genpasswd(char *pw) { return ""; } -int checkpasswd(char *passwd, char *test) { - char *pw; - +int +checkpasswd(char *passwd, char *test) +{ + char *pw; + strncpy(pwbuf, test, 14); pw = crypt(pwbuf, passwd); return (!strncmp(pw, passwd, 14)); } /* Àˬd user µù¥U±¡ªp */ -int bad_user_id(char *userid) { - int len, i; +int +bad_user_id(char *userid) +{ + int len, i; len = strlen(userid); - if(len < 2) + if (len < 2) return 1; if (not_alpha(userid[0])) return 1; - for (i=1; i<len; i++) //DickG:×¥¿¤F¥u¤ñ¸û userid ²Ä¤@Ó¦r¤¸ªº bug - if(not_alnum(userid[i])) - return 1; - - if(strcasecmp(userid, str_new) == 0) + for (i = 1; i < len; i++) +//DickG:×¥¿¤F ¥ u ¤ ñ¸ûuserid ² Ĥ@Ó¦r ¤ ¸ªºbug + if (not_alnum(userid[i])) + return 1; + + if (strcasecmp(userid, str_new) == 0) return 1; - - /* while((ch = *(++userid))) - if(not_alnum(ch)) - return 1;*/ + + /* + * while((ch = *(++userid))) if(not_alnum(ch)) return 1; + */ return 0; } @@ -64,23 +71,25 @@ int bad_user_id(char *userid) { /* (a) is the worst user currently */ /* (b) is the object to be compared */ /* -------------------------------- */ -static int compute_user_value(userec_t *urec, time_t clock) { - int value; - +static int +compute_user_value(userec_t * urec, time_t clock) +{ + int value; + /* if (urec) has XEMPT permission, don't kick it */ - if((urec->userid[0] == '\0') || (urec->userlevel & PERM_XEMPT) - /*|| (urec->userlevel & PERM_LOGINOK)*/ - || !strcmp(STR_GUEST,urec->userid)) + if ((urec->userid[0] == '\0') || (urec->userlevel & PERM_XEMPT) + /* || (urec->userlevel & PERM_LOGINOK) */ + || !strcmp(STR_GUEST, urec->userid)) return 999999; - value = (clock - urec->lastlogin) / 60; /* minutes */ - + value = (clock - urec->lastlogin) / 60; /* minutes */ + /* new user should register in 30 mins */ - if(strcmp(urec->userid, str_new) == 0) + if (strcmp(urec->userid, str_new) == 0) return 30 - value; -#if 0 - if (!urec->numlogins) /* ¥¼ login ¦¨¥\ªÌ¡A¤£«O¯d */ +#if 0 + if (!urec->numlogins) /* ¥¼ login ¦¨¥\ªÌ¡A¤£«O¯d */ return -1; - if (urec->numlogins <= 3) /* #login ¤Ö©ó¤TªÌ¡A«O¯d 20 ¤Ñ */ + if (urec->numlogins <= 3) /* #login ¤Ö©ó¤TªÌ¡A«O¯d 20 ¤Ñ */ return 20 * 24 * 60 - value; #endif /* ¥¼§¹¦¨µù¥UªÌ¡A«O¯d 15 ¤Ñ */ @@ -88,87 +97,86 @@ static int compute_user_value(userec_t *urec, time_t clock) { return (urec->userlevel & PERM_LOGINOK ? 120 : 15) * 24 * 60 - value; } -int check_and_expire_account(int uid,userec_t *urec) +int +check_and_expire_account(int uid, userec_t * urec) { - userec_t zerorec; - char genbuf[200],genbuf2[200]; - int val; - if((val = compute_user_value(urec, now)) < 0) { - sprintf(genbuf, "#%d %-12s %15.15s %d %d %d", - uid, urec->userid, ctime(&(urec->lastlogin)) + 4, - urec->numlogins, urec->numposts, val); - if(val > -1 * 60 * 24 * 365) { + userec_t zerorec; + char genbuf[200], genbuf2[200]; + int val; + if ((val = compute_user_value(urec, now)) < 0) { + sprintf(genbuf, "#%d %-12s %15.15s %d %d %d", + uid, urec->userid, ctime(&(urec->lastlogin)) + 4, + urec->numlogins, urec->numposts, val); + if (val > -1 * 60 * 24 * 365) { memset(&zerorec, 0, sizeof(zerorec)); - log_usies("CLEAN", genbuf); - sprintf(genbuf, "home/%c/%s", urec->userid[0], - urec->userid); - sprintf(genbuf2, "tmp/%s", urec->userid); - if(dashd(genbuf) && Rename(genbuf, genbuf2)) { - sprintf(genbuf, "/bin/rm -fr home/%c/%s >/dev/null 2>&1", - urec->userid[0],urec->userid); - system(genbuf); - } + log_usies("CLEAN", genbuf); + sprintf(genbuf, "home/%c/%s", urec->userid[0], + urec->userid); + sprintf(genbuf2, "tmp/%s", urec->userid); + if (dashd(genbuf) && Rename(genbuf, genbuf2)) { + sprintf(genbuf, "/bin/rm -fr home/%c/%s >/dev/null 2>&1", + urec->userid[0], urec->userid); + system(genbuf); + } passwd_update(uid, &zerorec); remove_from_uhash(uid - 1); add_to_uhash(uid - 1, ""); - } - else - { - val=0; - log_usies("DATED", genbuf); - } + } else { + val = 0; + log_usies("DATED", genbuf); } + } return val; } -int getnewuserid() { - char genbuf[50]; - static char *fn_fresh = ".fresh"; - userec_t utmp,zerorec; - time_t clock; - struct stat st; - int fd, i; - +int +getnewuserid() +{ + char genbuf[50]; + static char *fn_fresh = ".fresh"; + userec_t utmp, zerorec; + time_t clock; + struct stat st; + int fd, i; + memset(&zerorec, 0, sizeof(zerorec)); clock = now; - + /* Lazy method : ¥ý§ä´M¤w¸g²M°£ªº¹L´Á±b¸¹ */ - if((i = searchnewuser(0)) == 0) { + if ((i = searchnewuser(0)) == 0) { /* ¨C 1 Ó¤p®É¡A²M²z user ±b¸¹¤@¦¸ */ - if((stat(fn_fresh, &st) == -1) || (st.st_mtime < clock - 3600)) { - if((fd = open(fn_fresh, O_RDWR | O_CREAT, 0600)) == -1) + if ((stat(fn_fresh, &st) == -1) || (st.st_mtime < clock - 3600)) { + if ((fd = open(fn_fresh, O_RDWR | O_CREAT, 0600)) == -1) return -1; write(fd, ctime(&clock), 25); close(fd); log_usies("CLEAN", "dated users"); - + fprintf(stdout, "´M§ä·s±b¸¹¤¤, ½Ðµy«Ý¤ù¨è...\n\r"); - - if((fd = open(fn_passwd, O_RDWR | O_CREAT, 0600)) == -1) + + if ((fd = open(fn_passwd, O_RDWR | O_CREAT, 0600)) == -1) return -1; - + /* ¤£¾å±o¬°¤°»òn±q 2 ¶}©l... Ptt:¦]¬°SYSOP¦b1 */ - for(i = 2; i <= MAX_USERS; i++) { + for (i = 2; i <= MAX_USERS; i++) { passwd_query(i, &utmp); - check_and_expire_account(i,&utmp); + check_and_expire_account(i, &utmp); } } } - passwd_lock(); i = searchnewuser(1); - if((i <= 0) || (i > MAX_USERS)) { + if ((i <= 0) || (i > MAX_USERS)) { passwd_unlock(); - if(more("etc/user_full", NA) == -1) + if (more("etc/user_full", NA) == -1) fprintf(stdout, "©êºp¡A¨Ï¥ÎªÌ±b¸¹¤w¸gº¡¤F¡AµLªkµù¥U·sªº±b¸¹\n\r"); safe_sleep(2); exit(1); } - sprintf(genbuf, "uid %d", i); log_usies("APPLY", genbuf); - + strcpy(zerorec.userid, str_new); zerorec.lastlogin = clock; passwd_update(i, &zerorec); @@ -177,19 +185,21 @@ int getnewuserid() { return i; } -void new_register() { - userec_t newuser; - char passbuf[STRLEN]; - int allocid, try, id; +void +new_register() +{ + userec_t newuser; + char passbuf[STRLEN]; + int allocid, try, id; memset(&newuser, 0, sizeof(newuser)); more("etc/register", NA); try = 0; - while(1) { - if(++try >= 6) { + while (1) { + if (++try >= 6) { outs("\n±z¹Á¸Õ¿ù»~ªº¿é¤J¤Ó¦h¡A½Ð¤U¦¸¦A¨Ó§a\n"); refresh(); - + pressanykey(); oflush(); exit(1); @@ -197,42 +207,39 @@ void new_register() { getdata(17, 0, msg_uid, newuser.userid, sizeof(newuser.userid), DOECHO); - if(bad_user_id(newuser.userid)) + if (bad_user_id(newuser.userid)) outs("µLªk±µ¨ü³oÓ¥N¸¹¡A½Ð¨Ï¥Î^¤å¦r¥À¡A¨Ã¥B¤£n¥]§tªÅ®æ\n"); - else if ((id=getuser(newuser.userid)) && - (id=check_and_expire_account(id,&xuser))>=0) - { - if(id==999999) + else if ((id = getuser(newuser.userid)) && + (id = check_and_expire_account(id, &xuser)) >= 0) { + if (id == 999999) outs("¦¹¥N¸¹¤w¸g¦³¤H¨Ï¥Î ¬O¤£¦º¤§¨"); - else - { - sprintf(passbuf,"¦¹¥N¸¹¤w¸g¦³¤H¨Ï¥Î ÁÙ¦³%d¤Ñ¤~¹L´Á \n",id/(60*24)); - outs(passbuf); - } - } - else + else { + sprintf(passbuf, "¦¹¥N¸¹¤w¸g¦³¤H¨Ï¥Î ÁÙ¦³%d¤Ñ¤~¹L´Á \n", id / (60 * 24)); + outs(passbuf); + } + } else break; } try = 0; - while(1) { - if(++try >= 6) { + while (1) { + if (++try >= 6) { outs("\n±z¹Á¸Õ¿ù»~ªº¿é¤J¤Ó¦h¡A½Ð¤U¦¸¦A¨Ó§a\n"); refresh(); - + pressanykey(); oflush(); exit(1); } - if((getdata(19, 0, "½Ð³]©w±K½X¡G", passbuf, - sizeof(passbuf), NOECHO) < 3) || - !strcmp(passbuf, newuser.userid)) { + if ((getdata(19, 0, "½Ð³]©w±K½X¡G", passbuf, + sizeof(passbuf), NOECHO) < 3) || + !strcmp(passbuf, newuser.userid)) { outs("±K½X¤Ó²³æ¡A©ö¾D¤J«I¡A¦Ü¤Ön 4 Ó¦r¡A½Ð«·s¿é¤J\n"); continue; } strncpy(newuser.passwd, passbuf, PASSLEN); getdata(20, 0, "½ÐÀˬd±K½X¡G", passbuf, sizeof(passbuf), NOECHO); - if(strncmp(passbuf, newuser.passwd, PASSLEN)) { + if (strncmp(passbuf, newuser.passwd, PASSLEN)) { outs("±K½X¿é¤J¿ù»~, ½Ð«·s¿é¤J±K½X.\n"); continue; } @@ -246,76 +253,69 @@ void new_register() { newuser.money = 0; newuser.pager = 1; allocid = getnewuserid(); - if(allocid > MAX_USERS || allocid <= 0) { + if (allocid > MAX_USERS || allocid <= 0) { fprintf(stderr, "¥»¯¸¤H¤f¤w¹F¹¡©M¡I\n"); exit(1); } - - if(passwd_update(allocid, &newuser) == -1) { + if (passwd_update(allocid, &newuser) == -1) { fprintf(stderr, "«Èº¡¤F¡A¦A¨£¡I\n"); exit(1); } setuserid(allocid, newuser.userid); - if(!dosearchuser(newuser.userid)) { + if (!dosearchuser(newuser.userid)) { fprintf(stderr, "µLªk«Ø¥ß±b¸¹\n"); exit(1); } } -void check_register() { - char *ptr = NULL; - +void +check_register() +{ + char *ptr = NULL; + stand_title("½Ð¸Ô²Ó¶ñ¼gÓ¤H¸ê®Æ"); - - while(strlen(cuser.username) < 2) + + while (strlen(cuser.username) < 2) getdata(2, 0, "ºï¸¹¼ÊºÙ¡G", cuser.username, sizeof(cuser.username), DOECHO); - for(ptr = cuser.username; *ptr; ptr++) { - if (*ptr == 9) /* TAB convert */ + for (ptr = cuser.username; *ptr; ptr++) { + if (*ptr == 9) /* TAB convert */ *ptr = ' '; } - while(strlen(cuser.realname) < 4) + while (strlen(cuser.realname) < 4) getdata(4, 0, "¯u¹ê©m¦W¡G", cuser.realname, sizeof(cuser.realname), DOECHO); - - while(strlen(cuser.address) < 8) + + while (strlen(cuser.address) < 8) getdata(6, 0, "Ápµ¸¦a§}¡G", cuser.address, sizeof(cuser.address), DOECHO); /* - if(!strchr(cuser.email, '@')) { - bell(); - move(t_lines - 4, 0); - prints("¡° ¬°¤F±zªºÅv¯q¡A½Ð¶ñ¼g¯u¹êªº E-mail address¡A" - "¥H¸ê½T»{»Õ¤U¨¥÷¡A\n" - "®æ¦¡¬° \033[44muser@domain_name\033[0m ©Î \033[44muser" - "@\\[ip_number\\]\033[0m¡C\n\n" - "¡° ¦pªG±z¯uªº¨S¦³ E-mail¡A½Ðª½±µ«ö [return] §Y¥i¡C"); - - do { - getdata(8, 0, "¹q¤l«H½c¡G", - cuser.email, sizeof(cuser.email), DOECHO); - if(!cuser.email[0]) - sprintf(cuser.email, "%s%s", cuser.userid, str_mail_address); - } while(!strchr(cuser.email, '@')); - - } - */ - if(!HAS_PERM(PERM_SYSOP) && !HAS_PERM(PERM_LOGINOK)) { + * if(!strchr(cuser.email, '@')) { bell(); move(t_lines - 4, 0); prints(" + * ±zªºÅv¯q¡A½Ð¶ñ¼g¯u¹êªº E-mail address¡A" "¥H¸ê½T»{»Õ¤U¨¥÷¡A\n" " + * 033[44muser@domain_name\033[0m ©Î \033[44muser" + * "@\\[ip_number\\]\033[0m¡C\n\n" "¡° ¦pªG±z¯uªº¨S¦³ E-mail¡A + * turn] §Y¥i¡C"); + * + * do { getdata(8, 0, "¹q¤l«H½c¡G", cuser.email, sizeof(cuser.email), + * DOECHO); if(!cuser.email[0]) sprintf(cuser.email, "%s%s", + * cuser.userid, str_mail_address); } while(!strchr(cuser.email, '@')); + * + * } */ + if (!HAS_PERM(PERM_SYSOP) && !HAS_PERM(PERM_LOGINOK)) { /* ¦^ÂйL¨¥÷»{ÃÒ«H¨ç¡A©Î´¿¸g E-mail post ¹L */ clear(); - move(9,3); + move(9, 3); prints("½Ð¸Ô¶ñ¼g\033[32mµù¥U¥Ó½Ð³æ\033[m¡A" "³q§i¯¸ªø¥HÀò±o¶i¶¥¨Ï¥ÎÅv¤O¡C\n\n\n\n"); u_register(); } - #ifdef NEWUSER_LIMIT - if(!(cuser.userlevel & PERM_LOGINOK) && !HAS_PERM(PERM_SYSOP)) { - if(cuser.lastlogin - cuser.firstlogin < 3 * 86400) + if (!(cuser.userlevel & PERM_LOGINOK) && !HAS_PERM(PERM_SYSOP)) { + if (cuser.lastlogin - cuser.firstlogin < 3 * 86400) cuser.userlevel &= ~PERM_POST; more("etc/newuser", YEA); } |