Annotation of sbbs/src/sbbs3/scfglib1.c, revision 1.1

1.1     ! root        1: /* scfglib1.c */
        !             2: 
        !             3: /* Synchronet configuration library routines */
        !             4: 
        !             5: /* $Id: scfglib1.c,v 1.56 2005/09/20 03:39:52 deuce 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 2004 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 "scfglib.h"
        !            40: 
        !            41: const char *scfgnulstr="";
        !            42: 
        !            43: /***********************************************************/
        !            44: /* These functions are called from here and must be linked */
        !            45: /***********************************************************/
        !            46: /***
        !            47:        nopen()
        !            48:        truncsp()
        !            49: ***/
        !            50: 
        !            51: BOOL allocerr(FILE* fp, char* error, long offset, char *fname, uint size)
        !            52: {
        !            53:        sprintf(error,"offset %ld in %s, allocating %u bytes of memory"
        !            54:                ,offset,fname,size);
        !            55:        fclose(fp);
        !            56:        return(FALSE);
        !            57: }
        !            58: 
        !            59: /****************************************************************************/
        !            60: /* Reads in NODE.CNF and initializes the associated variables                          */
        !            61: /****************************************************************************/
        !            62: BOOL read_node_cfg(scfg_t* cfg, char* error)
        !            63: {
        !            64:        char    c,str[MAX_PATH+1],fname[13];
        !            65:        int     i;
        !            66:        short   n;
        !            67:        long    offset=0;
        !            68:        FILE    *instream;
        !            69: 
        !            70:        strcpy(fname,"node.cnf");
        !            71:        sprintf(str,"%s%s",cfg->node_dir,fname);
        !            72:        if((instream=fnopen(NULL,str,O_RDONLY))==NULL) {
        !            73:                sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str);
        !            74:                return(FALSE); 
        !            75:        }
        !            76: 
        !            77:        get_int(cfg->node_num,instream);
        !            78:        if(!cfg->node_num) {
        !            79:                sprintf(error,"offset %ld in %s, Node number must be non-zero"
        !            80:                        ,offset,fname);
        !            81:                fclose(instream);
        !            82:                return(FALSE); 
        !            83:        }
        !            84:        get_str(cfg->node_name,instream);
        !            85:        get_str(cfg->node_phone,instream);
        !            86:        get_str(cfg->node_comspec,instream);
        !            87:        #ifdef __OS2__
        !            88:        if(!cfg->node_comspec[0])
        !            89:                strcpy(cfg->node_comspec,"C:\\OS2\\MDOS\\COMMAND.COM");
        !            90:        #endif
        !            91:        get_int(cfg->node_misc,instream);
        !            92:        get_int(cfg->node_ivt,instream);
        !            93:        get_int(cfg->node_swap,instream);
        !            94:        get_str(cfg->node_swapdir,instream);
        !            95:        get_int(cfg->node_valuser,instream);
        !            96:        get_int(cfg->node_minbps,instream);
        !            97:        get_str(cfg->node_arstr,instream);
        !            98:        cfg->node_ar=ARSTR(cfg->node_arstr, cfg);
        !            99: 
        !           100:        get_int(cfg->node_dollars_per_call,instream);
        !           101:        get_str(cfg->node_editor,instream);
        !           102:        get_str(cfg->node_viewer,instream);
        !           103:        get_str(cfg->node_daily,instream);
        !           104:        get_int(c,instream);
        !           105:        if(c) cfg->node_scrnlen=c;
        !           106:        get_int(cfg->node_scrnblank,instream);
        !           107:        get_str(cfg->text_dir,instream);                                /* ctrl directory */
        !           108:        get_str(cfg->text_dir,instream);                                /* text directory */
        !           109:        get_str(cfg->temp_dir,instream);                                /* temp directory */
        !           110: #if 0 /* removed Sep-9-2003, always use nodex/temp (rrs) */
        !           111:        if(!cfg->temp_dir[0])
        !           112: #endif
        !           113:                strcpy(cfg->temp_dir,"temp");
        !           114: 
        !           115:        for(i=0;i<10;i++)                                               /* WFC 0-9 DOS commands */
        !           116:                get_str(cfg->wfc_cmd[i],instream); 
        !           117:        for(i=0;i<12;i++)                                               /* WFC F1-F12 shrinking DOS cmds */
        !           118:                get_str(cfg->wfc_scmd[i],instream); 
        !           119:        get_str(cfg->mdm_hang,instream);
        !           120:        get_int(cfg->node_sem_check,instream);
        !           121:        if(!cfg->node_sem_check) cfg->node_sem_check=60;
        !           122:        get_int(cfg->node_stat_check,instream);
        !           123:        if(!cfg->node_stat_check) cfg->node_stat_check=10;
        !           124:        get_str(cfg->scfg_cmd,instream);
        !           125:        if(!cfg->scfg_cmd[0])
        !           126:                strcpy(cfg->scfg_cmd,"%!scfg %k");
        !           127:        get_int(cfg->sec_warn,instream);
        !           128:        if(!cfg->sec_warn)
        !           129:                cfg->sec_warn=180;
        !           130:        get_int(cfg->sec_hangup,instream);
        !           131:        if(!cfg->sec_hangup)
        !           132:                cfg->sec_hangup=300;
        !           133:        for(i=0;i<188;i++) {                            /* Unused - initialized to NULL */
        !           134:                fread(&n,1,2,instream);
        !           135:                offset+=2; }
        !           136:        for(i=0;i<256;i++) {                            /* Unused - initialized to 0xff */
        !           137:                fread(&n,1,2,instream);
        !           138:                offset+=2; }
        !           139: 
        !           140:        /***************/
        !           141:        /* Modem Stuff */
        !           142:        /***************/
        !           143: 
        !           144:        get_int(cfg->com_port,instream);
        !           145:        get_int(cfg->com_irq,instream);
        !           146:        get_int(cfg->com_base,instream);
        !           147:        get_int(cfg->com_rate,instream);
        !           148:        get_int(cfg->mdm_misc,instream);
        !           149:        get_str(cfg->mdm_init,instream);
        !           150:        get_str(cfg->mdm_spec,instream);
        !           151:        get_str(cfg->mdm_term,instream);
        !           152:        get_str(cfg->mdm_dial,instream);
        !           153:        get_str(cfg->mdm_offh,instream);
        !           154:        get_str(cfg->mdm_answ,instream);
        !           155:        get_int(cfg->mdm_reinit,instream);
        !           156:        get_int(cfg->mdm_ansdelay,instream);
        !           157:        get_int(cfg->mdm_rings,instream);
        !           158: 
        !           159:        get_int(cfg->mdm_results,instream);
        !           160: 
        !           161:        if(cfg->mdm_results) {
        !           162:                if((cfg->mdm_result=(mdm_result_t *)malloc(sizeof(mdm_result_t)*cfg->mdm_results))
        !           163:                        ==NULL)
        !           164:                return allocerr(instream,error,offset,fname,sizeof(mdm_result_t *)*cfg->mdm_results);
        !           165:        } else
        !           166:                cfg->mdm_result=NULL;
        !           167: 
        !           168:        for(i=0;i<cfg->mdm_results;i++) {
        !           169:                if(feof(instream)) break;
        !           170:                get_int(cfg->mdm_result[i].code,instream);
        !           171:                get_int(cfg->mdm_result[i].rate,instream);
        !           172:                get_int(cfg->mdm_result[i].cps,instream);
        !           173:                get_str(cfg->mdm_result[i].str,instream); 
        !           174:        }
        !           175:        cfg->mdm_results=i;
        !           176:        fclose(instream);
        !           177:        return(TRUE);
        !           178: }
        !           179: 
        !           180: /****************************************************************************/
        !           181: /* Reads in MAIN.CNF and initializes the associated variables                          */
        !           182: /****************************************************************************/
        !           183: BOOL read_main_cfg(scfg_t* cfg, char* error)
        !           184: {
        !           185:        char    str[MAX_PATH+1],fname[13],c;
        !           186:        short   i,j,n;
        !           187:        long    offset=0;
        !           188:        FILE    *instream;
        !           189: 
        !           190:        strcpy(fname,"main.cnf");
        !           191:        sprintf(str,"%s%s",cfg->ctrl_dir,fname);
        !           192:        if((instream=fnopen(NULL,str,O_RDONLY))==NULL) {
        !           193:                sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str);
        !           194:                return(FALSE); 
        !           195:        }
        !           196: 
        !           197:        get_str(cfg->sys_name,instream);
        !           198:        get_str(cfg->sys_id,instream);
        !           199:        get_str(cfg->sys_location,instream);
        !           200:        get_str(cfg->sys_phonefmt,instream);
        !           201:        get_str(cfg->sys_op,instream);
        !           202:        get_str(cfg->sys_guru,instream);
        !           203:        get_str(cfg->sys_pass,instream);
        !           204:        get_int(cfg->sys_nodes,instream);
        !           205: 
        !           206: #if 0  /* removed Jan-10-2003: cfg->node_num may be old or uninitialized */
        !           207:        if(!cfg->sys_nodes || cfg->sys_nodes<cfg->node_num || cfg->sys_nodes>MAX_NODES) {
        !           208:                if(!cfg->sys_nodes)
        !           209:                        sprintf(error,"Total nodes on system must be non-zero.");
        !           210:                else if(cfg->sys_nodes>MAX_NODES)
        !           211:                        sprintf(error,"Total nodes exceeds %u.",MAX_NODES);
        !           212:                else
        !           213:                        sprintf(error,"Total nodes (%u) < node number in NODE.CNF (%u)"
        !           214:                                ,cfg->sys_nodes,cfg->node_num);
        !           215:                fclose(instream);
        !           216:                return(FALSE); 
        !           217:        }
        !           218: #endif
        !           219: 
        !           220:        for(i=0;i<cfg->sys_nodes;i++) {
        !           221:                get_str(cfg->node_path[i],instream);
        !           222: #if defined(__unix__)
        !           223:                strlwr(cfg->node_path[i]);
        !           224: #endif
        !           225:        }
        !           226: 
        !           227:        get_str(cfg->data_dir,instream);                          /* data directory */
        !           228:        get_str(cfg->exec_dir,instream);                          /* exec directory */
        !           229: 
        !           230:        get_str(cfg->sys_logon,instream);
        !           231:        get_str(cfg->sys_logout,instream);
        !           232:        get_str(cfg->sys_daily,instream);
        !           233:        get_int(cfg->sys_timezone,instream);
        !           234:        get_int(cfg->sys_misc,instream);
        !           235:        get_int(cfg->sys_lastnode,instream);
        !           236:        get_int(cfg->sys_autonode,instream);
        !           237:        get_int(cfg->uq,instream);
        !           238:        get_int(cfg->sys_pwdays,instream);
        !           239:        get_int(cfg->sys_deldays,instream);
        !           240:        get_int(cfg->sys_exp_warn,instream);    /* Days left till expiration warning */
        !           241:        get_int(cfg->sys_autodel,instream);
        !           242:        get_int(cfg->sys_def_stat,instream);    /* default status line */
        !           243: 
        !           244:        get_str(cfg->sys_chat_arstr,instream);
        !           245:        cfg->sys_chat_ar=ARSTR(cfg->sys_chat_arstr,cfg);
        !           246: 
        !           247:        get_int(cfg->cdt_min_value,instream);
        !           248:        get_int(cfg->max_minutes,instream);
        !           249:        get_int(cfg->cdt_per_dollar,instream);
        !           250:        get_str(cfg->new_pass,instream);
        !           251:        get_str(cfg->new_magic,instream);
        !           252:        get_str(cfg->new_sif,instream);
        !           253:        get_str(cfg->new_sof,instream);
        !           254:        if(!cfg->new_sof[0])            /* if output not specified, use input file */
        !           255:                strcpy(cfg->new_sof,cfg->new_sif);
        !           256: 
        !           257:        /*********************/
        !           258:        /* New User Settings */
        !           259:        /*********************/
        !           260: 
        !           261:        get_int(cfg->new_level,instream);
        !           262:        get_int(cfg->new_flags1,instream);
        !           263:        get_int(cfg->new_flags2,instream);
        !           264:        get_int(cfg->new_flags3,instream);
        !           265:        get_int(cfg->new_flags4,instream);
        !           266:        get_int(cfg->new_exempt,instream);
        !           267:        get_int(cfg->new_rest,instream);
        !           268:        get_int(cfg->new_cdt,instream);
        !           269:        get_int(cfg->new_min,instream);
        !           270:        get_str(cfg->new_xedit,instream);
        !           271:        get_int(cfg->new_expire,instream);
        !           272:        get_int(cfg->new_shell,instream);
        !           273:        get_int(cfg->new_misc,instream);
        !           274:        get_int(cfg->new_prot,instream);
        !           275:        if(cfg->new_prot<' ')
        !           276:                cfg->new_prot=' ';
        !           277:        get_int(cfg->new_install,instream);
        !           278:        for(i=0;i<7;i++)
        !           279:                get_int(n,instream);
        !           280: 
        !           281:        /*************************/
        !           282:        /* Expired User Settings */
        !           283:        /*************************/
        !           284: 
        !           285:        get_int(cfg->expired_level,instream);
        !           286:        get_int(cfg->expired_flags1,instream);
        !           287:        get_int(cfg->expired_flags2,instream);
        !           288:        get_int(cfg->expired_flags3,instream);
        !           289:        get_int(cfg->expired_flags4,instream);
        !           290:        get_int(cfg->expired_exempt,instream);
        !           291:        get_int(cfg->expired_rest,instream);
        !           292: 
        !           293:        get_str(cfg->logon_mod,instream);
        !           294:        get_str(cfg->logoff_mod,instream);
        !           295:        get_str(cfg->newuser_mod,instream);
        !           296:        get_str(cfg->login_mod,instream);
        !           297:        if(!cfg->login_mod[0]) SAFECOPY(cfg->login_mod,"login");
        !           298:        get_str(cfg->logout_mod,instream);
        !           299:        get_str(cfg->sync_mod,instream);
        !           300:        get_str(cfg->expire_mod,instream);
        !           301:        get_int(cfg->ctrlkey_passthru,instream);
        !           302:        get_str(cfg->mods_dir,instream);
        !           303:        get_str(cfg->logs_dir,instream);
        !           304:        if(!cfg->logs_dir[0]) SAFECOPY(cfg->logs_dir,cfg->data_dir);
        !           305: 
        !           306:        get_int(c,instream);
        !           307:        for(i=0;i<158;i++)                                      /* unused - initialized to NULL */
        !           308:                get_int(n,instream);
        !           309:        for(i=0;i<254;i++)                                      /* unused - initialized to 0xff */
        !           310:                get_int(n,instream);
        !           311: 
        !           312:        get_int(cfg->user_backup_level,instream);
        !           313:        if(cfg->user_backup_level==0xffff)
        !           314:                cfg->user_backup_level=5;
        !           315:        get_int(cfg->mail_backup_level,instream);
        !           316:        if(cfg->mail_backup_level==0xffff)
        !           317:                cfg->mail_backup_level=5;
        !           318: 
        !           319:        /*******************/
        !           320:        /* Validation Sets */
        !           321:        /*******************/
        !           322: 
        !           323:        for(i=0;i<10 && !feof(instream);i++) {
        !           324:                get_int(cfg->val_level[i],instream);
        !           325:                get_int(cfg->val_expire[i],instream);
        !           326:                get_int(cfg->val_flags1[i],instream);
        !           327:                get_int(cfg->val_flags2[i],instream);
        !           328:                get_int(cfg->val_flags3[i],instream);
        !           329:                get_int(cfg->val_flags4[i],instream);
        !           330:                get_int(cfg->val_cdt[i],instream);
        !           331:                get_int(cfg->val_exempt[i],instream);
        !           332:                get_int(cfg->val_rest[i],instream);
        !           333:                for(j=0;j<8;j++)
        !           334:                        get_int(n,instream);
        !           335:        }
        !           336: 
        !           337:        /***************************/
        !           338:        /* Security Level Settings */
        !           339:        /***************************/
        !           340: 
        !           341:        for(i=0;i<100 && !feof(instream);i++) {
        !           342:                get_int(cfg->level_timeperday[i],instream);
        !           343: #if 0  /* removed May 06, 2002 */
        !           344:                if(cfg->level_timeperday[i]>500)
        !           345:                        cfg->level_timeperday[i]=500;
        !           346: #endif
        !           347:                get_int(cfg->level_timepercall[i],instream);
        !           348: #if 0  /* removed May 06, 2002 */
        !           349:                if(cfg->level_timepercall[i]>500)
        !           350:                        cfg->level_timepercall[i]=500;
        !           351: #endif
        !           352:                get_int(cfg->level_callsperday[i],instream);
        !           353:                get_int(cfg->level_freecdtperday[i],instream);
        !           354:                get_int(cfg->level_linespermsg[i],instream);
        !           355:                get_int(cfg->level_postsperday[i],instream);
        !           356:                get_int(cfg->level_emailperday[i],instream);
        !           357:                get_int(cfg->level_misc[i],instream);
        !           358:                get_int(cfg->level_expireto[i],instream);
        !           359:                get_int(c,instream);
        !           360:                for(j=0;j<5;j++)
        !           361:                        get_int(n,instream); 
        !           362:        }
        !           363:        if(i!=100) {
        !           364:                sprintf(error,"Insufficient User Level Information: "
        !           365:                        "%d user levels read, 100 needed.",i);
        !           366:                fclose(instream);
        !           367:                return(FALSE); 
        !           368:        }
        !           369: 
        !           370:        get_int(cfg->total_shells,instream);
        !           371:        #ifdef SBBS
        !           372:        if(!cfg->total_shells) {
        !           373:                sprintf(error,"At least one command shell must be configured.");
        !           374:                fclose(instream);
        !           375:                return(FALSE); 
        !           376:        }
        !           377:        #endif
        !           378: 
        !           379:        if(cfg->total_shells) {
        !           380:                if((cfg->shell=(shell_t **)malloc(sizeof(shell_t *)*cfg->total_shells))==NULL)
        !           381:                        return allocerr(instream,error,offset,fname,sizeof(shell_t *)*cfg->total_shells);
        !           382:        } else
        !           383:                cfg->shell=NULL;
        !           384: 
        !           385:        for(i=0;i<cfg->total_shells;i++) {
        !           386:                if(feof(instream)) break;
        !           387:                if((cfg->shell[i]=(shell_t *)malloc(sizeof(shell_t)))==NULL)
        !           388:                        return allocerr(instream,error,offset,fname,sizeof(shell_t));
        !           389:                memset(cfg->shell[i],0,sizeof(shell_t));
        !           390: 
        !           391:                get_str(cfg->shell[i]->name,instream);
        !           392:                get_str(cfg->shell[i]->code,instream);
        !           393:                get_str(cfg->shell[i]->arstr,instream);
        !           394:                cfg->shell[i]->ar=ARSTR(cfg->shell[i]->arstr,cfg);
        !           395:                get_int(cfg->shell[i]->misc,instream);
        !           396:                for(j=0;j<8;j++)
        !           397:                        get_int(n,instream);
        !           398:        }
        !           399:        cfg->total_shells=i;
        !           400: 
        !           401:        if(cfg->new_shell>=cfg->total_shells)
        !           402:                cfg->new_shell=0;
        !           403: 
        !           404:        fclose(instream);
        !           405:        return(TRUE);
        !           406: }
        !           407: 
        !           408: /****************************************************************************/
        !           409: /* Reads in MSGS.CNF and initializes the associated variables                          */
        !           410: /****************************************************************************/
        !           411: BOOL read_msgs_cfg(scfg_t* cfg, char* error)
        !           412: {
        !           413:        char    str[MAX_PATH+1],fname[13],c;
        !           414:        short   i,j,k,n;
        !           415:        long    offset=0;
        !           416:        FILE    *instream;
        !           417: 
        !           418:        strcpy(fname,"msgs.cnf");
        !           419:        sprintf(str,"%s%s",cfg->ctrl_dir,fname);
        !           420:        if((instream=fnopen(NULL,str,O_RDONLY))==NULL) {
        !           421:                sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str);
        !           422:                return(FALSE);
        !           423:        }
        !           424: 
        !           425:        /*************************/
        !           426:        /* General Message Stuff */
        !           427:        /*************************/
        !           428: 
        !           429:        get_int(cfg->max_qwkmsgs,instream);
        !           430:        get_int(cfg->mail_maxcrcs,instream);
        !           431:        get_int(cfg->mail_maxage,instream);
        !           432:        get_str(cfg->preqwk_arstr,instream);
        !           433:        cfg->preqwk_ar=ARSTR(cfg->preqwk_arstr,cfg);
        !           434: 
        !           435:        get_int(cfg->smb_retry_time,instream);   /* odd byte */
        !           436:        if(!cfg->smb_retry_time)
        !           437:                cfg->smb_retry_time=30;
        !           438:        for(i=0;i<234;i++)      /* NULL */
        !           439:                get_int(n,instream);
        !           440:        get_int(cfg->msg_misc,instream);
        !           441:        for(i=0;i<255;i++)      /* 0xff */
        !           442:                get_int(n,instream);
        !           443: 
        !           444: 
        !           445:        /******************/
        !           446:        /* Message Groups */
        !           447:        /******************/
        !           448: 
        !           449:        get_int(cfg->total_grps,instream);
        !           450: 
        !           451:        if(cfg->total_grps) {
        !           452:                if((cfg->grp=(grp_t **)malloc(sizeof(grp_t *)*cfg->total_grps))==NULL)
        !           453:                        return allocerr(instream,error,offset,fname,sizeof(grp_t *)*cfg->total_grps);
        !           454:        } else
        !           455:                cfg->grp=NULL;
        !           456: 
        !           457:        for(i=0;i<cfg->total_grps;i++) {
        !           458: 
        !           459:                if(feof(instream)) break;
        !           460:                if((cfg->grp[i]=(grp_t *)malloc(sizeof(grp_t)))==NULL)
        !           461:                        return allocerr(instream,error,offset,fname,sizeof(grp_t));
        !           462:                memset(cfg->grp[i],0,sizeof(grp_t));
        !           463: 
        !           464:                get_str(cfg->grp[i]->lname,instream);
        !           465:                get_str(cfg->grp[i]->sname,instream);
        !           466: 
        !           467:                get_str(cfg->grp[i]->arstr,instream);
        !           468:                cfg->grp[i]->ar=ARSTR(cfg->grp[i]->arstr,cfg);
        !           469: 
        !           470:                get_str(cfg->grp[i]->code_prefix,instream);
        !           471: 
        !           472:                get_int(c,instream);
        !           473:                for(j=0;j<43;j++)
        !           474:                        get_int(n,instream);
        !           475:                }
        !           476:        cfg->total_grps=i;
        !           477: 
        !           478:        /**********************/
        !           479:        /* Message Sub-boards */
        !           480:        /**********************/
        !           481: 
        !           482:        get_int(cfg->total_subs,instream);
        !           483: 
        !           484:        if(cfg->total_subs) {
        !           485:                if((cfg->sub=(sub_t **)malloc(sizeof(sub_t *)*cfg->total_subs))==NULL)
        !           486:                        return allocerr(instream,error,offset,fname,sizeof(sub_t *)*cfg->total_subs);
        !           487:        } else
        !           488:                cfg->sub=NULL;
        !           489: 
        !           490:        for(i=0;i<cfg->total_subs;i++) {
        !           491:                if(feof(instream)) break;
        !           492:                if((cfg->sub[i]=(sub_t *)malloc(sizeof(sub_t)))==NULL)
        !           493:                        return allocerr(instream,error,offset,fname,sizeof(sub_t));
        !           494:                memset(cfg->sub[i],0,sizeof(sub_t));
        !           495: 
        !           496:                get_int(cfg->sub[i]->grp,instream);
        !           497:                get_str(cfg->sub[i]->lname,instream);
        !           498:                get_str(cfg->sub[i]->sname,instream);
        !           499:                get_str(cfg->sub[i]->qwkname,instream);
        !           500:                get_str(cfg->sub[i]->code_suffix,instream);
        !           501:                get_str(cfg->sub[i]->data_dir,instream);
        !           502: 
        !           503: #ifdef SBBS
        !           504:                if(cfg->sub[i]->grp >= cfg->total_grps) {
        !           505:                        sprintf(error,"offset %ld in %s: invalid group number (%u) for sub-board: %s"
        !           506:                                ,offset,fname
        !           507:                                ,cfg->sub[i]->grp
        !           508:                                ,cfg->sub[i]->code_suffix);
        !           509:                        fclose(instream);
        !           510:                        return(FALSE); 
        !           511:                }
        !           512: #endif
        !           513: 
        !           514:                get_str(cfg->sub[i]->arstr,instream);
        !           515:                get_str(cfg->sub[i]->read_arstr,instream);
        !           516:                get_str(cfg->sub[i]->post_arstr,instream);
        !           517:                get_str(cfg->sub[i]->op_arstr,instream);
        !           518: 
        !           519:                cfg->sub[i]->ar=ARSTR(cfg->sub[i]->arstr,cfg);
        !           520:                cfg->sub[i]->read_ar=ARSTR(cfg->sub[i]->read_arstr,cfg);
        !           521:                cfg->sub[i]->post_ar=ARSTR(cfg->sub[i]->post_arstr,cfg);
        !           522:                cfg->sub[i]->op_ar=ARSTR(cfg->sub[i]->op_arstr,cfg);
        !           523: 
        !           524:                get_int(cfg->sub[i]->misc,instream);
        !           525: 
        !           526:                get_str(cfg->sub[i]->tagline,instream);
        !           527:                get_str(cfg->sub[i]->origline,instream);
        !           528:                get_str(cfg->sub[i]->post_sem,instream);
        !           529: 
        !           530: #if 0
        !           531:                fread(str,1,LEN_DIR+1,instream);                                /* skip EchoMail path */
        !           532:                offset+=LEN_DIR+1;
        !           533: #else
        !           534:                get_str(cfg->sub[i]->newsgroup,instream);
        !           535: #endif
        !           536: 
        !           537:                get_int(cfg->sub[i]->faddr,instream);                   /* FidoNet address */
        !           538:                get_int(cfg->sub[i]->maxmsgs,instream);
        !           539:                get_int(cfg->sub[i]->maxcrcs,instream);
        !           540:                get_int(cfg->sub[i]->maxage,instream);
        !           541:                get_int(cfg->sub[i]->ptridx,instream);
        !           542: #ifdef SBBS
        !           543:                for(j=0;j<i;j++)
        !           544:                        if(cfg->sub[i]->ptridx==cfg->sub[j]->ptridx) {
        !           545:                                sprintf(error,"offset %ld in %s: Duplicate pointer index for subs %s and %s"
        !           546:                                        ,offset,fname
        !           547:                                        ,cfg->sub[i]->code_suffix,cfg->sub[j]->code_suffix);
        !           548:                                fclose(instream);
        !           549:                                return(FALSE); 
        !           550:                        }
        !           551: #endif
        !           552: 
        !           553:                get_str(cfg->sub[i]->mod_arstr,instream);
        !           554:                cfg->sub[i]->mod_ar=ARSTR(cfg->sub[i]->mod_arstr,cfg);
        !           555: 
        !           556:                get_int(cfg->sub[i]->qwkconf,instream);
        !           557:                get_int(c,instream);
        !           558:                for(j=0;j<26;j++)
        !           559:                        get_int(n,instream);
        !           560:                }
        !           561:        cfg->total_subs=i;
        !           562: 
        !           563:        /***********/
        !           564:        /* FidoNet */
        !           565:        /***********/
        !           566: 
        !           567:        get_int(cfg->total_faddrs,instream);
        !           568: 
        !           569:        if(cfg->total_faddrs) {
        !           570:                if((cfg->faddr=(faddr_t *)malloc(sizeof(faddr_t)*cfg->total_faddrs))==NULL)
        !           571:                        return allocerr(instream,error,offset,fname,sizeof(faddr_t)*cfg->total_faddrs);
        !           572:        } else
        !           573:                cfg->faddr=NULL;
        !           574: 
        !           575:        for(i=0;i<cfg->total_faddrs;i++)
        !           576:                get_int(cfg->faddr[i],instream);
        !           577: 
        !           578:        get_str(cfg->origline,instream);
        !           579:        get_str(cfg->netmail_sem,instream);
        !           580:        get_str(cfg->echomail_sem,instream);
        !           581:        get_str(cfg->netmail_dir,instream);
        !           582:        get_str(cfg->echomail_dir,instream);
        !           583:        get_str(cfg->fidofile_dir,instream);
        !           584:        get_int(cfg->netmail_misc,instream);
        !           585:        get_int(cfg->netmail_cost,instream);
        !           586:        get_int(cfg->dflt_faddr,instream);
        !           587:        for(i=0;i<28;i++)
        !           588:                get_int(n,instream);
        !           589: 
        !           590:        /**********/
        !           591:        /* QWKnet */
        !           592:        /**********/
        !           593: 
        !           594:        get_str(cfg->qnet_tagline,instream);
        !           595: 
        !           596:        get_int(cfg->total_qhubs,instream);
        !           597: 
        !           598:        if(cfg->total_qhubs) {
        !           599:                if((cfg->qhub=(qhub_t **)malloc(sizeof(qhub_t *)*cfg->total_qhubs))==NULL)
        !           600:                        return allocerr(instream,error,offset,fname,sizeof(qhub_t*)*cfg->total_qhubs);
        !           601:        } else
        !           602:                cfg->qhub=NULL;
        !           603: 
        !           604:        for(i=0;i<cfg->total_qhubs;i++) {
        !           605:                if(feof(instream)) break;
        !           606:                if((cfg->qhub[i]=(qhub_t *)malloc(sizeof(qhub_t)))==NULL)
        !           607:                        return allocerr(instream,error,offset,fname,sizeof(qhub_t));
        !           608:                memset(cfg->qhub[i],0,sizeof(qhub_t));
        !           609: 
        !           610:                get_str(cfg->qhub[i]->id,instream);
        !           611:                get_int(cfg->qhub[i]->time,instream);
        !           612:                get_int(cfg->qhub[i]->freq,instream);
        !           613:                get_int(cfg->qhub[i]->days,instream);
        !           614:                get_int(cfg->qhub[i]->node,instream);
        !           615:                get_str(cfg->qhub[i]->call,instream);
        !           616:                get_str(cfg->qhub[i]->pack,instream);
        !           617:                get_str(cfg->qhub[i]->unpack,instream);
        !           618:                get_int(k,instream);
        !           619: 
        !           620:                if(k) {
        !           621:                        if((cfg->qhub[i]->sub=(ushort *)malloc(sizeof(ushort)*k))==NULL)
        !           622:                                return allocerr(instream,error,offset,fname,sizeof(uint)*k);
        !           623:                        if((cfg->qhub[i]->conf=(ushort *)malloc(sizeof(ushort)*k))==NULL)
        !           624:                                return allocerr(instream,error,offset,fname,sizeof(ushort)*k);
        !           625:                        if((cfg->qhub[i]->mode=(char *)malloc(sizeof(char)*k))==NULL)
        !           626:                                return allocerr(instream,error,offset,fname,sizeof(uchar)*k);
        !           627:                }
        !           628: 
        !           629:                for(j=0;j<k;j++) {
        !           630:                        if(feof(instream)) break;
        !           631:                        get_int(cfg->qhub[i]->conf[cfg->qhub[i]->subs],instream);
        !           632:                        get_int(cfg->qhub[i]->sub[cfg->qhub[i]->subs],instream);
        !           633:                        get_int(cfg->qhub[i]->mode[cfg->qhub[i]->subs],instream);
        !           634:                        if(cfg->qhub[i]->sub[cfg->qhub[i]->subs]<cfg->total_subs)
        !           635:                                cfg->sub[cfg->qhub[i]->sub[cfg->qhub[i]->subs]]->misc|=SUB_QNET;
        !           636:                        else
        !           637:                                continue;
        !           638:                        if(cfg->qhub[i]->sub[cfg->qhub[i]->subs]!=INVALID_SUB)
        !           639:                                cfg->qhub[i]->subs++; }
        !           640:                for(j=0;j<32;j++)
        !           641:                        get_int(n,instream);
        !           642:        }
        !           643: 
        !           644:        cfg->total_qhubs=i;
        !           645: 
        !           646:        for(j=0;j<32;j++)
        !           647:                get_int(n,instream);
        !           648: 
        !           649:        /************/
        !           650:        /* PostLink */
        !           651:        /************/
        !           652: 
        !           653:        fread(str,11,1,instream);               /* Unused - used to be Site Name */
        !           654:        offset+=11;
        !           655:        get_int(cfg->sys_psnum,instream);       /* Site Number */
        !           656:        get_int(cfg->total_phubs,instream);
        !           657: 
        !           658:        if(cfg->total_phubs) {
        !           659:                if((cfg->phub=(phub_t **)malloc(sizeof(phub_t *)*cfg->total_phubs))==NULL)
        !           660:                        return allocerr(instream,error,offset,fname,sizeof(phub_t*)*cfg->total_phubs);
        !           661:        } else
        !           662:                cfg->phub=NULL;
        !           663: 
        !           664:        for(i=0;i<cfg->total_phubs;i++) {
        !           665:                if(feof(instream)) break;
        !           666:                if((cfg->phub[i]=(phub_t *)malloc(sizeof(phub_t)))==NULL)
        !           667:                        return allocerr(instream,error,offset,fname,sizeof(phub_t));
        !           668:                memset(cfg->phub[i],0,sizeof(phub_t));
        !           669: 
        !           670:                get_str(cfg->phub[i]->name,instream);
        !           671:                get_int(cfg->phub[i]->time,instream);
        !           672:                get_int(cfg->phub[i]->freq,instream);
        !           673:                get_int(cfg->phub[i]->days,instream);
        !           674:                get_int(cfg->phub[i]->node,instream);
        !           675:                get_str(cfg->phub[i]->call,instream);
        !           676:                for(j=0;j<32;j++)
        !           677:                        get_int(n,instream);
        !           678:        }
        !           679: 
        !           680:        cfg->total_phubs=i;
        !           681: 
        !           682:        get_str(cfg->sys_psname,instream);      /* Site Name */
        !           683: 
        !           684:        for(j=0;j<32;j++)
        !           685:                get_int(n,instream);
        !           686: 
        !           687:        /************/
        !           688:        /* Internet */
        !           689:        /************/
        !           690: 
        !           691:        get_str(cfg->sys_inetaddr,instream); /* Internet address */
        !           692:        get_str(cfg->inetmail_sem,instream);
        !           693:        get_int(cfg->inetmail_misc,instream);
        !           694:        get_int(cfg->inetmail_cost,instream);
        !           695:        get_str(cfg->smtpmail_sem,instream);
        !           696: 
        !           697:        fclose(instream);
        !           698:        return(TRUE);
        !           699: }
        !           700: 
        !           701: void free_node_cfg(scfg_t* cfg)
        !           702: {
        !           703:        FREE_AR(cfg->node_ar);
        !           704: 
        !           705:        if(cfg->mdm_result!=NULL) {
        !           706:                FREE_AND_NULL(cfg->mdm_result);
        !           707:        }
        !           708: }
        !           709: 
        !           710: void free_main_cfg(scfg_t* cfg)
        !           711: {
        !           712:        int i;
        !           713: 
        !           714:        FREE_AR(cfg->sys_chat_ar);
        !           715: #if 0
        !           716:        if(cfg->node_path!=NULL) {
        !           717:                for(i=0;i<cfg->sys_nodes;i++)
        !           718:                        FREE_AND_NULL(cfg->node_path[i]);
        !           719:                FREE_AND_NULL(cfg->node_path);
        !           720:        }
        !           721: #endif
        !           722:        if(cfg->shell!=NULL) {
        !           723:                for(i=0;i<cfg->total_shells;i++) {
        !           724:                        FREE_AR(cfg->shell[i]->ar);
        !           725:                        FREE_AND_NULL(cfg->shell[i]);
        !           726:                }
        !           727:                FREE_AND_NULL(cfg->shell);
        !           728:        }
        !           729: }
        !           730: 
        !           731: void free_msgs_cfg(scfg_t* cfg)
        !           732: {
        !           733:        int i;
        !           734: 
        !           735:        FREE_AR(cfg->preqwk_ar);
        !           736:        if(cfg->grp!=NULL) {
        !           737:                for(i=0;i<cfg->total_grps;i++) {
        !           738:                        FREE_AR(cfg->grp[i]->ar);
        !           739:                        FREE_AND_NULL(cfg->grp[i]);
        !           740:                }
        !           741:                FREE_AND_NULL(cfg->grp);
        !           742:        }
        !           743: 
        !           744:        if(cfg->sub!=NULL) {
        !           745:                for(i=0;i<cfg->total_subs;i++) {
        !           746:                        FREE_AR(cfg->sub[i]->ar);
        !           747:                        FREE_AR(cfg->sub[i]->read_ar);
        !           748:                        FREE_AR(cfg->sub[i]->post_ar);
        !           749:                        FREE_AR(cfg->sub[i]->op_ar);
        !           750:                        FREE_AR(cfg->sub[i]->mod_ar);
        !           751:                        FREE_AND_NULL(cfg->sub[i]);
        !           752:                }
        !           753:                FREE_AND_NULL(cfg->sub);
        !           754:        }
        !           755: 
        !           756:        FREE_AND_NULL(cfg->faddr);
        !           757:        cfg->total_faddrs=0;
        !           758: 
        !           759:        if(cfg->qhub!=NULL) {
        !           760:                for(i=0;i<cfg->total_qhubs;i++) {
        !           761:                        FREE_AND_NULL(cfg->qhub[i]->mode);
        !           762:                        FREE_AND_NULL(cfg->qhub[i]->conf);
        !           763:                        FREE_AND_NULL(cfg->qhub[i]->sub);
        !           764:                        FREE_AND_NULL(cfg->qhub[i]);
        !           765:                }
        !           766:                FREE_AND_NULL(cfg->qhub);
        !           767:        }
        !           768: 
        !           769:        if(cfg->phub!=NULL) {
        !           770:                for(i=0;i<cfg->total_phubs;i++) {
        !           771:                        FREE_AND_NULL(cfg->phub[i]);
        !           772:                }
        !           773:                FREE_AND_NULL(cfg->phub);
        !           774:        }
        !           775: }
        !           776: 
        !           777: /************************************************************/
        !           778: /* Create data and sub-dirs off data if not already created */
        !           779: /************************************************************/
        !           780: void make_data_dirs(scfg_t* cfg)
        !           781: {
        !           782:        char    str[MAX_PATH+1];
        !           783: 
        !           784:        md(cfg->data_dir);
        !           785:        sprintf(str,"%ssubs",cfg->data_dir);
        !           786:        md(str);
        !           787:        sprintf(str,"%sdirs",cfg->data_dir);
        !           788:        md(str);
        !           789:        sprintf(str,"%stext",cfg->data_dir);
        !           790:        md(str);
        !           791:        sprintf(str,"%smsgs",cfg->data_dir);
        !           792:        md(str);
        !           793:        sprintf(str,"%suser",cfg->data_dir);
        !           794:        md(str);
        !           795:        sprintf(str,"%suser/ptrs",cfg->data_dir);
        !           796:        md(str);
        !           797:        sprintf(str,"%sqnet",cfg->data_dir);
        !           798:        md(str);
        !           799:        sprintf(str,"%sfile",cfg->data_dir);
        !           800:        md(str);
        !           801: 
        !           802:        md(cfg->logs_dir);
        !           803:        sprintf(str,"%slogs",cfg->logs_dir);
        !           804:        md(str);
        !           805: 
        !           806:        if(cfg->mods_dir[0])
        !           807:                md(cfg->mods_dir);
        !           808: 
        !           809: #if 0
        !           810:        int             i;
        !           811: 
        !           812:        for(i=0;i<cfg->total_subs;i++) {
        !           813:                if(cfg->sub[i]->data_dir[0]
        !           814:                        && (!i || stricmp(cfg->sub[i]->data_dir,cfg->sub[i-1]->data_dir))) {
        !           815:                        backslash(cfg->sub[i]->data_dir);
        !           816:                        md(cfg->sub[i]->data_dir);
        !           817:                }
        !           818:        }
        !           819: 
        !           820:        for(i=0;i<cfg->total_dirs;i++) {
        !           821:                if(cfg->dir[i]->data_dir[0]
        !           822:                        && (!i || stricmp(cfg->dir[i]->data_dir,cfg->dir[i-1]->data_dir))) {
        !           823:                        backslash(cfg->dir[i]->data_dir);
        !           824:                        md(cfg->dir[i]->data_dir);
        !           825:                }
        !           826:                if(cfg->dir[i]->misc&DIR_FCHK) 
        !           827:                        md(cfg->dir[i]->path); 
        !           828:        }
        !           829: 
        !           830:        for(i=0;i<cfg->total_txtsecs;i++) {
        !           831:                sprintf(str,"%stext/%s",cfg->data_dir,cfg->txtsec[i]->code);
        !           832:                md(str);
        !           833:        }
        !           834: #endif
        !           835: }

unix.superglobalmegacorp.com

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