Annotation of 43BSDReno/contrib/isode-beta/dsap/common/dsa_info.c, revision 1.1.1.1

1.1       root        1: /* dsa_info.c - DSA Operational Information */
                      2: 
                      3: #ifndef lint
                      4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/dsa_info.c,v 7.0 89/11/23 21:42:10 mrose Rel $";
                      5: #endif
                      6: 
                      7: /*
                      8:  * $Header: /f/osi/dsap/common/RCS/dsa_info.c,v 7.0 89/11/23 21:42:10 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       dsa_info.c,v $
                     12:  * Revision 7.0  89/11/23  21:42:10  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: /* LINTLIBRARY */
                     29: 
                     30: #include "quipu/util.h"
                     31: #include "quipu/entry.h"
                     32: extern LLog * log_dsap;
                     33: 
                     34: static edb_info_free (edb)
                     35: struct edb_info * edb;
                     36: {
                     37:        if (edb == NULLEDB)
                     38:                return;
                     39: 
                     40:        dn_free (edb->edb_name) ;
                     41:        dn_free (edb->edb_getfrom);
                     42:        dn_seq_free (edb->edb_allowed);
                     43:        dn_seq_free (edb->edb_sendto);
                     44:        free ((char *) edb);
                     45: }
                     46: 
                     47: static struct edb_info * edb_info_cpy (a)
                     48: struct edb_info * a;
                     49: {
                     50: struct edb_info * result;
                     51: 
                     52:        result = edb_info_alloc ();
                     53:        result->edb_name     = dn_cpy (a->edb_name);
                     54:        result->edb_getfrom  = dn_cpy (a->edb_getfrom);
                     55:        result->edb_sendto   = dn_seq_cpy (a->edb_sendto);
                     56:        result->edb_allowed  = dn_seq_cpy (a->edb_allowed);
                     57:        return (result);
                     58: }
                     59: 
                     60: static edb_info_cmp (a,b)
                     61: struct edb_info * a;
                     62: struct edb_info * b;
                     63: {
                     64: int i;
                     65: 
                     66:        if (a == NULLEDB)
                     67:                return ( b == NULLEDB ? 0 : -1 );
                     68: 
                     69:        if (b == NULLEDB)
                     70:                return (1);
                     71: 
                     72:        if ( (i = dn_cmp (a->edb_name,b->edb_name)) != 0)
                     73:                return (i);
                     74: 
                     75:        if ( (i = dn_cmp (a->edb_getfrom,b->edb_getfrom)) != 0)
                     76:                return (i);
                     77: 
                     78:        if ( (i = dn_seq_cmp (a->edb_sendto,b->edb_sendto)) != 0)
                     79:                return (i);
                     80: 
                     81:        if ( (i = dn_seq_cmp (a->edb_allowed,b->edb_allowed)) != 0)
                     82:                return (i);
                     83: 
                     84:        return (0);
                     85: 
                     86: }
                     87: 
                     88: static struct edb_info * edb_info_decode (pe)
                     89: PE pe;
                     90: {
                     91: struct edb_info * a;
                     92: 
                     93:        a = edb_info_alloc ();
                     94:        if (decode_Quipu_EDBInfoSyntax(pe,1,NULLIP,NULLVP,a) == NOTOK) {
                     95:                free ((char *)a);
                     96:                return (NULLEDB);
                     97:        }
                     98:        return (a);
                     99: }
                    100: 
                    101: 
                    102: static edb_info_print (ps,edb,format)
                    103: PS ps;
                    104: struct edb_info * edb;
                    105: int format;
                    106: {
                    107:        if (edb == NULLEDB)
                    108:                return;
                    109: 
                    110:        if (format == READOUT) {
                    111:                if (edb->edb_name != NULLDN)
                    112:                        dn_print (ps,edb->edb_name,EDBOUT);
                    113:                else
                    114:                        ps_print (ps,"ROOT");
                    115: 
                    116:                if (edb->edb_getfrom != NULLDN) {
                    117:                        ps_print (ps," ( FROM ");
                    118:                        dn_print (ps,edb->edb_getfrom,EDBOUT);
                    119:                        ps_print (ps, " )");
                    120:                        if (edb->edb_allowed != NULLDNSEQ) {
                    121:                                ps_print (ps,"\n\t\t\t");
                    122:                                if (edb->edb_name != NULLDN)
                    123:                                        dn_print (ps,edb->edb_name,EDBOUT);
                    124:                                else
                    125:                                        ps_print (ps,"ROOT");
                    126:                        } 
                    127:                }
                    128:                if (edb->edb_allowed != NULLDNSEQ) {
                    129:                        ps_print (ps," ( TO ");
                    130:                        dn_seq_print (ps,edb->edb_allowed,READOUT);
                    131:                        ps_print (ps, " )");
                    132:                } 
                    133:        } else {        
                    134:                if (edb->edb_name != NULLDN)
                    135:                        dn_print (ps,edb->edb_name,EDBOUT);
                    136:                ps_print (ps,"#");
                    137:                dn_print (ps,edb->edb_getfrom,EDBOUT);
                    138:                ps_print (ps,"#");
                    139:                dn_seq_print (ps,edb->edb_allowed,format);
                    140:        }
                    141: 
                    142:        if (edb->edb_sendto != NULLDNSEQ)
                    143:                DLOG (log_dsap,LLOG_EXCEPTIONS,("edb_sendto not null"));
                    144: 
                    145: }
                    146: 
                    147: 
                    148: static struct edb_info * str2update (str)
                    149: char * str;
                    150: {
                    151: register char * ptr;
                    152: char * save,val;
                    153: struct edb_info * ei;
                    154: 
                    155:        /* dn # num # dn # dnseq # */
                    156:        if ((ptr = index (str,'#')) == 0) {
                    157:                parse_error ("# missing in update syntax '%s'",str);
                    158:                return (NULLEDB);
                    159:        }
                    160:        ei = edb_info_alloc ();
                    161:        ei->edb_sendto = NULLDNSEQ;
                    162: 
                    163:        /* go for name */
                    164:        save = ptr++;
                    165:        if (*str == '#') 
                    166:                ei->edb_name = NULLDN;
                    167:        else {
                    168:                if (! isspace (*--save))
                    169:                        save++;
                    170:                val = *save;
                    171:                *save = 0;
                    172: 
                    173:                if ((ei->edb_name = str2dn(str)) == NULLDN) {
                    174:                        free ((char *) ei);
                    175:                        return (NULLEDB);
                    176:                }
                    177:                *save = val;
                    178:        }
                    179: 
                    180:        str = SkipSpace(ptr);
                    181:        if ((ptr = index (str,'#')) == 0) {
                    182:                parse_error ("2nd # missing in update syntax '%s'",str);
                    183:                dn_free (ei->edb_name);
                    184:                free ((char *) ei);
                    185:                return (NULLEDB);
                    186:        }
                    187: 
                    188:        save = ptr++;
                    189:        if (*str == '#') {
                    190:                ei->edb_getfrom = NULLDN;
                    191:        } else {
                    192:                if (! isspace (*--save))
                    193:                        save++;
                    194:                val = *save;
                    195:                *save = 0;
                    196: 
                    197:                if ((ei->edb_getfrom = str2dn(str)) == NULLDN) {
                    198:                        dn_free (ei->edb_name);
                    199:                        free ((char *) ei);
                    200:                        return (NULLEDB);
                    201:                }
                    202:                *save = val;
                    203:        }
                    204: 
                    205:        /* send to */
                    206:        str = SkipSpace(ptr);
                    207:        if ((ptr = index (str,'#')) == 0) {
                    208:                ptr = 0;
                    209:        } else {
                    210:                save = ptr++;
                    211:                if (! isspace (*--save))
                    212:                        save++;
                    213:                val = *save;
                    214:                *save=0;
                    215:        }
                    216: 
                    217:        if (*str == 0)
                    218:                ei->edb_allowed = NULLDNSEQ;
                    219:        else if ((ei->edb_allowed = str2dnseq(str)) == NULLDNSEQ) {
                    220:                parse_error ("invalid dn '%s'",str);
                    221:                dn_free (ei->edb_name);
                    222:                dn_free (ei->edb_getfrom);
                    223:                free ((char *) ei);
                    224:                return (NULLEDB);
                    225:        }
                    226: 
                    227:        if (ptr != 0)
                    228:                *save = val;
                    229: 
                    230:        return (ei);    
                    231: }
                    232: 
                    233: static PE edb_info_enc (ei)
                    234: struct edbinfo * ei;
                    235: {
                    236: PE ret_pe;
                    237: 
                    238:        (void) encode_Quipu_EDBInfoSyntax (&ret_pe,0,0,NULLCP,ei);
                    239:        return (ret_pe);
                    240: }
                    241: 
                    242: edbinfo_syntax ()
                    243: {
                    244:        (void) add_attribute_syntax ("edbinfo",
                    245:                (IFP) edb_info_enc,     (IFP) edb_info_decode,
                    246:                (IFP) str2update,       edb_info_print,
                    247:                (IFP) edb_info_cpy,     edb_info_cmp,
                    248:                edb_info_free,          NULLCP,
                    249:                NULLIFP,                TRUE );
                    250: }

unix.superglobalmegacorp.com

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