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 a

⟦32eea2ac3⟧ TextFile

    Length: 6090 (0x17ca)
    Types: TextFile
    Names: »asn_ext.c«

Derivation

└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
    └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« 
        └─⟦d3ac74d73⟧ 
            └─⟦this⟧ »isode-5.0/dsap/x500as/asn_ext.c« 

TextFile

/* asn_ext.c - ASN.1 functionality extension stuff */

#ifndef	lint
static char *rcsid = "$Header: /f/osi/dsap/x500as/RCS/asn_ext.c,v 6.0 89/03/18 23:29:15 mrose Rel $";
#endif

/* 
 * $Header: /f/osi/dsap/x500as/RCS/asn_ext.c,v 6.0 89/03/18 23:29:15 mrose Rel $
 *
 *
 * $Log:	asn_ext.c,v $
 * Revision 6.0  89/03/18  23:29:15  mrose
 * Release 5.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.
 *
 */


/* LINTLIBRARY */

#include "quipu/util.h"
#include "quipu/common.h"
#include "quipu/entry.h"
#include "varargs.h"

extern	LLog	* log_dsap;

OID     grab_oid(at)
AttributeType   at;
{
    if(at->at_oid == NULLOID) 
	return(at->at_table->oa_ot.ot_oid);
    else
	return(at->at_oid);
}

PE      grab_pe(av)
AttributeValue  av;
{
PE ret_pe = NULLPE;
int av_syntax;

    if ( av->av_syntax >= AV_WRITE_FILE ) 
	av_syntax = av->av_syntax - AV_WRITE_FILE;
    else
	av_syntax = av->av_syntax;

    if(av->av_pe != NULLPE)
	return(pe_cpy(av->av_pe));

    switch(av_syntax)
    {
    case AV_CASEEXACTSTRING:
    case AV_CASEIGNORESTRING:
	ret_pe = prts2prim(av->av_un.av_str, strlen(av->av_un.av_str));
	break;
    case AV_NUMERICSTRING:
	ret_pe = nums2prim(av->av_un.av_num, strlen(av->av_un.av_num));
	break;
    case AV_OID:
	ret_pe = oid2prim(av->av_un.av_oid);
	break;
    case AV_OBJECTCLASS:
	ret_pe = oid2prim(av->av_un.av_objectclass->oc_ot.ot_oid);
	break;
    case AV_ACL:
	(void) encode_Quipu_ACLSyntax (&ret_pe,0,0,NULLCP,av->av_un.av_acl);
	break;
    case AV_PRESENTATIONADDRESS:
	if (encode_DO_ISODEPresentationAddress (&ret_pe,0,0,NULLCP,av->av_un.av_psap) == NOTOK ) {
		ret_pe = NULLPE;
		LLOG (log_dsap,LLOG_EXCEPTIONS, ("Failed to encode PSAP"));
	}
	break;
    case AV_DN:
	(void) encode_IF_DistinguishedName (&ret_pe,0,0,NULLCP,av->av_un.av_dn);
	break;
    case AV_SCHEMA:
        (void) encode_Quipu_TreeStructureSyntax(&ret_pe,0,0,NULLCP,av->av_un.av_tree);
	break;
    case AV_UPDATE:
	(void) encode_Quipu_EDBInfoSyntax (&ret_pe,0,0,NULLCP,av->av_un.av_update);
	break;
    case AV_BOOLEAN:
	ret_pe = bool2prim(av->av_un.av_boolean);
	break;
    case AV_INTEGER:
	ret_pe = int2prim(av->av_un.av_integer);
	break;
    case AV_TIME:
	{
	UTCtime utime;
	tm2ut (gmtime(&(av->av_un.av_time)),&utime);
	ret_pe = utct2prim(&utime);
	break;
	}
    case AV_FILE:
	{
	FILE * fptr;

	if ((fptr = fopen (av->av_un.av_file.fs_name,"r")) != NULL) {
		if ((av->av_un.av_file.fs_real_syntax == AV_ASN) ||
				(av->av_un.av_file.fs_real_syntax == AV_PHOTO)) {
			PS fps;
			fps = ps_alloc (std_open);
			if ((std_setup (fps,fptr)) == NOTOK) {
				(void) fclose (fptr);
				ps_free (fps);
				break;
			}
			ret_pe = ps2pe (fps);
			(void) fclose (fptr);
			ps_free (fps);
		} else {
			char buffer [LINESIZE];
			AttributeValue newav;
			extern char * TidyString ();
	
			(void) fread (buffer,LINESIZE,1,fptr);
			(void) fclose (fptr);
			if ((newav = str2AttrV (TidyString(buffer),av->av_un.av_file.fs_real_syntax)) == NULLAttrV){
				LLOG (log_dsap,LLOG_EXCEPTIONS,("invalid format in file %s",av->av_un.av_file.fs_name));
				break;
			}
			ret_pe = grab_pe (newav);
			AttrV_free (newav);
		}
	} else 
		LLOG(log_dsap,LLOG_EXCEPTIONS,("Can't open %s",av->av_un.av_file.fs_name));
	break;	
	}
    default:
	LLOG(log_dsap, LLOG_EXCEPTIONS, ("Unknown syntax %d in grab_pe",av->av_syntax));
    case AV_ASN:
    case AV_PHOTO:	
	return(pe_cpy(av->av_un.av_asn));
    }

/* remove optimisation for now ... 
    av->av_pe = pe_cpy (ret_pe);        /* optimisation - save pe for    */
					/* future use - memory expensive */
    return (ret_pe);
}

