DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T d

⟦dec0acdd1⟧ TextFile

    Length: 2361 (0x939)
    Types: TextFile
    Names: »dn_str.c«

Derivation

└─⟦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« 

TextFile

#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 );
}