|
|
BSD 4.3reno
/* ufn_aei.c - user-friendly aei lookup */
#ifndef lint
static char *rcsid = "$Header: /var/lib/cvsd/repos/CSRG/43BSDReno/contrib/isode-beta/dsap/common/ufn_aet.c,v 1.1.1.1 2018/04/24 16:12:56 root Exp $";
#endif
/*
* $Header: /var/lib/cvsd/repos/CSRG/43BSDReno/contrib/isode-beta/dsap/common/ufn_aet.c,v 1.1.1.1 2018/04/24 16:12:56 root Exp $
*
*
* $Log: ufn_aet.c,v $
* Revision 1.1.1.1 2018/04/24 16:12:56 root
* BSD 4.3reno
*
* Revision 7.1 90/07/09 14:35:17 mrose
* sync
*
* Revision 7.0 90/06/20 08:40:43 mrose
* *** empty log message ***
*
*/
/*
* 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/ufn.h"
#include "quipu/list.h"
#include "quipu/ds_search.h"
#include "quipu/connection.h" /* ds_search uses di_block - include this for lint !!! */
#include "quipu/dua.h"
extern LLog * log_dsap;
extern LLog * addr_log;
extern Filter ocfilter ();
extern Filter joinfilter ();
extern char PY_pepy[];
void PY_advise ();
static Filter aet_filter (context)
char * context;
{
Filter a,b;
if ((a = ocfilter ("ApplicationEntity")) == NULLFILTER)
return NULLFILTER;
b = filter_alloc ();
b->flt_next = a;
b->flt_type = FILTER_ITEM;
b->FUITEM.fi_type = FILTERITEM_EQUALITY;
if ((b->FUITEM.UNAVA.ava_type = AttrT_new (APPLCTX_OID)) == NULLAttrT) {
LLOG (log_dsap,LLOG_EXCEPTIONS,("supported application context attribute unknown"))
return NULLFILTER;
}
b->FUITEM.UNAVA.ava_value = str2AttrV(context,
b->FUITEM.UNAVA.ava_type->oa_syntax);
if (b->FUITEM.UNAVA.ava_value == NULLAttrV) {
LLOG (log_dsap,LLOG_EXCEPTIONS,("'%s' unknown OID",context));
return NULLFILTER;
}
return joinfilter (b,FILTER_AND);
}
static aet_search (base, subtree, filt, res)
DN base;
char subtree;
Filter filt;
DNS * res;
{
struct ds_search_arg search_arg;
static struct ds_search_result result;
struct DSError err;
static CommonArgs ca = default_common_args;
EntryInfo * ptr;
DNS newdns, r = NULLDNS;
search_arg.sra_baseobject = base;
search_arg.sra_filter = filt;
if (subtree)
search_arg.sra_subset = SRA_WHOLESUBTREE;
else
search_arg.sra_subset = SRA_ONELEVEL;
search_arg.sra_searchaliases = TRUE;
search_arg.sra_common = ca; /* struct copy */
search_arg.sra_eis.eis_infotypes = TRUE;
search_arg.sra_eis.eis_allattributes = TRUE;
search_arg.sra_eis.eis_select = NULLATTR;
if (ds_search (&search_arg, &err, &result) != DS_OK) {
log_ds_error (&err);
ds_error_free (&err);
return FALSE;
}
correlate_search_results (&result);
if ( (result.CSR_limitproblem != LSR_NOLIMITPROBLEM) || (result.CSR_cr != NULLCONTINUATIONREF)) {
if ( ! result.CSR_entries)
return FALSE;
}
for (ptr = result.CSR_entries; ptr != NULLENTRYINFO; ptr=ptr->ent_next) {
cache_entry (ptr,FALSE,TRUE);
newdns = dn_seq_alloc();
newdns->dns_next = r;
newdns->dns_dn = dn_cpy (ptr->ent_dn);
r = newdns;
}
*res = r;
return TRUE;
}
aet_match (c,v,interact,result,el,context)
int c;
char ** v;
DNS *result;
DNS (* interact) ();
envlist el;
char * context;
{
DNS ufnr = NULLDNS;
DNS newap = NULLDNS;
DNS apps = NULLDNS;
DNS dns, DNS_append();
Filter filt;
int ok = TRUE;
if (!ufn_match (c,v,interact,&ufnr,el)) {
char buffer[BUFSIZ];
(void) sprintf (buffer, "ufn_match failed: %s", PY_pepy);
(void) strcpy (PY_pepy, buffer);
SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP, ("%s", PY_pepy));
*result = NULLDNS;
return FALSE;
}
filt = aet_filter(context);
for (dns = ufnr; dns != NULLDNS; dns=dns->dns_next) {
newap = NULLDNS;
if (aet_search (dns->dns_dn,FALSE,filt,&newap))
apps = DNS_append (apps,newap);
else
ok = FALSE;
}
if ((apps == NULLDNS) && ok) {
/* go deeper */
for (dns = ufnr; dns != NULLDNS; dns=dns->dns_next) {
if (dns->dns_dn->dn_parent == NULLDN)
/* too high for subtree search */
continue;
newap = NULLDNS;
if (aet_search (dns->dns_dn,TRUE,filt,&newap))
apps = DNS_append (apps,newap);
else
ok = FALSE;
}
}
if (!ok && !apps) {
PY_advise (NULLCP,
"search for applicationEntity supporting \"%s\" failed",
context);
SLOG (addr_log, LLOG_EXCEPTIONS, NULLCP, ("%s", PY_pepy));
}
filter_free (filt);
dn_seq_free (ufnr);
*result = apps;
return ok;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.