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

1.1     ! root        1: /* Upgrade Synchronet files from v3 to v4 */
        !             2: 
        !             3: /* $Id: v4upgrade.c,v 1.13 2005/10/16 22:45:10 rswindell Exp $ */
        !             4: 
        !             5: /****************************************************************************
        !             6:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             7:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !             8:  *                                                                                                                                                     *
        !             9:  * Copyright 2005 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            10:  *                                                                                                                                                     *
        !            11:  * This program is free software; you can redistribute it and/or                       *
        !            12:  * modify it under the terms of the GNU General Public License                         *
        !            13:  * as published by the Free Software Foundation; either version 2                      *
        !            14:  * of the License, or (at your option) any later version.                                      *
        !            15:  * See the GNU General Public License for more details: gpl.txt or                     *
        !            16:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
        !            17:  *                                                                                                                                                     *
        !            18:  * Anonymous FTP access to the most recent released source is available at     *
        !            19:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            20:  *                                                                                                                                                     *
        !            21:  * Anonymous CVS access to the development source and modification history     *
        !            22:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            23:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            24:  *     (just hit return, no password is necessary)                                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            26:  *                                                                                                                                                     *
        !            27:  * For Synchronet coding style and modification guidelines, see                                *
        !            28:  * http://www.synchro.net/source.html                                                                          *
        !            29:  *                                                                                                                                                     *
        !            30:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            31:  * format) via e-mail to [email protected]                                                                      *
        !            32:  *                                                                                                                                                     *
        !            33:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            34:  ****************************************************************************/
        !            35: 
        !            36: #include "sbbs.h"
        !            37: #include "sbbs4defs.h"
        !            38: #include "ini_file.h"
        !            39: #include "dat_file.h"
        !            40: #include "datewrap.h"
        !            41: 
        !            42: scfg_t scfg;
        !            43: BOOL overwrite_existing_files=TRUE;
        !            44: ini_style_t style = { 25, NULL, NULL, " = ", NULL };
        !            45: 
        !            46: BOOL overwrite(const char* path)
        !            47: {
        !            48:        char    str[128];
        !            49: 
        !            50:        if(!overwrite_existing_files && fexist(path)) {
        !            51:                printf("\n%s already exists, overwrite? ",path);
        !            52:                fgets(str,sizeof(str),stdin);
        !            53:                if(toupper(*str)!='Y')
        !            54:                        return(FALSE);
        !            55:        }
        !            56: 
        !            57:        return(TRUE);
        !            58: }
        !            59: 
        !            60: /****************************************************************************/
        !            61: /* Converts a date string in format MM/DD/YY into unix time format                     */
        !            62: /****************************************************************************/
        !            63: long DLLCALL dstrtodate(scfg_t* cfg, char *instr)
        !            64: {
        !            65:        char*   p;
        !            66:        char*   day;
        !            67:        char    str[16];
        !            68:        struct tm tm;
        !            69: 
        !            70:        if(!instr[0] || !strncmp(instr,"00/00/00",8))
        !            71:                return(0);
        !            72: 
        !            73:        if(isdigit(instr[0]) && isdigit(instr[1])
        !            74:                && isdigit(instr[3]) && isdigit(instr[4])
        !            75:                && isdigit(instr[6]) && isdigit(instr[7]))
        !            76:                p=instr;        /* correctly formatted */
        !            77:        else {
        !            78:                p=instr;        /* incorrectly formatted */
        !            79:                while(*p && isdigit(*p)) p++;
        !            80:                if(*p==0)
        !            81:                        return(0);
        !            82:                p++;
        !            83:                day=p;
        !            84:                while(*p && isdigit(*p)) p++;
        !            85:                if(*p==0)
        !            86:                        return(0);
        !            87:                p++;
        !            88:                sprintf(str,"%02u/%02u/%02u"
        !            89:                        ,atoi(instr)%100,atoi(day)%100,atoi(p)%100);
        !            90:                p=str;
        !            91:        }
        !            92: 
        !            93:        memset(&tm,0,sizeof(tm));
        !            94:        tm.tm_year=((p[6]&0xf)*10)+(p[7]&0xf);
        !            95:        if(cfg->sys_misc&SM_EURODATE) {
        !            96:                tm.tm_mon=((p[3]&0xf)*10)+(p[4]&0xf);
        !            97:                tm.tm_mday=((p[0]&0xf)*10)+(p[1]&0xf); }
        !            98:        else {
        !            99:                tm.tm_mon=((p[0]&0xf)*10)+(p[1]&0xf);
        !           100:                tm.tm_mday=((p[3]&0xf)*10)+(p[4]&0xf); }
        !           101: 
        !           102:        return(((tm.tm_year+1900)*10000)+(tm.tm_mon*100)+tm.tm_mday);
        !           103: }
        !           104: 
        !           105: 
        !           106: BOOL upgrade_users(void)
        !           107: {
        !           108:        char    outpath[MAX_PATH+1];
        !           109:        char    rec[USER_REC_LEN+1];
        !           110:        FILE*   out;
        !           111:        int             i,total;
        !           112:        int             ret;
        !           113:        size_t  len;
        !           114:        user_t  user;
        !           115: 
        !           116:        printf("Upgrading user database...     ");
        !           117: 
        !           118:        sprintf(outpath,"%suser/user.tab",scfg.data_dir);
        !           119:        if(!overwrite(outpath))
        !           120:                return(TRUE);
        !           121:        if((out=fopen(outpath,"wb"))==NULL) {
        !           122:                perror(outpath);
        !           123:                return(FALSE);
        !           124:        }
        !           125: 
        !           126:        fprintf(out,"%-*.*s\r\n",USER_REC_LEN,USER_REC_LEN,tabLineCreator(user_dat_columns));
        !           127: 
        !           128:        total=lastuser(&scfg);
        !           129:        for(i=1;i<=total;i++) {
        !           130:                printf("\b\b\b\b\b%5u",total-i);
        !           131:                memset(&user,0,sizeof(user));
        !           132:                user.number=i;
        !           133:                if((ret=getuserdat(&scfg,&user))!=0) {
        !           134:                        printf("\nError %d reading user.dat\n",ret);
        !           135:                        return(FALSE);
        !           136:                }
        !           137:                /******************************************/
        !           138:                /* personal info */
        !           139:                len=sprintf(rec,"%s\t%s\t%s\t%s\t%s\t%s\t"
        !           140:                        ,user.alias
        !           141:                        ,user.name
        !           142:                        ,user.handle
        !           143:                        ,user.note
        !           144:                        ,user.comp
        !           145:                        ,user.comment
        !           146:                        );
        !           147:                /* some unused records for future expansion */
        !           148:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           149: 
        !           150:                /******************************************/
        !           151:                /* very personal info */
        !           152:                len+=sprintf(rec+len,"%s\t%s\t%s\t%s\t%s\t%s\t%lu\t%c\t%s\t"
        !           153:                        ,user.netmail
        !           154:                        ,user.address
        !           155:                        ,user.location
        !           156:                        ,user.zipcode
        !           157:                        ,user.pass
        !           158:                        ,user.phone
        !           159:                        ,dstrtodate(&scfg,user.birth)
        !           160:                        ,user.sex
        !           161:                        ,user.modem
        !           162:                        );
        !           163:                /* some unused records for future expansion */
        !           164:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           165: 
        !           166:                /******************************************/
        !           167:                /* date/times */
        !           168:                len+=sprintf(rec+len,"%08lu%06u\t%08lu%06u\t%08lu%06u\t%08lu%06u\t%08lu%06u\t%08lu%06u\t"
        !           169:                        ,time_to_isoDate(user.laston)
        !           170:                        ,time_to_isoTime(user.laston)
        !           171:                        ,time_to_isoDate(user.firston)
        !           172:                        ,time_to_isoTime(user.firston)
        !           173:                        ,time_to_isoDate(user.expire)
        !           174:                        ,time_to_isoTime(user.expire)
        !           175:                        ,time_to_isoDate(user.pwmod)
        !           176:                        ,time_to_isoTime(user.pwmod)
        !           177:                        ,time_to_isoDate(user.ns_time)
        !           178:                        ,time_to_isoTime(user.ns_time)
        !           179:                        ,time_to_isoDate(user.logontime)
        !           180:                        ,time_to_isoTime(user.logontime)
        !           181:                        );
        !           182:                /* some unused records for future expansion */
        !           183:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           184: 
        !           185:                /******************************************/
        !           186:                /* counting stats */
        !           187:                len+=sprintf(rec+len,"%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
        !           188:                        ,user.logons
        !           189:                        ,user.ltoday
        !           190:                        ,user.timeon
        !           191:                        ,user.textra
        !           192:                        ,user.ttoday
        !           193:                        ,user.tlast
        !           194:                        ,user.posts
        !           195:                        ,user.emails
        !           196:                        ,user.fbacks
        !           197:                        ,user.etoday
        !           198:                        ,user.ptoday
        !           199:                        );
        !           200:                /* some unused records for future expansion */
        !           201:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           202: 
        !           203:                /******************************************/
        !           204:                /* file xfer stats, credits, minutes */
        !           205:                len+=sprintf(rec+len,"%u\t%u\t%u\t%u\t%u\t%u\t%u\t"
        !           206:                        ,user.ulb
        !           207:                        ,user.uls
        !           208:                        ,user.dlb
        !           209:                        ,user.dls
        !           210:                        ,user.cdt
        !           211:                        ,user.freecdt
        !           212:                        ,user.min
        !           213:                        );
        !           214:                /* some unused records for future expansion */
        !           215:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           216: 
        !           217:                /******************************************/
        !           218:                /* security */
        !           219:                len+=sprintf(rec+len,"%u\t%lx\t%lx\t%lx\t%lx\t%lx\t%lx\t"
        !           220:                        ,user.level
        !           221:                        ,user.flags1
        !           222:                        ,user.flags2
        !           223:                        ,user.flags3
        !           224:                        ,user.flags4
        !           225:                        ,user.exempt
        !           226:                        ,user.rest
        !           227:                        );
        !           228:                /* some unused records for future expansion */
        !           229:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           230: 
        !           231:                /******************************************/
        !           232:                /* settings (bit-fields) */
        !           233:                len+=sprintf(rec+len,"%lx\t%lx\t%lx\t"
        !           234:                        ,user.misc
        !           235:                        ,user.qwk
        !           236:                        ,user.chat
        !           237:                        );
        !           238:                /* some unused records for future expansion */
        !           239:                len+=sprintf(rec+len,"\t\t\t\t");       
        !           240: 
        !           241:                /******************************************/
        !           242:                /* settings (strings and numbers) */
        !           243:                len+=sprintf(rec+len,"%u\t%c\t%s\t%s\t%s\t%s\t%s\t%s\t"
        !           244:                        ,user.rows
        !           245:                        ,user.prot
        !           246:                        ,user.xedit ? scfg.xedit[user.xedit]->code : ""
        !           247:                        ,scfg.shell[user.shell]->code
        !           248:                        ,user.tmpext
        !           249:                        ,user.cursub
        !           250:                        ,user.curdir
        !           251:                        ,user.curxtrn
        !           252:                        );
        !           253:                /* Message disabled.  Why?  ToDo */
        !           254:                /* printf("reclen=%u\n",len); */
        !           255:                if((ret=fprintf(out,"%-*.*s\r\n",USER_REC_LEN,USER_REC_LEN,rec))!=USER_REC_LINE_LEN) {
        !           256:                        printf("!Error %d (errno: %d) writing %u bytes to user.tab\n"
        !           257:                                ,ret, errno, USER_REC_LINE_LEN);
        !           258:                        return(FALSE);
        !           259:                }
        !           260:        }
        !           261:        fclose(out);
        !           262: 
        !           263:        printf("\n\tdata/user/user.dat -> %s (%u users)\n", outpath,total);
        !           264: 
        !           265:        return(TRUE);
        !           266: }
        !           267: 
        !           268: typedef struct {
        !           269:        time_t  time;
        !           270:        ulong   ltoday;
        !           271:        ulong   ttoday;
        !           272:        ulong   uls;
        !           273:        ulong   ulb;
        !           274:        ulong   dls;
        !           275:        ulong   dlb;
        !           276:        ulong   ptoday;
        !           277:        ulong   etoday;
        !           278:        ulong   ftoday;
        !           279: } csts_t;
        !           280: 
        !           281: BOOL upgrade_stats(void)
        !           282: {
        !           283:        char    inpath[MAX_PATH+1];
        !           284:        char    outpath[MAX_PATH+1];
        !           285:        BOOL    success;
        !           286:        ulong   count;
        !           287:        time_t  t;
        !           288:        stats_t stats;
        !           289:        FILE*   in;
        !           290:        FILE*   out;
        !           291:        csts_t  csts;
        !           292:        str_list_t      list;
        !           293: 
        !           294:        printf("Upgrading statistics data...\n");
        !           295: 
        !           296:     sprintf(inpath,"%sdsts.dab",scfg.ctrl_dir);
        !           297:        printf("\t%s ",inpath);
        !           298:        if((in=fopen(inpath,"rb"))==NULL) {
        !           299:                perror(inpath);
        !           300:                return(FALSE);
        !           301:        }
        !           302:        fread(&t,sizeof(t),1,in);
        !           303:     fread(&stats,sizeof(stats),1,in);
        !           304:     fclose(in);
        !           305: 
        !           306:        sprintf(outpath,"%sstats.dat",scfg.ctrl_dir);
        !           307:        if(!overwrite(outpath))
        !           308:                return(TRUE);
        !           309:        if((out=fopen(outpath,"w"))==NULL) {
        !           310:                perror(outpath);
        !           311:                return(FALSE);
        !           312:        }
        !           313: 
        !           314:        if((list = strListInit())==NULL) {
        !           315:                printf("!malloc failure\n");
        !           316:                return(FALSE);
        !           317:        }
        !           318: 
        !           319:        iniSetDateTime(&list,   ROOT_SECTION    ,"TimeStamp"    ,TRUE, t                ,NULL);
        !           320:        iniSetInteger(&list,    ROOT_SECTION    ,"Logons"               ,stats.logons   ,NULL);
        !           321:        iniSetInteger(&list,    ROOT_SECTION    ,"LogonsToday"  ,stats.ltoday   ,NULL);
        !           322:        iniSetInteger(&list,    ROOT_SECTION    ,"Timeon"               ,stats.timeon   ,NULL);
        !           323:        iniSetInteger(&list,    ROOT_SECTION    ,"TimeonToday"  ,stats.ttoday   ,NULL);
        !           324:        iniSetInteger(&list,    ROOT_SECTION    ,"Uploads"              ,stats.uls              ,NULL);
        !           325:        iniSetLongInt(&list,    ROOT_SECTION    ,"UploadBytes"  ,stats.ulb              ,NULL);
        !           326:        iniSetInteger(&list,    ROOT_SECTION    ,"Downloads"    ,stats.dls              ,NULL);
        !           327:        iniSetLongInt(&list,    ROOT_SECTION    ,"DownloadBytes",stats.dlb              ,NULL);
        !           328:        iniSetInteger(&list,    ROOT_SECTION    ,"PostsToday"   ,stats.ptoday   ,NULL);
        !           329:        iniSetInteger(&list,    ROOT_SECTION    ,"EmailToday"   ,stats.etoday   ,NULL);
        !           330:        iniSetInteger(&list,    ROOT_SECTION    ,"FeedbackToday",stats.ftoday   ,NULL);
        !           331:        iniSetInteger(&list,    ROOT_SECTION    ,"NewUsersToday",stats.nusers   ,NULL);
        !           332: 
        !           333:        success=iniWriteFile(out, list);
        !           334: 
        !           335:        fclose(out);
        !           336:        strListFree(&list);
        !           337:        printf("-> %s\n", outpath);
        !           338: 
        !           339:        if(!success) {
        !           340:                printf("!iniWriteFile failure\n");
        !           341:                return(FALSE);
        !           342:        }
        !           343: 
        !           344:     sprintf(inpath,"%scsts.dab",scfg.ctrl_dir);
        !           345:        printf("\t%s ",inpath);
        !           346:        if((in=fopen(inpath,"rb"))==NULL) {
        !           347:                perror(inpath);
        !           348:                return(FALSE);
        !           349:        }
        !           350: 
        !           351:        sprintf(outpath,"%sstats.tab",scfg.ctrl_dir);
        !           352:        if(!overwrite(outpath))
        !           353:                return(TRUE);
        !           354:        if((out=fopen(outpath,"w"))==NULL) {
        !           355:                perror(outpath);
        !           356:                return(FALSE);
        !           357:        }
        !           358: #if 0
        !           359:        fprintf(out,"Time Stamp\tLogons\tTimeon\tUploaded Files\tUploaded Bytes\t"
        !           360:                                "Downloaded Files\tDownloaded Bytes\tPosts\tEmail Sent\tFeedback Sent\r\n");
        !           361: #else
        !           362:        fprintf(out,"%s\n",tabLineCreator(stats_dat_columns));
        !           363: #endif
        !           364: 
        !           365:        count=0;
        !           366:        while(!feof(in)) {
        !           367:                if(fread(&csts,1,sizeof(csts),in)!=sizeof(csts))
        !           368:                        break;
        !           369:                fprintf(out,"%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t%lu\t\n"
        !           370:                        ,time_to_isoDate(csts.time)
        !           371:                        ,csts.ltoday
        !           372:                        ,csts.ttoday
        !           373:                        ,csts.uls
        !           374:                        ,csts.ulb
        !           375:                        ,csts.dls
        !           376:                        ,csts.dlb
        !           377:                        ,csts.ptoday
        !           378:                        ,csts.etoday
        !           379:                        ,csts.ftoday
        !           380:                        );
        !           381:                count++;
        !           382:        }
        !           383:        fclose(in);
        !           384:        fclose(out);
        !           385:        printf("-> %s (%u days)\n", outpath, count);
        !           386: 
        !           387:        return(success);
        !           388: }
        !           389: 
        !           390: BOOL upgrade_event_data(void)
        !           391: {
        !           392:        char    inpath[MAX_PATH+1];
        !           393:        char    outpath[MAX_PATH+1];
        !           394:        BOOL    success;
        !           395:        FILE*   in;
        !           396:        FILE*   out;
        !           397:        size_t  i;
        !           398:        time_t  t;
        !           399:        str_list_t      list;
        !           400: 
        !           401:        printf("Upgrading event data...\n");
        !           402: 
        !           403:        sprintf(outpath,"%sevent.dat",scfg.ctrl_dir);
        !           404:        if(!overwrite(outpath))
        !           405:                return(TRUE);
        !           406:        if((out=fopen(outpath,"w"))==NULL) {
        !           407:                perror(outpath);
        !           408:                return(FALSE);
        !           409:        }
        !           410: 
        !           411:        if((list = strListInit())==NULL) {
        !           412:                printf("!malloc failure\n");
        !           413:                return(FALSE);
        !           414:        }
        !           415: 
        !           416:        /* Read TIME.DAB */
        !           417:        sprintf(inpath,"%stime.dab",scfg.ctrl_dir);
        !           418:        printf("\t%s ",inpath);
        !           419:        if((in=fopen(inpath,"rb"))==NULL) {
        !           420:                perror("open failure");
        !           421:                return(FALSE);
        !           422:        }
        !           423:        for(i=0;i<scfg.total_events;i++) {
        !           424:                t=0;
        !           425:                fread(&t,1,sizeof(t),in);
        !           426:                iniSetHexInt(&list, "Events", scfg.event[i]->code, t, NULL);
        !           427:        }
        !           428:        t=0;
        !           429:        fread(&t,1,sizeof(t),in);
        !           430:        iniSetHexInt(&list,ROOT_SECTION,"QWKPrePack",t,NULL);
        !           431:        fclose(in);
        !           432: 
        !           433:        printf("-> %s (%u timed events)\n", outpath, i);
        !           434: 
        !           435:        /* Read QNET.DAB */
        !           436:        sprintf(inpath,"%sqnet.dab",scfg.ctrl_dir);
        !           437:        printf("\t%s ",inpath);
        !           438:        i=0;
        !           439:        if((in=fopen(inpath,"rb"))==NULL)
        !           440:                perror("open failure");
        !           441:        else {
        !           442:                for(i=0;i<scfg.total_qhubs;i++) {
        !           443:                        t=0;
        !           444:                        fread(&t,1,sizeof(t),in);
        !           445:                        iniSetHexInt(&list,"QWKNetworkHubs",scfg.qhub[i]->id,t,NULL);
        !           446:                }
        !           447:                fclose(in);
        !           448:        }
        !           449:        printf("-> %s (%u QWKnet hubs)\n", outpath, i);
        !           450: 
        !           451:        success=iniWriteFile(out, list);
        !           452: 
        !           453:        fclose(out);
        !           454:        strListFree(&list);
        !           455: 
        !           456:        if(!success) {
        !           457:                printf("!iniWriteFile failure\n");
        !           458:                return(FALSE);
        !           459:        }
        !           460: 
        !           461:        return(success);
        !           462: }
        !           463: 
        !           464: BOOL upgrade_ip_filters(void)
        !           465: {
        !           466:        char    inpath[MAX_PATH+1];
        !           467:        char    outpath[MAX_PATH+1];
        !           468:        char    msgpath[MAX_PATH+1];
        !           469:        char    str[INI_MAX_VALUE_LEN];
        !           470:        char    estr[INI_MAX_VALUE_LEN];
        !           471:        char*   p;
        !           472:        FILE*   in;
        !           473:        FILE*   out;
        !           474:        BOOL    success;
        !           475:        size_t  i;
        !           476:        size_t  total;
        !           477:        str_list_t      inlist;
        !           478:        str_list_t      outlist;
        !           479: 
        !           480:        style.section_separator = NULL;
        !           481:        iniSetDefaultStyle(style);
        !           482: 
        !           483:        printf("Upgrading IP Address filters...\n");
        !           484: 
        !           485:        sprintf(outpath,"%sip-filter.ini",scfg.ctrl_dir);
        !           486:        if(!overwrite(outpath))
        !           487:                return(TRUE);
        !           488:        if((out=fopen(outpath,"w"))==NULL) {
        !           489:                perror(outpath);
        !           490:                return(FALSE);
        !           491:        }
        !           492: 
        !           493:        if((outlist = strListInit())==NULL) {
        !           494:                printf("!malloc failure\n");
        !           495:                return(FALSE);
        !           496:        }
        !           497: 
        !           498:        /* Read the message file (if present) */
        !           499:        sprintf(msgpath,"%sbadip.msg",scfg.text_dir);
        !           500:        if(fexist(msgpath)) {
        !           501:                printf("\t%s ",msgpath);
        !           502: 
        !           503:                if((in=fopen(msgpath,"r"))==NULL) {
        !           504:                        perror("open failure");
        !           505:                        return(FALSE);
        !           506:                }
        !           507: 
        !           508:                i=fread(str,1,INI_MAX_VALUE_LEN,in);
        !           509:                str[i]=0;
        !           510:                truncsp(str);
        !           511:                fclose(in);
        !           512: 
        !           513:                if(strlen(str)) {
        !           514:                        c_escape_str(str,estr,sizeof(estr),/* ctrl_only? */TRUE);
        !           515:                        iniSetString(&outlist,ROOT_SECTION,"Message",estr,NULL);
        !           516:                }
        !           517: 
        !           518:                printf("-> %s\n", outpath);
        !           519:        }
        !           520: 
        !           521:        sprintf(inpath,"%sip.can",scfg.text_dir);
        !           522:        printf("\t%s ",inpath);
        !           523:        if((in=fopen(inpath,"r"))==NULL) {
        !           524:                perror("open failure");
        !           525:                return(FALSE);
        !           526:        }
        !           527: 
        !           528:        if((inlist = strListReadFile(in,NULL,4096))==NULL) {
        !           529:                printf("!failure reading %s\n",inpath);
        !           530:                return(FALSE);
        !           531:        }
        !           532: 
        !           533:        total=0;
        !           534:        for(i=0;inlist[i]!=NULL;i++) {
        !           535:                p=truncsp(inlist[i]);
        !           536:                SKIP_WHITESPACE(p);
        !           537:                if(*p==';')
        !           538:                        strListPush(&outlist,p);
        !           539:                else if(*p) {
        !           540:                        iniAppendSection(&outlist,p,NULL);
        !           541:                        total++;
        !           542:                }
        !           543:        }
        !           544: 
        !           545:        printf("-> %s (%u IP Addresses)\n", outpath, total);
        !           546:        fclose(in);
        !           547:        strListFreeStrings(inlist);
        !           548: 
        !           549:        sprintf(inpath,"%sip-silent.can",scfg.text_dir);
        !           550:        printf("\t%s ",inpath);
        !           551:        if((in=fopen(inpath,"r"))==NULL) {
        !           552:                perror("open failure");
        !           553:                return(FALSE);
        !           554:        }
        !           555: 
        !           556:        if((inlist = strListReadFile(in,NULL,4096))==NULL) {
        !           557:                printf("!failure reading %s\n",inpath);
        !           558:                return(FALSE);
        !           559:        }
        !           560: 
        !           561:        total=0;
        !           562:        for(i=0;inlist[i]!=NULL;i++) {
        !           563:                p=truncsp(inlist[i]);
        !           564:                SKIP_WHITESPACE(p);
        !           565:                if(*p==';')
        !           566:                        strListPush(&outlist,p);
        !           567:                else if(*p) {
        !           568:                        iniSetBool(&outlist,p,"Silent",TRUE,NULL);
        !           569:                        total++;
        !           570:                }
        !           571:        }
        !           572: 
        !           573:        printf("-> %s (%u IP Addresses)\n", outpath, total);
        !           574:        fclose(in);
        !           575:        strListFree(&inlist);
        !           576: 
        !           577:        success=iniWriteFile(out, outlist);
        !           578: 
        !           579:        fclose(out);
        !           580: 
        !           581:        if(!success) {
        !           582:                printf("!iniWriteFile failure\n");
        !           583:                return(FALSE);
        !           584:        }
        !           585: 
        !           586:        printf("\tFiltering %u total IP Addresses\n", iniGetSectionCount(outlist,NULL));
        !           587: 
        !           588:        strListFree(&outlist);
        !           589: 
        !           590:        return(success);
        !           591: }
        !           592: 
        !           593: BOOL upgrade_filter(const char* desc, const char* inpath, const char* msgpath, const char* outpath)
        !           594: {
        !           595:        char*   p;
        !           596:        char    str[INI_MAX_VALUE_LEN];
        !           597:        char    estr[INI_MAX_VALUE_LEN];
        !           598:        FILE*   in;
        !           599:        FILE*   out;
        !           600:        BOOL    success;
        !           601:        size_t  i;
        !           602:        size_t  total;
        !           603:        str_list_t      inlist;
        !           604:        str_list_t      outlist;
        !           605: 
        !           606:        style.section_separator = NULL;
        !           607:        iniSetDefaultStyle(style);
        !           608: 
        !           609:        printf("Upgrading %s filters...\n",desc);
        !           610: 
        !           611:        if(!overwrite(outpath))
        !           612:                return(TRUE);
        !           613:        if((out=fopen(outpath,"w"))==NULL) {
        !           614:                perror(outpath);
        !           615:                return(FALSE);
        !           616:        }
        !           617: 
        !           618:        if((outlist = strListInit())==NULL) {
        !           619:                printf("!malloc failure\n");
        !           620:                return(FALSE);
        !           621:        }
        !           622: 
        !           623:        /* Read the message file (if present) */
        !           624:        if(msgpath!=NULL && fexist(msgpath)) {
        !           625:                printf("\t%s ",msgpath);
        !           626: 
        !           627:                if((in=fopen(msgpath,"r"))==NULL) {
        !           628:                        perror("open failure");
        !           629:                        return(FALSE);
        !           630:                }
        !           631: 
        !           632:                i=fread(str,1,INI_MAX_VALUE_LEN,in);
        !           633:                str[i]=0;
        !           634:                truncsp(str);
        !           635:                fclose(in);
        !           636: 
        !           637:                if(strlen(str)) {
        !           638:                        c_escape_str(str,estr,sizeof(estr),/* ctrl_only? */TRUE);
        !           639:                        iniSetString(&outlist,ROOT_SECTION,"Message",estr,NULL);
        !           640:                }
        !           641: 
        !           642:                printf("-> %s\n", outpath);
        !           643:        }
        !           644: 
        !           645:        printf("\t%s ",inpath);
        !           646:        if((in=fopen(inpath,"r"))==NULL) {
        !           647:                perror("open failure");
        !           648:                return(FALSE);
        !           649:        }
        !           650: 
        !           651:        if((inlist = strListReadFile(in,NULL,4096))==NULL) {
        !           652:                printf("!failure reading %s\n",inpath);
        !           653:                return(FALSE);
        !           654:        }
        !           655: 
        !           656:        total=0;
        !           657:        for(i=0;inlist[i]!=NULL;i++) {
        !           658:                p=truncsp(inlist[i]);
        !           659:                SKIP_WHITESPACE(p);
        !           660:                if(*p==';')
        !           661:                        strListPush(&outlist,p);
        !           662:                else if(*p) {
        !           663:                        iniAppendSection(&outlist,p,NULL);
        !           664:                        total++;
        !           665:                }
        !           666:        }
        !           667: 
        !           668:        printf("-> %s (%u %ss)\n", outpath, total, desc);
        !           669:        fclose(in);
        !           670:        strListFree(&inlist);
        !           671: 
        !           672:        success=iniWriteFile(out, outlist);
        !           673: 
        !           674:        fclose(out);
        !           675: 
        !           676:        if(!success) {
        !           677:                printf("!iniWriteFile failure\n");
        !           678:                return(FALSE);
        !           679:        }
        !           680: 
        !           681:        printf("\tFiltering %u total %ss\n", iniGetSectionCount(outlist,NULL),desc);
        !           682: 
        !           683:        strListFree(&outlist);
        !           684: 
        !           685:        return(success);
        !           686: }
        !           687: 
        !           688: BOOL upgrade_list(const char* desc, const char* infile, const char* outfile
        !           689:                                  ,BOOL section_list, const char* key)
        !           690: {
        !           691:        char*   p;
        !           692:        char*   vp;
        !           693:        char    inpath[MAX_PATH+1];
        !           694:        char    outpath[MAX_PATH+1];
        !           695:        FILE*   in;
        !           696:        FILE*   out;
        !           697:        BOOL    success;
        !           698:        size_t  i;
        !           699:        size_t  total;
        !           700:        str_list_t      inlist;
        !           701:        str_list_t      outlist;
        !           702: 
        !           703:        style.section_separator = (section_list && key==NULL) ? NULL : "";
        !           704:        iniSetDefaultStyle(style);
        !           705: 
        !           706:        SAFEPRINTF2(inpath,"%s%s",scfg.ctrl_dir,infile);
        !           707:        SAFEPRINTF2(outpath,"%s%s",scfg.ctrl_dir,outfile);
        !           708: 
        !           709:        if(!fexistcase(inpath))
        !           710:                return(TRUE);
        !           711: 
        !           712:        printf("Upgrading %s...\n",desc);
        !           713: 
        !           714:        if(!overwrite(outpath))
        !           715:                return(TRUE);
        !           716:        if((out=fopen(outpath,"w"))==NULL) {
        !           717:                perror(outpath);
        !           718:                return(FALSE);
        !           719:        }
        !           720: 
        !           721:        if((outlist = strListInit())==NULL) {
        !           722:                printf("!malloc failure\n");
        !           723:                return(FALSE);
        !           724:        }
        !           725:        printf("\t%s ",inpath);
        !           726:        if((in=fopen(inpath,"r"))==NULL) {
        !           727:                perror("open failure");
        !           728:                return(FALSE);
        !           729:        }
        !           730: 
        !           731:        if((inlist = strListReadFile(in,NULL,4096))==NULL) {
        !           732:                printf("!failure reading %s\n",inpath);
        !           733:                return(FALSE);
        !           734:        }
        !           735: 
        !           736:        total=0;
        !           737:        for(i=0;inlist[i]!=NULL;i++) {
        !           738:                p=truncsp(inlist[i]);
        !           739:                SKIP_WHITESPACE(p);
        !           740:                if(*p==';')
        !           741:                        strListPush(&outlist,p);
        !           742:                else if(*p) {
        !           743:                        vp=NULL;
        !           744:                        if((!section_list || key!=NULL)
        !           745:                                && ((vp=strchr(p,' '))!=NULL || ((vp=strchr(p,'\t'))!=NULL))) {
        !           746:                                *(vp++) = 0;
        !           747:                                SKIP_WHITESPACE(vp);
        !           748:                        }
        !           749:                        if(section_list) {
        !           750:                                iniAppendSection(&outlist,p,NULL);
        !           751:                                if(vp!=NULL && *vp)
        !           752:                                        iniSetString(&outlist,p,key,vp,NULL);
        !           753:                        } else
        !           754:                                iniSetString(&outlist,ROOT_SECTION,p,vp,NULL);
        !           755:                        total++;
        !           756:                }
        !           757:        }
        !           758: 
        !           759:        printf("-> %s (%u)\n", outpath, total);
        !           760:        fclose(in);
        !           761:        strListFree(&inlist);
        !           762: 
        !           763:        success=iniWriteFile(out, outlist);
        !           764: 
        !           765:        fclose(out);
        !           766: 
        !           767:        if(!success) {
        !           768:                printf("!iniWriteFile failure\n");
        !           769:                return(FALSE);
        !           770:        }
        !           771: 
        !           772:        printf("\tWrote %u items\n", iniGetSectionCount(outlist,NULL));
        !           773: 
        !           774:        strListFree(&outlist);
        !           775: 
        !           776:        return(success);
        !           777: }
        !           778: 
        !           779: BOOL upgrade_filters()
        !           780: {
        !           781:        char    inpath[MAX_PATH+1];
        !           782:        char    outpath[MAX_PATH+1];
        !           783:        char    msgpath[MAX_PATH+1];
        !           784: 
        !           785:        if(!upgrade_ip_filters())
        !           786:                return(FALSE);
        !           787: 
        !           788:        sprintf(inpath,"%shost.can",scfg.text_dir);
        !           789:        sprintf(msgpath,"%sbadhost.msg",scfg.text_dir);
        !           790:        sprintf(outpath,"%shost-filter.ini",scfg.ctrl_dir);
        !           791:        if(!upgrade_filter("Hostname",inpath,msgpath,outpath))
        !           792:                return(FALSE);
        !           793: 
        !           794:        sprintf(inpath,"%semail.can",scfg.text_dir);
        !           795:        sprintf(msgpath,"%sbademail.msg",scfg.text_dir);
        !           796:        sprintf(outpath,"%semail-filter.ini",scfg.ctrl_dir);
        !           797:        if(!upgrade_filter("E-mail Address",inpath,msgpath,outpath))
        !           798:                return(FALSE);
        !           799: 
        !           800:        sprintf(inpath,"%sname.can",scfg.text_dir);
        !           801:        sprintf(msgpath,"%sbadname.msg",scfg.text_dir);
        !           802:        sprintf(outpath,"%sname-filter.ini",scfg.ctrl_dir);
        !           803:        if(!upgrade_filter("User Name",inpath,msgpath,outpath))
        !           804:                return(FALSE);
        !           805: 
        !           806:        sprintf(inpath,"%sphone.can",scfg.text_dir);
        !           807:        sprintf(msgpath,"%sbadphone.msg",scfg.text_dir);
        !           808:        sprintf(outpath,"%sphone-filter.ini",scfg.ctrl_dir);
        !           809:        if(!upgrade_filter("Phone Number",inpath,msgpath,outpath))
        !           810:                return(FALSE);
        !           811: 
        !           812:        sprintf(inpath,"%ssubject.can",scfg.text_dir);
        !           813:        sprintf(msgpath,"%sbadsubject.msg",scfg.text_dir);
        !           814:        sprintf(outpath,"%ssubject-filter.ini",scfg.ctrl_dir);
        !           815:        if(!upgrade_filter("Message Subject",inpath,msgpath,outpath))
        !           816:                return(FALSE);
        !           817: 
        !           818:        return(TRUE);
        !           819: }
        !           820: 
        !           821: #define BBS_VIRTUAL_PATH               "bbs:/""/"      /* this is actually bbs:<slash><slash> */
        !           822: 
        !           823: BOOL upgrade_ftp_aliases(void)
        !           824: {
        !           825:        char*   p;
        !           826:        char*   path;
        !           827:        char*   desc;
        !           828:        char*   section;
        !           829:        char    inpath[MAX_PATH+1];
        !           830:        char    outpath[MAX_PATH+1];
        !           831:        FILE*   in;
        !           832:        FILE*   out;
        !           833:        BOOL    success;
        !           834:        size_t  i;
        !           835:        size_t  total;
        !           836:        str_list_t      inlist;
        !           837:        str_list_t      outlist;
        !           838: 
        !           839:        style.section_separator = "";
        !           840:        iniSetDefaultStyle(style);
        !           841: 
        !           842:        SAFEPRINTF(inpath,"%sftpalias.cfg",scfg.ctrl_dir);
        !           843:        SAFEPRINTF(outpath,"%sftpalias.ini",scfg.ctrl_dir);
        !           844: 
        !           845:        if(!fexistcase(inpath))
        !           846:                return(TRUE);
        !           847: 
        !           848:        printf("Upgrading FTP Aliases...\n");
        !           849: 
        !           850:        if(!overwrite(outpath))
        !           851:                return(TRUE);
        !           852:        if((out=fopen(outpath,"w"))==NULL) {
        !           853:                perror(outpath);
        !           854:                return(FALSE);
        !           855:        }
        !           856: 
        !           857:        if((outlist = strListInit())==NULL) {
        !           858:                printf("!malloc failure\n");
        !           859:                return(FALSE);
        !           860:        }
        !           861:        printf("\t%s ",inpath);
        !           862:        if((in=fopen(inpath,"r"))==NULL) {
        !           863:                perror("open failure");
        !           864:                return(FALSE);
        !           865:        }
        !           866: 
        !           867:        if((inlist = strListReadFile(in,NULL,4096))==NULL) {
        !           868:                printf("!failure reading %s\n",inpath);
        !           869:                return(FALSE);
        !           870:        }
        !           871: 
        !           872:        total=0;
        !           873:        for(i=0;inlist[i]!=NULL;i++) {
        !           874:                p=truncsp(inlist[i]);
        !           875:                SKIP_WHITESPACE(p);
        !           876:                if(*p==';') {
        !           877:                        strListPush(&outlist,p);
        !           878:                        continue;
        !           879:                } else if(*p==0)
        !           880:                        continue;
        !           881:                path=p;
        !           882:                FIND_WHITESPACE(path);
        !           883:                if(*path==0)
        !           884:                        continue;
        !           885:                *(path++)=0;
        !           886:                SKIP_WHITESPACE(path);
        !           887:                desc=path;
        !           888:                FIND_WHITESPACE(desc);
        !           889:                if(*desc==0)
        !           890:                        continue;
        !           891:                *(desc++)=0;
        !           892:                SKIP_WHITESPACE(desc);
        !           893:                iniAppendSection(&outlist,p,NULL);
        !           894:                if(!strnicmp(path,BBS_VIRTUAL_PATH,strlen(BBS_VIRTUAL_PATH)))
        !           895:                        path+=strlen(BBS_VIRTUAL_PATH)-1;
        !           896:                else
        !           897:                        iniSetBool(&outlist,p,"Local",TRUE,NULL);
        !           898:                iniSetString(&outlist,p,"Path",path,NULL);
        !           899:                if(!stricmp(desc,"hidden"))
        !           900:                        iniSetBool(&outlist,p,"Hidden",TRUE,NULL);
        !           901:                else
        !           902:                        iniSetString(&outlist,p,"Description",desc,NULL);
        !           903:                total++;
        !           904:        }
        !           905: 
        !           906:        section="local";
        !           907:        iniAppendSection(&outlist,section,NULL);
        !           908:        iniSetString(&outlist,section,"Description","Local file system",NULL);
        !           909:        iniSetString(&outlist,section,"Path","/",NULL);
        !           910:        iniSetBool(&outlist,section,"Local",TRUE,NULL);
        !           911:        iniSetString(&outlist,section,"AccessRequirements","SYSOP",NULL);
        !           912: 
        !           913:        printf("-> %s (%u FTP aliases)\n", outpath, total);
        !           914:        fclose(in);
        !           915:        strListFree(&inlist);
        !           916: 
        !           917:        success=iniWriteFile(out, outlist);
        !           918: 
        !           919:        fclose(out);
        !           920: 
        !           921:        if(!success) {
        !           922:                printf("!iniWriteFile failure\n");
        !           923:                return(FALSE);
        !           924:        }
        !           925: 
        !           926:        printf("\tWrote %u total FTP aliases\n", iniGetSectionCount(outlist,NULL));
        !           927: 
        !           928:        strListFree(&outlist);
        !           929: 
        !           930:        return(success);
        !           931: }
        !           932: 
        !           933: BOOL upgrade_socket_options(void)
        !           934: {
        !           935:        char*   p;
        !           936:        char*   key;
        !           937:        char*   val;
        !           938:        char*   section;
        !           939:        char    inpath[MAX_PATH+1];
        !           940:        char    outpath[MAX_PATH+1];
        !           941:        FILE*   in;
        !           942:        FILE*   out;
        !           943:        BOOL    success;
        !           944:        size_t  i;
        !           945:        size_t  total;
        !           946:        str_list_t      inlist;
        !           947:        str_list_t      outlist;
        !           948: 
        !           949:        style.section_separator = "";
        !           950:        iniSetDefaultStyle(style);
        !           951: 
        !           952:        SAFEPRINTF(inpath,"%ssockopts.cfg",scfg.ctrl_dir);
        !           953:        SAFEPRINTF(outpath,"%ssockopts.ini",scfg.ctrl_dir);
        !           954: 
        !           955:        if(!fexistcase(inpath))
        !           956:                return(TRUE);
        !           957: 
        !           958:        printf("Upgrading Socket Options...\n");
        !           959: 
        !           960:        if(!overwrite(outpath))
        !           961:                return(TRUE);
        !           962:        if((out=fopen(outpath,"w"))==NULL) {
        !           963:                perror(outpath);
        !           964:                return(FALSE);
        !           965:        }
        !           966: 
        !           967:        if((outlist = strListInit())==NULL) {
        !           968:                printf("!malloc failure\n");
        !           969:                return(FALSE);
        !           970:        }
        !           971:        printf("\t%s ",inpath);
        !           972:        if((in=fopen(inpath,"r"))==NULL) {
        !           973:                perror("open failure");
        !           974:                return(FALSE);
        !           975:        }
        !           976: 
        !           977:        if((inlist = strListReadFile(in,NULL,4096))==NULL) {
        !           978:                printf("!failure reading %s\n",inpath);
        !           979:                return(FALSE);
        !           980:        }
        !           981: 
        !           982:        total=0;
        !           983:        for(i=0;inlist[i]!=NULL;i++) {
        !           984:                p=truncsp(inlist[i]);
        !           985:                SKIP_WHITESPACE(p);
        !           986:                if(*p==';') {
        !           987:                        strListPush(&outlist,p);
        !           988:                        continue;
        !           989:                } else if(*p==0)
        !           990:                        continue;
        !           991:                key=p;
        !           992:                FIND_WHITESPACE(p);
        !           993:                if(*p==0)
        !           994:                        continue;
        !           995:                *(p++)=0;
        !           996:                SKIP_WHITESPACE(p);
        !           997:                val=p;
        !           998:                section=ROOT_SECTION;
        !           999:                if(!stricmp(key,"tcp_nodelay"))
        !          1000:                        section="telnet|rlogin";
        !          1001:                else if(!stricmp(key,"keepalive"))
        !          1002:                        section="tcp";
        !          1003:                iniSetString(&outlist,section,key,val,NULL);
        !          1004:                total++;
        !          1005:        }
        !          1006: 
        !          1007:        printf("-> %s (%u Socket Options)\n", outpath, total);
        !          1008:        fclose(in);
        !          1009:        strListFree(&inlist);
        !          1010: 
        !          1011:        success=iniWriteFile(out, outlist);
        !          1012: 
        !          1013:        fclose(out);
        !          1014: 
        !          1015:        if(!success) {
        !          1016:                printf("!iniWriteFile failure\n");
        !          1017:                return(FALSE);
        !          1018:        }
        !          1019: 
        !          1020:        strListFree(&outlist);
        !          1021: 
        !          1022:        return(success);
        !          1023: }
        !          1024: 
        !          1025: 
        !          1026: 
        !          1027: #define upg_iniSetString(list,section,key,val) \
        !          1028:                if(*val) iniSetString(list,section,key,val,NULL)
        !          1029: 
        !          1030: #define upg_iniSetInteger(list,section,key,val) \
        !          1031:                if(val) iniSetInteger(list,section,key,val,NULL)
        !          1032: 
        !          1033: BOOL upgrade_msg_areas(void)
        !          1034: {
        !          1035:        char    str[128];
        !          1036:        char    outpath[MAX_PATH+1];
        !          1037:        char    data_subs[MAX_PATH+1];
        !          1038:        FILE*   out;
        !          1039:        BOOL    success;
        !          1040:        size_t  i;
        !          1041:        str_list_t      outlist;
        !          1042: 
        !          1043:        style.section_separator = "";
        !          1044:        iniSetDefaultStyle(style);
        !          1045: 
        !          1046:        SAFEPRINTF(outpath,"%smsg_areas.ini",scfg.ctrl_dir);
        !          1047: 
        !          1048:        SAFEPRINTF(data_subs,"%ssubs",scfg.data_dir);
        !          1049:        backslash(data_subs);
        !          1050: 
        !          1051:        printf("Upgrading Message Area configuration...\n");
        !          1052: 
        !          1053:        if(!overwrite(outpath))
        !          1054:                return(TRUE);
        !          1055:        if((out=fopen(outpath,"w"))==NULL) {
        !          1056:                perror(outpath);
        !          1057:                return(FALSE);
        !          1058:        }
        !          1059: 
        !          1060:        if((outlist = strListInit())==NULL) {
        !          1061:                printf("!malloc failure\n");
        !          1062:                return(FALSE);
        !          1063:        }
        !          1064: 
        !          1065:        for(i=0; i<scfg.total_grps; i++) {
        !          1066:                SAFEPRINTF(str,"Group:%s",scfg.grp[i]->sname);
        !          1067:                iniAppendSection(&outlist,str,NULL);
        !          1068:                upg_iniSetString(&outlist,str,"Description",scfg.grp[i]->lname);
        !          1069:                upg_iniSetString(&outlist,str,"AccessRequirements",scfg.grp[i]->arstr);
        !          1070:                upg_iniSetString(&outlist,str,"CodePrefix",scfg.grp[i]->code_prefix);
        !          1071:        }
        !          1072:        for(i=0; i<scfg.total_subs; i++) {
        !          1073:                sprintf(str,"%s",scfg.sub[i]->code_suffix);
        !          1074:                iniAppendSection(&outlist,str,NULL);
        !          1075:                upg_iniSetString(&outlist,str,"Group",scfg.grp[scfg.sub[i]->grp]->sname);
        !          1076:                upg_iniSetString(&outlist,str,"Name",scfg.sub[i]->sname);
        !          1077:                upg_iniSetString(&outlist,str,"Newsgroup",scfg.sub[i]->newsgroup);
        !          1078:                upg_iniSetString(&outlist,str,"QwkName",scfg.sub[i]->qwkname);
        !          1079:                upg_iniSetInteger(&outlist,str,"QwkConference",scfg.sub[i]->qwkconf);
        !          1080:                upg_iniSetString(&outlist,str,"Description",scfg.sub[i]->lname);
        !          1081:                if(stricmp(scfg.sub[i]->data_dir, data_subs))
        !          1082:                        iniSetString(&outlist,str,"DataDir",scfg.sub[i]->data_dir,NULL);
        !          1083:                if(strcmp(scfg.sub[i]->tagline, scfg.qnet_tagline))
        !          1084:                        upg_iniSetString(&outlist,str,"TagLine",scfg.sub[i]->tagline);
        !          1085:                if(strcmp(scfg.origline, scfg.sub[i]->origline))
        !          1086:                        upg_iniSetString(&outlist,str,"OriginLine",scfg.sub[i]->origline);
        !          1087:                upg_iniSetString(&outlist,str,"AccessRequirements",scfg.sub[i]->arstr);
        !          1088:                upg_iniSetString(&outlist,str,"ReadRequirements",scfg.sub[i]->read_arstr);
        !          1089:                upg_iniSetString(&outlist,str,"PostRequirements",scfg.sub[i]->post_arstr);
        !          1090:                upg_iniSetString(&outlist,str,"OperatorRequirements",scfg.sub[i]->op_arstr);
        !          1091:                upg_iniSetString(&outlist,str,"ModeratorRequirements",scfg.sub[i]->mod_arstr);
        !          1092:                upg_iniSetString(&outlist,str,"PostSemFile",scfg.sub[i]->post_sem);
        !          1093:                upg_iniSetInteger(&outlist,str,"MaxMessages",scfg.sub[i]->maxmsgs);
        !          1094:                upg_iniSetInteger(&outlist,str,"MaxMessageAge",scfg.sub[i]->maxage);
        !          1095:                upg_iniSetInteger(&outlist,str,"CrcHistory",scfg.sub[i]->maxcrcs);
        !          1096:                if(scfg.sub[i]->faddr.zone)
        !          1097:                        iniSetString(&outlist,str,"FidoNetAddress",smb_faddrtoa(&scfg.sub[i]->faddr,NULL),NULL);
        !          1098:        }
        !          1099:        printf("-> %s (%u groups and %u sub-boards)\n", outpath, scfg.total_grps, scfg.total_subs);
        !          1100: 
        !          1101:        success=iniWriteFile(out, outlist);
        !          1102: 
        !          1103:        fclose(out);
        !          1104: 
        !          1105:        if(!success) {
        !          1106:                printf("!iniWriteFile failure\n");
        !          1107:                return(FALSE);
        !          1108:        }
        !          1109: 
        !          1110:        printf("\tWrote %u items\n", iniGetSectionCount(outlist,NULL));
        !          1111: 
        !          1112:        strListFree(&outlist);
        !          1113: 
        !          1114:        return(success);
        !          1115: }
        !          1116: 
        !          1117: 
        !          1118: char *usage="\nusage: v4upgrade [ctrl_dir]\n";
        !          1119: 
        !          1120: int main(int argc, char** argv)
        !          1121: {
        !          1122:        char    error[512];
        !          1123:        char    revision[16];
        !          1124:        char*   p;
        !          1125:        int             first_arg=1;
        !          1126: 
        !          1127:        sscanf("$Revision: 1.13 $", "%*s %s", revision);
        !          1128: 
        !          1129:        fprintf(stderr,"\nV4upgrade v%s-%s - Upgrade Synchronet files from v3 to v4\n"
        !          1130:                ,revision
        !          1131:                ,PLATFORM_DESC
        !          1132:                );
        !          1133: 
        !          1134:        if(argc>1 && strcspn(argv[first_arg],"/\\")!=strlen(argv[first_arg]))
        !          1135:                p=argv[first_arg++];
        !          1136:        else
        !          1137:                p=getenv("SBBSCTRL");
        !          1138:        if(p==NULL) {
        !          1139:                printf("\nSBBSCTRL environment variable not set.\n");
        !          1140:                printf("\nExample: SET SBBSCTRL=/sbbs/ctrl\n");
        !          1141:                exit(1)        !          1142:        }
        !          1143: 
        !          1144:        memset(&scfg,0,sizeof(scfg));
        !          1145:        scfg.size=sizeof(scfg);
        !          1146:        SAFECOPY(scfg.ctrl_dir,p);
        !          1147: 
        !          1148:        if(chdir(scfg.ctrl_dir)!=0)
        !          1149:                fprintf(stderr,"!ERROR changing directory to: %s", scfg.ctrl_dir);
        !          1150: 
        !          1151:        printf("\nLoading configuration files from %s\n",scfg.ctrl_dir);
        !          1152:        if(!load_cfg(&scfg,NULL,TRUE,error)) {
        !          1153:                fprintf(stderr,"!ERROR loading configuration files: %s\n",error);
        !          1154:                exit(1);
        !          1155:        }
        !          1156: 
        !          1157:        iniSetDefaultStyle(style);
        !          1158: 
        !          1159:        if(!upgrade_users())
        !          1160:                return(1);
        !          1161: 
        !          1162:        if(!upgrade_stats())
        !          1163:                return(2);
        !          1164: 
        !          1165:        if(!upgrade_event_data())
        !          1166:                return(3);
        !          1167: 
        !          1168:        if(!upgrade_filters())
        !          1169:                return(4);
        !          1170: 
        !          1171:        if(!upgrade_list("Twits", "twitlist.cfg", "twitlist.ini", TRUE, NULL))
        !          1172:                return(5);
        !          1173: 
        !          1174:        if(!upgrade_list("RLogin allow", "rlogin.cfg", "rlogin.ini", TRUE, NULL))
        !          1175:                return(5);
        !          1176: 
        !          1177:        if(!upgrade_list("E-Mail aliases", "alias.cfg", "alias.ini", FALSE, NULL))
        !          1178:                return(5);
        !          1179:        
        !          1180:        if(!upgrade_list("E-Mail domains", "domains.cfg", "domains.ini", TRUE, NULL))
        !          1181:                return(5);
        !          1182: 
        !          1183:        if(!upgrade_list("Allowed mail relayers", "relay.cfg", "relay.ini", TRUE, NULL))
        !          1184:                return(5);
        !          1185: 
        !          1186:        if(!upgrade_list("SPAM bait addresses", "spambait.cfg", "spambait.ini", TRUE, NULL))
        !          1187:                return(5);
        !          1188: 
        !          1189:        if(!upgrade_list("Blocked spammers", "spamblock.cfg", "spamblock.ini", TRUE, NULL))
        !          1190:                return(5);
        !          1191: 
        !          1192:        if(!upgrade_list("DNS black-lists", "dns_blacklist.cfg", "dns_blacklist.ini", TRUE, "notice"))
        !          1193:                return(5);
        !          1194: 
        !          1195:        if(!upgrade_list("DNS black-list exemptions", "dnsbl_exempt.cfg", "dnsbl_exempt.ini", TRUE, NULL))
        !          1196:                return(5);
        !          1197: 
        !          1198:        if(!upgrade_ftp_aliases())
        !          1199:                return(-1);
        !          1200: 
        !          1201:        if(!upgrade_socket_options())
        !          1202:                return(-1);
        !          1203: 
        !          1204:        /* attr.cfg */
        !          1205: 
        !          1206:        if(!upgrade_msg_areas())
        !          1207:                return(-1);
        !          1208: 
        !          1209:        printf("Upgrade successful.\n");
        !          1210:     return(0);
        !          1211: }

unix.superglobalmegacorp.com

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