|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 2361 (0x939) Types: TextFile Names: »dn_str.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z« └─⟦de7628f85⟧ └─⟦this⟧ »isode-6.0/dsap/common/dn_str.c«
#include "quipu/util.h" #include "quipu/name.h" static char dn_alias; dn_print (); dn_cmp (); DN str2dn (str) register char * str; { register char *ptr; char *save,val; char * aliasptr; DN dn = NULLDN, newdn; RDN rdn; char * alias2name (); char * SkipSpace (); if (str == NULLCP) return (NULLDN); while ( (ptr = index (str,'@')) != 0) { save = ptr++; save--; if (! isspace (*save)) save++; val = *save; *save = 0; if (dn == NULLDN) /* try str as an alias */ if ((aliasptr = alias2name (SkipSpace(str))) != NULLCP) { dn_alias = TRUE; if ((newdn = str2dn(aliasptr)) == NULLDN) { parse_error ("Invalid alias '%s'",aliasptr); dn_free (dn); return (NULLDN); } dn = newdn; *save = val; str = ptr; continue; } if ((rdn = str2rdn (str)) == NULLRDN) { dn_free (dn); return (NULLDN); } if (dn == NULLDN) dn = dn_comp_new (rdn); else dn_append (dn,dn_comp_new (rdn)); *save = val; str = ptr; } /* try str as an alias */ if (dn == NULLDN) if ((aliasptr = alias2name (SkipSpace(str))) != NULLCP) { dn_alias = TRUE; if ((newdn = str2dn(aliasptr)) == NULLDN) { parse_error ("Invalid alias '%s'",aliasptr); dn_free (dn); return (NULLDN); } return (newdn); } if ((rdn = str2rdn (str)) == NULLRDN) { dn_free (dn); return (NULLDN); } if (dn == NULLDN) dn = dn_comp_new (rdn); else dn_append (dn,dn_comp_new (rdn)); return (dn); } DN str2dn_aux (str,alias) char * str; char *alias; { DN dn; dn_alias = FALSE; dn = str2dn (str); *alias = dn_alias; return (dn); } DN str2dnX (str) register char * str; { register char * ptr; if ((ptr = rindex (str,'#')) != 0) { /* a bit or reverse compatability... */ if (*++ptr != 0) { parse_error ("invalid # in '%s'",str); return (NULLDN); } else *--ptr = 0; } return (str2dn(str)); } DN dn_dec (pe) PE pe; { DN adn; if (decode_IF_DistinguishedName(pe,1,NULLIP,NULLVP,&adn) == NOTOK) return (NULLDN); if (dn_decode (adn) == NOTOK) return (NULLDN); return (adn); } PE dn_enc (dn) DN dn; { PE ret_pe; (void) encode_IF_DistinguishedName (&ret_pe,0,0,NULLCP,dn); return (ret_pe); } dn_syntax () { (void) add_attribute_syntax ("dn", (IFP) dn_enc, (IFP) dn_dec, (IFP) str2dnX, dn_print, (IFP) dn_cpy, dn_cmp, dn_free, NULLCP, NULLIFP, TRUE ); }