Annotation of sbbs/sbbs2/logon.c, revision 1.1.1.1

1.1       root        1: #line 1 "LOGON.C"
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: /****************************************************************************/
                      6: /* Functions pertaining to the logging on and off of a user                                    */
                      7: /****************************************************************************/
                      8: 
                      9: #include "sbbs.h"
                     10: #include "cmdshell.h"
                     11: 
                     12: extern char qwklogon,onquiet;
                     13: 
                     14: /****************************************************************************/
                     15: /* Called once upon each user logging on the board                                                     */
                     16: /* Returns 1 if user passed logon, 0 if user failed.                                           */
                     17: /****************************************************************************/
                     18: char logon()
                     19: {
                     20:        char    str[256],c;
                     21:        int     file;
                     22:        uint    i,j,k,mailw;
                     23:        ulong   totallogons;
                     24:        node_t  node;
                     25:        FILE    *stream;
                     26:        struct tm *gm;
                     27: 
                     28: now=time(NULL);
                     29: gm=localtime(&now);
                     30: if(!useron.number)
                     31:        return(0);
                     32: 
                     33: if(useron.rest&FLAG('Q'))
                     34:     qwklogon=1;
                     35: if(SYSOP && ((online==ON_REMOTE && !(sys_misc&SM_R_SYSOP))
                     36:     || (online==ON_LOCAL && !(sys_misc&SM_L_SYSOP))))
                     37:        return(0);
                     38: if(cur_rate<node_minbps && !(useron.exempt&FLAG('M'))) {
                     39:     bprintf(text[MinimumModemSpeed],node_minbps);
                     40:     sprintf(str,"%sTOOSLOW.MSG",text_dir);
                     41:     if(fexist(str))
                     42:         printfile(str,0);
                     43:     sprintf(str,"(%04u)  %-25s  Modem speed: %u<%u"
                     44:         ,useron.number,useron.alias,cur_rate,node_minbps);
                     45:     logline("+!",str);
                     46:        return(0); }
                     47: 
                     48: if(useron.rest&FLAG('G')) {     /* Guest account */
                     49:     useron.misc=(new_misc&(~ASK_NSCAN));
                     50:        useron.rows=0;
                     51:        useron.misc&=~(ANSI|RIP|WIP|NO_EXASCII|COLOR);
                     52:     useron.misc|=autoterm;
                     53:     if(!(useron.misc&ANSI) && yesno(text[AnsiTerminalQ]))
                     54:         useron.misc|=ANSI;
                     55:        if(useron.misc&(RIP|WIP)
                     56:                || (useron.misc&ANSI && yesno(text[ColorTerminalQ])))
                     57:         useron.misc|=COLOR;
                     58:        if(!yesno(text[ExAsciiTerminalQ]))
                     59:                useron.misc|=NO_EXASCII;
                     60:     for(i=0;i<total_xedits;i++)
                     61:         if(!stricmp(xedit[i]->code,new_xedit)
                     62:             && chk_ar(xedit[i]->ar,useron))
                     63:             break;
                     64:     if(i<total_xedits)
                     65:         useron.xedit=i+1;
                     66:     else
                     67:         useron.xedit=0;
                     68:        useron.prot=new_prot;
                     69:     useron.shell=new_shell; }
                     70: 
                     71: if(node_dollars_per_call) {
                     72:     adjustuserrec(useron.number,U_CDT,10
                     73:         ,cdt_per_dollar*node_dollars_per_call);
                     74:     bprintf(text[CreditedAccount]
                     75:         ,cdt_per_dollar*node_dollars_per_call);
                     76:     sprintf(str,"%s #%u was billed $%d T: %u seconds"
                     77:         ,useron.alias,useron.number
                     78:         ,node_dollars_per_call,(uint)now-answertime);
                     79:     logline("$+",str);
                     80:     hangup();
                     81:        return(0); }
                     82: 
                     83: //lclini(node_scrnlen-1);
                     84: 
                     85: if(!chk_ar(node_ar,useron)) {
                     86:     bputs(text[NoNodeAccess]);
                     87:     sprintf(str,"(%04u)  %-25s  Insufficient node access"
                     88:         ,useron.number,useron.alias);
                     89:     logline("+!",str);
                     90:        return(0); }
                     91: 
                     92: getnodedat(node_num,&thisnode,1);
                     93: if(thisnode.misc&NODE_LOCK) {
                     94:        putnodedat(node_num,thisnode);  /* must unlock! */
                     95:     if(!SYSOP && !(useron.exempt&FLAG('N'))) {
                     96:         bputs(text[NodeLocked]);
                     97:         sprintf(str,"(%04u)  %-25s  Locked node logon attempt"
                     98:             ,useron.number,useron.alias);
                     99:         logline("+!",str);
                    100:                return(0); }
                    101:     if(yesno(text[RemoveNodeLockQ])) {
                    102:                getnodedat(node_num,&thisnode,1);
                    103:         logline("S-","Removed Node Lock");
                    104:                thisnode.misc&=~NODE_LOCK; }
                    105:        else
                    106:                getnodedat(node_num,&thisnode,1); }
                    107: 
                    108: if(onquiet || (useron.exempt&FLAG('Q') && useron.misc&QUIET))
                    109:     thisnode.status=NODE_QUIET;
                    110: else
                    111:     thisnode.status=NODE_INUSE;
                    112: onquiet=0;
                    113: action=thisnode.action=NODE_LOGN;
                    114: if(online==ON_LOCAL)
                    115:     thisnode.connection=0;
                    116: else
                    117:     thisnode.connection=cur_rate;
                    118: thisnode.misc&=~(NODE_ANON|NODE_INTR|NODE_MSGW|NODE_POFF|NODE_AOFF);
                    119: if(useron.chat&CHAT_NOACT)
                    120:     thisnode.misc|=NODE_AOFF;
                    121: if(useron.chat&CHAT_NOPAGE)
                    122:     thisnode.misc|=NODE_POFF;
                    123: thisnode.useron=useron.number;
                    124: putnodedat(node_num,thisnode);
                    125: 
                    126: getusrsubs();
                    127: getusrdirs();
                    128: 
                    129: if(useron.misc&CURSUB && !(useron.rest&FLAG('G'))) {
                    130:     for(i=0;i<usrgrps;i++) {
                    131:                for(j=0;j<usrsubs[i];j++) {
                    132:                        if(!strcmp(sub[usrsub[i][j]]->code,useron.cursub))
                    133:                                break; }
                    134:         if(j<usrsubs[i]) {
                    135:             curgrp=i;
                    136:             cursub[i]=j;
                    137:             break; } }
                    138:        for(i=0;i<usrlibs;i++) {
                    139:         for(j=0;j<usrdirs[i];j++)
                    140:                        if(!strcmp(dir[usrdir[i][j]]->code,useron.curdir))
                    141:                 break;
                    142:         if(j<usrdirs[i]) {
                    143:             curlib=i;
                    144:             curdir[i]=j;
                    145:             break; } } }
                    146: 
                    147: 
                    148: if(useron.misc&AUTOTERM) {
                    149:     useron.misc&=~(ANSI|RIP|WIP);
                    150:     useron.misc|=autoterm; }
                    151: 
                    152: if(!chk_ar(shell[useron.shell]->ar,useron)) {
                    153:     useron.shell=new_shell;
                    154:     if(!chk_ar(shell[useron.shell]->ar,useron)) {
                    155:         for(i=0;i<total_shells;i++)
                    156:             if(chk_ar(shell[i]->ar,useron))
                    157:                 break;
                    158:         if(i==total_shells)
                    159:             useron.shell=0; } }
                    160: 
                    161: statline=sys_def_stat;
                    162: statusline();
                    163: logon_ml=useron.level;
                    164: logontime=time(NULL);
                    165: starttime=logontime;
                    166: last_ns_time=ns_time=useron.ns_time;
                    167: // ns_time-=(useron.tlast*60); /* file newscan time == last logon time */
                    168: delfiles(temp_dir,"*.*");
                    169: sprintf(str,"%sMSGS\\N%3.3u.MSG",data_dir,node_num);
                    170: remove(str);            /* remove any pending node messages */
                    171: sprintf(str,"%sMSGS\\N%3.3u.IXB",data_dir,node_num);
                    172: remove(str);                   /* remove any pending node message indices */
                    173: 
                    174: if(!SYSOP && online==ON_REMOTE) {
                    175:        rioctl(IOCM|ABORT);     /* users can't abort anything */
                    176:        rioctl(IOCS|ABORT); }
                    177: 
                    178: CLS;
                    179: if(useron.rows)
                    180:        rows=useron.rows;
                    181: else if(online==ON_LOCAL)
                    182:        rows=node_scrnlen-1;
                    183: unixtodstr(logontime,str);
                    184: if(!strncmp(str,useron.birth,5) && !(useron.rest&FLAG('Q'))) {
                    185:        bputs(text[HappyBirthday]);
                    186:        pause();
                    187:        CLS;
                    188:        user_event(EVENT_BIRTHDAY); }
                    189: unixtodstr(useron.laston,tmp);
                    190: if(strcmp(str,tmp)) {                  /* str still equals logon time */
                    191:        useron.ltoday=1;
                    192:        useron.ttoday=useron.etoday=useron.ptoday=useron.textra=0;
                    193:        useron.freecdt=level_freecdtperday[useron.level]; }
                    194: else
                    195:        useron.ltoday++;
                    196: 
                    197: gettimeleft();
                    198: sprintf(str,"%sFILE\\%04u.DWN",data_dir,useron.number);
                    199: batch_add_list(str);
                    200: if(!qwklogon) {         /* QWK Nodes don't go through this */
                    201: 
                    202:        if(sys_pwdays
                    203:                && logontime>(useron.pwmod+((ulong)sys_pwdays*24UL*60UL*60UL))) {
                    204:                bprintf(text[TimeToChangePw],sys_pwdays);
                    205: 
                    206:                c=0;
                    207:                while(c<LEN_PASS) {                             /* Create random password */
                    208:                        str[c]=random(43)+48;
                    209:                        if(isalnum(str[c]))
                    210:                                c++; }
                    211:                str[c]=0;
                    212:                bprintf(text[YourPasswordIs],str);
                    213: 
                    214:                if(sys_misc&SM_PWEDIT && yesno(text[NewPasswordQ]))
                    215:                        while(online) {
                    216:                                bputs(text[NewPassword]);
                    217:                                getstr(str,LEN_PASS,K_UPPER|K_LINE);
                    218:                                truncsp(str);
                    219:                                if(chkpass(str,useron))
                    220:                                        break;
                    221:                                CRLF; }
                    222: 
                    223:                while(online) {
                    224:                        if(sys_misc&SM_PWEDIT) {
                    225:                                CRLF;
                    226:                                bputs(text[VerifyPassword]); }
                    227:                        else
                    228:                                bputs(text[NewUserPasswordVerify]);
                    229:                        console|=CON_R_ECHOX;
                    230:                        if(!(sys_misc&SM_ECHO_PW))
                    231:                                console|=CON_L_ECHOX;
                    232:                        getstr(tmp,LEN_PASS,K_UPPER);
                    233:                        console&=~(CON_R_ECHOX|CON_L_ECHOX);
                    234:                        if(strcmp(str,tmp)) {
                    235:                                bputs(text[Wrong]);
                    236:                                continue; }
                    237:                        break; }
                    238:                strcpy(useron.pass,str);
                    239:                useron.pwmod=time(NULL);
                    240:                putuserrec(useron.number,U_PWMOD,8,ultoa(useron.pwmod,str,16));
                    241:                bputs(text[PasswordChanged]);
                    242:                pause(); }
                    243:        if(useron.ltoday>level_callsperday[useron.level]
                    244:                && !(useron.exempt&FLAG('L'))) {
                    245:                bputs(text[NoMoreLogons]);
                    246:                sprintf(str,"(%04u)  %-25s  Out of logons"
                    247:                        ,useron.number,useron.alias);
                    248:                logline("+!",str);
                    249:                hangup();
                    250:                return(0); }
                    251:        if(useron.rest&FLAG('L') && useron.ltoday>1) {
                    252:                bputs(text[R_Logons]);
                    253:                sprintf(str,"(%04u)  %-25s  Out of logons"
                    254:                        ,useron.number,useron.alias);
                    255:                logline("+!",str);
                    256:                hangup();
                    257:                return(0); }
                    258:        if(!useron.name[0] && ((uq&UQ_ALIASES && uq&UQ_REALNAME)
                    259:                || uq&UQ_COMPANY))
                    260:                while(online) {
                    261:                        if(uq&UQ_ALIASES && uq&UQ_REALNAME)
                    262:                                bputs(text[EnterYourRealName]);
                    263:                        else
                    264:                                bputs(text[EnterYourCompany]);
                    265:                        getstr(useron.name,LEN_NAME,K_UPRLWR|(uq&UQ_NOEXASC));
                    266:                        if(uq&UQ_ALIASES && uq&UQ_REALNAME) {
                    267:                                if(trashcan(useron.name,"NAME") || !useron.name[0]
                    268:                                        || !strchr(useron.name,SP)
                    269:                                        || strchr(useron.name,0xff)
                    270:                                        || (uq&UQ_DUPREAL
                    271:                                                && userdatdupe(useron.number,U_NAME,LEN_NAME
                    272:                                                ,useron.name,0)))
                    273:                                        bputs(text[YouCantUseThatName]);
                    274:                                else
                    275:                                        break; }
                    276:                        else
                    277:                                break; }
                    278:        if(uq&UQ_HANDLE && !useron.handle[0]) {
                    279:                sprintf(useron.handle,"%.*s",LEN_HANDLE,useron.alias);
                    280:                while(online) {
                    281:                        bputs(text[EnterYourHandle]);
                    282:                        if(!getstr(useron.handle,LEN_HANDLE
                    283:                                ,K_LINE|K_EDIT|K_AUTODEL|(uq&UQ_NOEXASC))
                    284:                                || strchr(useron.handle,0xff)
                    285:                                || (uq&UQ_DUPHAND
                    286:                                        && userdatdupe(useron.number,U_HANDLE,LEN_HANDLE
                    287:                                        ,useron.handle,0))
                    288:                                || trashcan(useron.handle,"NAME"))
                    289:                                bputs(text[YouCantUseThatName]);
                    290:                        else
                    291:                                break; } }
                    292:        if(uq&UQ_LOCATION && !useron.location[0])
                    293:                while(online) {
                    294:                        bputs(text[EnterYourCityState]);
                    295:                        if(getstr(useron.location,LEN_LOCATION,K_UPRLWR|(uq&UQ_NOEXASC)))
                    296:                                break; }
                    297:        if(uq&UQ_ADDRESS && !useron.address[0])
                    298:                while(online) {
                    299:                        bputs(text[EnterYourAddress]);
                    300:                        if(getstr(useron.address,LEN_ADDRESS,K_UPRLWR|(uq&UQ_NOEXASC)))
                    301:                                break; }
                    302:        if(uq&UQ_ADDRESS && !useron.zipcode[0])
                    303:                while(online) {
                    304:                        bputs(text[EnterYourZipCode]);
                    305:                        if(getstr(useron.zipcode,LEN_ZIPCODE,K_UPPER|(uq&UQ_NOEXASC)))
                    306:                                break; }
                    307:        if(uq&UQ_PHONE && !useron.phone[0]) {
                    308:                i=yesno(text[CallingFromNorthAmericaQ]);
                    309:                while(online) {
                    310:                        bputs(text[EnterYourPhoneNumber]);
                    311:                        if(i) {
                    312:                                if(gettmplt(useron.phone,sys_phonefmt
                    313:                                        ,K_LINE|(uq&UQ_NOEXASC))<strlen(sys_phonefmt))
                    314:                      continue; }
                    315:                        else {
                    316:                                if(getstr(useron.phone,LEN_PHONE
                    317:                                        ,K_UPPER|(uq&UQ_NOEXASC))<5)
                    318:                                        continue; }
                    319:                        if(!trashcan(useron.phone,"PHONE"))
                    320:                                break; } }
                    321:        if(uq&UQ_COMP && !useron.comp[0])
                    322:                getcomputer(useron.comp);
                    323:        if(new_sif[0]) {
                    324:                sprintf(str,"%sUSER\\%4.4u.DAT",data_dir,useron.number);
                    325:                if(flength(str)<1L)
                    326:                        create_sif_dat(new_sif,str); } }
                    327: if(!online) {
                    328:        sprintf(str,"(%04u)  %-25s  Unsuccessful logon"
                    329:                ,useron.number,useron.alias);
                    330:     logline("+!",str);
                    331:        return(0); }
                    332: strcpy(useron.modem,connection);
                    333: useron.logons++;
                    334: putuserdat(useron);
                    335: getmsgptrs();
                    336: sys_status|=SS_USERON;          /* moved from further down */
                    337: 
                    338: if(useron.rest&FLAG('Q')) {
                    339:        sprintf(str,"(%04u)  %-25s  QWK Network Connection"
                    340:                ,useron.number,useron.alias);
                    341:        logline("++",str);
                    342:        return(1); }
                    343: 
                    344: /********************/
                    345: /* SUCCESSFUL LOGON */
                    346: /********************/
                    347: totallogons=logonstats();
                    348: sprintf(str,"(%04u)  %-25s  Logon %lu - %u"
                    349:        ,useron.number,useron.alias,totallogons,useron.ltoday);
                    350: logline("++",str);
                    351: 
                    352: if(!qwklogon && logon_mod[0])
                    353:        exec_bin(logon_mod,&main_csi);
                    354: 
                    355: if(thisnode.status!=NODE_QUIET) {
                    356:     sprintf(str,"%sLOGON.LST",data_dir);
                    357:     if((file=nopen(str,O_WRONLY|O_CREAT|O_APPEND))==-1) {
                    358:         errormsg(WHERE,ERR_OPEN,str,O_RDWR|O_CREAT|O_APPEND);
                    359:         return(0); }
                    360:     sprintf(str,text[LastFewCallersFmt],node_num
                    361:         ,totallogons,useron.alias
                    362:         ,sys_misc&SM_LISTLOC ? useron.location : useron.note
                    363:         ,gm->tm_hour,gm->tm_min
                    364:         ,connection,useron.ltoday);
                    365:     write(file,str,strlen(str));
                    366:     close(file); }
                    367: 
                    368: if(sys_logon[0])                               /* execute system logon event */
                    369:        external(cmdstr(sys_logon,nulstr,nulstr,NULL),EX_OUTR|EX_OUTL); /* EX_CC */
                    370: 
                    371: if(qwklogon)
                    372:     return(1);
                    373: 
                    374: sys_status|=SS_PAUSEON;        /* always force pause on during this section */
                    375: main_cmds=xfer_cmds=posts_read=0;
                    376: mailw=getmail(useron.number,0);
                    377: bprintf(text[SiSysName],sys_name);
                    378: bprintf(text[SiNodeNumberName],node_num,node_name);
                    379: bprintf(text[LiUserNumberName],useron.number,useron.alias);
                    380: bprintf(text[LiLogonsToday],useron.ltoday
                    381:        ,level_callsperday[useron.level]);
                    382: bprintf(text[LiTimeonToday],useron.ttoday
                    383:        ,level_timeperday[useron.level]+useron.min);
                    384: bprintf(text[LiMailWaiting],mailw);
                    385: strcpy(str,text[LiSysopIs]);
                    386: i=kbd_state();          /* Check scroll lock */
                    387: if(i&16 || (sys_chat_ar[0] && chk_ar(sys_chat_ar,useron)))
                    388:        strcat(str,text[LiSysopAvailable]);
                    389: else
                    390:        strcat(str,text[LiSysopNotAvailable]);
                    391: bprintf("%s\r\n\r\n",str);
                    392: if(sys_status&SS_EVENT)
                    393:        bputs(text[ReducedTime]);
                    394: getnodedat(node_num,&thisnode,1);
                    395: thisnode.misc&=~(NODE_AOFF|NODE_POFF);
                    396: if(useron.chat&CHAT_NOACT)
                    397:     thisnode.misc|=NODE_AOFF;
                    398: if(useron.chat&CHAT_NOPAGE)
                    399:     thisnode.misc|=NODE_POFF;
                    400: putnodedat(node_num,thisnode);
                    401: getsmsg(useron.number);                /* Moved from further down */
                    402: SYNC;
                    403: c=0;
                    404: for(i=1;i<=sys_nodes;i++)
                    405:        if(i!=node_num) {
                    406:                getnodedat(i,&node,0);
                    407:                if(node.status==NODE_INUSE
                    408:                        || ((node.status==NODE_QUIET || node.errors) && SYSOP)) {
                    409:                        if(!c)
                    410:                                bputs(text[NodeLstHdr]);
                    411:                        printnodedat(i,node);
                    412:                        c=1; }
                    413:                if(node.status==NODE_INUSE && i!=node_num && node.useron==useron.number
                    414:                        && !SYSOP && !(useron.exempt&FLAG('G'))) {
                    415:                        strcpy(tmp,"On two nodes at the same time");
                    416:                        sprintf(str,"(%04u)  %-25s  %s"
                    417:                                ,useron.number,useron.alias,tmp);
                    418:                        logline("+!",str);
                    419:                        errorlog(tmp);
                    420:                        bputs(text[UserOnTwoNodes]);
                    421:                        hangup();
                    422:                        return(0); }
                    423:                if(thisnode.status!=NODE_QUIET
                    424:                        && (node.status==NODE_INUSE || node.status==NODE_QUIET)
                    425:                        && !(node.misc&NODE_AOFF) && node.useron!=useron.number) {
                    426:                        sprintf(str,text[NodeLoggedOnAtNbps]
                    427:                                ,node_num
                    428:                                ,thisnode.misc&NODE_ANON ? text[UNKNOWN_USER] : useron.alias
                    429:                                ,connection);
                    430:                        putnmsg(i,str); } }
                    431: 
                    432: if(sys_exp_warn && useron.expire && useron.expire>now /* Warn user of coming */
                    433:        && (useron.expire-now)/(1440L*60L)<=sys_exp_warn) /* expiration */
                    434:        bprintf(text[AccountWillExpireInNDays],(useron.expire-now)/(1440L*60L));
                    435: 
                    436: if(criterrs && SYSOP)
                    437:        bprintf(text[CriticalErrors],criterrs);
                    438: if((i=getuserxfers(0,useron.number,0))!=0) {
                    439:        bprintf(text[UserXferForYou],i,i>1 ? "s" : nulstr); }
                    440: if((i=getuserxfers(useron.number,0,0))!=0) {
                    441:        bprintf(text[UnreceivedUserXfer],i,i>1 ? "s" : nulstr); }
                    442: SYNC;
                    443: sys_status&=~SS_PAUSEON;       /* Turn off the pause override flag */
                    444: if(online==ON_REMOTE)
                    445:        rioctl(IOSM|ABORT);             /* Turn abort ability on */
                    446: if(mailw) {
                    447:        if(yesno(text[ReadYourMailNowQ]))
                    448:                readmail(useron.number,MAIL_YOUR); }
                    449: lastnodemsg=0;
                    450: if(useron.misc&ASK_NSCAN && yesno(text[NScanAllGrpsQ]))
                    451:     scanallsubs(SCAN_NEW);
                    452: if(useron.misc&ASK_SSCAN && yesno(text[SScanAllGrpsQ]))
                    453:     scanallsubs(SCAN_TOYOU);
                    454: return(1);
                    455: }
                    456: 
                    457: /****************************************************************************/
                    458: /* Checks the system DSTS.DAB to see if it is a new day, if it is, all the  */
                    459: /* nodes' and the system's CSTS.DAB are added to, and the DSTS.DAB's daily  */
                    460: /* stats are cleared. Also increments the logon values in DSTS.DAB if       */
                    461: /* applicable.                                                              */
                    462: /****************************************************************************/
                    463: ulong logonstats()
                    464: {
                    465:     char str[256];
                    466:     int dsts,csts;
                    467:     uint i;
                    468:     struct date update;
                    469:     time_t update_t;
                    470:     stats_t stats;
                    471:     node_t node;
                    472: 
                    473: sprintf(str,"%sDSTS.DAB",ctrl_dir);
                    474: if((dsts=nopen(str,O_RDWR))==-1) {
                    475:     errormsg(WHERE,ERR_OPEN,str,O_RDWR);
                    476:     return(0L); }
                    477: read(dsts,&update_t,4);         /* Last updated         */
                    478: read(dsts,&stats.logons,4);     /* Total number of logons on system */
                    479: close(dsts);
                    480: if(update_t>now+(24L*60L*60L)) /* More than a day in the future? */
                    481:     errormsg(WHERE,ERR_CHK,"Daily stats time stamp",update_t);
                    482: unixtodos(update_t,&update,&curtime);
                    483: unixtodos(now,&date,&curtime);
                    484: if((date.da_day>update.da_day && date.da_mon==update.da_mon)
                    485:     || date.da_mon>update.da_mon || date.da_year>update.da_year) {
                    486: 
                    487:     sprintf(str,"New Day - Prev: %s ",timestr(&update_t));
                    488:     logentry("!=",str);
                    489: 
                    490:     sys_status|=SS_DAILY;       /* New Day !!! */
                    491:     sprintf(str,"%sLOGON.LST",data_dir);    /* Truncate logon list */
                    492:     if((dsts=nopen(str,O_TRUNC|O_CREAT|O_WRONLY))==-1) {
                    493:         errormsg(WHERE,ERR_OPEN,str,O_TRUNC|O_CREAT|O_WRONLY);
                    494:         return(0L); }
                    495:     close(dsts);
                    496:     for(i=0;i<=sys_nodes;i++) {
                    497:         if(i) {     /* updating a node */
                    498:             getnodedat(i,&node,1);
                    499:             node.misc|=NODE_EVENT;
                    500:             putnodedat(i,node); }
                    501:         sprintf(str,"%sDSTS.DAB",i ? node_path[i-1] : ctrl_dir);
                    502:         if((dsts=nopen(str,O_RDWR))==-1) /* node doesn't have stats yet */
                    503:             continue;
                    504:         sprintf(str,"%sCSTS.DAB",i ? node_path[i-1] : ctrl_dir);
                    505:         if((csts=nopen(str,O_WRONLY|O_APPEND|O_CREAT))==-1) {
                    506:             close(dsts);
                    507:             errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_APPEND|O_CREAT);
                    508:             continue; }
                    509:         lseek(dsts,8L,SEEK_SET);        /* Skip time and logons */
                    510:         write(csts,&now,4);
                    511:         read(dsts,&stats.ltoday,4);
                    512:         write(csts,&stats.ltoday,4);
                    513:         lseek(dsts,4L,SEEK_CUR);        /* Skip total time on */
                    514:         read(dsts,&stats.ttoday,4);
                    515:         write(csts,&stats.ttoday,4);
                    516:         read(dsts,&stats.uls,4);
                    517:         write(csts,&stats.uls,4);
                    518:         read(dsts,&stats.ulb,4);
                    519:         write(csts,&stats.ulb,4);
                    520:         read(dsts,&stats.dls,4);
                    521:         write(csts,&stats.dls,4);
                    522:         read(dsts,&stats.dlb,4);
                    523:         write(csts,&stats.dlb,4);
                    524:         read(dsts,&stats.ptoday,4);
                    525:         write(csts,&stats.ptoday,4);
                    526:         read(dsts,&stats.etoday,4);
                    527:         write(csts,&stats.etoday,4);
                    528:         read(dsts,&stats.ftoday,4);
                    529:         write(csts,&stats.ftoday,4);
                    530:         close(csts);
                    531:         lseek(dsts,0L,SEEK_SET);        /* Go back to beginning */
                    532:         write(dsts,&now,4);             /* Update time stamp  */
                    533:         lseek(dsts,4L,SEEK_CUR);        /* Skip total logons */
                    534:         stats.ltoday=0;
                    535:         write(dsts,&stats.ltoday,4);  /* Logons today to 0 */
                    536:         lseek(dsts,4L,SEEK_CUR);     /* Skip total time on */
                    537:         stats.ttoday=0;              /* Set all other today variables to 0 */
                    538:         write(dsts,&stats.ttoday,4);        /* Time on today to 0 */
                    539:         write(dsts,&stats.ttoday,4);        /* Uploads today to 0 */
                    540:         write(dsts,&stats.ttoday,4);        /* U/L Bytes today    */
                    541:         write(dsts,&stats.ttoday,4);        /* Download today     */
                    542:         write(dsts,&stats.ttoday,4);        /* Download bytes     */
                    543:         write(dsts,&stats.ttoday,4);        /* Posts today        */
                    544:         write(dsts,&stats.ttoday,4);        /* Emails today       */
                    545:         write(dsts,&stats.ttoday,4);        /* Feedback today     */
                    546:         write(dsts,&stats.ttoday,2);        /* New users Today    */
                    547:         close(dsts); } }
                    548: 
                    549: if(thisnode.status==NODE_QUIET)       /* Quiet users aren't counted */
                    550:     return(0L);
                    551: 
                    552: for(i=0;i<2;i++) {
                    553:     sprintf(str,"%sDSTS.DAB",i ? ctrl_dir : node_dir);
                    554:     if((dsts=nopen(str,O_RDWR))==-1) {
                    555:         errormsg(WHERE,ERR_OPEN,str,O_RDWR);
                    556:         return(0L); }
                    557:     lseek(dsts,4L,SEEK_SET);        /* Skip time stamp */
                    558:     read(dsts,&stats.logons,4);
                    559:     read(dsts,&stats.ltoday,4);
                    560:     stats.logons++;
                    561:     stats.ltoday++;
                    562:     lseek(dsts,4L,SEEK_SET);        /* Rewind back and overwrite */
                    563:     write(dsts,&stats.logons,4);
                    564:     write(dsts,&stats.ltoday,4);
                    565:     close(dsts); }
                    566: return(stats.logons);
                    567: }
                    568: 
                    569: 

unix.superglobalmegacorp.com

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