Annotation of sbbs/src/sbbs3/newuser.cpp, revision 1.1

1.1     ! root        1: /* newuser.cpp */
        !             2: 
        !             3: /* Synchronet new user routine */
        !             4: 
        !             5: /* $Id: newuser.cpp,v 1.50 2006/12/29 19:08:59 rswindell Exp $ */
        !             6: 
        !             7: /****************************************************************************
        !             8:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             9:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !            10:  *                                                                                                                                                     *
        !            11:  * Copyright 2006 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            12:  *                                                                                                                                                     *
        !            13:  * This program is free software; you can redistribute it and/or                       *
        !            14:  * modify it under the terms of the GNU General Public License                         *
        !            15:  * as published by the Free Software Foundation; either version 2                      *
        !            16:  * of the License, or (at your option) any later version.                                      *
        !            17:  * See the GNU General Public License for more details: gpl.txt or                     *
        !            18:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
        !            19:  *                                                                                                                                                     *
        !            20:  * Anonymous FTP access to the most recent released source is available at     *
        !            21:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            22:  *                                                                                                                                                     *
        !            23:  * Anonymous CVS access to the development source and modification history     *
        !            24:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            26:  *     (just hit return, no password is necessary)                                                     *
        !            27:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            28:  *                                                                                                                                                     *
        !            29:  * For Synchronet coding style and modification guidelines, see                                *
        !            30:  * http://www.synchro.net/source.html                                                                          *
        !            31:  *                                                                                                                                                     *
        !            32:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            33:  * format) via e-mail to [email protected]                                                                      *
        !            34:  *                                                                                                                                                     *
        !            35:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            36:  ****************************************************************************/
        !            37: 
        !            38: #include "sbbs.h"
        !            39: #include "cmdshell.h"
        !            40: 
        !            41: /****************************************************************************/
        !            42: /* This function is invoked when a user enters "NEW" at the NN: prompt         */
        !            43: /* Prompts user for personal information and then sends feedback to sysop.  */
        !            44: /* Called from function waitforcall                                                                                    */
        !            45: /****************************************************************************/
        !            46: BOOL sbbs_t::newuser()
        !            47: {
        !            48:        char    c,str[512];
        !            49:        char    tmp[512];
        !            50:        uint    i;
        !            51:        long    kmode;
        !            52:        bool    usa;
        !            53: 
        !            54: #if 0
        !            55:        if(cur_rate<cfg.node_minbps) {
        !            56:                bprintf(text[MinimumModemSpeed],cfg.node_minbps);
        !            57:                sprintf(str,"%stooslow.msg",cfg.text_dir);
        !            58:                if(fexist(str))
        !            59:                        printfile(str,0);
        !            60:                sprintf(str,"New user modem speed: %lu<%u"
        !            61:                        ,cur_rate,cfg.node_minbps);
        !            62:                logline("N!",str);
        !            63:                hangup();
        !            64:                return(FALSE); 
        !            65:        }
        !            66: #endif
        !            67: 
        !            68:        getnodedat(cfg.node_num,&thisnode,0);
        !            69:        if(thisnode.misc&NODE_LOCK) {
        !            70:                bputs(text[NodeLocked]);
        !            71:                logline("N!","New user locked node logon attempt");
        !            72:                hangup();
        !            73:                return(FALSE); 
        !            74:        }
        !            75: 
        !            76:        if(cfg.sys_misc&SM_CLOSED) {
        !            77:                bputs(text[NoNewUsers]);
        !            78:                hangup();
        !            79:                return(FALSE); 
        !            80:        }
        !            81:        getnodedat(cfg.node_num,&thisnode,1);
        !            82:        thisnode.status=NODE_NEWUSER;
        !            83:        thisnode.connection=0xffff;
        !            84:        putnodedat(cfg.node_num,&thisnode);
        !            85:        memset(&useron,0,sizeof(user_t));         /* Initialize user info to null */
        !            86:        if(cfg.new_pass[0] && online==ON_REMOTE) {
        !            87:                c=0;
        !            88:                while(++c<4) {
        !            89:                        bputs(text[NewUserPasswordPrompt]);
        !            90:                        getstr(str,40,K_UPPER);
        !            91:                        if(!strcmp(str,cfg.new_pass))
        !            92:                                break;
        !            93:                        sprintf(tmp,"NUP Attempted: '%s'",str);
        !            94:                        logline("N!",tmp); 
        !            95:                }
        !            96:                if(c==4) {
        !            97:                        sprintf(str,"%snupguess.msg",cfg.text_dir);
        !            98:                        if(fexist(str))
        !            99:                                printfile(str,P_NOABORT);
        !           100:                        hangup();
        !           101:                        return(FALSE); 
        !           102:                } 
        !           103:        }
        !           104: 
        !           105:        /* Sets defaults per sysop config */
        !           106:        useron.misc|=(cfg.new_misc&~(DELETED|INACTIVE|QUIET|NETMAIL));
        !           107:        useron.qwk=QWK_DEFAULT;
        !           108:        useron.firston=useron.laston=useron.pwmod=time(NULL);
        !           109:        if(cfg.new_expire) {
        !           110:                now=time(NULL);
        !           111:                useron.expire=now+((long)cfg.new_expire*24L*60L*60L); 
        !           112:        } else
        !           113:                useron.expire=0;
        !           114:        useron.sex=' ';
        !           115:        useron.prot=cfg.new_prot;
        !           116:        SAFECOPY(useron.note,cid);              /* Caller ID if supported, NULL otherwise */
        !           117:        if((i=userdatdupe(0,U_NOTE,LEN_NOTE,cid,true))!=0) {    /* Duplicate IP address */
        !           118:                sprintf(useron.comment,"Warning: same IP address as user #%d %s"
        !           119:                        ,i,username(&cfg,i,str));
        !           120:                logline("N!",useron.comment); 
        !           121:        }
        !           122: 
        !           123:        SAFECOPY(useron.alias,"New");     /* just for status line */
        !           124:        SAFECOPY(useron.modem,connection);
        !           125:        if(!lastuser(&cfg)) {   /* Automatic sysop access for first user */
        !           126:                bprintf("Creating sysop account... System password required.\r\n");
        !           127:                if(!chksyspass())
        !           128:                        return(FALSE); 
        !           129:                useron.level=99;
        !           130:                useron.exempt=useron.flags1=useron.flags2=0xffffffffUL;
        !           131:                useron.flags3=useron.flags4=0xffffffffUL;
        !           132:                useron.rest=0L; 
        !           133:        } else {
        !           134:                useron.level=cfg.new_level;
        !           135:                useron.flags1=cfg.new_flags1;
        !           136:                useron.flags2=cfg.new_flags2;
        !           137:                useron.flags3=cfg.new_flags3;
        !           138:                useron.flags4=cfg.new_flags4;
        !           139:                useron.rest=cfg.new_rest;
        !           140:                useron.exempt=cfg.new_exempt; 
        !           141:        }
        !           142: 
        !           143:        useron.cdt=cfg.new_cdt;
        !           144:        useron.min=cfg.new_min;
        !           145:        useron.freecdt=cfg.level_freecdtperday[useron.level];
        !           146: 
        !           147:        if(cfg.total_fcomps)
        !           148:                SAFECOPY(useron.tmpext,cfg.fcomp[0]->ext);
        !           149:        else
        !           150:                SAFECOPY(useron.tmpext,"ZIP");
        !           151: 
        !           152:        useron.shell=cfg.new_shell;
        !           153: 
        !           154:        useron.alias[0]=0;
        !           155: 
        !           156:        kmode=(cfg.uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL;
        !           157:        if(!(cfg.uq&UQ_NOUPRLWR))
        !           158:                kmode|=K_UPRLWR;
        !           159: 
        !           160:        while(online) {
        !           161: 
        !           162:                if(autoterm || yesno(text[AutoTerminalQ])) {
        !           163:                        useron.misc|=AUTOTERM;
        !           164:                        useron.misc|=autoterm; 
        !           165:                } else
        !           166:                        useron.misc&=~AUTOTERM;
        !           167: 
        !           168:                if(!(useron.misc&AUTOTERM)) {
        !           169:                        if(yesno(text[AnsiTerminalQ]))
        !           170:                                useron.misc|=ANSI; 
        !           171:                        else
        !           172:                                useron.misc&=~ANSI;
        !           173:                }
        !           174: 
        !           175:                if(useron.misc&ANSI) {
        !           176:                        useron.rows=0;  /* Auto-rows */
        !           177:                        if(useron.misc&(RIP|WIP|HTML) || yesno(text[ColorTerminalQ]))
        !           178:                                useron.misc|=COLOR; 
        !           179:                        else
        !           180:                                useron.misc&=~COLOR;
        !           181:                }
        !           182:                else
        !           183:                        useron.rows=24;
        !           184:                if(!yesno(text[ExAsciiTerminalQ]))
        !           185:                        useron.misc|=NO_EXASCII;
        !           186:                else
        !           187:                        useron.misc&=~NO_EXASCII;
        !           188: 
        !           189: #ifdef USE_CRYPTLIB
        !           190:                if((sys_status&SS_RLOGIN || sys_status&SS_SSH) && rlogin_name[0])
        !           191: #else
        !           192:                if(sys_status&SS_RLOGIN && rlogin_name[0])
        !           193: #endif
        !           194:                        SAFECOPY(useron.alias,rlogin_name);
        !           195: 
        !           196:                while(online) {
        !           197:                        if(cfg.uq&UQ_ALIASES)
        !           198:                                bputs(text[EnterYourAlias]);
        !           199:                        else
        !           200:                                bputs(text[EnterYourRealName]);
        !           201:                        getstr(useron.alias,LEN_ALIAS,kmode);
        !           202:                        truncsp(useron.alias);
        !           203:                        if(useron.alias[0]<=' ' || !isalpha(useron.alias[0])
        !           204:                                || alias(&cfg,useron.alias,tmp)!=useron.alias
        !           205:                                || !stricmp(useron.alias,cfg.sys_id)
        !           206:                                || strchr(useron.alias,0xff)
        !           207:                                || matchuser(&cfg,useron.alias,TRUE /* sysop_alias */) 
        !           208:                                || trashcan(useron.alias,"name")
        !           209:                                || (!(cfg.uq&UQ_ALIASES) && !strchr(useron.alias,' '))) {
        !           210:                                bputs(text[YouCantUseThatName]);
        !           211:                                if(!yesno(text[ContinueQ]))
        !           212:                                        return(FALSE);
        !           213:                                continue; 
        !           214:                        }
        !           215:                        break; 
        !           216:                }
        !           217:                if(!online) return(FALSE);
        !           218:                if(cfg.uq&UQ_ALIASES && cfg.uq&UQ_REALNAME) {
        !           219:                        while(online) {
        !           220:                                bputs(text[EnterYourRealName]);
        !           221:                                if(!getstr(useron.name,LEN_NAME,kmode)
        !           222:                                        || trashcan(useron.name,"name")
        !           223:                                        || strchr(useron.name,0xff)
        !           224:                                        || !strchr(useron.name,' ')
        !           225:                                        || (cfg.uq&UQ_DUPREAL
        !           226:                                                && userdatdupe(useron.number,U_NAME,LEN_NAME
        !           227:                                                        ,useron.name,0)))
        !           228:                                        bputs(text[YouCantUseThatName]);
        !           229:                                else
        !           230:                                        break; 
        !           231:                                if(!yesno(text[ContinueQ]))
        !           232:                                        return(FALSE);
        !           233:                        } 
        !           234:                }
        !           235:                else if(cfg.uq&UQ_COMPANY) {
        !           236:                                bputs(text[EnterYourCompany]);
        !           237:                                getstr(useron.name,LEN_NAME,(cfg.uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL); 
        !           238:                }
        !           239:                if(!useron.name[0])
        !           240:                        SAFECOPY(useron.name,useron.alias);
        !           241:                if(!online) return(FALSE);
        !           242:                if(!useron.handle[0])
        !           243:                        sprintf(useron.handle,"%.*s",LEN_HANDLE,useron.alias);
        !           244:                while(cfg.uq&UQ_HANDLE && online) {
        !           245:                        bputs(text[EnterYourHandle]);
        !           246:                        if(!getstr(useron.handle,LEN_HANDLE
        !           247:                                ,K_LINE|K_EDIT|K_AUTODEL|(cfg.uq&UQ_NOEXASC))
        !           248:                                || strchr(useron.handle,0xff)
        !           249:                                || (cfg.uq&UQ_DUPHAND
        !           250:                                        && userdatdupe(0,U_HANDLE,LEN_HANDLE,useron.handle,0))
        !           251:                                || trashcan(useron.handle,"name"))
        !           252:                                bputs(text[YouCantUseThatName]);
        !           253:                        else
        !           254:                                break; 
        !           255:                        if(!yesno(text[ContinueQ]))
        !           256:                                return(FALSE);
        !           257:                }
        !           258:                if(!online) return(FALSE);
        !           259:                if(cfg.uq&UQ_ADDRESS)
        !           260:                        while(online) {            /* Get address and zip code */
        !           261:                                bputs(text[EnterYourAddress]);
        !           262:                                if(getstr(useron.address,LEN_ADDRESS,kmode))
        !           263:                                        break; 
        !           264:                        }
        !           265:                if(!online) return(FALSE);
        !           266:                while(cfg.uq&UQ_LOCATION && online) {
        !           267:                        bputs(text[EnterYourCityState]);
        !           268:                        if(getstr(useron.location,LEN_LOCATION,kmode)
        !           269:                                && (cfg.uq&UQ_NOCOMMAS || strchr(useron.location,',')))
        !           270:                                break;
        !           271:                        bputs("\r\nYou must include a comma between the city and state.\r\n");
        !           272:                        useron.location[0]=0; 
        !           273:                }
        !           274:                if(cfg.uq&UQ_ADDRESS)
        !           275:                        while(online) {
        !           276:                                bputs(text[EnterYourZipCode]);
        !           277:                                if(getstr(useron.zipcode,LEN_ZIPCODE
        !           278:                                        ,K_UPPER|(cfg.uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL))
        !           279:                                        break; 
        !           280:                        }
        !           281:                if(!online) return(FALSE);
        !           282:                if(cfg.uq&UQ_PHONE) {
        !           283:                        usa=yesno(text[CallingFromNorthAmericaQ]);
        !           284:                        while(online) {
        !           285:                                bputs(text[EnterYourPhoneNumber]);
        !           286:                                if(!usa) {
        !           287:                                        if(getstr(useron.phone,LEN_PHONE
        !           288:                                                ,K_UPPER|K_LINE|(cfg.uq&UQ_NOEXASC)|K_EDIT|K_AUTODEL)<5)
        !           289:                                                continue; 
        !           290:                                }
        !           291:                                else {
        !           292:                                        if(gettmplt(useron.phone,cfg.sys_phonefmt
        !           293:                                                ,K_LINE|(cfg.uq&UQ_NOEXASC)|K_EDIT)<strlen(cfg.sys_phonefmt))
        !           294:                                                continue; 
        !           295:                                }
        !           296:                                if(!trashcan(useron.phone,"phone"))
        !           297:                                        break; 
        !           298:                        } 
        !           299:                }
        !           300:                if(!online) return(FALSE);
        !           301:                if(cfg.uq&UQ_SEX) {
        !           302:                        bputs(text[EnterYourSex]);
        !           303:                        useron.sex=(char)getkeys("MF",0); 
        !           304:                }
        !           305:                while(cfg.uq&UQ_BIRTH && online) {
        !           306:                        bprintf(text[EnterYourBirthday]
        !           307:                                ,cfg.sys_misc&SM_EURODATE ? "DD/MM/YY" : "MM/DD/YY");
        !           308:                        if(gettmplt(useron.birth,"nn/nn/nn",K_EDIT)==8 && getage(&cfg,useron.birth))
        !           309:                                break; 
        !           310:                }
        !           311:                if(!online) return(FALSE);
        !           312:                while(!(sys_status&SS_RLOGIN) && !(cfg.uq&UQ_NONETMAIL) && online) {
        !           313:                        bputs(text[EnterNetMailAddress]);
        !           314:                        if(getstr(useron.netmail,LEN_NETMAIL,K_EDIT|K_AUTODEL|K_LINE)
        !           315:                                && !trashcan(useron.netmail,"email"))
        !           316:                                break;
        !           317:                }
        !           318:                if(useron.netmail[0] && cfg.sys_misc&SM_FWDTONET && yesno(text[ForwardMailQ]))
        !           319:                        useron.misc|=NETMAIL;
        !           320:                else 
        !           321:                        useron.misc&=~NETMAIL;
        !           322:                if(yesno(text[UserInfoCorrectQ]))
        !           323:                        break; 
        !           324:        }
        !           325:        if(!online) return(FALSE);
        !           326:        sprintf(str,"New user: %s",useron.alias);
        !           327:        logline("N",str);
        !           328:        if(!online) return(FALSE);
        !           329:        CLS;
        !           330:        sprintf(str,"%ssbbs.msg",cfg.text_dir);
        !           331:        printfile(str,P_NOABORT);
        !           332:        if(lncntr)
        !           333:                pause();
        !           334:        CLS;
        !           335:        sprintf(str,"%ssystem.msg",cfg.text_dir);
        !           336:        printfile(str,P_NOABORT);
        !           337:        if(lncntr)
        !           338:                pause();
        !           339:        CLS;
        !           340:        sprintf(str,"%snewuser.msg",cfg.text_dir);
        !           341:        printfile(str,P_NOABORT);
        !           342:        if(lncntr)
        !           343:                pause();
        !           344:        CLS;
        !           345:        answertime=time(NULL);          /* could take 10 minutes to get this far */
        !           346: 
        !           347:        /* Default editor (moved here, after terminal type setup Jan-2003) */
        !           348:        for(i=0;i<cfg.total_xedits;i++)
        !           349:                if(!stricmp(cfg.xedit[i]->code,cfg.new_xedit) && chk_ar(cfg.xedit[i]->ar,&useron))
        !           350:                        break;
        !           351:        if(i<cfg.total_xedits)
        !           352:                useron.xedit=i+1;
        !           353: 
        !           354:        if(cfg.total_xedits && cfg.uq&UQ_XEDIT) {
        !           355:                if(yesno("Use an external message editor")) {
        !           356:                        for(i=0;i<cfg.total_xedits;i++)
        !           357:                                uselect(1,i,"External Editor",cfg.xedit[i]->name,cfg.xedit[i]->ar);
        !           358:                        if((int)(i=uselect(0,useron.xedit ? useron.xedit-1 : 0,0,0,0))>=0)
        !           359:                                useron.xedit=i+1; 
        !           360:                } else
        !           361:                        useron.xedit=0;
        !           362:        }
        !           363: 
        !           364:        if(cfg.total_shells>1 && cfg.uq&UQ_CMDSHELL) {
        !           365:                for(i=0;i<cfg.total_shells;i++)
        !           366:                        uselect(1,i,"Command Shell",cfg.shell[i]->name,cfg.shell[i]->ar);
        !           367:                if((int)(i=uselect(0,useron.shell,0,0,0))>=0)
        !           368:                        useron.shell=i; 
        !           369:        }
        !           370: 
        !           371:        if(rlogin_pass[0] && chkpass(rlogin_pass,&useron,true)) {
        !           372:                CRLF;
        !           373:                SAFECOPY(useron.pass, rlogin_pass);
        !           374:        }
        !           375:        else {
        !           376:                c=0;
        !           377:                while(c<LEN_PASS) {                             /* Create random password */
        !           378:                        useron.pass[c]=sbbs_random(43)+'0';
        !           379:                        if(isalnum(useron.pass[c]))
        !           380:                                c++; 
        !           381:                }
        !           382:                useron.pass[c]=0;
        !           383: 
        !           384:                bprintf(text[YourPasswordIs],useron.pass);
        !           385: 
        !           386:                if(cfg.sys_misc&SM_PWEDIT && yesno(text[NewPasswordQ]))
        !           387:                        while(online) {
        !           388:                                bputs(text[NewPassword]);
        !           389:                                getstr(str,LEN_PASS,K_UPPER|K_LINE);
        !           390:                                truncsp(str);
        !           391:                                if(chkpass(str,&useron,true)) {
        !           392:                                        SAFECOPY(useron.pass,str);
        !           393:                                        CRLF;
        !           394:                                        bprintf(text[YourPasswordIs],useron.pass);
        !           395:                                        break; 
        !           396:                                }
        !           397:                                CRLF; 
        !           398:                        }
        !           399: 
        !           400:                c=0;
        !           401:                while(online) {
        !           402:                        bprintf(text[NewUserPasswordVerify]);
        !           403:                        console|=CON_R_ECHOX;
        !           404:                        str[0]=0;
        !           405:                        getstr(str,LEN_PASS,K_UPPER);
        !           406:                        console&=~(CON_R_ECHOX|CON_L_ECHOX);
        !           407:                        if(!strcmp(str,useron.pass)) break;
        !           408:                        if(cfg.sys_misc&SM_ECHO_PW) 
        !           409:                                sprintf(tmp,"%s FAILED Password verification: '%s' instead of '%s'"
        !           410:                                        ,useron.alias
        !           411:                                        ,str
        !           412:                                        ,useron.pass);
        !           413:                        else
        !           414:                                sprintf(tmp,"%s FAILED Password verification"
        !           415:                                        ,useron.alias);
        !           416:                        logline(nulstr,tmp);
        !           417:                        if(++c==4) {
        !           418:                                logline("N!","Couldn't figure out password.");
        !           419:                                hangup(); 
        !           420:                        }
        !           421:                        bputs(text[IncorrectPassword]);
        !           422:                        bprintf(text[YourPasswordIs],useron.pass); 
        !           423:                }
        !           424:        }
        !           425: 
        !           426:        if(!online) return(FALSE);
        !           427:        if(cfg.new_magic[0]) {
        !           428:                bputs(text[MagicWordPrompt]);
        !           429:                str[0]=0;
        !           430:                getstr(str,50,K_UPPER);
        !           431:                if(strcmp(str,cfg.new_magic)) {
        !           432:                        bputs(text[FailedMagicWord]);
        !           433:                        sprintf(tmp,"%s failed magic word: '%s'",useron.alias,str);
        !           434:                        logline("N!",tmp);
        !           435:                        hangup(); 
        !           436:                }
        !           437:                if(!online) return(FALSE); 
        !           438:        }
        !           439: 
        !           440:        bputs(text[CheckingSlots]);
        !           441: 
        !           442:        if((i=newuserdat(&cfg,&useron))!=0) {
        !           443:                sprintf(str,"user record #%u",useron.number);
        !           444:                errormsg(WHERE,ERR_CREATE,str,i);
        !           445:                hangup();
        !           446:                return(FALSE); 
        !           447:        }
        !           448:        sprintf(str,"Created user record #%u: %s",useron.number,useron.alias);
        !           449:        logline(nulstr,str);
        !           450:        if(cfg.new_sif[0]) {
        !           451:                sprintf(str,"%suser/%4.4u.dat",cfg.data_dir,useron.number);
        !           452:                create_sif_dat(cfg.new_sif,str); 
        !           453:        }
        !           454:        if(!(cfg.uq&UQ_NODEF))
        !           455:                maindflts(&useron);
        !           456: 
        !           457:        delallmail(useron.number);
        !           458: 
        !           459:        if(useron.number!=1 && cfg.node_valuser) {
        !           460:                sprintf(str,"%sfeedback.msg",cfg.text_dir);
        !           461:                CLS;
        !           462:                printfile(str,P_NOABORT);
        !           463:                sprintf(str,text[NewUserFeedbackHdr]
        !           464:                        ,nulstr,getage(&cfg,useron.birth),useron.sex,useron.birth
        !           465:                        ,useron.name,useron.phone,useron.comp,useron.modem);
        !           466:                email(cfg.node_valuser,str,"New User Validation",WM_EMAIL|WM_SUBJ_RO);
        !           467:                if(!useron.fbacks && !useron.emails) {
        !           468:                        if(online) {                                            /* didn't hang up */
        !           469:                                bprintf(text[NoFeedbackWarning],username(&cfg,cfg.node_valuser,tmp));
        !           470:                                email(cfg.node_valuser,str,"New User Validation",WM_EMAIL|WM_SUBJ_RO);
        !           471:                                } /* give 'em a 2nd try */
        !           472:                        if(!useron.fbacks && !useron.emails) {
        !           473:                        bprintf(text[NoFeedbackWarning],username(&cfg,cfg.node_valuser,tmp));
        !           474:                                logline("N!","Aborted feedback");
        !           475:                                hangup();
        !           476:                                putuserrec(&cfg,useron.number,U_COMMENT,60,"Didn't leave feedback");
        !           477:                                putuserrec(&cfg,useron.number,U_MISC,8
        !           478:                                        ,ultoa(useron.misc|DELETED,tmp,16));
        !           479:                                putusername(&cfg,useron.number,nulstr);
        !           480:                                return(FALSE); 
        !           481:                        } 
        !           482:                } 
        !           483:        }
        !           484: 
        !           485:        answertime=starttime=time(NULL);          /* set answertime to now */
        !           486: 
        !           487: #ifdef JAVASCRIPT
        !           488:        js_create_user_objects();
        !           489: #endif
        !           490: 
        !           491:        if(cfg.newuser_mod[0])
        !           492:                exec_bin(cfg.newuser_mod,&main_csi);
        !           493:        user_event(EVENT_NEWUSER);
        !           494:        getuserdat(&cfg,&useron);       // In case event(s) modified user data
        !           495:        logline("N+","Successful new user logon");
        !           496:        sys_status|=SS_NEWUSER;
        !           497: 
        !           498:        return(TRUE);
        !           499: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.