AttrV_do_decode(x,y)
register AttributeType x;
register AttributeValue y;
{
int z;
int y_syntax;

    if (x == NULLAttrT)
	    return;

    AttrT_decode (x);
    if (x->at_table == NULLTABLE_ATTR)
	    return;

    if (y == NULLAttrV)
	    return;

    y->av_syntax = x->at_table->oa_syntax;
    if ( y->av_syntax >= AV_WRITE_FILE ) 
	y_syntax = y->av_syntax - AV_WRITE_FILE;
    else
	y_syntax = y->av_syntax;

    switch (y_syntax) {
    case AV_CASEEXACTSTRING:
    case AV_CASEIGNORESTRING:
	y->av_un.av_str = prim2str (y->av_pe, &z);
	break;
    case AV_NUMERICSTRING:
	y->av_un.av_num = prim2str (y->av_pe, &z);
	break;
    case AV_OID:
	y->av_un.av_oid = oid_cpy(prim2oid(y->av_pe));
	break;
    case AV_OBJECTCLASS:
	y->av_un.av_objectclass = oid2oc (prim2oid(y->av_pe));
	break;
    case AV_ASN:
    case AV_PHOTO:	
	y->av_un.av_asn = y->av_pe;
	break;
    case AV_BOOLEAN:
	y->av_un.av_boolean = (char) prim2flag (y->av_pe) ;
	break;
    case AV_INTEGER:
	y->av_un.av_integer = prim2num (y->av_pe);
	break;
    case AV_TIME:
	y->av_un.av_time = gtime(ut2tm(prim2utct(y->av_pe)));
	break;
    case AV_PRESENTATIONADDRESS:
	{
	y->av_un.av_psap = (struct PSAPaddr *) calloc (1,sizeof (struct PSAPaddr));
	(void) decode_DO_ISODEPresentationAddress (y->av_pe,1,NULLIP,NULLVP,y->av_un.av_psap);
	break;
	}
    case AV_ACL:
	y->av_un.av_acl = acl_alloc ();
	(void) decode_Quipu_ACLSyntax(y->av_pe,1,NULLIP,NULLVP,y->av_un.av_acl);
	acl_decode (y->av_un.av_acl);
	break;
    case AV_DN:
	(void) decode_IF_DistinguishedName(y->av_pe,1,NULLIP,NULLVP,&(y->av_un.av_dn));
	dn_decode (y->av_un.av_dn);
	break;
    case AV_SCHEMA:
	(void) decode_Quipu_TreeStructureSyntax(y->av_pe,1,NULLIP,NULLVP,&(y->av_un.av_tree));
	break;
    case AV_UPDATE:
	y->av_un.av_update = edb_info_alloc ();
	(void) decode_Quipu_EDBInfoSyntax(y->av_pe,1,NULLIP,NULLVP,y->av_un.av_update);
	edb_info_decode (y->av_un.av_update);
	break;
    default:
	y->av_syntax = AV_UNKNOWN;
	LLOG(log_dsap, LLOG_EXCEPTIONS, ("Un decoded syntax %d",x->at_table->oa_syntax));
	break;
    }
}

#ifndef	lint
void    ds_advise (va_alist)
va_dcl
{
    va_list ap;

    va_start (ap);

    (void) _ll_log (log_dsap, LLOG_EXCEPTIONS, ap);

    va_end (ap);
}
#else
/* VARARGS */

void	ds_advise (what, fmt)
char	*what,
	*fmt;
{
    ds_advise (what, fmt);
}
#endif