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

1.1       root        1: /* cpair.c - CertificatePair attribute syntax */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/dsap/common/RCS/cpair.c,v 7.1 90/01/11 18:35:34 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/dsap/common/RCS/cpair.c,v 7.1 90/01/11 18:35:34 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       cpair.c,v $
                     12:  * Revision 7.1  90/01/11  18:35:34  mrose
                     13:  * real-sync
                     14:  * 
                     15:  * Revision 7.0  89/11/23  21:41:59  mrose
                     16:  * Release 6.0
                     17:  * 
                     18:  */
                     19: 
                     20: /*
                     21:  *                               NOTICE
                     22:  *
                     23:  *    Acquisition, use, and distribution of this module and related
                     24:  *    materials are subject to the restrictions of a license agreement.
                     25:  *    Consult the Preface in the User's Manual for the full terms of
                     26:  *    this agreement.
                     27:  *
                     28:  */
                     29: 
                     30: 
                     31: #include "quipu/authen.h"
                     32: 
                     33: /* We import these functions, which ought to be internal to certificate.c */
                     34: struct certificate *cert_cpy();
                     35: struct certificate *str2cert();
                     36: 
                     37: PE cpair_enc(parm)
                     38: struct certificate_list *parm;
                     39: {
                     40: PE pe;
                     41: 
                     42:   encode_AF_CertificatePair(&pe, 0, 0, NULLCP, parm);
                     43:   return (pe);
                     44: }
                     45: 
                     46: struct certificate_list *cpair_dec(pe)
                     47: PE pe;
                     48: {
                     49: struct certificate_list *result;
                     50: 
                     51:   if (decode_AF_CertificatePair(pe, 0, NULLIP, NULLVP, &result) == NOTOK)
                     52:        return (struct certificate_list *) 0;
                     53:   return (result);
                     54: }
                     55: 
                     56: struct certificate_list *str2cpair(str)
                     57: char *str;
                     58: {
                     59: struct certificate_list *result;
                     60: char *ptr;
                     61: 
                     62:   result = (struct certificate_list *) calloc(1, sizeof(*result));
                     63:   if (result == (struct certificate_list *) 0)
                     64:        return (result);
                     65:   
                     66: 
                     67:   /* If there isn't a '|', the pair is technically illegal. However,
                     68:    * allow this case to mean : "the string contains a certificate,
                     69:    * which is the forward cross certificate".
                     70:    */
                     71: 
                     72:   ptr = index(str, '|');
                     73:   if (ptr != NULLCP)
                     74:   {
                     75:     *ptr = '\0';
                     76:     ptr++;
                     77:   }
                     78: 
                     79:   /* Need to cook up a quick test for whether a string contains a certificate
                     80:    * or whitespace. A certificate will always contain a '#', so use this.
                     81:    */
                     82: 
                     83:   if (index(str, '#') != NULLCP)
                     84:   {
                     85:     result->cert = str2cert(str);
                     86:     if (result->cert == (struct certificate *) 0)
                     87:     {
                     88:       free((char *) result);
                     89:       return ((struct certificate_list *) 0);
                     90:     }
                     91:   }
                     92: 
                     93:   str = ptr;
                     94:   if ((str != NULLCP) && (index(str, '#') != NULLCP))
                     95:   {
                     96:     result->cert = str2cert(str);
                     97:     if (result->cert == (struct certificate *) 0)
                     98:     {
                     99:       free((char *) result);
                    100:       return ((struct certificate_list *) 0);
                    101:     }
                    102:   }
                    103: 
                    104:   return (result);
                    105: }
                    106: 
                    107: int printcpair(ps, parm, format)
                    108: PS ps;
                    109: struct certificate_list *parm;
                    110: int format;
                    111: {
                    112:   if (parm->cert)
                    113:        printcert(ps, parm->cert, format);
                    114: 
                    115:   ps_printf(ps, "|");
                    116: 
                    117:   if (parm->reverse)
                    118:        printcert(ps, parm->reverse, format);
                    119: }
                    120: 
                    121: struct certificate_list *cpair_cpy(parm)
                    122: struct certificate_list *parm;
                    123: {
                    124: struct certificate_list *result;
                    125: 
                    126:   result = (struct certificate_list *) calloc(1, sizeof(*result));
                    127:   if (result == (struct certificate_list *) 0)
                    128:        return (result);
                    129:   if (parm->cert)
                    130:        result->cert = cert_cpy(parm->cert);
                    131:   if (parm->reverse)
                    132:        result->reverse = cert_cpy(parm->reverse);
                    133: 
                    134:   return (result);
                    135: }
                    136: 
                    137: 
                    138: int cpair_cmp(a, b)
                    139: struct certificate_list *a, *b;
                    140: {
                    141: int retval;
                    142: 
                    143:   if (a->cert == (struct certificate *) 0)
                    144:   {
                    145:     if (b->cert == (struct certificate *) 0)
                    146:        retval = 0;
                    147:     else
                    148:         retval = 1;
                    149:   }
                    150:   else
                    151:   {
                    152:     if (b->cert == (struct certificate *) 0)
                    153:        retval = -1;
                    154:     else
                    155:        retval = cert_cmp(a->cert, b->cert);
                    156:   }
                    157: 
                    158:   if (retval != 0)
                    159:        return (retval);
                    160:     
                    161:   if (a->reverse == (struct certificate *) 0)
                    162:   {
                    163:     if (b->reverse == (struct certificate *) 0)
                    164:        retval = 0;
                    165:     else
                    166:         retval = 1;
                    167:   }
                    168:   else
                    169:   {
                    170:     if (b->reverse == (struct certificate *) 0)
                    171:        retval = -1;
                    172:     else
                    173:        retval = cert_cmp(a->reverse, b->reverse);
                    174:   }
                    175: 
                    176:   return (retval);
                    177: }
                    178: 
                    179: cpair_free(parm)
                    180: struct certificate_list *parm;
                    181: {
                    182:   if (parm->cert)
                    183:        cert_free(parm->cert);
                    184:   if (parm->reverse)
                    185:        cert_free(parm->reverse);
                    186:   free((char *) parm);
                    187: }
                    188: 
                    189: certificate_pair_syntax()
                    190: {
                    191:   (void) add_attribute_syntax(
                    192:        "CertificatePair",
                    193:        (IFP) cpair_enc,        (IFP) cpair_dec,
                    194:        (IFP) str2cpair,        printcpair,
                    195:        (IFP) cpair_cpy,        cpair_cmp,
                    196:        cpair_free,     NULLCP,
                    197:        NULLIFP,        TRUE);
                    198: }

unix.superglobalmegacorp.com

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