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

1.1       root        1: #include "quipu/util.h"
                      2: #include "quipu/name.h"
                      3: 
                      4: static char dn_alias;
                      5: 
                      6: extern int dn_print ();
                      7: extern int dn_cmp ();
                      8: extern int dn_free ();
                      9: 
                     10: DN str2dn (str)
                     11: register char * str;
                     12: {
                     13: register char *ptr;
                     14: char *save,val;
                     15: char * aliasptr;
                     16: DN dn = NULLDN, newdn;
                     17: RDN rdn;
                     18: char * alias2name ();
                     19: char * SkipSpace ();
                     20: 
                     21:        if (str == NULLCP)
                     22:                return (NULLDN);
                     23: 
                     24:        if (*str == '@')
                     25:                str++;          /* Skip leading '@' signs for dish compat */
                     26: 
                     27:        while ( (ptr = index (str,'@')) != 0) {
                     28:                save = ptr++;
                     29:                save--;
                     30:                if (! isspace (*save))
                     31:                        save++;
                     32:                val = *save;
                     33:                *save = 0;
                     34: 
                     35: 
                     36:                if (dn == NULLDN)
                     37:                        /* try str as an alias */
                     38:                        if ((aliasptr = alias2name (SkipSpace(str))) != NULLCP) {
                     39:                                dn_alias = TRUE;
                     40:                                if ((newdn = str2dn(aliasptr)) == NULLDN) {
                     41:                                        parse_error ("Invalid alias '%s'",aliasptr);
                     42:                                        dn_free (dn);
                     43:                                        return (NULLDN);
                     44:                                }
                     45:                                dn = newdn;
                     46:                                *save = val;
                     47:                                str = ptr;
                     48:                                continue;       
                     49:                        }
                     50: 
                     51:                if ((rdn = str2rdn (str)) == NULLRDN) {
                     52:                        dn_free (dn);
                     53:                        return (NULLDN);
                     54:                } 
                     55:                if (dn == NULLDN)
                     56:                        dn = dn_comp_new (rdn);
                     57:                else
                     58:                        dn_append (dn,dn_comp_new (rdn));
                     59:                *save = val;
                     60:                str = ptr;
                     61:        }
                     62: 
                     63: 
                     64:        /* try str as an alias */
                     65:        if (dn == NULLDN)
                     66:                if ((aliasptr = alias2name (SkipSpace(str))) != NULLCP) {
                     67:                        dn_alias = TRUE;
                     68:                        if ((newdn = str2dn(aliasptr)) == NULLDN) {
                     69:                                parse_error ("Invalid alias '%s'",aliasptr);
                     70:                                dn_free (dn);
                     71:                                return (NULLDN);
                     72:                        }
                     73:                        return (newdn);
                     74:                }
                     75: 
                     76:        if ((rdn = str2rdn (str)) == NULLRDN) {
                     77:                dn_free (dn);
                     78:                return (NULLDN);
                     79:        }
                     80: 
                     81:        if (dn == NULLDN)
                     82:                dn = dn_comp_new (rdn);
                     83:        else
                     84:                dn_append (dn,dn_comp_new (rdn));
                     85: 
                     86:        return (dn);
                     87: }
                     88: 
                     89: DN str2dn_aux (str,alias)
                     90: char * str;
                     91: char *alias;
                     92: {
                     93: DN dn;
                     94:        dn_alias = FALSE;
                     95:        dn = str2dn (str);
                     96:        *alias = dn_alias;
                     97:        return (dn);
                     98: }
                     99: 
                    100: DN str2dnX (str)
                    101: register char * str;
                    102: {
                    103: register char * ptr;
                    104: 
                    105:        if ((ptr = rindex (str,'#')) != 0) {
                    106:                /* a bit or reverse compatability... */
                    107:                if (*++ptr != 0) {
                    108:                        parse_error ("invalid # in '%s'",str);
                    109:                        return (NULLDN);
                    110:                } else
                    111:                        *--ptr = 0;
                    112:        }
                    113:        return (str2dn(str));
                    114: }
                    115: 
                    116: DN dn_dec (pe)
                    117: PE pe;
                    118: {
                    119: DN adn;
                    120:        
                    121:        if (decode_IF_DistinguishedName(pe,1,NULLIP,NULLVP,&adn) == NOTOK)
                    122:                return (NULLDN);
                    123: 
                    124:        return (adn);
                    125: }
                    126: 
                    127: PE dn_enc (dn)
                    128: DN dn;
                    129: {
                    130: PE ret_pe;
                    131: 
                    132:        (void) encode_IF_DistinguishedName (&ret_pe,0,0,NULLCP,dn);
                    133:        return (ret_pe);
                    134: }
                    135: 
                    136: dn_syntax ()
                    137: {
                    138:        (void) add_attribute_syntax ("dn",
                    139:                (IFP) dn_enc,   (IFP) dn_dec,
                    140:                (IFP) str2dnX,  dn_print,
                    141:                (IFP) dn_cpy,   dn_cmp,
                    142:                dn_free,        NULLCP,
                    143:                NULLIFP,        TRUE );
                    144: }

unix.superglobalmegacorp.com

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