Annotation of 43BSDReno/contrib/isode-beta/others/lookup/ryinitiator.c, revision 1.1.1.1

1.1       root        1: /* ryinitiator.c - generic interactive initiator */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/others/lookup/RCS/ryinitiator.c,v 7.2 90/07/09 14:39:53 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/others/lookup/RCS/ryinitiator.c,v 7.2 90/07/09 14:39:53 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       ryinitiator.c,v $
                     12:  * Revision 7.2  90/07/09  14:39:53  mrose
                     13:  * sync
                     14:  * 
                     15:  * Revision 7.1  90/07/01  21:04:28  mrose
                     16:  * pepsy
                     17:  * 
                     18:  * Revision 7.0  89/11/23  22:56:41  mrose
                     19:  * Release 6.0
                     20:  * 
                     21:  */
                     22: 
                     23: /*
                     24:  *                               NOTICE
                     25:  *
                     26:  *    Acquisition, use, and distribution of this module and related
                     27:  *    materials are subject to the restrictions of a license agreement.
                     28:  *    Consult the Preface in the User's Manual for the full terms of
                     29:  *    this agreement.
                     30:  *
                     31:  */
                     32: 
                     33: 
                     34: #include <stdio.h>
                     35: #include <varargs.h>
                     36: #include "PasswordLookup-types.h"
                     37: #include "ryinitiator.h"
                     38: 
                     39: /*    DATA */
                     40: 
                     41: static char *myname = "ryinitiator";
                     42: 
                     43: 
                     44: extern char *isodeversion;
                     45: 
                     46: /*    INITIATOR */
                     47: 
                     48: ryinitiator (argc, argv, myservice, mycontext, mypci, ops, dispatches, quit)
                     49: int    argc;
                     50: char  **argv,
                     51:        *myservice,
                     52:        *mycontext,
                     53:        *mypci;
                     54: struct RyOperation ops[];
                     55: struct dispatch *dispatches;
                     56: IFP    quit;
                     57: {
                     58:     int            iloop,
                     59:            sd;
                     60:     char    buffer[BUFSIZ],
                     61:           *vec[NVEC + 1];
                     62:     register struct dispatch   *ds;
                     63:     struct SSAPref sfs;
                     64:     register struct SSAPref *sf;
                     65:     register struct PSAPaddr *pa;
                     66:     struct AcSAPconnect accs;
                     67:     register struct AcSAPconnect   *acc = &accs;
                     68:     struct AcSAPindication  acis;
                     69:     register struct AcSAPindication *aci = &acis;
                     70:     register struct AcSAPabort *aca = &aci -> aci_abort;
                     71:     AEI            aei;
                     72:     OID            ctx,
                     73:            pci;
                     74:     struct PSAPctxlist pcs;
                     75:     register struct PSAPctxlist *pc = &pcs;
                     76:     struct RoSAPindication rois;
                     77:     register struct RoSAPindication *roi = &rois;
                     78:     register struct RoSAPpreject *rop = &roi -> roi_preject;
                     79: 
                     80:     if (myname = rindex (argv[0], '/'))
                     81:        myname++;
                     82:     if (myname == NULL || *myname == NULL)
                     83:        myname = argv[0];
                     84: 
                     85:     if (argc < 2)
                     86:        adios (NULLCP, "usage: %s host [operation [ arguments ... ]]", myname);
                     87: 
                     88:     if ((aei = _str2aei (argv[1], myservice, mycontext, 0)) == NULLAEI)
                     89:        adios (NULLCP, "unable to resolve service: %s", PY_pepy);
                     90:     if ((pa = aei2addr (aei)) == NULLPA)
                     91:        adios (NULLCP, "address translation failed");
                     92: 
                     93:     if ((ctx = ode2oid (mycontext)) == NULLOID)
                     94:        adios (NULLCP, "%s: unknown object descriptor", mycontext);
                     95:     if ((ctx = oid_cpy (ctx)) == NULLOID)
                     96:        adios (NULLCP, "out of memory");
                     97:     if ((pci = ode2oid (mypci)) == NULLOID)
                     98:        adios (NULLCP, "%s: unknown object descriptor", mypci);
                     99:     if ((pci = oid_cpy (pci)) == NULLOID)
                    100:        adios (NULLCP, "out of memory");
                    101:     pc -> pc_nctx = 1;
                    102:     pc -> pc_ctx[0].pc_id = 1;
                    103:     pc -> pc_ctx[0].pc_asn = pci;
                    104:     pc -> pc_ctx[0].pc_atn = NULLOID;
                    105: 
                    106:     if ((sf = addr2ref (PLocalHostName ())) == NULL) {
                    107:        sf = &sfs;
                    108:        (void) bzero ((char *) sf, sizeof *sf);
                    109:     }
                    110: 
                    111:     if (argc < 3) {
                    112:        printf ("%s", myname);
                    113:        if (sf -> sr_ulen > 2)
                    114:            printf (" running on host %s", sf -> sr_udata + 2);
                    115:        if (sf -> sr_clen > 2)
                    116:            printf (" at %s", sf -> sr_cdata + 2);
                    117:        printf (" [%s, ", oid2ode (ctx));
                    118:        printf ("%s]\n", oid2ode (pci));
                    119:        printf ("using %s\n", isodeversion);
                    120: 
                    121:        printf ("%s... ", argv[1]);
                    122:        (void) fflush (stdout);
                    123:     
                    124:        iloop = 1;
                    125:     }
                    126:     else {
                    127:        for (ds = dispatches; ds -> ds_name; ds++)
                    128:            if (strcmp (ds -> ds_name, argv[2]) == 0)
                    129:                break;
                    130:        if (ds -> ds_name == NULL)
                    131:            adios (NULLCP, "unknown operation \"%s\"", argv[2]);
                    132: 
                    133:        iloop = 0;
                    134:     }
                    135: 
                    136:     if (AcAssocRequest (ctx, NULLAEI, aei, NULLPA, pa, pc, NULLOID,
                    137:                0, ROS_MYREQUIRE, SERIAL_NONE, 0, sf, NULLPEP, 0, NULLQOS,
                    138:                acc, aci)
                    139:            == NOTOK)
                    140:        acs_adios (aca, "A-ASSOCIATE.REQUEST");
                    141: 
                    142:     if (acc -> acc_result != ACS_ACCEPT) {
                    143:        if (iloop)
                    144:            printf ("failed\n");
                    145: 
                    146:        adios (NULLCP, "association rejected: [%s]",
                    147:                AcErrString (acc -> acc_result));
                    148:     }
                    149:     if (iloop) {
                    150:        printf ("connected\n");
                    151:        (void) fflush (stdout);
                    152:     }
                    153: 
                    154:     sd = acc -> acc_sd;
                    155:     ACCFREE (acc);
                    156: 
                    157:     if (RoSetService (sd, RoPService, roi) == NOTOK)
                    158:        ros_adios (rop, "set RO/PS fails");
                    159: 
                    160:     if (iloop) {
                    161:        for (;;) {
                    162:            if (getline (buffer) == NOTOK)
                    163:                break;
                    164: 
                    165:            if (str2vec (buffer, vec) < 1)
                    166:                continue;
                    167: 
                    168:            for (ds = dispatches; ds -> ds_name; ds++)
                    169:                if (strcmp (ds -> ds_name, vec[0]) == 0)
                    170:                    break;
                    171:            if (ds -> ds_name == NULL) {
                    172:                advise (NULLCP, "unknown operation \"%s\"", vec[0]);
                    173:                continue;
                    174:            }
                    175: 
                    176:            invoke (sd, ops, ds, vec + 1);
                    177:        }
                    178:     }
                    179:     else
                    180:        invoke (sd, ops, ds, argv + 3);
                    181: 
                    182:     (*quit) (sd, (struct dispatch *) NULL, (char **) NULL, (caddr_t *) NULL);
                    183: }
                    184: 
                    185: /*  */
                    186: 
                    187: static invoke (sd, ops, ds, args)
                    188: int    sd;
                    189: struct RyOperation ops[];
                    190: register struct dispatch *ds;
                    191: char  **args;
                    192: {
                    193:     int            result;
                    194:     caddr_t in;
                    195:     struct RoSAPindication  rois;
                    196:     register struct RoSAPindication *roi = &rois;
                    197:     register struct RoSAPpreject   *rop = &roi -> roi_preject;
                    198: 
                    199:     in = NULL;
                    200:     if (ds -> ds_argument && (*ds -> ds_argument) (sd, ds, args, &in) == NOTOK)
                    201:        return;
                    202: 
                    203:     switch (result = RyStub (sd, ops, ds -> ds_operation, RyGenID (sd), NULLIP,
                    204:                             in, ds -> ds_result, ds -> ds_error, ROS_SYNC,
                    205:                             roi)) {
                    206:        case NOTOK:             /* failure */
                    207:            if (ROS_FATAL (rop -> rop_reason))
                    208:                ros_adios (rop, "STUB");
                    209:            ros_advise (rop, "STUB");
                    210:            break;
                    211: 
                    212:        case OK:                /* got a result/error response */
                    213:            break;
                    214: 
                    215:        case DONE:              /* got RO-END? */
                    216:            adios (NULLCP, "got RO-END.INDICATION");
                    217:            /* NOTREACHED */
                    218: 
                    219:        default:
                    220:            adios (NULLCP, "unknown return from RyStub=%d", result);
                    221:            /* NOTREACHED */
                    222:     }
                    223: 
                    224:     if (ds -> ds_mod && ds -> ds_ind >= 0 && in)
                    225:        (void)fre_obj(in, ds->ds_mod->md_dtab[ds->ds_ind], ds->ds_mod);
                    226: }
                    227: 
                    228: /*  */
                    229: 
                    230: static int  getline (buffer)
                    231: char   *buffer;
                    232: {
                    233:     register int    i;
                    234:     register char  *cp,
                    235:                    *ep;
                    236:     static int  sticky = 0;
                    237: 
                    238:     if (sticky) {
                    239:        sticky = 0;
                    240:        return NOTOK;
                    241:     }
                    242: 
                    243:     printf ("%s> ", myname);
                    244:     (void) fflush (stdout);
                    245: 
                    246:     for (ep = (cp = buffer) + BUFSIZ - 1; (i = getchar ()) != '\n';) {
                    247:        if (i == EOF) {
                    248:            printf ("\n");
                    249:            clearerr (stdin);
                    250:            if (cp != buffer) {
                    251:                sticky++;
                    252:                break;
                    253:            }
                    254: 
                    255:            return NOTOK;
                    256:        }
                    257: 
                    258:        if (cp < ep)
                    259:            *cp++ = i;
                    260:     }
                    261:     *cp = NULL;
                    262: 
                    263:     return OK;
                    264: }
                    265: 
                    266: /*  */
                    267: 
                    268: void   ros_adios (rop, event)
                    269: register struct RoSAPpreject *rop;
                    270: char   *event;
                    271: {
                    272:     ros_advise (rop, event);
                    273: 
                    274:     _exit (1);
                    275: }
                    276: 
                    277: 
                    278: void   ros_advise (rop, event)
                    279: register struct RoSAPpreject *rop;
                    280: char   *event;
                    281: {
                    282:     char    buffer[BUFSIZ];
                    283: 
                    284:     if (rop -> rop_cc > 0)
                    285:        (void) sprintf (buffer, "[%s] %*.*s", RoErrString (rop -> rop_reason),
                    286:                rop -> rop_cc, rop -> rop_cc, rop -> rop_data);
                    287:     else
                    288:        (void) sprintf (buffer, "[%s]", RoErrString (rop -> rop_reason));
                    289: 
                    290:     advise (NULLCP, "%s: %s", event, buffer);
                    291: }
                    292: 
                    293: /*  */
                    294: 
                    295: void   acs_adios (aca, event)
                    296: register struct AcSAPabort *aca;
                    297: char   *event;
                    298: {
                    299:     acs_advise (aca, event);
                    300: 
                    301:     _exit (1);
                    302: }
                    303: 
                    304: 
                    305: void   acs_advise (aca, event)
                    306: register struct AcSAPabort *aca;
                    307: char   *event;
                    308: {
                    309:     char    buffer[BUFSIZ];
                    310: 
                    311:     if (aca -> aca_cc > 0)
                    312:        (void) sprintf (buffer, "[%s] %*.*s",
                    313:                AcErrString (aca -> aca_reason),
                    314:                aca -> aca_cc, aca -> aca_cc, aca -> aca_data);
                    315:     else
                    316:        (void) sprintf (buffer, "[%s]", AcErrString (aca -> aca_reason));
                    317: 
                    318:        advise (NULLCP, "%s: %s (source %d)", event, buffer,
                    319:                aca -> aca_source);
                    320: }
                    321: 
                    322: /*  */
                    323: 
                    324: #ifndef        lint
                    325: void   _advise ();
                    326: 
                    327: 
                    328: void   adios (va_alist)
                    329: va_dcl
                    330: {
                    331:     va_list ap;
                    332: 
                    333:     va_start (ap);
                    334: 
                    335:     _advise (ap);
                    336: 
                    337:     va_end (ap);
                    338: 
                    339:     _exit (1);
                    340: }
                    341: #else
                    342: /* VARARGS */
                    343: 
                    344: void   adios (what, fmt)
                    345: char   *what,
                    346:        *fmt;
                    347: {
                    348:     adios (what, fmt);
                    349: }
                    350: #endif
                    351: 
                    352: 
                    353: #ifndef        lint
                    354: void   advise (va_alist)
                    355: va_dcl
                    356: {
                    357:     va_list ap;
                    358: 
                    359:     va_start (ap);
                    360: 
                    361:     _advise (ap);
                    362: 
                    363:     va_end (ap);
                    364: }
                    365: 
                    366: 
                    367: static void  _advise (ap)
                    368: va_list        ap;
                    369: {
                    370:     char    buffer[BUFSIZ];
                    371: 
                    372:     asprintf (buffer, ap);
                    373: 
                    374:     (void) fflush (stdout);
                    375: 
                    376:     fprintf (stderr, "%s: ", myname);
                    377:     (void) fputs (buffer, stderr);
                    378:     (void) fputc ('\n', stderr);
                    379: 
                    380:     (void) fflush (stderr);
                    381: }
                    382: #else
                    383: /* VARARGS */
                    384: 
                    385: void   advise (what, fmt)
                    386: char   *what,
                    387:        *fmt;
                    388: {
                    389:     advise (what, fmt);
                    390: }
                    391: #endif
                    392: 
                    393: 
                    394: #ifndef        lint
                    395: void   ryr_advise (va_alist)
                    396: va_dcl
                    397: {
                    398:     va_list ap;
                    399: 
                    400:     va_start (ap);
                    401: 
                    402:     _advise (ap);
                    403: 
                    404:     va_end (ap);
                    405: }
                    406: #else
                    407: /* VARARGS */
                    408: 
                    409: void   ryr_advise (what, fmt)
                    410: char   *what,
                    411:        *fmt;
                    412: {
                    413:     ryr_advise (what, fmt);
                    414: }
                    415: #endif

unix.superglobalmegacorp.com

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