Annotation of 43BSDReno/contrib/isode-beta/ftam2/ftam-assoc.c, revision 1.1

1.1     ! root        1: /* ftam-assoc.c - interactive initiator FTAM -- association management */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/ftam2/RCS/ftam-assoc.c,v 7.3 90/07/09 14:37:10 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/ftam2/RCS/ftam-assoc.c,v 7.3 90/07/09 14:37:10 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ftam-assoc.c,v $
        !            12:  * Revision 7.3  90/07/09  14:37:10  mrose
        !            13:  * sync
        !            14:  * 
        !            15:  * Revision 7.2  89/12/01  13:56:06  mrose
        !            16:  * touch-up
        !            17:  * 
        !            18:  * Revision 7.1  89/11/30  23:51:50  mrose
        !            19:  * pa2str
        !            20:  * 
        !            21:  * Revision 7.0  89/11/23  21:54:15  mrose
        !            22:  * Release 6.0
        !            23:  * 
        !            24:  */
        !            25: 
        !            26: /*
        !            27:  *                               NOTICE
        !            28:  *
        !            29:  *    Acquisition, use, and distribution of this module and related
        !            30:  *    materials are subject to the restrictions of a license agreement.
        !            31:  *    Consult the Preface in the User's Manual for the full terms of
        !            32:  *    this agreement.
        !            33:  *
        !            34:  */
        !            35: 
        !            36: 
        !            37: #include <stdio.h>
        !            38: #include "ftamuser.h"
        !            39: 
        !            40: /*  */
        !            41: 
        !            42: static struct PSAPaddr vfs_bound;
        !            43: 
        !            44: /*  */
        !            45: 
        !            46: int    f_open (vec)
        !            47: char  **vec;
        !            48: {
        !            49:     register int    i;
        !            50:     int     manage;
        !            51:     char   *p;
        !            52: #ifndef        BRIDGE
        !            53:     char    buffer[BUFSIZ],
        !            54:             prompt[BUFSIZ];
        !            55: #endif
        !            56:     AEI            aei;
        !            57:     register struct vfsmap *vf;
        !            58:     register struct PSAPaddr   *pa;
        !            59:     struct FTAMcontentlist  fcs;
        !            60:     register struct FTAMcontentlist *fc = &fcs;
        !            61:     register struct FTAMcontent *fx;
        !            62:     struct FTAMconnect  ftcs;
        !            63:     register struct FTAMconnect *ftc = &ftcs;
        !            64:     struct FTAMindication   ftis;
        !            65:     register struct FTAMindication *fti = &ftis;
        !            66: 
        !            67:     if (*++vec == NULL) {
        !            68: #ifdef BRIDGE
        !            69:        return NOTOK;
        !            70: #else
        !            71:        if (getline ("host: ", buffer) == NOTOK || str2vec (buffer, vec) < 1)
        !            72:            return OK;
        !            73: #endif
        !            74:     }
        !            75: 
        !            76:     if (host)
        !            77:        free (host);
        !            78:     host = strdup (*vec);
        !            79: 
        !            80:     if (*++vec == NULL) {
        !            81: #ifdef BRIDGE
        !            82:        return NOTOK;
        !            83: #else
        !            84:        if (user == NULL)
        !            85:            user = strdup (myuser ? myuser : "");
        !            86:        (void) sprintf (prompt, "user (%s:%s): ", host, user);
        !            87:        if (getline (prompt, buffer) == NOTOK)
        !            88:            return OK;
        !            89:        if (str2vec (buffer, vec) < 1)
        !            90:            *vec = user, user = NULL;
        !            91: #endif
        !            92:     }
        !            93: 
        !            94:     if (user)
        !            95:        free (user);
        !            96:     user = strdup (*vec);
        !            97: 
        !            98:     if (*++vec) {
        !            99:        if (account)
        !           100:            free (account);
        !           101: #ifdef BRIDGE
        !           102:        account = (**vec) ? strdup (*vec) : "";
        !           103: #else
        !           104:        account = strdup (*vec);
        !           105: #endif
        !           106:     }
        !           107: 
        !           108: #ifdef BRIDGE
        !           109:     if (!strcmp (user, "anonymous") || !strcmp (user, "ANONYMOUS") ){
        !           110:        free (user);
        !           111:        user = strdup ("ANON");
        !           112:     }
        !           113: #endif
        !           114: 
        !           115:     if (strcmp (user, "anon") == 0) {
        !           116:        free (user);
        !           117:        user = strdup ("ANON");
        !           118:     }
        !           119: 
        !           120: #ifdef BRIDGE
        !           121:     if (strcmp (user, "ANON") && !*++vec)
        !           122:        return NOTOK;
        !           123:     else
        !           124:        p = *vec ? strdup(*vec) : "";
        !           125: #else
        !           126:     if (strcmp (user, "ANON")) {
        !           127:        (void) sprintf (prompt, "password (%s:%s): ", host, user);
        !           128:        p = getpassword (prompt);
        !           129:     }
        !           130:     else
        !           131:        p = myuser ? myuser : "";
        !           132: #endif
        !           133: 
        !           134: #ifdef BRIDGE
        !           135:     if ((aei = _str2aei (host, "filestore", "iso ftam", 0)) == NULLAEI) {
        !           136:        advise (NULLCP, "unable to resolve service: %s", PY_pepy);
        !           137: #else
        !           138:     if ((aei = _str2aei (host, storename, "iso ftam", ontty)) == NULLAEI) {
        !           139:        advise (NULLCP, "unable to resolve service: %s", PY_pepy);
        !           140: #endif
        !           141:        return NOTOK;
        !           142:     }
        !           143:     if ((pa = aei2addr (aei)) == NULLPA) {
        !           144:        advise (NULLCP, "address translation failed");
        !           145:        return NOTOK;
        !           146:     }
        !           147: 
        !           148:     manage = 0;
        !           149:     fqos = FQOS_NORECOVERY;
        !           150:     class = FCLASS_TM | FCLASS_TRANSFER | FCLASS_MANAGE;
        !           151:     units |=  FUNIT_READ | FUNIT_WRITE | FUNIT_LIMITED | FUNIT_ENHANCED
        !           152:                | FUNIT_GROUPING;
        !           153:     attrs = FATTR_STORAGE;
        !           154:     fc -> fc_ncontent = 0;
        !           155:     for (vf = vfs; vf -> vf_entry; vf++)
        !           156:        if (vf -> vf_oid)
        !           157:            fc -> fc_contents[fc -> fc_ncontent++].fc_dtn = vf -> vf_oid;
        !           158: 
        !           159: #ifndef        BRIDGE
        !           160:     if (verbose) {
        !           161:        fprintf (stderr, "%s... ", host);
        !           162:        (void) fflush (stderr);
        !           163:     }
        !           164: #endif
        !           165:     if (FInitializeRequest (NULLOID, NULLAEI, aei, NULLPA, pa, manage, class,
        !           166:                            units, attrs, NULLPE, fqos, fc,
        !           167:                            *user ? user : NULL, account, *p ? p : NULL,
        !           168:                            strlen (p), &myqos, trace ? FTraceHook : NULLIFP,
        !           169:                            ftc, fti)
        !           170:            == NOTOK) {
        !           171: #ifndef        BRIDGE
        !           172:        if (verbose)
        !           173:            fprintf (stderr, "loses big\n");
        !           174: #endif
        !           175:        ftam_advise (&fti -> fti_abort, "F-INITIALIZE.REQUEST");
        !           176: 
        !           177:        return NOTOK;
        !           178:     }
        !           179: 
        !           180:     switch (ftc -> ftc_state) {
        !           181:        case FSTATE_SUCCESS: 
        !           182: #ifndef        BRIDGE
        !           183:            if (verbose)
        !           184:                fprintf (stderr, "connected\n");
        !           185: #endif
        !           186: #ifdef DEBUG
        !           187:            if (debug)
        !           188:                advise (NULLCP,
        !           189:                        "responding AE title: %s, responding PSAP address: %s",
        !           190:                        sprintaei (&ftc -> ftc_respondtitle),
        !           191:                        paddr2str (&ftc -> ftc_respondaddr, NULLNA));
        !           192: #endif
        !           193:            vfs_bound = ftc -> ftc_respondaddr;         /* struct copy */
        !           194: 
        !           195:            ftamfd = ftc -> ftc_sd;
        !           196:            context = ftc -> ftc_context, ftc -> ftc_context = NULLOID;
        !           197:            fqos = ftc -> ftc_fqos;
        !           198:            class = ftc -> ftc_class;
        !           199:            units = ftc -> ftc_units;
        !           200:            attrs = ftc -> ftc_attrs;
        !           201: 
        !           202:            for (fx = ftc -> ftc_contents.fc_contents,
        !           203:                        i = ftc -> ftc_contents.fc_ncontent - 1;
        !           204:                    i >= 0;
        !           205:                    fx++, i--) {
        !           206:                if (fx -> fc_result != PC_ACCEPT)
        !           207:                    continue;
        !           208: 
        !           209:                for (vf = vfs; vf -> vf_entry; vf++)
        !           210:                    if (oid_cmp (vf -> vf_oid, fx -> fc_dtn) == 0) {
        !           211:                        vf -> vf_flags |= VF_OK;
        !           212:                        vf -> vf_id = fx -> fc_id;
        !           213:                        break;
        !           214:                    }
        !           215:            }
        !           216:            for (vf = vfs; vf -> vf_entry; vf++)
        !           217:                if (vf -> vf_oid
        !           218:                        && !(vf -> vf_flags & VF_OK)
        !           219:                        && (vf -> vf_flags & VF_WARN))
        !           220:                    advise (NULLCP,
        !           221:                        "warning: virtual filestore has no support for %ss",
        !           222:                        vf -> vf_text);
        !           223: 
        !           224:            vf = &vfs[VFS_UBF];
        !           225:            if (vf -> vf_oid == NULLOID || !(vf -> vf_flags & VF_OK))
        !           226:                advise (NULLCP,
        !           227:                        "%s files not negotiated, suggest you quit now!",
        !           228:                        vf -> vf_entry);
        !           229: 
        !           230:            if ((vf = &vfs[tmode]) != &vfs[VFS_DEF]
        !           231:                    && (vf -> vf_oid == NULLOID
        !           232:                            || !(vf -> vf_flags & VF_OK))) {
        !           233:                advise (NULLCP, "negotiation prevents transfer of %ss",
        !           234:                        vf -> vf_text);
        !           235: 
        !           236:                tmode = VFS_DEF;
        !           237:            }
        !           238: 
        !           239:            for (vf = vfs; vf -> vf_entry; vf++)    /* prime the pump */
        !           240:                if (vf -> vf_peek)
        !           241:                    (void) (*vf -> vf_peek) (vf, NOTOK, NULLCP,
        !           242:                                             (struct stat *) 0, ftamfd);
        !           243: 
        !           244:            if ((fadusize = ftc -> ftc_ssdusize) < 0)
        !           245:                fadusize = 0;
        !           246:            break;
        !           247: 
        !           248:        default: 
        !           249: #ifndef        BRIDGE
        !           250:            if (verbose)
        !           251:                fprintf (stderr, "failed\n");
        !           252: #endif
        !           253:            break;
        !           254:     }
        !           255:     ftam_diag (ftc -> ftc_diags, ftc -> ftc_ndiag,
        !           256:                ftamfd != NOTOK || fti -> fti_abort.fta_peer,
        !           257:                ftc -> ftc_action);
        !           258: 
        !           259:     FTCFREE (ftc);
        !           260: 
        !           261:     if (ftamfd != NOTOK) {
        !           262:        vec[0] = "sd";
        !           263:        vec[1] = NULLCP;
        !           264: 
        !           265:        (void) f_cd (vec);
        !           266:     }
        !           267: 
        !           268:     return (ftamfd != NOTOK ? OK : NOTOK);
        !           269: }
        !           270: 
        !           271: /*  */
        !           272: 
        !           273: /* ARGSUSED */
        !           274: 
        !           275: int    f_close (vec)
        !           276: char  **vec;
        !           277: {
        !           278:     struct FTAMrelease  ftrs;
        !           279:     register struct FTAMrelease *ftr = &ftrs;
        !           280:     struct FTAMindication   ftis;
        !           281:     register struct FTAMindication *fti = &ftis;
        !           282: 
        !           283: #ifdef BRIDGE
        !           284:     if (ftamfd == NOTOK)
        !           285:        return OK;
        !           286: #endif
        !           287: 
        !           288:     if (FTerminateRequest (ftamfd, NULLPE, ftr, fti) == NOTOK) {
        !           289:        ftam_advise (&fti -> fti_abort, "F-TERMINATE.REQUEST");
        !           290: 
        !           291:        (void) FUAbortRequest (ftamfd, FACTION_PERM,
        !           292:                    (struct FTAMdiagnostic *) 0, 0, &ftis);
        !           293:        ftamfd = NOTOK;
        !           294: 
        !           295:        return NOTOK;
        !           296:     }
        !           297: 
        !           298:     ftam_chrg (&ftr -> ftr_charges);
        !           299: 
        !           300:     FTRFREE (ftr);
        !           301: 
        !           302:     ftamfd = NOTOK;
        !           303:     if (rcwd) {
        !           304:        free (rcwd);
        !           305:        rcwd = NULL;
        !           306:     }
        !           307: 
        !           308:     return OK;
        !           309: }
        !           310: 
        !           311: /*  */
        !           312: 
        !           313: int    f_quit (vec)
        !           314: char  **vec;
        !           315: {
        !           316:     if (ftamfd != NOTOK)
        !           317:        (void) f_close (vec);
        !           318: 
        !           319:     return DONE;
        !           320: }
        !           321: 
        !           322: /*  */
        !           323: 
        !           324: #define        AMASK   "\020\01STORAGE\02SECURITY\03PRIVATE"
        !           325: 
        !           326: 
        !           327: /* ARGSUSED */
        !           328: 
        !           329: #ifndef        BRIDGE
        !           330: int    f_status (vec)
        !           331: char  **vec;
        !           332: {
        !           333:     int            hit;
        !           334:     register struct vfsmap *vf;
        !           335: 
        !           336:     printf ("associated with virtual filestore on \"%s\"\n  at %s\n",
        !           337:            host, pa2str (&vfs_bound));
        !           338:     printf ("  as user \"%s\"", user);
        !           339:     if (account)
        !           340:        printf (" using account \"%s\"", account);
        !           341:     printf ("\n");
        !           342: 
        !           343:     printf ("application-context: %s\nservice class: ", oid2ode (context));
        !           344:     switch (class) {
        !           345:        case FCLASS_TRANSFER: 
        !           346:            printf ("transfer");
        !           347:            break;
        !           348: 
        !           349:        case FCLASS_ACCESS: 
        !           350:            printf ("access");
        !           351:            break;
        !           352: 
        !           353:        case FCLASS_MANAGE: 
        !           354:            printf ("management");
        !           355:            break;
        !           356: 
        !           357:        case FCLASS_TM: 
        !           358:            printf ("transfer-and-management");
        !           359:            break;
        !           360: 
        !           361:        case FCLASS_UNCONS: 
        !           362:            printf ("unconstrained");
        !           363:            break;
        !           364: 
        !           365:        default: 
        !           366:            printf ("%d", class);
        !           367:     }
        !           368:     printf (", ftam-QoS: ");
        !           369:     switch (fqos) {
        !           370:        case FQOS_NORECOVERY: 
        !           371:            printf ("no-recovery");
        !           372:            break;
        !           373: 
        !           374:        default: 
        !           375:            printf ("class-%d-recovery", fqos);
        !           376:            break;
        !           377:     }
        !           378: 
        !           379:     printf ("\nfunctional units: %s\n", sprintb (units, UMASK));
        !           380: 
        !           381:     printf ("attribute groups: %s\n", sprintb (attrs, AMASK));
        !           382: 
        !           383:     printf ("document types:");
        !           384:     hit = 0;
        !           385:     for (vf = vfs; vf -> vf_entry; vf++)
        !           386:        if (vf -> vf_oid && (vf -> vf_flags & VF_OK)) {
        !           387:            printf ("\n  %-16.16s %s (%s)", sprintoid (vf -> vf_oid),
        !           388:                    vf -> vf_text, vf -> vf_entry);
        !           389:            hit = 1;
        !           390:        }
        !           391:     if (!hit)
        !           392:        printf (" none negotiated!");
        !           393: 
        !           394:     printf ("\nestimated integral FADU size: %d\n", fadusize);
        !           395: 
        !           396:     return OK;
        !           397: }
        !           398: #endif

unix.superglobalmegacorp.com

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