dn_str.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 213 行

C
213
字号
#ifndef lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/common/RCS/dn_str.c,v 9.0 1992/06/16 12:12:39 isode Rel $";#endif/* * $Header: /xtel/isode/isode/dsap/common/RCS/dn_str.c,v 9.0 1992/06/16 12:12:39 isode Rel $ * * * $Log: dn_str.c,v $ * Revision 9.0  1992/06/16  12:12:39  isode * Release 8.0 * *//* *                                NOTICE * *    Acquisition, use, and distribution of this module and related *    materials are subject to the restrictions of a license agreement. *    Consult the Preface in the User's Manual for the full terms of *    this agreement. * */#include "quipu/util.h"#include "quipu/name.h"static char dn_alias;extern int dn_cmp ();extern int dn_free ();extern char * SkipSpace ();short syntax_dn = 0;DN str2dn (str)register char * str;{    register char *ptr;    char *save,val, sep = '@';    char * aliasptr;    DN dn = NULLDN, newdn, tmpdn;    RDN rdn;    int	rfcformat = 0;    char * alias2name ();    if (str == NULLCP)	return (NULLDN);    if (*str == '<') {	/* try 'rfc' string format instead */	rfcformat = 1;	str++;			/* remove leading bracket */	if (isspace (*str))	    str++;	sep = ',';    }    if ((rfcformat == 0) && (*str == '@'))   /* Skip leading '@' signs for dish compat */	str++;		    while ( (ptr = index (str,sep)) != 0) {	save = ptr++;	if (isspace (*(save - 1))) {	    save--;	    if ( *(save - 1) == '=')		save++;		/* Let "type= " pass by */	}	val = *save;	*save = 0;	if ((rfcformat == 0) && (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 {	    if (rfcformat == 0)		dn_append (dn,dn_comp_new (rdn));	    else {		tmpdn = dn;		dn = dn_comp_new (rdn);		dn ->dn_parent = tmpdn;	    }	}	*save = val;	str = ptr;    }    /* try str as an alias */    if ((rfcformat == 0) && (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 (rfcformat == 1) {	register char * p;	p = str;	while (*p && *p != '>')	    p++;	if (*p == '>') {	    *p-- = 0;	    if (isspace (*p)) 	     *p = 0;	}    }    if ((rdn = str2rdn (str)) == NULLRDN) {	dn_free (dn);	return (NULLDN);    }    if (dn == NULLDN)	dn = dn_comp_new (rdn);    else {	if (rfcformat == 0) 	    dn_append (dn,dn_comp_new (rdn));	else {	    tmpdn = dn;	    dn = dn_comp_new(rdn);	    dn->dn_parent = tmpdn;	}    }    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);	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 (){	syntax_dn = add_attribute_syntax ("dn",		(IFP) dn_enc,	(IFP) dn_dec,		(IFP) str2dnX,	(IFP) dn_print,		(IFP) dn_cpy,	dn_cmp,		dn_free,	NULLCP,		NULLIFP,	TRUE );}	    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?