|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.