Annotation of 43BSDReno/contrib/isode-beta/support/aetbuild.c, revision 1.1

1.1     ! root        1: /* aetbuild.c - build/print the isoentities database for -ldbm access */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/support/RCS/aetbuild.c,v 7.0 89/11/23 22:27:06 mrose Rel $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/support/RCS/aetbuild.c,v 7.0 89/11/23 22:27:06 mrose Rel $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       aetbuild.c,v $
        !            12:  * Revision 7.0  89/11/23  22:27:06  mrose
        !            13:  * Release 6.0
        !            14:  * 
        !            15:  */
        !            16: 
        !            17: /*
        !            18:  *                               NOTICE
        !            19:  *
        !            20:  *    Acquisition, use, and distribution of this module and related
        !            21:  *    materials are subject to the restrictions of a license agreement.
        !            22:  *    Consult the Preface in the User's Manual for the full terms of
        !            23:  *    this agreement.
        !            24:  *
        !            25:  */
        !            26: 
        !            27: 
        !            28: #include <dbm.h>
        !            29: #undef NULL
        !            30: #include <stdio.h>
        !            31: #include <varargs.h>
        !            32: #include "psap.h"
        !            33: #include "isoaddrs.h"
        !            34: #include "tailor.h"
        !            35: 
        !            36: /*    DATA */
        !            37: 
        !            38: struct dbm_entry {
        !            39:     struct isoentity   dbm_entity;
        !            40: 
        !            41:     unsigned int       dbm_elements[NELEM + 1];
        !            42: };
        !            43: 
        !            44: 
        !            45: static char *isoentities = "isoentities";
        !            46: 
        !            47: 
        !            48: static char *myname = "aetbuild";
        !            49: 
        !            50: static int buildsw = 0;
        !            51: static int printsw = 0;
        !            52: static int verbose = 0;
        !            53: 
        !            54: static char  dirfile[BUFSIZ];
        !            55: static char  pagfile[BUFSIZ];
        !            56: 
        !            57: 
        !            58: void   adios (), advise ();
        !            59: 
        !            60: /*    MAIN */
        !            61: 
        !            62: /* ARGSUSED */
        !            63: 
        !            64: main (argc, argv, envp)
        !            65: int    argc;
        !            66: char  **argv,
        !            67:       **envp;
        !            68: {
        !            69:     arginit (argv);
        !            70: 
        !            71:     if (buildsw)
        !            72:        build_db ();
        !            73: 
        !            74:     if (printsw)
        !            75:        print_db ();
        !            76: 
        !            77:     exit (0);
        !            78: }
        !            79: 
        !            80: /*    BUILD */
        !            81: 
        !            82: static build_db ()
        !            83: {
        !            84:     int            fd;
        !            85:     char   *cp,
        !            86:            buffer[BUFSIZ];
        !            87:     register struct isoentity *ie;
        !            88:     struct dbm_entry entry;
        !            89:     datum   key,
        !            90:            value,
        !            91:            test;
        !            92:     
        !            93:     cp = isodefile (myname, 0);
        !            94: 
        !            95:     (void) sprintf (dirfile, "%s.dir", cp);
        !            96:     (void) sprintf (pagfile, "%s.pag", cp);
        !            97:     if (access (dirfile, 0x00) != NOTOK || access (pagfile, 0x00) != NOTOK)
        !            98:        adios (NULLCP, "%s already exists!", cp);
        !            99: 
        !           100:     if ((fd = creat (dirfile, 0644)) == NOTOK)
        !           101:        adios (dirfile, "unable to create");
        !           102:     (void) close (fd);
        !           103: 
        !           104:     if ((fd = creat (pagfile, 0644)) == NOTOK) {
        !           105:        advise (pagfile, "unable to create");
        !           106:        goto out1;
        !           107:     }
        !           108:     (void) close (fd);
        !           109: 
        !           110:     if (dbminit (cp) < 0) {
        !           111:        advise (cp, "unable to initialize database");
        !           112:        goto out2;
        !           113:     }
        !           114: 
        !           115:     while (ie = getisoentity ()) {
        !           116:        entry.dbm_entity = *ie;     /* struct copy */
        !           117:        bcopy ((char *) ie -> ie_identifier.oid_elements,
        !           118:               (char *) entry.dbm_elements, sizeof entry.dbm_elements);
        !           119: 
        !           120:        key.dsize = strlen (key.dptr = ie -> ie_descriptor) + 1;
        !           121:        test = fetch (key);
        !           122:        if (test.dptr) {
        !           123:            if (verbose)
        !           124:                advise (NULLCP, "skipping duplicate entry for \"%s\"",
        !           125:                        key.dptr);
        !           126: 
        !           127:            continue;
        !           128:        }
        !           129: 
        !           130:        value.dptr = (char *) &entry, value.dsize = sizeof entry;
        !           131:        if (store (key, value) < 0)
        !           132:            adios (cp, "store failed on");
        !           133: 
        !           134:        if (verbose)
        !           135:            advise (NULLCP, "storing entry for \"%s\"", key.dptr);
        !           136:     }
        !           137:     
        !           138: #ifdef sun
        !           139:     if (dbmclose () < 0) {
        !           140:        advise (cp, "dmbclose failed on");
        !           141:        goto out2;
        !           142:     }
        !           143: #endif
        !           144: 
        !           145:     cp = isodefile (isoentities, 0);
        !           146: 
        !           147:     (void) sprintf (buffer, "%s.pag", cp);
        !           148:     if (rename (pagfile, buffer) == NOTOK) {
        !           149:        advise (buffer, "unable to rename %s to", pagfile);
        !           150:        goto out2;
        !           151:     }
        !           152: 
        !           153:     (void) sprintf (buffer, "%s.dir", cp);
        !           154:     if (rename (dirfile, buffer) == NOTOK)
        !           155:        adios (buffer, "unable to rename %s to", dirfile);
        !           156: 
        !           157:     return;
        !           158: 
        !           159: out2: ;
        !           160:     (void) unlink (pagfile);
        !           161: 
        !           162: out1: ;
        !           163:     (void) unlink (dirfile);
        !           164: 
        !           165:     exit (1);
        !           166: }
        !           167: 
        !           168: /*    PRINT */
        !           169: 
        !           170: static print_db ()
        !           171: {
        !           172:     char   *cp;
        !           173:     struct dbm_entry *entry;
        !           174:     register struct isoentity *ie;
        !           175:     AEI            aei;
        !           176:     datum   key,
        !           177:            value;
        !           178: 
        !           179:     if (dbminit (cp = isodefile (isoentities, 0)) < 0)
        !           180:        adios (cp, "unable to initialize");
        !           181: 
        !           182:     for (key = firstkey (); key.dptr; key = nextkey (key)) {
        !           183:        value = fetch (key);
        !           184:        if ((entry = (struct dbm_entry *) value.dptr) == NULL) {
        !           185:            advise (NULLCP, "unable to find value for key %s", key.dptr);
        !           186:            continue;
        !           187:        }
        !           188: 
        !           189:        if (value.dsize != sizeof *entry)
        !           190:            adios (NULLCP, "%s dbm corrupt!", cp);
        !           191: 
        !           192:        ie = &entry -> dbm_entity;
        !           193:        ie -> ie_identifier.oid_elements = entry -> dbm_elements;
        !           194:        ie -> ie_descriptor = key.dptr;
        !           195: 
        !           196:        printf ("Entity:  %s (%s)\n", ie -> ie_descriptor,
        !           197:                oid2ode (&ie -> ie_identifier));
        !           198: 
        !           199:        if (aei = oid2aei (&ie -> ie_identifier))
        !           200:            printf ("AE info: %s\n", sprintaei (aei));
        !           201:        printf ("Address: %s\n\n", paddr2str (&ie -> ie_addr, NULLNA));
        !           202:     }
        !           203: 
        !           204: #ifdef sun
        !           205:     if (dbmclose () < 0)
        !           206:        adios (cp, "dmbclose failed on");
        !           207: #endif
        !           208: }
        !           209: 
        !           210: /*    ARGINIT */
        !           211: 
        !           212: static arginit (vec)
        !           213: char  **vec;
        !           214: {
        !           215:     register char  *ap;
        !           216: 
        !           217:     if (myname = rindex (*vec, '/'))
        !           218:        myname++;
        !           219:     if (myname == NULL || *myname == NULL)
        !           220:        myname = *vec;
        !           221: 
        !           222:     isodetailor (myname, 1);
        !           223: 
        !           224:     for (vec++; ap = *vec; vec++) {
        !           225:        if (*ap == '-')
        !           226:            switch (*++ap) {
        !           227:                case 'b':
        !           228:                    buildsw++;
        !           229:                    continue;
        !           230: 
        !           231:                case 'p':
        !           232:                    printsw++;
        !           233:                    continue;
        !           234: 
        !           235:                case 'v':
        !           236:                    verbose++;
        !           237:                    continue;
        !           238: 
        !           239:                default:
        !           240:                    adios (NULLCP, "-%s: unknown switch", ap);
        !           241:            }
        !           242: 
        !           243:        adios (NULLCP, "usage: %s [switches]", myname);
        !           244:     }
        !           245: 
        !           246:     (void) umask (0022);
        !           247: 
        !           248:     if (buildsw == 0 && printsw == 0)
        !           249:        buildsw++;
        !           250: }
        !           251: 
        !           252: /*    DSAP */
        !           253: 
        !           254: /* ARGSUSED */
        !           255: 
        !           256: AEI    str2aei_dse (designator, qualifier)
        !           257: char   *designator,
        !           258:        *qualifier;
        !           259: {
        !           260:     return NULLAEI;
        !           261: }
        !           262: 
        !           263: 
        !           264: /* ARGSUSED */
        !           265: 
        !           266: struct PSAPaddr *aei2addr_dse (aei)
        !           267: AEI    aei;
        !           268: {
        !           269:     return NULLPA;
        !           270: }
        !           271: 
        !           272: /*    ERRORS */
        !           273: 
        !           274: #ifndef        lint
        !           275: void   _advise ();
        !           276: 
        !           277: 
        !           278: void   adios (va_alist)
        !           279: va_dcl
        !           280: {
        !           281:     va_list ap;
        !           282: 
        !           283:     va_start (ap);
        !           284: 
        !           285:     _advise (ap);
        !           286: 
        !           287:     va_end (ap);
        !           288: 
        !           289:     _exit (1);
        !           290: }
        !           291: #else
        !           292: /* VARARGS */
        !           293: 
        !           294: void   adios (what, fmt)
        !           295: char   *what,
        !           296:        *fmt;
        !           297: {
        !           298:     adios (what, fmt);
        !           299: }
        !           300: #endif
        !           301: 
        !           302: 
        !           303: #ifndef        lint
        !           304: void   advise (va_alist)
        !           305: va_dcl
        !           306: {
        !           307:     va_list ap;
        !           308: 
        !           309:     va_start (ap);
        !           310: 
        !           311:     _advise (ap);
        !           312: 
        !           313:     va_end (ap);
        !           314: }
        !           315: 
        !           316: 
        !           317: static void  _advise (ap)
        !           318: va_list        ap;
        !           319: {
        !           320:     char    buffer[BUFSIZ];
        !           321: 
        !           322:     asprintf (buffer, ap);
        !           323: 
        !           324:     (void) fflush (stdout);
        !           325: 
        !           326:     fprintf (stderr, "%s: ", myname);
        !           327:     (void) fputs (buffer, stderr);
        !           328:     (void) fputc ('\n', stderr);
        !           329: 
        !           330:     (void) fflush (stderr);
        !           331: }
        !           332: #else
        !           333: /* VARARGS */
        !           334: 
        !           335: void   advise (what, fmt)
        !           336: char   *what,
        !           337:        *fmt;
        !           338: {
        !           339:     advise (what, fmt);
        !           340: }
        !           341: #endif

unix.superglobalmegacorp.com

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