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

1.1     ! root        1: /* makeuser.c */
        !             2: 
        !             3: /* Program to add a user to a Synchronet user database */
        !             4: 
        !             5: /* $Id: makeuser.c,v 1.6 2006/04/21 04:24:53 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 2000 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: 
        !            40: scfg_t scfg;
        !            41: 
        !            42: /****************************************************************************/
        !            43: /* This is needed by load_cfg.c                                                                                                */
        !            44: /****************************************************************************/
        !            45: int lprintf(int level, char *fmat, ...)
        !            46: {
        !            47:        va_list argptr;
        !            48:        char sbuf[512];
        !            49:        int chcount;
        !            50: 
        !            51:        va_start(argptr,fmat);
        !            52:        chcount=vsprintf(sbuf,fmat,argptr);
        !            53:        va_end(argptr);
        !            54:        truncsp(sbuf);
        !            55:        printf("%s\n",sbuf);
        !            56:        return(chcount);
        !            57: }
        !            58: 
        !            59: char *usage="\nusage: makeuser [ctrl_dir] name [-param value] [...]\n"
        !            60:        "\nparams:\n"
        !            61:        "\t-P\tPassword\n"
        !            62:        "\t-R\tReal name\n"
        !            63:        "\t-H\tChat handle\n"
        !            64:        "\t-G\tGender (M or F)\n"
        !            65:        "\t-B\tBirth date (in MM/DD/YY or DD/MM/YY format)\n"
        !            66:        "\t-T\tTelephone number\n"
        !            67:        "\t-N\tNetmail (Internet e-mail) address\n"
        !            68:        "\t-A\tStreet address\n"
        !            69:        "\t-L\tLocation (city, state)\n"
        !            70:        "\t-Z\tZip/Postal code\n"
        !            71:        "\t-S\tSecurity level\n"
        !            72:        "\t-F#\tFlag set #\n"
        !            73:        "\t-FE\tExemption flags\n"
        !            74:        "\t-FR\tRestriction flags\n"
        !            75:        "\t-E\tExpiration days\n"
        !            76:        "\t-C\tComment\n"
        !            77:        "\nNOTE: multi-word user name and param values must be enclosed in \"quotes\"\n"
        !            78:        ;
        !            79: 
        !            80: /*********************/
        !            81: /* Entry point (duh) */
        !            82: /*********************/
        !            83: int main(int argc, char **argv)
        !            84: {
        !            85:        char*   p;
        !            86:        char    error[512];
        !            87:        char    revision[16];
        !            88:        int             i;
        !            89:        int             first_arg=1;
        !            90:        time_t  now;
        !            91:        user_t  user;
        !            92: 
        !            93:        sscanf("$Revision: 1.6 $", "%*s %s", revision);
        !            94: 
        !            95:        fprintf(stderr,"\nMAKEUSER v%s-%s - Adds User to Synchronet User Database\n"
        !            96:                ,revision
        !            97:                ,PLATFORM_DESC
        !            98:                );
        !            99: 
        !           100:        if(argc<2) {
        !           101:                printf("%s",usage);
        !           102:                return(1)        !           103:        }
        !           104: 
        !           105:        if(strcspn(argv[first_arg],"/\\")!=strlen(argv[first_arg]))
        !           106:                p=argv[first_arg++];
        !           107:        else
        !           108:                p=getenv("SBBSCTRL");
        !           109:        if(p==NULL) {
        !           110:                printf("\nSBBSCTRL environment variable not set.\n");
        !           111:                printf("\nExample: SET SBBSCTRL=/sbbs/ctrl\n");
        !           112:                exit(1)        !           113:        }
        !           114: 
        !           115:        memset(&scfg,0,sizeof(scfg));
        !           116:        scfg.size=sizeof(scfg);
        !           117:        SAFECOPY(scfg.ctrl_dir,p);
        !           118: 
        !           119:        if(chdir(scfg.ctrl_dir)!=0)
        !           120:                fprintf(stderr,"!ERROR changing directory to: %s", scfg.ctrl_dir);
        !           121: 
        !           122:        printf("\nLoading configuration files from %s\n",scfg.ctrl_dir);
        !           123:        if(!load_cfg(&scfg,NULL,TRUE,error)) {
        !           124:                fprintf(stderr,"!ERROR loading configuration files: %s\n",error);
        !           125:                exit(1);
        !           126:        }
        !           127: 
        !           128:        if(!(scfg.sys_misc&SM_LOCAL_TZ))
        !           129:                putenv("TZ=UTC0");
        !           130: 
        !           131:        now=time(NULL);
        !           132: 
        !           133:        memset(&user,0,sizeof(user));
        !           134: 
        !           135:        /****************/
        !           136:        /* Set Defaults */
        !           137:        /****************/
        !           138: 
        !           139:        /* security */
        !           140:        user.level=scfg.new_level;
        !           141:        user.flags1=scfg.new_flags1;
        !           142:        user.flags2=scfg.new_flags2;
        !           143:        user.flags3=scfg.new_flags3;
        !           144:        user.flags4=scfg.new_flags4;
        !           145:        user.rest=scfg.new_rest;
        !           146:        user.exempt=scfg.new_exempt; 
        !           147: 
        !           148:        user.cdt=scfg.new_cdt;
        !           149:        user.min=scfg.new_min;
        !           150:        user.freecdt=scfg.level_freecdtperday[user.level];
        !           151: 
        !           152:        if(scfg.total_fcomps)
        !           153:                strcpy(user.tmpext,scfg.fcomp[0]->ext);
        !           154:        else
        !           155:                strcpy(user.tmpext,"ZIP");
        !           156:        for(i=0;i<scfg.total_xedits;i++)
        !           157:                if(!stricmp(scfg.xedit[i]->code,scfg.new_xedit))
        !           158:                        break;
        !           159:        if(i<scfg.total_xedits)
        !           160:                user.xedit=i+1;
        !           161: 
        !           162:        user.shell=scfg.new_shell;
        !           163:        user.misc=(scfg.new_misc&~(DELETED|INACTIVE|QUIET|NETMAIL));
        !           164:        user.misc|=AUTOTERM;    /* No way to frob the default value... */
        !           165:        user.qwk=QWK_DEFAULT;
        !           166:        user.firston=now;
        !           167:        user.laston=now;        /* must set this or user may be purged prematurely */
        !           168:        user.pwmod=now;
        !           169:        user.sex=' ';
        !           170:        user.prot=scfg.new_prot;
        !           171: 
        !           172:        if(scfg.new_expire)
        !           173:                user.expire=now+((long)scfg.new_expire*24L*60L*60L); 
        !           174: 
        !           175:        for(i=first_arg;i<argc;i++) {
        !           176:                if(argv[i][0]=='-') {
        !           177:                        if(argv[i+1]==NULL) {
        !           178:                                printf("%s",usage);
        !           179:                                return(1);
        !           180:                        }
        !           181:                        switch(toupper(argv[i++][1])) {
        !           182:                        case 'A':
        !           183:                                SAFECOPY(user.address,argv[i]);
        !           184:                                break;
        !           185:                        case 'B':
        !           186:                                SAFECOPY(user.birth,argv[i]);
        !           187:                                break;
        !           188:                        case 'L':
        !           189:                                SAFECOPY(user.location,argv[i]);
        !           190:                                break;
        !           191:                        case 'C':
        !           192:                                SAFECOPY(user.comment,argv[i]);
        !           193:                                break;
        !           194:                        case 'E':
        !           195:                                user.expire=now+((long)atoi(argv[i])*24L*60L*60L); 
        !           196:                                break;
        !           197:                        case 'F':
        !           198:                                switch(toupper(argv[i-1][2])) {
        !           199:                                        case '1':
        !           200:                                                user.flags1=aftol(argv[i]);
        !           201:                                                break;
        !           202:                                        case '2':
        !           203:                                                user.flags2=aftol(argv[i]);
        !           204:                                                break;
        !           205:                                        case '3':
        !           206:                                                user.flags3=aftol(argv[i]);
        !           207:                                                break;
        !           208:                                        case '4':
        !           209:                                                user.flags4=aftol(argv[i]);
        !           210:                                                break;
        !           211:                                        case 'E':
        !           212:                                                user.exempt=aftol(argv[i]);
        !           213:                                                break;
        !           214:                                        case 'R':
        !           215:                                                user.rest=aftol(argv[i]);
        !           216:                                                break;
        !           217:                                        default:
        !           218:                                                printf("%s",usage);
        !           219:                                                return(1);
        !           220:                                }
        !           221:                                break;
        !           222:                        case 'G':
        !           223:                                user.sex=toupper(argv[i][0]);
        !           224:                                break;
        !           225:                        case 'H':
        !           226:                                SAFECOPY(user.handle,argv[i]);
        !           227:                                break;
        !           228:                        case 'N':
        !           229:                                SAFECOPY(user.netmail,argv[i]);
        !           230:                                break;
        !           231:                        case 'P':
        !           232:                                SAFECOPY(user.pass,argv[i]);
        !           233:                                strupr(user.pass);
        !           234:                                break;
        !           235:                        case 'R':
        !           236:                                SAFECOPY(user.name,argv[i]);
        !           237:                                break;
        !           238:                        case 'S':
        !           239:                                user.level=atoi(argv[i]);
        !           240:                                break;
        !           241:                        case 'T':
        !           242:                                SAFECOPY(user.phone,argv[i]);
        !           243:                                break;
        !           244:                        case 'Z':
        !           245:                                SAFECOPY(user.zipcode,argv[i]);
        !           246:                                break;
        !           247:                        default:
        !           248:                                printf("%s",usage);
        !           249:                                return(1)        !           250:                        }
        !           251:                }
        !           252:                else
        !           253:                        SAFECOPY(user.alias,argv[i]);
        !           254:        }
        !           255: 
        !           256:        if(user.alias[0]==0) {
        !           257:                printf("%s",usage);
        !           258:                return(1);
        !           259:        }
        !           260: 
        !           261:        if((i=matchuser(&scfg,user.alias,FALSE))!=0) {
        !           262:                printf("!User (%s #%d) already exists\n",user.alias,i);
        !           263:                return(2);
        !           264:        }
        !           265: 
        !           266:        if(user.handle[0]==0)
        !           267:                SAFECOPY(user.handle,user.alias);
        !           268:        if(user.name[0]==0)
        !           269:                SAFECOPY(user.name,user.alias);
        !           270: 
        !           271:        if((i=newuserdat(&scfg, &user))!=0) {
        !           272:                fprintf(stderr,"!ERROR %d adding new user record\n",i);
        !           273:                return(i);
        !           274:        }
        !           275: 
        !           276:        printf("User record #%d (%s) created successfully.\n",user.number,user.alias);
        !           277: 
        !           278:        return(0);
        !           279: }
        !           280: 

unix.superglobalmegacorp.com

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