/* filter.c - Directory Operation Filters */
static char *rcsid
= "$Header: /f/osi/dsap/common/RCS/filter.c,v 7.3 91/02/22 09:19:21 mrose Interim $";
* $Header: /f/osi/dsap/common/RCS/filter.c,v 7.3 91/02/22 09:19:21 mrose Interim $
* Revision 7.3 91/02/22 09:19:21 mrose
* Revision 7.2 90/10/17 11:41:59 mrose
* Revision 7.1 90/07/09 14:34:32 mrose
* Revision 7.0 89/11/23 21:42:17 mrose
* 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
#include "quipu/ds_search.h"
for (ptr
= filt
; ptr
!= NULLFILTER
; ptr
=next
) {
if (ptr
->flt_type
== FILTER_ITEM
) {
switch (ptr
->FUITEM
.fi_type
) {
case FILTERITEM_EQUALITY
:
case FILTERITEM_GREATEROREQUAL
:
case FILTERITEM_LESSOREQUAL
:
AttrT_free (ptr
->FUITEM
.UNAVA
.ava_type
);
AttrV_free (ptr
->FUITEM
.UNAVA
.ava_value
);
AttrT_free (ptr
->FUITEM
.UNTYPE
);
case FILTERITEM_SUBSTRINGS
:
AttrT_free (ptr
->FUITEM
.UNSUB
.fi_sub_type
);
avs_free (ptr
->FUITEM
.UNSUB
.fi_sub_initial
);
avs_free (ptr
->FUITEM
.UNSUB
.fi_sub_any
);
avs_free (ptr
->FUITEM
.UNSUB
.fi_sub_final
);
filter_free (ptr
->flt_un
.flt_un_filter
);
register Filter ptr
,trail
;
DLOG (log_dsap
,LLOG_DEBUG
,("appending to null filter !"));
for (ptr
=a
; ptr
!= NULLFILTER
; ptr
=ptr
->flt_next
)
Filter
strfilter (at
,s
,type
)
filt
-> flt_next
= NULLFILTER
;
filt
-> flt_type
= FILTER_ITEM
;
if (type
== FILTERITEM_SUBSTRINGS
|| type
== -FILTERITEM_SUBSTRINGS
) {
if (*s
== '*' && !s
[1]) {
filt
-> FUITEM
.fi_type
= FILTERITEM_PRESENT
;
filt
-> FUITEM
.UNTYPE
= at
;
filt
-> FUITEM
.fi_type
= FILTERITEM_SUBSTRINGS
;
filt
-> FUITEM
.UNSUB
.fi_sub_type
= at
;
filt
-> FUITEM
.UNSUB
.fi_sub_initial
= NULLAV
;
filt
-> FUITEM
.UNSUB
.fi_sub_any
= NULLAV
;
filt
-> FUITEM
.UNSUB
.fi_sub_final
= NULLAV
;
if (dp
= index (s
, '*')) {
(void) strcpy (buffer
, s
);
filt
-> FUITEM
.UNSUB
.fi_sub_initial
=
str2avs (s
, filt
-> FUITEM
.UNSUB
.fi_sub_type
);
if (dp
= rindex (s
, '*')) {
AV_Sequence any_end
= NULL
;
filt
-> FUITEM
.UNSUB
.fi_sub_final
=
str2avs (dp
, filt
-> FUITEM
.UNSUB
.fi_sub_type
);
filt
-> FUITEM
.UNSUB
.fi_sub_type
);
any_end
-> avseq_next
= any
;
any_end
= any_end
-> avseq_next
;
filt
-> FUITEM
.UNSUB
.fi_sub_any
= any_end
= any
;
filt
-> FUITEM
.UNSUB
.fi_sub_final
=
str2avs (s
, filt
-> FUITEM
.UNSUB
.fi_sub_type
);
if (type
== FILTERITEM_SUBSTRINGS
)
filt
-> FUITEM
.UNSUB
.fi_sub_any
=
str2avs (s
, filt
-> FUITEM
.UNSUB
.fi_sub_type
);
filt
-> FUITEM
.UNSUB
.fi_sub_initial
=
str2avs (s
, filt
-> FUITEM
.UNSUB
.fi_sub_type
);
filt
-> FUITEM
.fi_type
= type
;
filt
-> FUITEM
.UNAVA
.ava_type
= at
;
filt
-> FUITEM
.UNAVA
.ava_value
=
str2AttrV (s
, filt
-> FUITEM
.UNAVA
.ava_type
-> oa_syntax
);
filt
->flt_next
= NULLFILTER
;
filt
->flt_type
= FILTER_ITEM
;
filt
->FUITEM
.fi_type
= FILTERITEM_EQUALITY
;
if ((filt
->FUITEM
.UNAVA
.ava_type
= AttrT_new ("ObjectClass")) == NULLAttrT
) {
LLOG (log_dsap
,LLOG_EXCEPTIONS
,("ObjectClass attribute unknown"))
filt
->FUITEM
.UNAVA
.ava_value
= str2AttrV(s
,
filt
->FUITEM
.UNAVA
.ava_type
->oa_syntax
);
if (filt
->FUITEM
.UNAVA
.ava_value
== NULLAttrV
) {
LLOG (log_dsap
,LLOG_EXCEPTIONS
,("'%s' unknown",s
));
Filter
joinfilter (f
, type
)
filt
->flt_next
= NULLFILTER
;
int fi_print (ps
, fi
, format
)
print_filter (ps
, fi
, 0);
print_filter (nps
, fi
, level
)
register struct filter_item
*fi3
;
switch (fi
-> flt_type
) {
switch (fi3
-> fi_type
) {
case FILTERITEM_EQUALITY
:
case FILTERITEM_GREATEROREQUAL
:
case FILTERITEM_LESSOREQUAL
:
AttrT_print (nps
, fi3
-> UNAVA
.ava_type
, EDBOUT
);
AttrV_print (nps
, fi3
-> UNAVA
.ava_value
, EDBOUT
);
case FILTERITEM_SUBSTRINGS
:
AttrT_print (nps
, fi3
-> UNSUB
.fi_sub_type
, EDBOUT
);
avs_print_aux (nps
, fi3
-> UNSUB
.fi_sub_initial
,EDBOUT
,"*");
avs_print_aux (nps
, fi3
-> UNSUB
.fi_sub_any
, EDBOUT
, "*");
avs_print_aux (nps
, fi3
-> UNSUB
.fi_sub_final
, EDBOUT
, "*");
AttrT_print (nps
, fi3
-> UNTYPE
, EDBOUT
);
"[internal error--malformed filter item type 0x%x]",
ps_printf (nps
, "(%s", cp
);
for (fi2
= fi
-> FUFILT
; fi2
; fi2
= fi2
-> flt_next
) {
print_filter (nps
, fi2
, level
);
ps_printf (nps
, "[internal error--malformed filter type 0x%x]",