看板SetupBBS
标 题[问题]我的BBS不能注册了 拜托大家救救我
发信站元智大学风之塔 (Mon Jun 28 20:57:48 2004)
转信站ptt!ctu-reader!ctu-peer!Spring!news.nctu!news.ntu!news.mcu!news.csie.m
下面这麽长一串 是我的register.c
之前在进站画面打 new
会出现"抱歉, 使用者帐号已经满了, 无法注册新的帐号."
我觉得应该是allocid有问题
於是我把
if(allocid > MAXUSERS || allocid <= 0)
改成
if(allocid > MAXUSERS)
make以後
在进站画面打new
可以进入注册单
但是注册跑到
请输入代号: la
请设定您的密码: *******
请再输入一次你的密码: ******* <---跑到这里断线
於是我把他改回原来的
if(allocid > MAXUSERS || allocid <= 0)
再make一次
结果还是一样
拜托救我吧 已经倒站了.................
ps. MAXUSER 定义是60000
目前有的ID数是13XXX
/*
Pirate Bulletin Board System
Copyright (C) 1990, Edward Luke,
[email protected]
Eagles Bulletin Board System
Copyright (C) 1992, Raymond Rocker,
[email protected]
Guy Vega,
[email protected]
Dominic Tynes,
[email protected]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
//$Id: register.c,v 1.1.1.1 2000/04/12 13:20:54 pyjamas Exp $
#include "bbs.h"
#define EMAIL 0x0001
#define NICK 0x0002
#define REALNAME 0x0004
#define ADDR 0x0008
#define REALEMAIL 0x0010
#define BADEMAIL 0x0020
#define NEWREG 0x0040
char *sysconf_str();
char *genpasswd();
char *Ctime();
extern char fromhost[ 60 ];
extern time_t login_start_time;
time_t system_time;
int
bad_user_id( userid )
char *userid;
{
FILE *fp;
char buf[STRLEN];
char *ptr, ch;
ptr = userid;
while( (ch = *ptr++) != '\0' ) {
if( !isalnum( ch ) && ch != '_' )
return 1;
}
if( (fp = fopen( "etc/badname", "r" )) != NULL ) {
while( fgets( buf, STRLEN, fp ) != NULL ) {
ptr = strtok( buf, " \n\t\r" );
if( ptr != NULL && *ptr != '#' && ci_strcmp( ptr, userid ) == 0 ) {
fclose( fp );
return 1;
}
}
fclose(fp);
}
return 0;
}
int
compute_user_value( urec )
struct userec *urec; // 传回值表示有几天没上站就砍除其ID!
{
int value;
/* if (urec) has XEMPT permission, don't kick it */
if( urec->userlevel & PERM_XEMPT )
return 999;
value = (time(0) - urec->lastlogin) / 60; /* min */
/* new user should register in 30 mins */
if( strcmp( urec->userid, "new" ) == 0 ) {
return (30 - value) * 60;
}
if( urec->numlogins <= 3 )
return (15 * 1440 - value)/1440;
if( !(urec->userlevel & PERM_LOGINOK) )
return (30 * 1440 - value)/1440;
if( urec->stay > 1000000 )
return (365 * 1440 - value)/1440;
if( urec->stay > 5000000 )
return (500 * 1440 - value)/1440;
return (180 * 1440 - value)/1440;
}
/* PolyU Edition by pyjamas */
#ifdef PolyU
int
valid_email(addr)
char *addr;
{ FILE *fp;
if((fp = fopen( ".polyuemail", "r" )) != NULL )
{
while( fgets(genbuf,STRLEN,fp) != NULL)
{
strtok(genbuf,"\n");
if (strstr(addr,genbuf)!=NULL)
{
fclose(fp);
return 1;
}
}
fclose(fp);
}
return 0;
}
#else
int
invalid_email( addr )
char *addr;
{
FILE *fp;
char temp[STRLEN], tmp2[STRLEN];
if((fp = fopen( ".bad_email", "r" )) != NULL ) {
while( fgets(temp,STRLEN,fp) != NULL) {
strtok(genbuf,"\n");
strtolower(genbuf, temp);
strtolower(tmp2, addr);
if (strstr(tmp2,genbuf)!=NULL) {
fclose(fp);
return 1;
}
}
fclose(fp);
}
return 0;
}
#endif
int duplicate(email)
char *email;
{
struct userec new;
int flag =0;
int fdr;
if (HAS_PERM(PERM_SYSOP)) return 0;
fdr=open(".PASSWDS",O_RDONLY);
while(read(fdr,&new,sizeof(new))==sizeof(new))
{
if (!strcmp(new.userid, currentuser.userid)) continue;
if (!strcmp(new.email, email)|| strstr(new.realemail, email))
{
flag= 1;
break;
}
}
close(fdr);
return flag;
}
void
send_regmail(trec)
struct userec *trec;
{
time_t code;
FILE *fin, *fout, *dp;
sethomefile(genbuf,trec->userid,"mailcheck");
if((dp=fopen(genbuf,"w"))==NULL)
{
fclose(dp);
return;
}
code = time(0);
fprintf(dp,"%9.9d:%d\n",code, getpid());
fclose(dp);
sprintf( genbuf, "%s -f SYSOP.bbs@%s %s ", SENDMAIL, BBSHOST, trec->email );
fout = popen( genbuf, "w" );
fin = fopen( sysconf_str( "EMAILFILE" ), "r" );
if ((fin != NULL) && (fout != NULL)) {
fprintf( fout, "Reply-To: SYSOP.bbs@%s\n", BBSHOST);
fprintf( fout, "From: SYSOP.bbs@%s\n", BBSHOST );
fprintf( fout, "To: %s\n", trec->email);
fprintf( fout, "Subject: @%s@[-%9.9d:%d-]%s mail check.\n", trec->userid ,code, getpid(), BBSID);
fprintf( fout, "X-Purpose: %s registration mail.\n", BBSNAME);
fprintf( fout, "\n");
fprintf(fout,"本站位址 : %s (%s)\n", BBSHOST, BBSIP);
fprintf(fout,"您注册的代号 : %s\n",trec->userid);
fprintf(fout,"申请日期 : %s",ctime(&trec->firstlogin));
fprintf(fout,"登入来源 : %s\n",fromhost);
fprintf(fout,"您的真实姓名/昵称: %s (%s)\n",trec->realname, trec->username);
fprintf(fout,"认证信发出日期 : %s\n", ctime(&code));
while (fgets( genbuf, 255, fin ) != NULL ) {
if (genbuf[0] == '.' && genbuf[ 1 ] == '\n')
fputs( ". \n", fout );
else fputs( genbuf, fout );
}
fprintf(fout, ".\n");
fclose( fin );
fclose( fout );
}
}
int
getnewuserid()
{
struct userec utmp, zerorec;
struct stat st;
int fd, size, val, i;
system_time = time( NULL );
if( stat( "tmp/killuser", &st )== -1 || st.st_mtime < system_time-3600 ) {
if( (fd = open( "tmp/killuser", O_RDWR|O_CREAT, 0600 )) == -1 )
return -1;
write( fd, ctime( &system_time ), 25 );
close( fd );
log_usies( "CLEAN", "dated users." );
printf( "寻找新帐号中, 请稍待片刻...\n\r" );
memset( &zerorec, 0, sizeof( zerorec ) );
if( (fd = open( PASSFILE, O_RDWR|O_CREAT, 0600 )) == -1 )
return -1;
size = sizeof( utmp );
for( i = 0; i < MAXUSERS; i++ ) {
if( read( fd, &utmp, size ) != size )
break;
val = compute_user_value( &utmp );
if( utmp.userid[0] != '\0' && val < 0 ) {
sprintf( genbuf, "#%-4d 名:%-12s(%-15s) 注册:%15.15s 最後:%15.15s 停留:%4d分 上站:%4d次 文章%3d %d",
i+1, utmp.userid, utmp.realname, ctime( &(utmp.firstlogin)), ctime( &(utmp.lastlogin) )+4,(utmp.stay)/60,
utmp.numlogins, utmp.numposts, val );
logit(LOG_KILLED, genbuf );
if( !bad_user_id( utmp.userid ) ) {
/*
//砍版主时
if (utmp.userlevel & PERM_BOARDS) {
sethomefile(genbuf,utmp.userid,"bunny");
//负责人
if((fn = fopen( genbuf, "w" )) != NULL ) {
resolve_boards();
fprintf(fn,"%s 的帐号已被砍除。他是以下版的版主:\n\n"
,utmp.userid);
for (j = 0; j < brdshm->number; j++) {
if (strstr(bcache[j].BM,utmp.userid))
fprintf(fn,"%s\n",bcache[j].filename);
}
fclose(fn);
sprintf(buf2,"版主帐号被砍通知: %s",utmp.userid);
postfile(genbuf,"syssecurity",buf2,3);
}
else
fclose(fn);
}
//砍版主到此结束
*/
sprintf( genbuf, "/bin/rm -fr mail/%c/%s",
toupper(utmp.userid[0]),utmp.userid );
system( genbuf );
sprintf( genbuf, "/bin/rm -fr home/%c/%s", toupper(utmp.userid[0]),utmp.userid );
system( genbuf );
del_from_file("etc/realemail", utmp.email);
del_from_file("etc/realemail", utmp.realemail);
}
lseek( fd, -(off_t)(size), SEEK_CUR );
write( fd, &zerorec, sizeof( utmp ) );
}
}
close( fd );
touchnew();
}
if( (fd = open( PASSFILE, O_RDWR|O_CREAT, 0600 )) == -1 )
return -1;
flock( fd, LOCK_EX );
i = searchnewuser();
sprintf( genbuf, "uid %d from %s", i, fromhost );
log_usies( "APPLY", genbuf );
if( i <= 0 || i > MAXUSERS ) {
flock(fd,LOCK_UN) ;
close(fd) ;
if( dashf( "etc/user_full" ) ) {
ansimore( "etc/user_full", NA );
oflush();
} else {
printf( "抱歉, 使用者帐号已经满了, 无法注册新的帐号.\n\r" );
}
val = (st.st_mtime - system_time + 3660) / 60;
printf( "请等待 %d 分钟後再试一次, 祝你好运.\n\r", val );
sleep( 2 );
exit( 1 );
}
memset( &utmp, 0, sizeof( utmp ) );
strcpy( utmp.userid, "new" );
utmp.lastlogin = time( NULL );
if( lseek( fd, (off_t)(sizeof(utmp) * (i-1)), SEEK_SET ) == -1 ) {
flock( fd, LOCK_UN );
close( fd );
return -1;
}
write( fd, &utmp, sizeof(utmp) );
setuserid( i, utmp.userid );
flock( fd, LOCK_UN );
close( fd );
return i;
}
int
id_with_num(userid)
char userid[IDLEN];
{
char *s;
for(s=userid;*s != '\0'; s++) {
if(*s<1 || ispunct(*s)) {
return 1;
}
}
return 0;
}
void
new_register()
{
struct userec newuser;
char passbuf[ STRLEN ];
int allocid, try,flag;
if( 1 ) {
time_t now;
now = time( 0 );
sprintf( genbuf, "etc/no_register_%3.3s", ctime( &now ) );
if( dashf( genbuf ) ) {
ansimore( genbuf, NA );
pressreturn();
exit( 1 );
}
}
memset( &newuser, 0, sizeof(newuser) );
allocid = getnewuserid() ;
if(allocid > MAXUSERS || allocid <= 0) {
printf("本站人数以达上限 半小时後再来注册吧\n\r") ;
exit(1) ;
}
ansimore("etc/register", NA);
try = 0;
while( 1 ) {
if( ++try >= 10 ) {
prints("\n拜拜,你按太多下 <Enter> 了...\n");
refresh();
longjmp( byebye, -1 );
}
getdata(0,0,"请输入代号: ",newuser.userid,IDLEN+1,DOECHO,NULL,YEA);
flag = 1;
if(id_with_num(newuser.userid)==1)
{
prints("帐号必须为英文字母及数字之组合!\n");
flag=0;
}
if (flag) {if(strlen(newuser.userid) < 2) {
prints("代号至少需有两个英文字母!\n");
} else if ( (*newuser.userid == '\0') || bad_user_id( newuser.userid )){
prints( "系统用字或是不雅的代号。\n" );
} else if( dosearchuser( newuser.userid ) ) {
prints("此帐号已经有人使用\n") ;
} else if (!isalpha(newuser.userid[0])) {
prints("请勿使用以数字开头的ID\n");
}
else break;}
}
while( 1 ) {
getdata(0,0,"请设定您的密码: ",passbuf,PASSLEN,NOECHO,NULL,YEA) ;
if( strlen( passbuf ) < 4 || !strcmp( passbuf, newuser.userid ) ) {
prints("密码太短或与使用者代号相同, 请重新输入\n") ;
continue;
}
strncpy( newuser.passwd, passbuf, PASSLEN );
getdata(0,0,"请再输入一次你的密码: ",passbuf,PASSLEN,NOECHO,NULL,YEA);
if( strncmp( passbuf, newuser.passwd, PASSLEN ) != 0 ) {
prints("密码输入错误, 请重新输入密码.\n") ;
continue;
}
passbuf[8] = '\0' ;
strncpy( newuser.passwd, genpasswd( passbuf ), PASSLEN );
break;
}
strcpy(newuser.termtype, "vt100");
newuser.userlevel = PERM_BASIC;
newuser.userdefine=-1;
newuser.userdefine&=~DEF_MAILMSG;
newuser.userdefine&=~DEF_SECLOGIN;
newuser.editor=1;
newuser.sex=0;
newuser.magic=0;
newuser.addmagic=0;
newuser.showfile=0xffff;
newuser.bmonth=0;
newuser.bday=0;
newuser.byear=0;
newuser.unsign_ffff=0xffff;
newuser.unsign_0000=0x0000;
newuser.card=0;
newuser.unused1=0;
newuser.magic=0;
newuser.money=0;
newuser.lent=0;
newuser.bank=0;
newuser.flags[0] = CURSOR_FLAG;
newuser.flags[0]|= PAGER_FLAG;
newuser.flags[1] = 0;
newuser.firstlogin = newuser.lastlogin = time(NULL) ;
if( substitute_record(PASSFILE,&newuser,sizeof(newuser),allocid) == -1 ) {
fprintf(stderr,"too much, good bye!\n") ;
exit(1) ;
}
setuserid( allocid, newuser.userid );
if( !dosearchuser(newuser.userid) ) {
fprintf(stderr,"User failed to create\n") ;
exit(1) ;
}
report( "new account" );
}
char *
trim( s )
char *s;
{
static char buf[ 256 ];
char *l, *r;
buf[ 0 ] = '\0' ;
r = s + strlen( s ) - 1;
for (l = s ; strchr(" \t\r\n", *l) && *l; l++);
/* if all space, *l is null here, we just return null */
if (*l != '\0') {
for ( ; strchr(" \t\r\n", *r) && r >= l ; r-- );
strncpy( buf, l, r - l + 1 );
}
return buf;
}
int
invalid_realmail( userid, email, msize )
char *userid, *email;
int msize;
{
FILE *fn;
char *emailfile, fname[STRLEN];
if( (emailfile = sysconf_str( "EMAILFILE" )) == NULL )
return 0;
if( strchr( email, '@' ) && valid_ident( email )&& HAS_PERM(PERM_LOGINOK) )
return 0;
sethomefile(fname,userid,"register");
if( (fn = fopen( fname, "r" )) != NULL ) {
fgets( genbuf, STRLEN, fn );
fclose( fn );
strtok( genbuf, "\n" );
if (valid_ident(genbuf) &&
((strchr(genbuf,'@') != NULL)||strstr(genbuf,"usernum"))) {
if(strchr(genbuf,'@') != NULL);
strncpy( email, genbuf, NAMELEN );
move( 10, 0 );
prints( "恭贺你! 您已通过身份验证,成为本站公民。 \n" );
prints( " 本站为您所提供的额外服务,\n" );
prints( " 包括玩游戏, 送讯息 等. \n" );
prints( " \n" );
prints( "建议你, 先四处浏览一下,由其是本站里头的本站使用手册 \n" );
prints( " 不懂的地方,请在 ;31msysopm 板提问,\n" );
prints( " 本站站友会尽快为您解答。\n" );
pressanykey(NULL);
return 0;
}
}
return 1;
}
void
check_register_info()
{
struct userec *urec = ¤tuser;
char *newregfile;
int perm;
FILE *fout;
char ans[4],buf[192],buf2[STRLEN];
clear();
sprintf(buf,"%s", BBSHOST);
if( !(urec->userlevel & PERM_BASIC) ) {
urec->userlevel = 0;
return;
}
perm = PERM_DEFAULT & sysconf_eval( "AUTOSET_PERM" );
move(1,0);
prints(";37;46m 请使用中文回答下列各个问题 m");
while ( strlen( urec->username ) < 2 ) {
getdata( 4, 0, "请输入您的昵称 (例如, 可爱的小胖) :", urec->username, NAMELEN,DOECHO,NULL ,YEA);
strcpy(uinfo.username,urec->username);
update_utmp();
}
while ( strlen( urec->realname ) < 4 ) {
getdata( 5, 0, "请输入您的真实姓名: (站长会帮您保密的 !) :", urec->realname, NAMELEN-5,DOECHO,NULL,YEA);
}
while ( strlen( urec->address ) < 15 ) {
getdata( 6, 0, "您的住址是 :", urec->address, 55,DOECHO,NULL,YEA);
}
while ( (urec->sex <1) || (urec->sex >6) ) {
move( 7, 0 );
prints("请选择您的种族 (1.人类 2.神族 3.精灵 4.龙族 5.植物 6.矿物) ");
getdata(7,66, ": ",genbuf, 2, DOECHO, NULL,YEA );
urec->sex=genbuf[0]-'0';
}
wrongdate:
while(urec -> byear > 88 || urec -> byear < 40) {
ans[0]='\0';
getdata(9,0,"请输入您的出生年份 -四位数-: ",ans,5,DOECHO,NULL,YEA);
if (atoi(ans) < 1900) continue;
urec -> byear = atoi(ans)-1900;
}
while(urec -> bmonth < 1 || urec -> bmonth > 12) {
ans[0]='\0';
getdata(9,38,"出生月份: (1-12) ",ans,3,DOECHO,NULL,YEA);
urec -> bmonth = atoi(ans);
}
while(urec -> bday < 1 || urec -> bday > 31) {
ans[0]='\0'; //i=11
getdata(9,60,"出生日: (1-31) ",ans,3,DOECHO,NULL,YEA);
urec -> bday = atoi(ans);
}
if ((urec->bday ==31) && (urec->bmonth==4 || urec->bmonth==6
|| urec->bmonth==9||urec->bmonth==11))
{
urec->byear =0; urec->bmonth=0; urec->bday=0;
goto wrongdate;
}
if ((urec->bmonth == 2) && (urec->bday>28))
if ((urec->bday==29) && ((urec->byear)%4)!=0)
{
urec->byear =0; urec->bmonth=0; urec->bday=0;
goto wrongdate;
}
while ( strchr( urec->email, '@' ) == NULL ) {
move( 11, 0 );
//#ifdef PolyU
// prints( "您如无 理工大学中央电子邮箱 (@polyu.edu.hk), \n" );
//#else
prints( "您如无正式电电子信箱 (如:
[email protected]), \n" );
//#endif
prints( " 请向电算中心申请 \n");
prints( " 或到本站工具箱中注册个人资料 \n" );
prints( " 通过认证後可以享用很多特别服务哟!! \n" );
move( 15, 0 );
/*#ifdef PolyU
prints( "电子信箱格式为: ;
[email protected] \n" );
prints( " 请不要忘记您学生证号码里的 ';31mdm' 或 ';31mjm' 啊!" );
#endif*/
getdata( 18, 0, "现在请输入您的有效电邮地址:"
, urec->email, 45,DOECHO,NULL,YEA);
if ((strchr( urec->email, '@' ) == NULL )) {
sprintf( genbuf, "%s.bbs@%s", urec->userid,buf );
strncpy( urec->email, genbuf, STRLEN);
}
}
if(!strcmp(currentuser.userid,"SYSOP"))
{
currentuser.userlevel=~0;
substitute_record(PASSFILE,¤tuser,sizeof(struct userec),usernum);
}
if(!(currentuser.userlevel&PERM_LOGINOK))
{
if( HAS_PERM( PERM_SYSOP ))
return;
if(!invalid_realmail( urec->userid, urec->realemail, NAMELEN ))
{
set_safe_record();
urec->userlevel |= PERM_DEFAULT;
if( HAS_PERM( PERM_DENYPOST ) && !HAS_PERM( PERM_SYSOP ) )
urec->userlevel &= ~PERM_POST;
substitute_record(PASSFILE,urec,sizeof(struct userec),usernum) ;
}else {
/* added by netty to automatically send a mail to new user. */
/* begin of check if local email-addr */
/* if (duplicate(urec->email))
{
move(19,0);
prints(";36m你刚才输入的电邮地址 2m(%s)6m 已被他人占用了,\n", urec->email);
outs(";36m 请在工具箱内填写你的正确电邮地址,\n");
outs(";36m 你在本站的权力才会进一步提升,如在各板之贴文权、交谈权等等。\n");
outs("m --> ;36m如有任何疑问,请移玉步至 ;31msysop6m 板提问。m");
sprintf( genbuf, "%s.bbs@%s", urec->userid,buf );
strncpy( urec->email, genbuf, STRLEN);
pressanykey(NULL);
} else
*/
if (
(!strstr( urec->email, ".bbs@") )&&
(!invalidaddr(urec->email))&&
(sysconf_str( "EMAILFILE" )!=NULL)&&
/*#ifdef PolyU
(valid_email(urec->email))) //for PolyU only...
#else
*/
!(invalid_email(urec->email)))
//#endif
{
move( 19, 0 );
prints( "您的电邮地址 尚须通过回信验证... \n" );
prints( " SYSOP 将寄一封验证信给您,\n" );
prints( " 您只要回信, 就可以成为本站合格公民.\n" );
if (askyn("您要我们现在就寄这一封信吗",YEA,NA) == YEA ) {
send_regmail(urec);
pressanykey("确认信已寄出, 等您回信哦!");
}
}else
{
if(sysconf_str( "EMAILFILE" )!=NULL)
{
move(19,0);
prints("\n你的电子邮件地址 【;33m%sm】\n",urec->email);
outs("并非 Unix 帐号,系统不会投递身份确认信,请到;32m工具箱m中修改..\n");
outs(" 你在本站的权力才会进一步提升,如在各板之贴文权、交谈权等等。\n");
outs(" 如有任何疑问,请移玉步至 sysop 板提问。");
pressanykey(NULL);
}
}
}
if( urec->lastlogin - urec->firstlogin < 3*86400)
{
if (urec->numlogins == 1)
{
sprintf(buf,"tmp/newcomer.%s",currentuser.userid);
if ((fout=fopen(buf,"w"))!= NULL)
{
clear();
fprintf(fout,"大家好,\n\n");
fprintf(fout,"我是 %s (%s), 来自 %s\n"
,currentuser.userid, urec->username, fromhost);
fprintf(fout,"今天我初来此站报到, 请大家多多指教。\n");
move(5,0);
prints("请作个简短的个人简介, 向本站其他使用者打个招呼\n");
prints("(最多三行, 写完可直接按 <Enter> 跳离)....");
getdata(7,0,":",buf2, 75, DOECHO,NULL, YEA);
if(buf2[0]!='\0'){
fprintf(fout,"\n\n自我介绍:\n\n");
fprintf(fout,"%s\n",buf2);
getdata(8,0,":",buf2, 75, DOECHO, NULL, YEA);
if(buf2[0]!='\0') {
fprintf(fout,"%s\n",buf2);
getdata(9,0,":",buf2, 75, DOECHO, NULL, YEA);
if(buf2[0]!='\0') {
fprintf(fout,"%s\n",buf2);
}
}
}
fclose(fout);
sprintf(buf2,"新手上路 - %s", currentuser.username);
add_loginfo(buf);
postfile(buf,"newcomers",buf2,2);
unlink(buf);
}
pressanykey(NULL);
}
}
}
newregfile = sysconf_str( "NEWREGFILE" );
if( urec->lastlogin - urec->firstlogin < 3*86400 &&
!HAS_PERM( PERM_SYSOP) && newregfile != NULL ) {
set_safe_record();
urec->userlevel &= ~(perm);
substitute_record(PASSFILE,urec,sizeof(struct userec),usernum) ;
ansimore( newregfile, YEA );
}
set_safe_record();
if( HAS_PERM( PERM_DENYPOST ) && !HAS_PERM( PERM_SYSOP ) )
{
currentuser.userlevel &= ~PERM_POST;
substitute_record(PASSFILE,urec,sizeof(struct userec),usernum) ;
}
}
--
※ Origin: 元智大学 风之塔 <bbs.yzu.edu.tw>
※ From : 61-231-194-182.dynamic.hinet.net