for header in $(srcdir)/lber.h lber_types.h \
$(srcdir)/ldap.h $(srcdir)/ldap_cdefs.h \
$(srcdir)/ldap_schema.h $(srcdir)/ldap_utf8.h \
- ldap_features.h \
- $(srcdir)/disptmpl.h $(srcdir)/srchpref.h; \
+ ldap_features.h; \
do \
$(INSTALL) $(INSTALLFLAGS) -m 644 $$header $(DESTDIR)$(includedir); \
done
+++ /dev/null
-/* $OpenLDAP$ */
-/*
- * Copyright 1998-2001 The OpenLDAP Foundation, Redwood City, California, USA
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted only as authorized by the OpenLDAP
- * Public License. A copy of this license is available at
- * http://www.OpenLDAP.org/license.html or in file LICENSE in the
- * top-level directory of the distribution.
- */
-/* Portions
- * Copyright (c) 1993, 1994 Regents of the University of Michigan.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of Michigan at Ann Arbor. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- *
- * disptmpl.h: display template library defines
- * 7 March 1994 by Mark C Smith
- */
-
-/* DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED */
-
-#ifndef _DISPTMPL_H
-#define _DISPTMPL_H
-
-#include <ldap_cdefs.h>
-
-LDAP_BEGIN_DECL
-
-#define LDAP_TEMPLATE_VERSION 1
-
-/*
- * general types of items (confined to most significant byte)
- */
-#define LDAP_SYN_TYPE_TEXT 0x01000000L
-#define LDAP_SYN_TYPE_IMAGE 0x02000000L
-#define LDAP_SYN_TYPE_BOOLEAN 0x04000000L
-#define LDAP_SYN_TYPE_BUTTON 0x08000000L
-#define LDAP_SYN_TYPE_ACTION 0x10000000L
-
-
-/*
- * syntax options (confined to second most significant byte)
- */
-#define LDAP_SYN_OPT_DEFER 0x00010000L
-
-
-/*
- * display template item syntax ids (defined by common agreement)
- * these are the valid values for the ti_syntaxid of the tmplitem
- * struct (defined below). A general type is encoded in the
- * most-significant 8 bits, and some options are encoded in the next
- * 8 bits. The lower 16 bits are reserved for the distinct types.
- */
-#define LDAP_SYN_CASEIGNORESTR ( 1 | LDAP_SYN_TYPE_TEXT )
-#define LDAP_SYN_MULTILINESTR ( 2 | LDAP_SYN_TYPE_TEXT )
-#define LDAP_SYN_DN ( 3 | LDAP_SYN_TYPE_TEXT )
-#define LDAP_SYN_BOOLEAN ( 4 | LDAP_SYN_TYPE_BOOLEAN )
-#define LDAP_SYN_JPEGIMAGE ( 5 | LDAP_SYN_TYPE_IMAGE )
-#define LDAP_SYN_JPEGBUTTON ( 6 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
-#define LDAP_SYN_FAXIMAGE ( 7 | LDAP_SYN_TYPE_IMAGE )
-#define LDAP_SYN_FAXBUTTON ( 8 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
-#define LDAP_SYN_AUDIOBUTTON ( 9 | LDAP_SYN_TYPE_BUTTON | LDAP_SYN_OPT_DEFER )
-#define LDAP_SYN_TIME ( 10 | LDAP_SYN_TYPE_TEXT )
-#define LDAP_SYN_DATE ( 11 | LDAP_SYN_TYPE_TEXT )
-#define LDAP_SYN_LABELEDURL ( 12 | LDAP_SYN_TYPE_TEXT )
-#define LDAP_SYN_SEARCHACTION ( 13 | LDAP_SYN_TYPE_ACTION )
-#define LDAP_SYN_LINKACTION ( 14 | LDAP_SYN_TYPE_ACTION )
-#define LDAP_SYN_ADDDNACTION ( 15 | LDAP_SYN_TYPE_ACTION )
-#define LDAP_SYN_VERIFYDNACTION ( 16 | LDAP_SYN_TYPE_ACTION )
-#define LDAP_SYN_RFC822ADDR ( 17 | LDAP_SYN_TYPE_TEXT )
-
-
-/*
- * handy macros
- */
-#define LDAP_GET_SYN_TYPE( syid ) ((syid) & 0xFF000000L )
-#define LDAP_GET_SYN_OPTIONS( syid ) ((syid) & 0x00FF0000L )
-
-
-/*
- * display options for output routines (used by entry2text and friends)
- */
-/*
- * use calculated label width (based on length of longest label in
- * template) instead of contant width
- */
-#define LDAP_DISP_OPT_AUTOLABELWIDTH 0x00000001L
-#define LDAP_DISP_OPT_HTMLBODYONLY 0x00000002L
-
-/*
- * perform search actions (applies to ldap_entry2text_search only)
- */
-#define LDAP_DISP_OPT_DOSEARCHACTIONS 0x00000002L
-
-/*
- * include additional info. relevant to "non leaf" entries only
- * used by ldap_entry2html and ldap_entry2html_search to include "Browse"
- * and "Move Up" HREFs
- */
-#define LDAP_DISP_OPT_NONLEAF 0x00000004L
-
-
-/*
- * display template item options (may not apply to all types)
- * if this bit is set in ti_options, it applies.
- */
-#define LDAP_DITEM_OPT_READONLY 0x00000001L
-#define LDAP_DITEM_OPT_SORTVALUES 0x00000002L
-#define LDAP_DITEM_OPT_SINGLEVALUED 0x00000004L
-#define LDAP_DITEM_OPT_HIDEIFEMPTY 0x00000008L
-#define LDAP_DITEM_OPT_VALUEREQUIRED 0x00000010L
-#define LDAP_DITEM_OPT_HIDEIFFALSE 0x00000020L /* booleans only */
-
-
-
-/*
- * display template item structure
- */
-struct ldap_tmplitem {
- unsigned long ti_syntaxid;
- unsigned long ti_options;
- char *ti_attrname;
- char *ti_label;
- char **ti_args;
- struct ldap_tmplitem *ti_next_in_row;
- struct ldap_tmplitem *ti_next_in_col;
- void *ti_appdata;
-};
-
-
-#define LDAP_SET_TMPLITEM_APPDATA( ti, datap ) \
- ( (ti)->ti_appdata = (void *)(datap) )
-
-#define LDAP_GET_TMPLITEM_APPDATA( ti, type ) \
- ( (type)((ti)->ti_appdata) )
-
-#define LDAP_IS_TMPLITEM_OPTION_SET( ti, option ) \
- ( ((ti)->ti_options & (option) ) != 0 )
-
-
-/*
- * object class array structure
- */
-struct ldap_oclist {
- char **oc_objclasses;
- struct ldap_oclist *oc_next;
-};
-
-
-/*
- * add defaults list
- */
-struct ldap_adddeflist {
- int ad_source;
-#define LDAP_ADSRC_CONSTANTVALUE 1
-#define LDAP_ADSRC_ADDERSDN 2
- char *ad_attrname;
- char *ad_value;
- struct ldap_adddeflist *ad_next;
-};
-
-
-/*
- * display template global options
- * if this bit is set in dt_options, it applies.
- */
-/*
- * users should be allowed to try to add objects of these entries
- */
-#define LDAP_DTMPL_OPT_ADDABLE 0x00000001L
-
-/*
- * users should be allowed to do "modify RDN" operation of these entries
- */
-#define LDAP_DTMPL_OPT_ALLOWMODRDN 0x00000002L
-
-/*
- * this template is an alternate view, not a primary view
- */
-#define LDAP_DTMPL_OPT_ALTVIEW 0x00000004L
-
-
-/*
- * display template structure
- */
-struct ldap_disptmpl {
- char *dt_name;
- char *dt_pluralname;
- char *dt_iconname;
- unsigned long dt_options;
- char *dt_authattrname;
- char *dt_defrdnattrname;
- char *dt_defaddlocation;
- struct ldap_oclist *dt_oclist;
- struct ldap_adddeflist *dt_adddeflist;
- struct ldap_tmplitem *dt_items;
- void *dt_appdata;
- struct ldap_disptmpl *dt_next;
-};
-
-#define LDAP_SET_DISPTMPL_APPDATA( dt, datap ) \
- ( (dt)->dt_appdata = (void *)(datap) )
-
-#define LDAP_GET_DISPTMPL_APPDATA( dt, type ) \
- ( (type)((dt)->dt_appdata) )
-
-#define LDAP_IS_DISPTMPL_OPTION_SET( dt, option ) \
- ( ((dt)->dt_options & (option) ) != 0 )
-
-#define LDAP_TMPL_ERR_VERSION 1
-#define LDAP_TMPL_ERR_MEM 2
-#define LDAP_TMPL_ERR_SYNTAX 3
-#define LDAP_TMPL_ERR_FILE 4
-
-/*
- * buffer size needed for entry2text and vals2text
- */
-#define LDAP_DTMPL_BUFSIZ 8192
-
-
-typedef int (*ldap_writeptype) LDAP_P((
- void *writeparm, char *p, ber_len_t len ));
-
-LDAP_F( int )
-ldap_init_templates LDAP_P(( char *file, struct ldap_disptmpl **tmpllistp ));
-
-LDAP_F( int )
-ldap_init_templates_buf LDAP_P(( char *buf,
- ber_len_t buflen,
- struct ldap_disptmpl **tmpllistp ));
-
-LDAP_F( void )
-ldap_free_templates LDAP_P(( struct ldap_disptmpl *tmpllist ));
-
-LDAP_F( struct ldap_disptmpl * )
-ldap_first_disptmpl LDAP_P(( struct ldap_disptmpl *tmpllist ));
-
-LDAP_F( struct ldap_disptmpl * )
-ldap_next_disptmpl LDAP_P(( struct ldap_disptmpl *tmpllist,
- struct ldap_disptmpl *tmpl ));
-
-LDAP_F( struct ldap_disptmpl * )
-ldap_name2template LDAP_P(( char *name,
- struct ldap_disptmpl *tmpllist ));
-
-LDAP_F( struct ldap_disptmpl * )
-ldap_oc2template LDAP_P(( char **oclist,
- struct ldap_disptmpl *tmpllist ));
-
-LDAP_F( char ** )
-ldap_tmplattrs LDAP_P(( struct ldap_disptmpl *tmpl,
- char **includeattrs,
- int exclude,
- unsigned long syntaxmask ));
-
-LDAP_F( struct ldap_tmplitem * )
-ldap_first_tmplrow LDAP_P(( struct ldap_disptmpl *tmpl ));
-
-LDAP_F( struct ldap_tmplitem * )
-ldap_next_tmplrow LDAP_P(( struct ldap_disptmpl *tmpl,
- struct ldap_tmplitem *row ));
-
-LDAP_F( struct ldap_tmplitem * )
-ldap_first_tmplcol LDAP_P(( struct ldap_disptmpl *tmpl,
- struct ldap_tmplitem *row ));
-
-LDAP_F( struct ldap_tmplitem * )
-ldap_next_tmplcol LDAP_P(( struct ldap_disptmpl *tmpl,
- struct ldap_tmplitem *row,
- struct ldap_tmplitem *col ));
-
-LDAP_F( int )
-ldap_entry2text LDAP_P(( LDAP *ld,
- char *buf, LDAPMessage *entry,
- struct ldap_disptmpl *tmpl, char **defattrs, char ***defvals,
- ldap_writeptype writeproc, void *writeparm, char *eol, int rdncount,
- unsigned long opts ));
-
-LDAP_F( int )
-ldap_vals2text LDAP_P(( LDAP *ld,
- char *buf, char **vals, char *label, int labelwidth,
- unsigned long syntaxid, ldap_writeptype writeproc, void *writeparm,
- char *eol, int rdncount ));
-
-LDAP_F( int )
-ldap_entry2text_search LDAP_P(( LDAP *ld,
- char *dn, char *base, LDAPMessage *entry,
- struct ldap_disptmpl *tmpllist, char **defattrs, char ***defvals,
- ldap_writeptype writeproc, void *writeparm, char *eol, int rdncount,
- unsigned long opts ));
-
-LDAP_F( int )
-ldap_entry2html LDAP_P(( LDAP *ld,
- char *buf, LDAPMessage *entry,
- struct ldap_disptmpl *tmpl, char **defattrs, char ***defvals,
- ldap_writeptype writeproc, void *writeparm, char *eol, int rdncount,
- unsigned long opts, char *urlprefix, char *base ));
-
-LDAP_F( int )
-ldap_vals2html LDAP_P(( LDAP *ld,
- char *buf, char **vals, char *label, int labelwidth,
- unsigned long syntaxid, ldap_writeptype writeproc, void *writeparm,
- char *eol, int rdncount, char *urlprefix ));
-
-LDAP_F( int )
-ldap_entry2html_search LDAP_P(( LDAP
- *ld, char *dn, char *base, LDAPMessage *entry,
- struct ldap_disptmpl *tmpllist, char **defattrs, char ***defvals,
- ldap_writeptype writeproc, void *writeparm, char *eol, int rdncount,
- unsigned long opts, char *urlprefix ));
-
-LDAP_END_DECL
-#endif /* _DISPTMPL_H */
+++ /dev/null
-/* $OpenLDAP$ */
-/*
- * Copyright 1998-2001 The OpenLDAP Foundation, Redwood City, California, USA
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted only as authorized by the OpenLDAP
- * Public License. A copy of this license is available at
- * http://www.OpenLDAP.org/license.html or in file LICENSE in the
- * top-level directory of the distribution.
- */
-/* Portions
- * Copyright (c) 1993, 1994 Regents of the University of Michigan.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of Michigan at Ann Arbor. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- *
- * searchpref.h: display template library defines
- * 16 May 1994 by Gordon Good
- */
-
-/* DEPRECATED DEPRECATED DEPRECATED DEPRECATED DEPRECATED */
-
-#ifndef _SRCHPREF_H
-#define _SRCHPREF_H
-
-#include <ldap_cdefs.h>
-
-LDAP_BEGIN_DECL
-
-struct ldap_searchattr {
- char *sa_attrlabel;
- char *sa_attr;
- /* max 32 matchtypes for now */
- unsigned long sa_matchtypebitmap;
- char *sa_selectattr;
- char *sa_selecttext;
- struct ldap_searchattr *sa_next;
-};
-
-struct ldap_searchmatch {
- char *sm_matchprompt;
- char *sm_filter;
- struct ldap_searchmatch *sm_next;
-};
-
-struct ldap_searchobj {
- char *so_objtypeprompt;
- unsigned long so_options;
- char *so_prompt;
- short so_defaultscope;
- char *so_filterprefix;
- char *so_filtertag;
- char *so_defaultselectattr;
- char *so_defaultselecttext;
- struct ldap_searchattr *so_salist;
- struct ldap_searchmatch *so_smlist;
- struct ldap_searchobj *so_next;
-};
-
-/*
- * global search object options
- */
-#define LDAP_SEARCHOBJ_OPT_INTERNAL 0x00000001
-
-#define LDAP_IS_SEARCHOBJ_OPTION_SET( so, option ) \
- (((so)->so_options & (option) ) != 0 )
-
-#define LDAP_SEARCHPREF_VERSION_ZERO 0
-#define LDAP_SEARCHPREF_VERSION 1
-
-#define LDAP_SEARCHPREF_ERR_VERSION 1
-#define LDAP_SEARCHPREF_ERR_MEM 2
-#define LDAP_SEARCHPREF_ERR_SYNTAX 3
-#define LDAP_SEARCHPREF_ERR_FILE 4
-
-
-LDAP_F( int )
-ldap_init_searchprefs LDAP_P(( char *file,
- struct ldap_searchobj **solistp ));
-
-LDAP_F( int )
-ldap_init_searchprefs_buf LDAP_P(( char *buf,
- ber_len_t buflen,
- struct ldap_searchobj **solistp ));
-
-LDAP_F( void )
-ldap_free_searchprefs LDAP_P(( struct ldap_searchobj *solist ));
-
-LDAP_F( struct ldap_searchobj * )
-ldap_first_searchobj LDAP_P(( struct ldap_searchobj *solist ));
-
-LDAP_F( struct ldap_searchobj * )
-ldap_next_searchobj LDAP_P(( struct ldap_searchobj *sollist,
- struct ldap_searchobj *so ));
-
-
-LDAP_END_DECL
-
-#endif /* _SRCHPREF_H */
LDAP_BEGIN_DECL
typedef void (*BER_LOG_FN)(FILE *file,
- const char *subsys, int level, const char *fmt, va_list vl );
+ const char *subsys, int level, const char *fmt, ... );
LBER_V (BER_ERRNO_FN) ber_int_errno_fn;
controls.c messages.c references.c extended.c cyrus.c \
modify.c add.c modrdn.c delete.c abandon.c cache.c \
getfilter.c sasl.c sbind.c kbind.c unbind.c \
- free.c disptmpl.c srchpref.c dsparse.c tmplout.c sort.c \
+ free.c tmplout.c sort.c \
getdn.c getentry.c getattr.c getvalues.c addentry.c \
request.c os-ip.c url.c sortctrl.c vlvctrl.c \
init.c options.c print.c string.c util-int.c schema.c \
controls.lo messages.lo references.lo extended.lo cyrus.lo \
modify.lo add.lo modrdn.lo delete.lo abandon.lo cache.lo \
getfilter.lo sasl.lo sbind.lo kbind.lo unbind.lo \
- free.lo disptmpl.lo srchpref.lo dsparse.lo tmplout.lo sort.lo \
+ free.lo tmplout.lo sort.lo \
getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \
request.lo os-ip.lo url.lo sortctrl.lo vlvctrl.lo \
init.lo options.lo print.lo string.lo util-int.lo schema.lo \
$(LTLINK) -o $@ apitest.o $(LIBS)
ltest: $(LIBRARY) test.o $(LDAP_LIBLBER_DEPEND)
$(LTLINK) -o $@ test.o $(LIBS)
-ttest: $(LIBRARY) tmpltest.o $(LDAP_LIBLBER_DEPEND)
- $(LTLINK) -o $@ tmpltest.o $(LIBS)
dntest: $(LIBRARY) dntest.o $(LDAP_LIBLBER_DEPEND)
$(LTLINK) -o $@ dntest.o $(LIBS)
-CFFILES=ldap.conf ldapfilter.conf ldaptemplates.conf ldapsearchprefs.conf
+CFFILES=ldap.conf ldapfilter.conf
install-local: $(CFFILES) FORCE
-$(MKDIR) $(DESTDIR)$(libdir)
+++ /dev/null
-/* $OpenLDAP$ */
-/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- */
-/* Portions
- * Copyright (c) 1993, 1994 Regents of the University of Michigan.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of Michigan at Ann Arbor. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- *
- * disptmpl.c: display template library routines for LDAP clients
- * 7 March 1994 by Mark C Smith
- */
-
-#include "portable.h"
-
-#include <stdio.h>
-
-#include <ac/stdlib.h>
-
-#include <ac/string.h>
-#include <ac/time.h>
-#include <ac/unistd.h>
-
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#include "ldap-int.h"
-#include "disptmpl.h"
-
-static void free_disptmpl LDAP_P(( struct ldap_disptmpl *tmpl ));
-static int read_next_tmpl LDAP_P(( char **bufp, ber_len_t *blenp,
- struct ldap_disptmpl **tmplp, int dtversion ));
-
-static const char *const tmploptions[] = {
- "addable", "modrdn",
- "altview",
- NULL
-};
-
-
-static const unsigned long tmploptvals[] = {
- LDAP_DTMPL_OPT_ADDABLE, LDAP_DTMPL_OPT_ALLOWMODRDN,
- LDAP_DTMPL_OPT_ALTVIEW,
-};
-
-
-static const char *const itemtypes[] = {
- "cis", "mls", "dn",
- "bool", "jpeg", "jpegbtn",
- "fax", "faxbtn", "audiobtn",
- "time", "date", "url",
- "searchact", "linkact", "adddnact",
- "addact", "verifyact", "mail",
- NULL
-};
-
-static const unsigned long itemsynids[] = {
- LDAP_SYN_CASEIGNORESTR, LDAP_SYN_MULTILINESTR, LDAP_SYN_DN,
- LDAP_SYN_BOOLEAN, LDAP_SYN_JPEGIMAGE, LDAP_SYN_JPEGBUTTON,
- LDAP_SYN_FAXIMAGE, LDAP_SYN_FAXBUTTON, LDAP_SYN_AUDIOBUTTON,
- LDAP_SYN_TIME, LDAP_SYN_DATE, LDAP_SYN_LABELEDURL,
- LDAP_SYN_SEARCHACTION, LDAP_SYN_LINKACTION, LDAP_SYN_ADDDNACTION,
- LDAP_SYN_ADDDNACTION, LDAP_SYN_VERIFYDNACTION,LDAP_SYN_RFC822ADDR,
-};
-
-
-static const char *const itemoptions[] = {
- "ro", "sort",
- "1val", "hide",
- "required", "hideiffalse",
- NULL
-};
-
-
-static const unsigned long itemoptvals[] = {
- LDAP_DITEM_OPT_READONLY, LDAP_DITEM_OPT_SORTVALUES,
- LDAP_DITEM_OPT_SINGLEVALUED, LDAP_DITEM_OPT_HIDEIFEMPTY,
- LDAP_DITEM_OPT_VALUEREQUIRED, LDAP_DITEM_OPT_HIDEIFFALSE,
-};
-
-
-#define ADDEF_CONSTANT "constant"
-#define ADDEF_ADDERSDN "addersdn"
-
-
-int
-ldap_init_templates( char *file, struct ldap_disptmpl **tmpllistp )
-{
- FILE *fp;
- char *buf;
- long rlen, len;
- int rc, eof;
-
- *tmpllistp = NULL;
-
- if (( fp = fopen( file, "r" )) == NULL ) {
- return( LDAP_TMPL_ERR_FILE );
- }
-
- if ( fseek( fp, 0L, SEEK_END ) != 0 ) { /* move to end to get len */
- fclose( fp );
- return( LDAP_TMPL_ERR_FILE );
- }
-
- len = ftell( fp );
-
- if ( fseek( fp, 0L, SEEK_SET ) != 0 ) { /* back to start of file */
- fclose( fp );
- return( LDAP_TMPL_ERR_FILE );
- }
-
- if (( buf = LDAP_MALLOC( (size_t)len )) == NULL ) {
- fclose( fp );
- return( LDAP_TMPL_ERR_MEM );
- }
-
- rlen = fread( buf, 1, (size_t)len, fp );
- eof = feof( fp );
- fclose( fp );
-
- if ( rlen != len && !eof ) { /* error: didn't get the whole file */
- LDAP_FREE( buf );
- return( LDAP_TMPL_ERR_FILE );
- }
-
- rc = ldap_init_templates_buf( buf, rlen, tmpllistp );
- LDAP_FREE( buf );
-
- return( rc );
-}
-
-
-int
-ldap_init_templates_buf( char *buf, ber_len_t buflen,
- struct ldap_disptmpl **tmpllistp )
-{
- int rc=-1, version;
- char **toks;
- struct ldap_disptmpl *prevtmpl, *tmpl;
-
- *tmpllistp = prevtmpl = NULL;
-
- if ( ldap_int_next_line_tokens( &buf, &buflen, &toks ) != 2 ||
- strcasecmp( toks[ 0 ], "version" ) != 0 ) {
- LDAP_VFREE( toks );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- version = atoi( toks[ 1 ] );
- LDAP_VFREE( toks );
- if ( version != LDAP_TEMPLATE_VERSION ) {
- return( LDAP_TMPL_ERR_VERSION );
- }
-
- while ( buflen > 0 && ( rc = read_next_tmpl( &buf, &buflen, &tmpl,
- version )) == 0 && tmpl != NULL ) {
- if ( prevtmpl == NULL ) {
- *tmpllistp = tmpl;
- } else {
- prevtmpl->dt_next = tmpl;
- }
- prevtmpl = tmpl;
- }
-
- if ( rc != 0 ) {
- ldap_free_templates( *tmpllistp );
- }
-
- return( rc );
-}
-
-
-
-void
-ldap_free_templates( struct ldap_disptmpl *tmpllist )
-{
- struct ldap_disptmpl *tp, *nexttp;
-
- if ( tmpllist != NULL ) {
- for ( tp = tmpllist; tp != NULL; tp = nexttp ) {
- nexttp = tp->dt_next;
- free_disptmpl( tp );
- }
- }
-}
-
-
-static void
-free_disptmpl( struct ldap_disptmpl *tmpl )
-{
- if ( tmpl != NULL ) {
- if ( tmpl->dt_name != NULL ) {
- LDAP_FREE( tmpl->dt_name );
- }
-
- if ( tmpl->dt_pluralname != NULL ) {
- LDAP_FREE( tmpl->dt_pluralname );
- }
-
- if ( tmpl->dt_iconname != NULL ) {
- LDAP_FREE( tmpl->dt_iconname );
- }
-
- if ( tmpl->dt_authattrname != NULL ) {
- LDAP_FREE( tmpl->dt_authattrname );
- }
-
- if ( tmpl->dt_defrdnattrname != NULL ) {
- LDAP_FREE( tmpl->dt_defrdnattrname );
- }
-
- if ( tmpl->dt_defaddlocation != NULL ) {
- LDAP_FREE( tmpl->dt_defaddlocation );
- }
-
- if ( tmpl->dt_oclist != NULL ) {
- struct ldap_oclist *ocp, *nextocp;
-
- for ( ocp = tmpl->dt_oclist; ocp != NULL; ocp = nextocp ) {
- nextocp = ocp->oc_next;
- LDAP_VFREE( ocp->oc_objclasses );
- LDAP_FREE( ocp );
- }
- }
-
- if ( tmpl->dt_adddeflist != NULL ) {
- struct ldap_adddeflist *adp, *nextadp;
-
- for ( adp = tmpl->dt_adddeflist; adp != NULL; adp = nextadp ) {
- nextadp = adp->ad_next;
- if( adp->ad_attrname != NULL ) {
- LDAP_FREE( adp->ad_attrname );
- }
- if( adp->ad_value != NULL ) {
- LDAP_FREE( adp->ad_value );
- }
- LDAP_FREE( adp );
- }
- }
-
- if ( tmpl->dt_items != NULL ) {
- struct ldap_tmplitem *rowp, *nextrowp, *colp, *nextcolp;
-
- for ( rowp = tmpl->dt_items; rowp != NULL; rowp = nextrowp ) {
- nextrowp = rowp->ti_next_in_col;
- for ( colp = rowp; colp != NULL; colp = nextcolp ) {
- nextcolp = colp->ti_next_in_row;
- if ( colp->ti_attrname != NULL ) {
- LDAP_FREE( colp->ti_attrname );
- }
- if ( colp->ti_label != NULL ) {
- LDAP_FREE( colp->ti_label );
- }
- if ( colp->ti_args != NULL ) {
- LDAP_VFREE( colp->ti_args );
- }
- LDAP_FREE( colp );
- }
- }
- }
-
- LDAP_FREE( tmpl );
- }
-}
-
-
-struct ldap_disptmpl *
-ldap_first_disptmpl( struct ldap_disptmpl *tmpllist )
-{
- return( tmpllist );
-}
-
-
-struct ldap_disptmpl *
-ldap_next_disptmpl( struct ldap_disptmpl *tmpllist,
- struct ldap_disptmpl *tmpl )
-{
- return( tmpl == NULL ? tmpl : tmpl->dt_next );
-}
-
-
-struct ldap_disptmpl *
-ldap_name2template( char *name, struct ldap_disptmpl *tmpllist )
-{
- struct ldap_disptmpl *dtp;
-
- for ( dtp = ldap_first_disptmpl( tmpllist ); dtp != NULL;
- dtp = ldap_next_disptmpl( tmpllist, dtp )) {
- if ( strcasecmp( name, dtp->dt_name ) == 0 ) {
- return( dtp );
- }
- }
-
- return( NULL );
-}
-
-
-struct ldap_disptmpl *
-ldap_oc2template( char **oclist, struct ldap_disptmpl *tmpllist )
-{
- struct ldap_disptmpl *dtp;
- struct ldap_oclist *oclp;
- int i, j, needcnt, matchcnt;
-
- if ( tmpllist == NULL || oclist == NULL || oclist[ 0 ] == NULL ) {
- return( NULL );
- }
-
- for ( dtp = ldap_first_disptmpl( tmpllist ); dtp != NULL;
- dtp = ldap_next_disptmpl( tmpllist, dtp )) {
- for ( oclp = dtp->dt_oclist; oclp != NULL;
- oclp = oclp->oc_next ) {
- needcnt = matchcnt = 0;
- for ( i = 0; oclp->oc_objclasses[ i ] != NULL; ++i ) {
- for ( j = 0; oclist[ j ] != NULL; ++j ) {
- if ( strcasecmp( oclist[ j ], oclp->oc_objclasses[ i ] )
- == 0 ) {
- ++matchcnt;
- }
- }
- ++needcnt;
- }
-
- if ( matchcnt == needcnt ) {
- return( dtp );
- }
- }
- }
-
- return( NULL );
-}
-
-
-struct ldap_tmplitem *
-ldap_first_tmplrow( struct ldap_disptmpl *tmpl )
-{
- return( tmpl->dt_items );
-}
-
-
-struct ldap_tmplitem *
-ldap_next_tmplrow( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row )
-{
- return( row == NULL ? row : row->ti_next_in_col );
-}
-
-
-struct ldap_tmplitem *
-ldap_first_tmplcol( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row )
-{
- return( row );
-}
-
-
-struct ldap_tmplitem *
-ldap_next_tmplcol( struct ldap_disptmpl *tmpl, struct ldap_tmplitem *row,
- struct ldap_tmplitem *col )
-{
- return( col == NULL ? col : col->ti_next_in_row );
-}
-
-
-char **
-ldap_tmplattrs( struct ldap_disptmpl *tmpl, char **includeattrs,
- int exclude, unsigned long syntaxmask )
-{
-/*
- * this routine should filter out duplicate attributes...
- */
- struct ldap_tmplitem *tirowp, *ticolp;
- int i, attrcnt, memerr;
- char **attrs;
-
- attrcnt = 0;
- memerr = 0;
-
- if (( attrs = (char **)LDAP_MALLOC( sizeof( char * ))) == NULL ) {
- return( NULL );
- }
-
- if ( includeattrs != NULL ) {
- for ( i = 0; !memerr && includeattrs[ i ] != NULL; ++i ) {
- if (( attrs = (char **)LDAP_REALLOC( attrs, ( attrcnt + 2 ) *
- sizeof( char * ))) == NULL || ( attrs[ attrcnt++ ] =
- LDAP_STRDUP( includeattrs[ i ] )) == NULL ) {
- memerr = 1;
- } else {
- attrs[ attrcnt ] = NULL;
- }
- }
- }
-
- for ( tirowp = ldap_first_tmplrow( tmpl );
- !memerr && tirowp != NULL;
- tirowp = ldap_next_tmplrow( tmpl, tirowp )) {
- for ( ticolp = ldap_first_tmplcol( tmpl, tirowp );
- ticolp != NULL;
- ticolp = ldap_next_tmplcol( tmpl, tirowp, ticolp )) {
-
- if ( syntaxmask != 0 ) {
- if (( exclude &&
- ( syntaxmask & ticolp->ti_syntaxid ) != 0 ) ||
- ( !exclude &&
- ( syntaxmask & ticolp->ti_syntaxid ) == 0 )) {
- continue;
- }
- }
-
- if ( ticolp->ti_attrname != NULL ) {
- if (( attrs = (char **)LDAP_REALLOC( attrs, ( attrcnt + 2 ) *
- sizeof( char * ))) == NULL || ( attrs[ attrcnt++ ] =
- LDAP_STRDUP( ticolp->ti_attrname )) == NULL ) {
- memerr = 1;
- } else {
- attrs[ attrcnt ] = NULL;
- }
- }
- }
- }
-
- if ( memerr || attrcnt == 0 ) {
- for ( i = 0; i < attrcnt; ++i ) {
- if ( attrs[ i ] != NULL ) {
- LDAP_FREE( attrs[ i ] );
- }
- }
-
- LDAP_FREE( (char *)attrs );
- return( NULL );
- }
-
- return( attrs );
-}
-
-
-static int
-read_next_tmpl( char **bufp, ber_len_t *blenp, struct ldap_disptmpl **tmplp,
- int dtversion )
-{
- int i, j, tokcnt, samerow, adsource;
- char **toks, *itemopts;
- struct ldap_disptmpl *tmpl;
- struct ldap_oclist *ocp, *prevocp = NULL;
- struct ldap_adddeflist *adp, *prevadp = NULL;
- struct ldap_tmplitem *rowp = NULL, *ip, *previp = NULL;
-
- *tmplp = NULL;
-
- /*
- * template name comes first
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- return( tokcnt == 0 ? 0 : LDAP_TMPL_ERR_SYNTAX );
- }
-
- if (( tmpl = (struct ldap_disptmpl *)LDAP_CALLOC( 1,
- sizeof( struct ldap_disptmpl ))) == NULL ) {
- LDAP_VFREE( toks );
- return( LDAP_TMPL_ERR_MEM );
- }
- tmpl->dt_name = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * template plural name comes next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- tmpl->dt_pluralname = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * template icon name is next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- tmpl->dt_iconname = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * template options come next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) < 1 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- for ( i = 0; toks[ i ] != NULL; ++i ) {
- for ( j = 0; tmploptions[ j ] != NULL; ++j ) {
- if ( strcasecmp( toks[ i ], tmploptions[ j ] ) == 0 ) {
- tmpl->dt_options |= tmploptvals[ j ];
- }
- }
- }
- LDAP_VFREE( toks );
-
- /*
- * object class list is next
- */
- while (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) > 0 ) {
- if (( ocp = (struct ldap_oclist *)LDAP_CALLOC( 1,
- sizeof( struct ldap_oclist ))) == NULL ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_MEM );
- }
- ocp->oc_objclasses = toks;
- if ( tmpl->dt_oclist == NULL ) {
- tmpl->dt_oclist = ocp;
- } else {
- prevocp->oc_next = ocp;
- }
- prevocp = ocp;
- }
- if ( tokcnt < 0 ) {
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
-
- /*
- * read name of attribute to authenticate as
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- if ( toks[ 0 ][ 0 ] != '\0' ) {
- tmpl->dt_authattrname = toks[ 0 ];
- } else {
- LDAP_FREE( toks[ 0 ] );
- }
- LDAP_FREE( (char *)toks );
-
- /*
- * read default attribute to use for RDN
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- tmpl->dt_defrdnattrname = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * read default location for new entries
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- if ( toks[ 0 ][ 0 ] != '\0' ) {
- tmpl->dt_defaddlocation = toks[ 0 ];
- } else {
- LDAP_FREE( toks[ 0 ] );
- }
- LDAP_FREE( (char *)toks );
-
- /*
- * read list of rules used to define default values for new entries
- */
- while (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) > 0 ) {
- if ( strcasecmp( ADDEF_CONSTANT, toks[ 0 ] ) == 0 ) {
- adsource = LDAP_ADSRC_CONSTANTVALUE;
- } else if ( strcasecmp( ADDEF_ADDERSDN, toks[ 0 ] ) == 0 ) {
- adsource = LDAP_ADSRC_ADDERSDN;
- } else {
- adsource = 0;
- }
- if ( adsource == 0 || tokcnt < 2 ||
- ( adsource == LDAP_ADSRC_CONSTANTVALUE && tokcnt != 3 ) ||
- ( adsource == LDAP_ADSRC_ADDERSDN && tokcnt != 2 )) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
-
- if (( adp = (struct ldap_adddeflist *)LDAP_CALLOC( 1,
- sizeof( struct ldap_adddeflist ))) == NULL ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_MEM );
- }
- adp->ad_source = adsource;
- adp->ad_attrname = toks[ 1 ];
- if ( adsource == LDAP_ADSRC_CONSTANTVALUE ) {
- adp->ad_value = toks[ 2 ];
- }
- LDAP_FREE( toks[ 0 ] );
- LDAP_FREE( (char *)toks );
-
- if ( tmpl->dt_adddeflist == NULL ) {
- tmpl->dt_adddeflist = adp;
- } else {
- prevadp->ad_next = adp;
- }
- prevadp = adp;
- }
-
- /*
- * item list is next
- */
- samerow = 0;
- while (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) > 0 ) {
- if ( strcasecmp( toks[ 0 ], "item" ) == 0 ) {
- if ( tokcnt < 4 ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
-
- if (( ip = (struct ldap_tmplitem *)LDAP_CALLOC( 1,
- sizeof( struct ldap_tmplitem ))) == NULL ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_MEM );
- }
-
- /*
- * find syntaxid from config file string
- */
- while (( itemopts = strrchr( toks[ 1 ], ',' )) != NULL ) {
- *itemopts++ = '\0';
- for ( i = 0; itemoptions[ i ] != NULL; ++i ) {
- if ( strcasecmp( itemopts, itemoptions[ i ] ) == 0 ) {
- break;
- }
- }
- if ( itemoptions[ i ] == NULL ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- ip->ti_options |= itemoptvals[ i ];
- }
-
- for ( i = 0; itemtypes[ i ] != NULL; ++i ) {
- if ( strcasecmp( toks[ 1 ], itemtypes[ i ] ) == 0 ) {
- break;
- }
- }
- if ( itemtypes[ i ] == NULL ) {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
-
- LDAP_FREE( toks[ 0 ] );
- LDAP_FREE( toks[ 1 ] );
- ip->ti_syntaxid = itemsynids[ i ];
- ip->ti_label = toks[ 2 ];
- if ( toks[ 3 ][ 0 ] == '\0' ) {
- ip->ti_attrname = NULL;
- LDAP_FREE( toks[ 3 ] );
- } else {
- ip->ti_attrname = toks[ 3 ];
- }
- if ( toks[ 4 ] != NULL ) { /* extra args. */
- for ( i = 0; toks[ i + 4 ] != NULL; ++i ) {
- ;
- }
- if (( ip->ti_args = (char **) LDAP_CALLOC( i + 1, sizeof( char * )))
- == NULL ) {
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_MEM );
- }
- for ( i = 0; toks[ i + 4 ] != NULL; ++i ) {
- ip->ti_args[ i ] = toks[ i + 4 ];
- }
- }
- LDAP_FREE( (char *)toks );
-
- if ( tmpl->dt_items == NULL ) {
- tmpl->dt_items = rowp = ip;
- } else if ( samerow ) {
- previp->ti_next_in_row = ip;
- } else {
- rowp->ti_next_in_col = ip;
- rowp = ip;
- }
- previp = ip;
- samerow = 0;
- } else if ( strcasecmp( toks[ 0 ], "samerow" ) == 0 ) {
- LDAP_VFREE( toks );
- samerow = 1;
- } else {
- LDAP_VFREE( toks );
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
- }
- if ( tokcnt < 0 ) {
- free_disptmpl( tmpl );
- return( LDAP_TMPL_ERR_SYNTAX );
- }
-
- *tmplp = tmpl;
- return( 0 );
-}
+++ /dev/null
-/* $OpenLDAP$ */
-/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- */
-/* Portions
- * Copyright (c) 1993, 1994 Regents of the University of Michigan.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of Michigan at Ann Arbor. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- *
- * dsparse.c: parsing routines used by display template and search
- * preference file library routines for LDAP clients.
- *
- * 7 March 1994 by Mark C Smith
- */
-
-#include "portable.h"
-
-#include <stdio.h>
-#include <ac/stdlib.h>
-
-#include <ac/string.h>
-#include <ac/time.h>
-
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#include "ldap-int.h"
-
-static int next_line LDAP_P(( char **bufp, ber_len_t *blenp, char **linep ));
-static char *next_token LDAP_P(( char ** sp ));
-
-
-int
-ldap_int_next_line_tokens( char **bufp, ber_len_t *blenp, char ***toksp )
-{
- char *p, *line, *token, **toks;
- int rc, tokcnt;
-
- *toksp = NULL;
-
- if (( rc = next_line( bufp, blenp, &line )) <= 0 ) {
- return( rc );
- }
-
- if (( toks = (char **)LDAP_CALLOC( 1, sizeof( char * ))) == NULL ) {
- LBER_FREE( line );
- return( -1 );
- }
- tokcnt = 0;
-
- p = line;
- while (( token = next_token( &p )) != NULL ) {
- if (( toks = (char **)LDAP_REALLOC( toks, ( tokcnt + 2 ) *
- sizeof( char * ))) == NULL ) {
- LBER_FREE( (char *)toks );
- LBER_FREE( line );
- return( -1 );
- }
- toks[ tokcnt ] = token;
- toks[ ++tokcnt ] = NULL;
- }
-
- if ( tokcnt == 1 && strcasecmp( toks[ 0 ], "END" ) == 0 ) {
- tokcnt = 0;
- LDAP_VFREE( toks );
- toks = NULL;
- }
-
- LBER_FREE( line );
-
- if ( tokcnt == 0 ) {
- if ( toks != NULL ) {
- LBER_FREE( (char *)toks );
- }
- } else {
- *toksp = toks;
- }
-
- return( tokcnt );
-}
-
-
-static int
-next_line( char **bufp, ber_len_t *blenp, char **linep )
-{
- char *linestart, *line, *p;
- ber_slen_t plen;
-
- linestart = *bufp;
- p = *bufp;
- plen = *blenp;
-
- do {
- for ( linestart = p; plen > 0; ++p, --plen ) {
- if ( *p == '\r' ) {
- if ( plen > 1 && *(p+1) == '\n' ) {
- ++p;
- --plen;
- }
- break;
- }
-
- if ( *p == '\n' ) {
- if ( plen > 1 && *(p+1) == '\r' ) {
- ++p;
- --plen;
- }
- break;
- }
- }
- ++p;
- --plen;
- } while ( plen > 0 && ( *linestart == '#' || linestart + 1 == p ));
-
-
- *bufp = p;
- *blenp = plen;
-
-
- if ( plen <= 0 ) {
- *linep = NULL;
- return( 0 ); /* end of file */
- }
-
- if (( line = LDAP_MALLOC( p - linestart )) == NULL ) {
- *linep = NULL;
- return( -1 ); /* fatal error */
- }
-
- AC_MEMCPY( line, linestart, p - linestart );
- line[ p - linestart - 1 ] = '\0';
- *linep = line;
- return( strlen( line ));
-}
-
-
-static char *
-next_token( char **sp )
-{
- int in_quote = 0;
- char *p, *tokstart, *t;
-
- if ( **sp == '\0' ) {
- return( NULL );
- }
-
- p = *sp;
-
- while ( LDAP_SPACE( (unsigned char) *p )) { /* skip leading white space */
- ++p;
- }
-
- if ( *p == '\0' ) {
- return( NULL );
- }
-
- if ( *p == '\"' ) {
- in_quote = 1;
- ++p;
- }
- t = tokstart = p;
-
- for ( ;; ) {
- if ( *p == '\0' || ( LDAP_SPACE( (unsigned char) *p ) && !in_quote )) {
- if ( *p != '\0' ) {
- ++p;
- }
- *t++ = '\0'; /* end of token */
- break;
- }
-
- if ( *p == '\"' ) {
- in_quote = !in_quote;
- ++p;
- } else {
- *t++ = *p++;
- }
- }
-
- *sp = p;
-
- if ( t == tokstart ) {
- return( NULL );
- }
-
- return( LDAP_STRDUP( tokstart ));
-}
LDAP *ld,
LDAPControl **ctrlp ));
-/*
- * in dsparse.c
- */
-LDAP_F (int) ldap_int_next_line_tokens LDAP_P(( char **bufp, ber_len_t *blenp, char ***toksp ));
-
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
/*
* in kerberos.c
*/
+#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
LDAP_F (char *) ldap_get_kerberosv4_credentials LDAP_P((
LDAP *ld,
LDAP_CONST char *who,
LDAP_CONST char *service,
ber_len_t *len ));
-
#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND */
+++ /dev/null
-# $OpenLDAP$
-# Version should be 1 now
-Version 1
-#
-#
-# Name for this search object
-People
-# options (the only one supported right now is "internal" which means that
-# this search object should not be presented directly to the user)
-# use "" for none
-""
-# Label to place before text box user types in
-"Search For:"
-# Filter prefix to append to all "More Choices" searches
-"(&(objectClass=person)"
-# Tag to use for "Fewer Choices" searches - from ldapfilter.conf file
-"xax500"
-# If a search results in > 1 match, retrieve this attribute to help
-# user disambiguate the entries...
-title
-# ...and label it with this string:
-"Title"
-# Search scope to use when searching
-subtree
-# Follows a list of "More Choices" search options. Format is:
-# Label, attribute, select-bitmap, extra attr display name, extra attr ldap name
-# If last two are null, "Fewer Choices" name/attributes used
-"Common Name" cn 11111 "" ""
-"Surname" sn 11111 "" ""
-"Business Phone" "telephoneNumber" 11101 "" ""
-"E-Mail Address" "mail" 11111 "" ""
-"Uniqname" "uid" 11111 "" ""
-"Title" title 11111 "" ""
-END
-# Match types
-"exactly matches" "(%a=%v))"
-"approximately matches" "(%a~=%v))"
-"starts with" "(%a=%v*))"
-"ends with" "(%a=*%v))"
-"contains" "(%a=*%v*))"
-END
-#
-#
-#
-Groups
-""
-"Search For:"
-"(&(objectClass=rfc822MailGroup)"
-"xax500"
-multilineDescription
-"Description"
-subtree
-"Common Name" cn 11111 "" ""
-"Description" multilineDescription 11101 "" ""
-"Owner" "owner" 00001 "owner" "Owner"
-"X.500 Member" "member" 00001 "" ""
-"E-Mail Member" "mail" 00101 "" ""
-END
-"exactly matches" "(%a=%v))"
-"approximately matches" "(%a~=%v))"
-"starts with" "(%a=%v*))"
-"ends with" "(%a=*%v))"
-"contains" "(%a=*%v*))"
-END
-#
-#
-#
-"Joinable Groups"
-""
-"Search For:"
-"(&(&(objectClass=rfc822MailGroup)(joinable=TRUE))"
-"xax500"
-multilineDescription
-"Description"
-subtree
-"Common Name" cn 11111 "" ""
-"Description" multilineDescription 11101 "" ""
-"Owner" "owner" 00001 "owner" "Owner"
-"X.500 Member" "member" 00001 "" ""
-"E-Mail Member" "mail" 00101 "" ""
-END
-"exactly matches" "(%a=%v))"
-"approximately matches" "(%a~=%v))"
-"starts with" "(%a=%v*))"
-"ends with" "(%a=*%v))"
-"contains" "(%a=*%v*))"
-END
-#
-#
-#
-Services
-""
-"Search For:"
-"(&(objectClass=service)"
-"xax500"
-multilineDescription
-"Description"
-subtree
-"Common Name" cn 11111 "" ""
-"Description" multilineDescription 11101 "" ""
-"Owner" "owner" 00001 "owner" "Owner"
-"Keywords" "keywords" 11111 "" ""
-"Hours" "hoursOfOperation" 11111 "" ""
-END
-"exactly matches" "(%a=%v))"
-"approximately matches" "(%a~=%v))"
-"starts with" "(%a=%v*))"
-"ends with" "(%a=*%v))"
-"contains" "(%a=*%v*))"
-END
-#
-#
-#
-Organizations
-""
-"Search For:"
-"(&(objectClass=organization)"
-"xax500"
-multilineDescription
-"Description"
-subtree
-"Name" organizationName 01111 "" ""
-"Location" localityName 11111 "" ""
-"Phone Number" "telephoneNumber" 10111 "" ""
-"Description" description 10111 "" ""
-END
-"exactly matches" "(%a=%v))"
-"approximately matches" "(%a~=%v))"
-"starts with" "(%a=%v*))"
-"ends with" "(%a=*%v))"
-"contains" "(%a=*%v*))"
-END
-#
-#
-#
-Documents
-""
-"Search For:"
-"(&(objectClass=document)"
-"xax500"
-multilineDescription
-"Description"
-subtree
-"Document Title" cn 11111 "" ""
-"Keyword" "keywords" 11111 "" ""
-"Category" "category" 11111 "" ""
-"Document Number" "documentIdentifier" 11111 "" ""
-END
-"exactly matches" "(%a=%v))"
-"approximately matches" "(%a~=%v))"
-"starts with" "(%a=%v*))"
-"ends with" "(%a=*%v))"
-"contains" "(%a=*%v*))"
-END
+++ /dev/null
-# $OpenLDAP$
-##########################################################################
-# LDAP display templates
-##########################################################################
-
-#
-# Version must be 1
-#
-Version 1
-
-##########################################################################
-# U-M Person template
-##########################################################################
-#
-# template name and plural name come first
-"U-M Person"
-"U-M People"
-
-# name of the icon that is associated with this template
-"person icon"
-
-# blank-separated list of template options ("" for none)
-# addable - end-user should be allowed to add these types of entries
-# modrdn - end-user can change the name of these entries
-# altview - this template is referred to in another template's
-# "linkact" item
-"addable"
-
-#
-# objectclass list
-umichPerson person
-END
-
-#
-# name of attribute to authenticate as ("" means auth as this entry)
-""
-
-#
-# default attribute name to use when forming RDN of a new entry
-#
-cn
-
-#
-# default location when adding new entries (DN; "" means no default)
-"o=University of Michigan, c=US"
-
-#
-# rules used to define default values for new entries
-END
-
-#
-#
-# list of items for display
-# each line is either:
-# item (type) (attribute) (attr name) (extra args...)
-# to define an item or
-# samerow
-# to keep the next item on the same row as the previous
-#
-# valid types are:
-# cis - case ignore string
-# mls - multiline string
-# dn -
-# mail - case ignore string that contains an RFC822 mail address
-# bool - boolean value
-# jpeg - inlined JPEG image
-# jpegbtn - JPEG image button
-# fax - inlined Fax image
-# faxbtn - Fax image button
-# audiobtn - audio button
-# time - time value
-# date - time value displayed as a date only
-# url - labeled URL for links to items in WWW
-# searchact - search action
-# linkact - link to another template
-#
-# valid options (comma separated list appended to the type) are:
-# ro - attribute is read only; don't let user edit it
-# sort - order the values of this attribute
-# 1val - disallow entry of multiple values
-# required - this attribute should have at least one value
-# hide - don't show this item if attribute has no values
-# hideiffalse - hide item if value is FALSE (for type 'bool' only)
-#
-item jpegbtn "View Photo" jpegPhoto "Next Photo"
-item audiobtn "Play Sound" audio
-item cis,ro,sort "Also Known As" cn
-item mail "E-Mail Address" mail
-item cis "Work Phone" telephoneNumber
-item cis "Fax Number" facsimileTelephoneNumber
-item cis "Pager Number" pager
-item mls "Work Address" postalAddress
-item cis,sort "Title" title
-item cis,ro "Uniqname" uid
-item mls "Description" multiLineDescription
-item cis "Home Phone" homePhone
-item mls "Home Address" homePostalAddress
-item url "More Info (URL)" labeledURL
-item dn,sort "See Also" seeAlso
-item cis "Favorite Beverage" drink
-item cis "Notice" notice
-item bool,hideiffalse "On Vacation" onVacation
-item mls,1val "Vacation Message" vacationMessage
-item bool,hideiffalse "Do Not Allow Updates" noBatchUpdates
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-item searchact "Find Groups Added To" "" "-dnt" "(&(objectclass=rfc822mailgroup)(member=%v))" "multiLineDescription" "Description" ""
-item searchact "List Owned Groups" "" "-dnt" "(&(objectclass=rfc822mailgroup)(owner=%v))" "title" "Title" ""
-item linkact "Other Addresses" "" "other addresses"
-END
-
-
-##########################################################################
-# Person template
-##########################################################################
-"Person"
-"People"
-"person icon"
-
-# template options
-addable
-#
-# objectclass list
-person
-END
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-#
-cn
-
-# default location when adding new entries
-""
-
-#
-# rules used to define default values for new entries
-END
-
-#
-# list of items for display
-item jpegbtn "View Photo" jpegPhoto "Next Photo"
-item audiobtn "Play Sound" audio
-item cis,sort "Also Known As" cn
-item cis,sort "Title" title
-item mls "Work Address" postalAddress
-item cis "Work Phone" telephoneNumber
-item cis "Fax Number" facsimileTelephoneNumber
-item cis "Pager Number" pager
-item mls "Home Address" homePostalAddress
-item cis "Home Phone" homePhone
-item cis "User ID" uid
-item mail "E-Mail Address" mail
-item cis "Description" description
-item cis "Favorite Beverage" drink
-item dn,sort "See Also" seeAlso
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-
-##########################################################################
-# Group template
-##########################################################################
-"Group"
-"Groups"
-"group icon"
-
-# template options
-addable modrdn
-
-# objectclass list
-rfc822MailGroup
-END
-
-# name of attribute to authenticate as
-"owner"
-
-# default attribute name to use when forming RDN of a new entry
-#
-cn
-
-# default location when adding new entries
-"ou=User Groups, ou=Groups, o=University of Michigan, c=US"
-
-#
-# rules used to define default values for new entries
-constant "associatedDomain" "umich.edu"
-constant "joinable" "FALSE"
-addersdn "owner"
-addersdn "member"
-addersdn "errorsTo"
-addersdn "requestsTo"
-END
-
-#
-#
-# list of items for display
-# each line is either:
-# item (type) (attribute) (attr name) (extra args...)
-# to define an item or
-# samerow
-#
-# list of items for display
-item cis,sort "Also Known As" cn
-item mls "Description" multiLineDescription
-item cis "Phone Number" telephoneNumber
-item cis "Fax Number" facsimileTelephoneNumber
-item mls "Address" postalAddress
-item dn,required,sort "Owner" owner
-item url "More Info (URL)" labeledURL
-item dn,sort "See Also" seeAlso
-item dn,sort "Errors To" errorsTo
-item dn,sort "Requests To" requestsTo
-item cis "Associated Domain" associatedDomain
-item cis "Moderator" moderator
-item bool "Suppress 'No E-Mail Address' Errors" suppressNoEmailError
-item bool "Others May Join" joinable
-item dn,sort "X.500 Members" member
-item mail,sort "E-Mail Errors To" rfc822ErrorsTo
-item mail,sort "E-Mail Requests To" rfc822RequestsTo
-item mail,sort "E-Mail Members" mail
-item cis "Notice" notice
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-item searchact "Subscribers" "" "-dnt" "memberOfGroup=%v" "title" "Title" "joinable"
-item verifyact "Verify Members" "member" "mail" "E-Mail Address"
-END
-
-##########################################################################
-# Organization template
-##########################################################################
-"Organization"
-"Organizations"
-"organization icon"
-
-# template options
-""
-
-# objectclass list
-organization
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-o
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-constant "o" "foo"
-END
-
-#
-#
-# list of items for display
-# each line is either:
-# item (type) (attribute) (attr name) (extra args...)
-# to define an item or
-# samerow
-#
-# list of items for display
-item cis,sort "Name" o
-item cis "Location" l
-item mls "Address" postalAddress
-item cis "Phone Number" telephoneNumber
-item cis "Fax Number" facsimileTelephoneNumber
-item cis "Description" description
-item dn,sort "See Also" seeAlso
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-
-##########################################################################
-# Service template
-##########################################################################
-"Service"
-"Services"
-"service icon"
-
-# template options
-"addable"
-
-# objectclass list
-service
-END
-
-# name of attribute to authenticate as
-"owner"
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-"ou=Services, o=University of Michigan, c=US"
-
-# rules used to define default values for new entries
-addersdn "owner"
-END
-
-#
-#
-# list of items for display
-# each line is either:
-# item (type) (attribute) (attr name) (extra args...)
-# to define an item or
-# samerow
-#
-# list of items for display
-item jpegbtn "View Photo" jpegPhoto
-item cis,sort "Name" cn
-item mls "Description" multilineDescription
-item cis "Provider" provider
-item cis,sort "Service Area" serviceArea
-item mail "E-mail Address" mail
-item cis "Phone" telephoneNumber
-item cis "Fax Number" facsimileTelephoneNumber
-item mls "Postal Address" postalAddress
-item cis "Hours" hoursOfOperation
-item url "More Info (URL)" labeledURL
-item dn,sort "Depends On" dependentUpon
-item dn,sort "See Also" seeAlso
-item cis,sort "Platform" platform
-item cis,sort "Product" product
-item cis,sort "Keywords" keywords
-item cis "FCE Rating" serviceRating
-item date "Date Rated" ratingTime
-item mls "Rating Description" ratingDescription
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-item dn,required,sort "Owner" owner
-END
-
-
-##########################################################################
-# Organizational Role template
-##########################################################################
-"Organizational Role"
-"Organizational Roles"
-"person icon"
-
-# template options
-""
-
-# objectclass list
-organizationalRole
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-#
-#
-# list of items for display
-# each line is either:
-# item (type) (attribute) (attr name) (extra args...)
-# to define an item or
-# samerow
-#
-# list of items for display
-item cis,sort "Name" cn
-item cis "Description" description
-item dn "Role Occupant" roleOccupant
-item dn,sort "See Also" seeAlso
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-
-##########################################################################
-# Organizational Unit template
-##########################################################################
-"Organizational Unit"
-"Organizational Units"
-"organization icon"
-
-# template options
-""
-
-# objectclass list
-organizationalUnit
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-# Item list
-item cis "Organization Unit Name" ou
-item cis "Title" title
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-
-
-##########################################################################
-# Application Entity template
-##########################################################################
-"Application Entity"
-"Application Entities"
-"application icon"
-
-# template options
-""
-
-# objectclass list
-applicationEntity
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-# Item list
-item cis,sort "Name" cn
-item cis "Location" l
-item cis "Description" description
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-##########################################################################
-# Document template
-##########################################################################
-"Document"
-"Documents"
-"document icon"
-
-# template options
-""
-
-# objectclass list
-document
-umichDocument
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-#
-# Item list
-item cis "Document ID" documentIdentifier
-item cis "Title" documentTitle
-item cis "Series Title" documentSeriesTitle
-item cis "Version" documentVersion
-item cis,sort "Service Area" serviceArea
-item mls "Abstract" multiLineAbstract
-item url "More Info (URL)" labeledURL
-item dn,sort "Availability" documentAvailable
-item dn,sort "See Also" seeAlso
-item cis,sort "Platform" platform
-item cis,sort "Product" product
-item cis,sort "Keyword" keywords
-item dn,sort "Author" documentAuthor
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-item dn,required "Owner" owner
-END
-
-##########################################################################
-# Document description template
-##########################################################################
-"DocumentDescription"
-"DocumentDescriptions"
-"document description icon"
-
-# template options
-""
-
-# objectclass list
-documentDescription
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-#
-# Item list
-item mls "Description" multilineDescription
-item url "More Info (URL)" labeledURL
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-item dn,required "Owner" owner
-END
-
-##########################################################################
-# Image template
-##########################################################################
-"Image"
-"Images"
-"image icon"
-
-# template options
-""
-
-# objectclass list
-image
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-cn
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-#
-# Item list
-item cis "Name" cn
-item mls "Description" multilineDescription
-item jpegbtn "View Photo(s)" jpegPhoto
-item cis "Citation" citation
-item cis "Copyright" copyright
-item cis "Keywords" keywords
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-item dn,required "Owner" owner
-END
-
-
-
-##########################################################################
-# Country template
-##########################################################################
-"Country"
-"Countries"
-"country icon"
-
-# template options
-""
-
-# objectclass list
-friendlyCountry
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-c
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-# Item list
-item cis "Country Name" co
-item cis "Country Code" c
-item cis "Description" description
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-##########################################################################
-# Locality template
-##########################################################################
-"Locality"
-"Localities"
-"locality icon"
-
-# template options
-""
-
-# objectclass list
-locality
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-l
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-#
-# Item list
-item cis "Name" l
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
-
-
-##########################################################################
-# "Other Addresses" template
-##########################################################################
-"Others Addresses"
-"Other Addresses"
-"other addr icon"
-
-# template options
-"altview"
-
-# objectclass list
-END
-
-# name of attribute to authenticate as
-""
-
-# default attribute name to use when forming RDN of a new entry
-""
-
-# default location when adding new entries
-""
-
-# rules used to define default values for new entries
-END
-
-# Item list
-item cis "Street Address" streetAddress
-item cis "Locality" l
-item cis "State or Province" st
-item cis "Postal Code" postalCode
-item cis,hide "X.400 Address" mhsORAddresses
-item cis,hide "X.400 Address" textEncodedORAddress
-Item cis "Other Mailbox" otherMailbox
-item time,ro "Last Modified" lastModifiedTime
-item dn,ro "Modified By" lastModifiedBy
-END
+++ /dev/null
-/* $OpenLDAP$ */
-/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- */
-/* Portions
- * Copyright (c) 1993, 1994 Regents of the University of Michigan.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of Michigan at Ann Arbor. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific prior written permission. This software
- * is provided ``as is'' without express or implied warranty.
- *
- * searchpref.c: search preferences library routines for LDAP clients
- * 17 May 1994 by Gordon Good
- */
-
-#include "portable.h"
-
-#include <stdio.h>
-
-#include <ac/stdlib.h>
-
-#include <ac/ctype.h>
-#include <ac/string.h>
-#include <ac/time.h>
-#include <ac/unistd.h>
-
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h>
-#endif
-
-#include "ldap-int.h"
-#include "srchpref.h"
-
-#include "ldap-int.h"
-
-static void free_searchobj LDAP_P(( struct ldap_searchobj *so ));
-static int read_next_searchobj LDAP_P(( char **bufp, ber_len_t *blenp,
- struct ldap_searchobj **sop, int soversion ));
-
-
-static const char *const sobjoptions[] = {
- "internal",
- NULL
-};
-
-
-static const unsigned long sobjoptvals[] = {
- LDAP_SEARCHOBJ_OPT_INTERNAL,
-};
-
-
-int
-ldap_init_searchprefs( char *file, struct ldap_searchobj **solistp )
-{
- FILE *fp;
- char *buf;
- long rlen, len;
- int rc, eof;
-
- if (( fp = fopen( file, "r" )) == NULL ) {
- return( LDAP_SEARCHPREF_ERR_FILE );
- }
-
- if ( fseek( fp, 0L, SEEK_END ) != 0 ) { /* move to end to get len */
- fclose( fp );
- return( LDAP_SEARCHPREF_ERR_FILE );
- }
-
- len = ftell( fp );
-
- if ( fseek( fp, 0L, SEEK_SET ) != 0 ) { /* back to start of file */
- fclose( fp );
- return( LDAP_SEARCHPREF_ERR_FILE );
- }
-
- if (( buf = LDAP_MALLOC( (size_t)len )) == NULL ) {
- fclose( fp );
- return( LDAP_SEARCHPREF_ERR_MEM );
- }
-
- rlen = fread( buf, 1, (size_t)len, fp );
- eof = feof( fp );
- fclose( fp );
-
- if ( rlen != len && !eof ) { /* error: didn't get the whole file */
- LDAP_FREE( buf );
- return( LDAP_SEARCHPREF_ERR_FILE );
- }
-
- rc = ldap_init_searchprefs_buf( buf, rlen, solistp );
- LDAP_FREE( buf );
-
- return( rc );
-}
-
-
-int
-ldap_init_searchprefs_buf(
- char *buf,
- ber_len_t buflen,
- struct ldap_searchobj **solistp )
-{
- int rc = -1, version;
- char **toks;
- struct ldap_searchobj *prevso, *so;
-
- *solistp = prevso = NULL;
-
- if ( ldap_int_next_line_tokens( &buf, &buflen, &toks ) != 2 ||
- strcasecmp( toks[ 0 ], "version" ) != 0 ) {
- LDAP_VFREE( toks );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- version = atoi( toks[ 1 ] );
- LDAP_VFREE( toks );
- if ( version != LDAP_SEARCHPREF_VERSION &&
- version != LDAP_SEARCHPREF_VERSION_ZERO ) {
- return( LDAP_SEARCHPREF_ERR_VERSION );
- }
-
- while ( buflen > 0 && ( rc = read_next_searchobj( &buf, &buflen, &so,
- version )) == 0 && so != NULL ) {
- if ( prevso == NULL ) {
- *solistp = so;
- } else {
- prevso->so_next = so;
- }
- prevso = so;
- }
-
- if ( rc != 0 ) {
- ldap_free_searchprefs( *solistp );
- }
-
- return( rc );
-}
-
-
-
-void
-ldap_free_searchprefs( struct ldap_searchobj *solist )
-{
- struct ldap_searchobj *so, *nextso;
-
- if ( solist != NULL ) {
- for ( so = solist; so != NULL; so = nextso ) {
- nextso = so->so_next;
- free_searchobj( so );
- }
- }
- /* XXX XXX need to do some work here */
-}
-
-
-static void
-free_searchobj( struct ldap_searchobj *so )
-{
- if ( so != NULL ) {
- if ( so->so_objtypeprompt != NULL ) {
- LDAP_FREE( so->so_objtypeprompt );
- }
- if ( so->so_prompt != NULL ) {
- LDAP_FREE( so->so_prompt );
- }
- if ( so->so_filterprefix != NULL ) {
- LDAP_FREE( so->so_filterprefix );
- }
- if ( so->so_filtertag != NULL ) {
- LDAP_FREE( so->so_filtertag );
- }
- if ( so->so_defaultselectattr != NULL ) {
- LDAP_FREE( so->so_defaultselectattr );
- }
- if ( so->so_defaultselecttext != NULL ) {
- LDAP_FREE( so->so_defaultselecttext );
- }
- if ( so->so_salist != NULL ) {
- struct ldap_searchattr *sa, *nextsa;
- for ( sa = so->so_salist; sa != NULL; sa = nextsa ) {
- nextsa = sa->sa_next;
- if ( sa->sa_attrlabel != NULL ) {
- LDAP_FREE( sa->sa_attrlabel );
- }
- if ( sa->sa_attr != NULL ) {
- LDAP_FREE( sa->sa_attr );
- }
- if ( sa->sa_selectattr != NULL ) {
- LDAP_FREE( sa->sa_selectattr );
- }
- if ( sa->sa_selecttext != NULL ) {
- LDAP_FREE( sa->sa_selecttext );
- }
- LDAP_FREE( sa );
- }
- }
- if ( so->so_smlist != NULL ) {
- struct ldap_searchmatch *sm, *nextsm;
- for ( sm = so->so_smlist; sm != NULL; sm = nextsm ) {
- nextsm = sm->sm_next;
- if ( sm->sm_matchprompt != NULL ) {
- LDAP_FREE( sm->sm_matchprompt );
- }
- if ( sm->sm_filter != NULL ) {
- LDAP_FREE( sm->sm_filter );
- }
- LDAP_FREE( sm );
- }
- }
- LDAP_FREE( so );
- }
-}
-
-
-
-struct ldap_searchobj *
-ldap_first_searchobj( struct ldap_searchobj *solist )
-{
- return( solist );
-}
-
-
-struct ldap_searchobj *
-ldap_next_searchobj( struct ldap_searchobj *solist, struct ldap_searchobj *so )
-{
- return( so == NULL ? so : so->so_next );
-}
-
-
-
-static int
-read_next_searchobj(
- char **bufp,
- ber_len_t *blenp,
- struct ldap_searchobj **sop,
- int soversion )
-{
- int i, j, tokcnt;
- char **toks;
- struct ldap_searchobj *so;
- struct ldap_searchattr **sa;
- struct ldap_searchmatch **sm;
-
- *sop = NULL;
-
- /*
- * Object type prompt comes first
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- return( tokcnt == 0 ? 0 : LDAP_SEARCHPREF_ERR_SYNTAX );
- }
-
- if (( so = (struct ldap_searchobj *)LDAP_CALLOC( 1,
- sizeof( struct ldap_searchobj ))) == NULL ) {
- LDAP_VFREE( toks );
- return( LDAP_SEARCHPREF_ERR_MEM );
- }
- so->so_objtypeprompt = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * if this is post-version zero, options come next
- */
- if ( soversion > LDAP_SEARCHPREF_VERSION_ZERO ) {
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) < 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- for ( i = 0; toks[ i ] != NULL; ++i ) {
- for ( j = 0; sobjoptions[ j ] != NULL; ++j ) {
- if ( strcasecmp( toks[ i ], sobjoptions[ j ] ) == 0 ) {
- so->so_options |= sobjoptvals[ j ];
- }
- }
- }
- LDAP_VFREE( toks );
- }
-
- /*
- * "Fewer choices" prompt is next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- so->so_prompt = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * Filter prefix for "More Choices" searching is next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- so->so_filterprefix = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * "Fewer Choices" filter tag comes next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- so->so_filtertag = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * Selection (disambiguation) attribute comes next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- so->so_defaultselectattr = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * Label for selection (disambiguation) attribute
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- so->so_defaultselecttext = toks[ 0 ];
- LDAP_FREE( (char *)toks );
-
- /*
- * Search scope is next
- */
- if (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) != 1 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- if ( !strcasecmp(toks[ 0 ], "subtree" )) {
- so->so_defaultscope = LDAP_SCOPE_SUBTREE;
- } else if ( !strcasecmp(toks[ 0 ], "onelevel" )) {
- so->so_defaultscope = LDAP_SCOPE_ONELEVEL;
- } else if ( !strcasecmp(toks[ 0 ], "base" )) {
- so->so_defaultscope = LDAP_SCOPE_BASE;
- } else {
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- LDAP_VFREE( toks );
-
-
- /*
- * "More Choices" search option list comes next
- */
- sa = &( so->so_salist );
- while (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) > 0 ) {
- if ( tokcnt < 5 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- if (( *sa = ( struct ldap_searchattr * ) LDAP_CALLOC( 1,
- sizeof( struct ldap_searchattr ))) == NULL ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_MEM );
- }
- ( *sa )->sa_attrlabel = toks[ 0 ];
- ( *sa )->sa_attr = toks[ 1 ];
- ( *sa )->sa_selectattr = toks[ 3 ];
- ( *sa )->sa_selecttext = toks[ 4 ];
- /* Deal with bitmap */
- ( *sa )->sa_matchtypebitmap = 0;
- for ( i = strlen( toks[ 2 ] ) - 1, j = 0; i >= 0; i--, j++ ) {
- if ( toks[ 2 ][ i ] == '1' ) {
- ( *sa )->sa_matchtypebitmap |= (1 << j);
- }
- }
- LDAP_FREE( toks[ 2 ] );
- LDAP_FREE( ( char * ) toks );
- sa = &(( *sa )->sa_next);
- }
- *sa = NULL;
-
- /*
- * Match types are last
- */
- sm = &( so->so_smlist );
- while (( tokcnt = ldap_int_next_line_tokens( bufp, blenp, &toks )) > 0 ) {
- if ( tokcnt < 2 ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_SYNTAX );
- }
- if (( *sm = ( struct ldap_searchmatch * ) LDAP_CALLOC( 1,
- sizeof( struct ldap_searchmatch ))) == NULL ) {
- LDAP_VFREE( toks );
- ldap_free_searchprefs( so );
- return( LDAP_SEARCHPREF_ERR_MEM );
- }
- ( *sm )->sm_matchprompt = toks[ 0 ];
- ( *sm )->sm_filter = toks[ 1 ];
- LDAP_FREE( ( char * ) toks );
- sm = &(( *sm )->sm_next );
- }
- *sm = NULL;
-
- *sop = so;
- return( 0 );
-}
+++ /dev/null
-/* $OpenLDAP$ */
-/*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
- */
-#include "portable.h"
-
-#include <stdio.h>
-
-#include <ac/stdlib.h>
-
-#include <ac/socket.h>
-#include <ac/time.h>
-
-#ifdef HAVE_CONSOLE_H
-#include <console.h>
-#endif /* HAVE_CONSOLE_H */
-
-#include <ldap.h>
-#include <disptmpl.h>
-#include <srchpref.h>
-
-static void dump_tmpl ( struct ldap_disptmpl *tmpl );
-static void dump_srchpref( struct ldap_searchobj *sp );
-
-#define NULLSTRINGIFNULL( s ) ( (s) == NULL ? "(null)" : (s) )
-
-int
-main( int argc, char **argv )
-{
- struct ldap_disptmpl *templates, *dtp;
- struct ldap_searchobj *so, *sop;
- int err;
-
-#ifdef HAVE_CONSOLE_H
- ccommand( &argv );
- for ( argc = 0; argv[ argc ] != NULL; ++argc ) {
- ;
- }
- cshow( stdout );
-#endif /* MACOS */
-
- if (( err = ldap_init_templates( "ldaptemplates.conf", &templates ))
- != 0 ) {
- fprintf( stderr, "ldap_init_templates failed (%d)\n", err );
- exit( EXIT_FAILURE );
- }
-
- if (( err = ldap_init_searchprefs( "ldapsearchprefs.conf", &so ))
- != 0 ) {
- fprintf( stderr, "ldap_init_searchprefs failed (%d)\n", err );
- exit( EXIT_FAILURE );
- }
-
- if ( argc == 1 ) {
- printf( "*** Display Templates:\n" );
- for ( dtp = ldap_first_disptmpl( templates ); dtp != NULL;
- dtp = ldap_next_disptmpl( templates, dtp )) {
- dump_tmpl( dtp );
- printf( "\n\n" );
- }
-
- printf( "\n\n*** Search Objects:\n" );
- for ( sop = ldap_first_searchobj( so ); sop != NULL;
- sop = ldap_next_searchobj( so, sop )) {
- dump_srchpref( sop );
- printf( "\n\n" );
- }
-
- } else {
- if (( dtp = ldap_oc2template( ++argv, templates )) == NULL ) {
- fprintf( stderr, "no matching template found\n" );
- } else {
- dump_tmpl( dtp );
- }
- }
-
-
- ldap_free_templates( templates );
- ldap_free_searchprefs( so );
-
- exit( EXIT_SUCCESS );
-}
-
-
-static const char *const syn_name[] = {
- "?", "CIS", "MLS", "DN", "BOOL", "JPEG", "JPEGBTN", "FAX", "FAXBTN",
- "AUDIOBTN", "TIME", "DATE", "URL", "SEARCHACT", "LINKACT", "ADDDNACT",
- "VERIFYACT",
-};
-
-static const char *const syn_type[] = {
- "?", "txt", "img", "?", "bool", "?", "?", "?", "btn",
- "?", "?", "?", "?", "?", "?", "?",
- "action", "?"
-};
-
-static char *includeattrs[] = { "objectClass", "sn", NULL };
-
-static const char *const item_opts[] = {
- "ro", "sort", "1val", "hide", "required", "hideiffalse", NULL
-};
-
-static const unsigned long item_opt_vals[] = {
- LDAP_DITEM_OPT_READONLY, LDAP_DITEM_OPT_SORTVALUES,
- LDAP_DITEM_OPT_SINGLEVALUED, LDAP_DITEM_OPT_HIDEIFEMPTY,
- LDAP_DITEM_OPT_VALUEREQUIRED, LDAP_DITEM_OPT_HIDEIFFALSE,
-};
-
-
-static void
-dump_tmpl( struct ldap_disptmpl *tmpl )
-{
- struct ldap_tmplitem *rowp, *colp;
- int i, rowcnt, colcnt;
- char **fetchattrs;
- struct ldap_oclist *ocp;
- struct ldap_adddeflist *adp;
-
- printf( "** Template \"%s\" (plural \"%s\", icon \"%s\")\n",
- NULLSTRINGIFNULL( tmpl->dt_name ),
- NULLSTRINGIFNULL( tmpl->dt_pluralname ),
- NULLSTRINGIFNULL( tmpl->dt_iconname ));
-
- printf( "object class list:\n" );
- for ( ocp = tmpl->dt_oclist; ocp != NULL; ocp = ocp->oc_next ) {
- for ( i = 0; ocp->oc_objclasses[ i ] != NULL; ++i ) {
- printf( "%s%s", i == 0 ? " " : " & ",
- NULLSTRINGIFNULL( ocp->oc_objclasses[ i ] ));
- }
- putchar( '\n' );
- }
- putchar( '\n' );
-
- printf( "template options: " );
- if ( tmpl->dt_options == 0L ) {
- printf( "NONE\n" );
- } else {
- printf( "%s %s %s\n", LDAP_IS_DISPTMPL_OPTION_SET( tmpl,
- LDAP_DTMPL_OPT_ADDABLE ) ? "addable" : "",
- LDAP_IS_DISPTMPL_OPTION_SET( tmpl, LDAP_DTMPL_OPT_ALLOWMODRDN )
- ? "modrdn" : "",
- LDAP_IS_DISPTMPL_OPTION_SET( tmpl, LDAP_DTMPL_OPT_ALTVIEW )
- ? "altview" : "" );
- }
-
- printf( "authenticate as attribute: %s\n", tmpl->dt_authattrname != NULL ?
- tmpl->dt_authattrname : "<default>" );
-
- printf( "default RDN attribute: %s\n", tmpl->dt_defrdnattrname != NULL ?
- tmpl->dt_defrdnattrname : "NONE" );
-
- printf( "default add location: %s\n", tmpl->dt_defaddlocation != NULL ?
- tmpl->dt_defaddlocation : "NONE" );
-
- printf( "\nnew entry value default rules:\n" );
- for ( adp = tmpl->dt_adddeflist; adp != NULL; adp = adp->ad_next ) {
- if ( adp->ad_source == LDAP_ADSRC_CONSTANTVALUE ) {
- printf( " attribute %s <-- constant value \"%s\"\n",
- NULLSTRINGIFNULL( adp->ad_attrname),
- NULLSTRINGIFNULL( adp->ad_value ));
- } else {
- printf( " attribute %s <-- adder's DN\n",
- NULLSTRINGIFNULL( adp->ad_attrname ));
- }
- }
- putchar( '\n' );
-
- printf( "\nfetch attributes & values:\n" );
- if (( fetchattrs = ldap_tmplattrs( tmpl, includeattrs, 1,
- LDAP_SYN_OPT_DEFER )) == NULL ) {
- printf( " <none>\n" );
- } else {
- for ( i = 0; fetchattrs[ i ] != NULL; ++i ) {
- printf( " %s\n", fetchattrs[ i ] );
- free( fetchattrs[ i ] );
- }
- free( (char *)fetchattrs );
- }
-
- printf( "\nfetch attributes only:\n" );
- if (( fetchattrs = ldap_tmplattrs( tmpl, NULL, 0,
- LDAP_SYN_OPT_DEFER )) == NULL ) {
- printf( " <none>\n" );
- } else {
- for ( i = 0; fetchattrs[ i ] != NULL; ++i ) {
- printf( " %s\n", fetchattrs[ i ] );
- free( fetchattrs[ i ] );
- }
- free( (char *)fetchattrs );
- }
-
- printf( "\ntemplate items:\n" );
- rowcnt = 0;
- for ( rowp = ldap_first_tmplrow( tmpl ); rowp != NULL;
- rowp = ldap_next_tmplrow( tmpl, rowp )) {
- ++rowcnt;
- colcnt = 0;
- for ( colp = ldap_first_tmplcol( tmpl, rowp ); colp != NULL;
- colp = ldap_next_tmplcol( tmpl, rowp, colp )) {
- ++colcnt;
- printf( " %2d-%d: %s (%s%s", rowcnt, colcnt,
- syn_name[ colp->ti_syntaxid & 0x0000FFFF ],
- syn_type[ LDAP_GET_SYN_TYPE( colp->ti_syntaxid ) >> 24 ],
- (( LDAP_GET_SYN_OPTIONS( colp->ti_syntaxid ) &
- LDAP_SYN_OPT_DEFER ) != 0 ) ? ",defer" : "" );
-
- for ( i = 0; item_opts[ i ] != NULL; ++i ) {
- if ( LDAP_IS_TMPLITEM_OPTION_SET( colp, item_opt_vals[ i ] )) {
- printf( ",%s", NULLSTRINGIFNULL( item_opts[ i ] ));
- }
- }
-
- printf( "), %s, %s", NULLSTRINGIFNULL( colp->ti_attrname ),
- NULLSTRINGIFNULL( colp->ti_label ));
- if ( colp->ti_args != NULL ) {
- printf( ",args=" );
- for ( i = 0; colp->ti_args[ i ] != NULL; ++i ) {
- printf( "<%s>", NULLSTRINGIFNULL( colp->ti_args[ i ] ));
- }
- }
-
- putchar( '\n' );
- }
- }
-}
-
-
-static void
-dump_srchpref( struct ldap_searchobj *so )
-{
- int i;
- struct ldap_searchattr *sa;
- struct ldap_searchmatch *sm;
-
- printf( "Object type prompt: %s\n",
- NULLSTRINGIFNULL( so->so_objtypeprompt ));
- printf( "Options: %s\n",
- LDAP_IS_SEARCHOBJ_OPTION_SET( so, LDAP_SEARCHOBJ_OPT_INTERNAL ) ?
- "internal" : "NONE" );
- printf( "Prompt: %s\n", NULLSTRINGIFNULL( so->so_prompt ));
- printf( "Scope: " );
- switch ( so->so_defaultscope ) {
- case LDAP_SCOPE_BASE:
- printf( "LDAP_SCOPE_BASE" );
- break;
- case LDAP_SCOPE_ONELEVEL:
- printf( "LDAP_SCOPE_ONELEVEL" );
- break;
- case LDAP_SCOPE_SUBTREE:
- printf( "LDAP_SCOPE_SUBTREE" );
- break;
- default:
- printf("*** unknown!" );
- }
- puts( "\n" );
- printf( "Filter prefix: %s\n",
- NULLSTRINGIFNULL( so->so_filterprefix ));
- printf( "Filter tag: %s\n",
- NULLSTRINGIFNULL( so->so_filtertag ));
- printf( "Default select attr: %s\n",
- NULLSTRINGIFNULL( so->so_defaultselectattr ));
- printf( "Default select text: %s\n",
- NULLSTRINGIFNULL( so->so_defaultselecttext ));
- printf( "Searchable attributes ---- \n" );
- for ( sa = so->so_salist; sa != NULL; sa = sa->sa_next ) {
- printf( " Label: %s\n", NULLSTRINGIFNULL( sa->sa_attrlabel ));
- printf( " Attribute: %s\n", NULLSTRINGIFNULL( sa->sa_attr ));
- printf( " Select attr: %s\n", NULLSTRINGIFNULL( sa->sa_selectattr ));
- printf( " Select text: %s\n", NULLSTRINGIFNULL( sa->sa_selecttext ));
- printf( " Match types ---- \n" );
- for ( i = 0, sm = so->so_smlist; sm != NULL; i++, sm = sm->sm_next ) {
- if (( sa->sa_matchtypebitmap >> i ) & 1 ) {
- printf( " %s (%s)\n",
- NULLSTRINGIFNULL( sm->sm_matchprompt ),
- NULLSTRINGIFNULL( sm->sm_filter ));
- }
- }
- }
-}
bind.c controls.c open.c result.c error.c compare.c search.c \
modify.c add.c modrdn.c delete.c abandon.c cache.c cyrus.c \
getfilter.c sasl.c sbind.c kbind.c unbind.c \
- free.c disptmpl.c srchpref.c dsparse.c tmplout.c sort.c \
+ free.c tmplout.c sort.c \
getdn.c getentry.c getattr.c getvalues.c addentry.c \
request.c os-ip.c url.c sortctrl.c vlvctrl.c \
init.c options.c print.c string.c util-int.c schema.c \
bind.lo controls.lo open.lo result.lo error.lo compare.lo search.lo \
modify.lo add.lo modrdn.lo delete.lo abandon.lo cache.lo cyrus.lo \
getfilter.lo sasl.lo sbind.lo kbind.lo unbind.lo \
- free.lo disptmpl.lo srchpref.lo dsparse.lo tmplout.lo sort.lo \
+ free.lo tmplout.lo sort.lo \
getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \
request.lo os-ip.lo url.lo sortctrl.lo vlvctrl.lo \
init.lo options.lo print.lo string.lo util-int.lo schema.lo \
$(LTLINK) -o $@ apitest.o $(LIBS)
ltest: $(LIBRARY) test.o $(LDAP_LIBLBER_DEPEND)
$(LTLINK) -o $@ test.o $(LIBS)
-ttest: $(LIBRARY) tmpltest.o $(LDAP_LIBLBER_DEPEND)
- $(LTLINK) -o $@ tmpltest.o $(LIBS)
install-local: $(CFFILES) FORCE
-$(MKDIR) $(DESTDIR)$(libdir)