From 6d6766c7db312fff139d25dba62c1d3034a99b71 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Sun, 9 Feb 2003 17:31:35 +0000 Subject: [PATCH] First round of imports from HEAD --- configure.in | 2 +- doc/man/man5/slapd.access.5 | 6 + doc/man/man5/slapd.conf.5 | 4 +- include/portable.h.in | 30 +- servers/slapd/Makefile.in | 4 +- servers/slapd/abandon.c | 4 +- servers/slapd/acl.c | 44 +- servers/slapd/aclparse.c | 8 +- servers/slapd/ad.c | 331 +++++--- servers/slapd/add.c | 132 ++- servers/slapd/at.c | 65 +- servers/slapd/back-bdb/Makefile.in | 4 +- servers/slapd/back-bdb/add.c | 11 +- servers/slapd/back-bdb/attr.c | 18 +- servers/slapd/back-bdb/attribute.c | 27 +- servers/slapd/back-bdb/back-bdb.h | 11 +- servers/slapd/back-bdb/bind.c | 4 +- servers/slapd/back-bdb/cache.c | 28 +- servers/slapd/back-bdb/delete.c | 13 +- servers/slapd/back-bdb/dn2id.c | 106 ++- servers/slapd/back-bdb/external.h | 4 +- servers/slapd/back-bdb/filterindex.c | 206 +++-- servers/slapd/back-bdb/group.c | 23 +- servers/slapd/back-bdb/id2entry.c | 3 +- servers/slapd/back-bdb/idl.c | 191 ++++- servers/slapd/back-bdb/index.c | 20 +- servers/slapd/back-bdb/init.c | 29 +- servers/slapd/back-bdb/modify.c | 37 +- servers/slapd/back-bdb/modrdn.c | 25 +- servers/slapd/back-bdb/operational.c | 3 +- servers/slapd/back-bdb/passwd.c | 5 +- servers/slapd/back-bdb/proto-bdb.h | 70 +- servers/slapd/back-bdb/{lcup.c => psearch.c} | 503 ++++++------ servers/slapd/back-bdb/search.c | 794 +++++++++++++++---- servers/slapd/back-ldap/add.c | 7 +- servers/slapd/back-ldap/attribute.c | 139 ++++ servers/slapd/back-ldap/back-ldap.h | 8 +- servers/slapd/back-ldap/compare.c | 23 +- servers/slapd/back-ldap/config.c | 6 +- servers/slapd/back-ldap/group.c | 12 +- servers/slapd/back-ldap/init.c | 14 +- servers/slapd/back-ldap/map.c | 13 +- servers/slapd/back-ldap/modify.c | 7 +- servers/slapd/back-ldap/search.c | 15 +- servers/slapd/back-ldap/unbind.c | 2 +- servers/slapd/back-ldbm/attr.c | 18 +- servers/slapd/back-ldbm/bind.c | 4 +- servers/slapd/back-ldbm/cache.c | 24 +- servers/slapd/back-ldbm/dbcache.c | 4 +- servers/slapd/back-ldbm/external.h | 4 +- servers/slapd/back-ldbm/filterindex.c | 10 +- servers/slapd/back-ldbm/idl.c | 4 +- servers/slapd/back-ldbm/index.c | 20 +- servers/slapd/back-ldbm/init.c | 4 +- servers/slapd/back-ldbm/modify.c | 10 +- servers/slapd/back-ldbm/proto-back-ldbm.h | 212 +++-- servers/slapd/back-meta/add.c | 6 +- servers/slapd/back-meta/attribute.c | 207 +++++ servers/slapd/back-meta/back-meta.h | 5 +- servers/slapd/back-meta/bind.c | 28 +- servers/slapd/back-meta/compare.c | 34 +- servers/slapd/back-meta/config.c | 43 +- servers/slapd/back-meta/conn.c | 18 +- servers/slapd/back-meta/group.c | 10 +- servers/slapd/back-meta/init.c | 15 +- servers/slapd/back-meta/modify.c | 7 +- servers/slapd/back-meta/search.c | 33 +- servers/slapd/back-monitor/database.c | 13 +- servers/slapd/back-perl/README | 25 + servers/slapd/back-sql/entry-id.c | 8 +- servers/slapd/back-sql/schema-map.c | 48 +- servers/slapd/back-sql/search.c | 8 +- servers/slapd/back-sql/sql-wrap.c | 11 +- servers/slapd/backend.c | 57 +- servers/slapd/backglue.c | 46 +- servers/slapd/bind.c | 106 ++- servers/slapd/cancel.c | 134 ++++ servers/slapd/compare.c | 51 +- servers/slapd/config.c | 104 ++- servers/slapd/connection.c | 94 ++- servers/slapd/controls.c | 442 +++++++++-- servers/slapd/cr.c | 65 +- servers/slapd/daemon.c | 27 +- servers/slapd/delete.c | 47 +- servers/slapd/entry.c | 8 +- servers/slapd/extended.c | 147 +++- servers/slapd/filter.c | 235 +++--- servers/slapd/filterentry.c | 6 +- servers/slapd/index.c | 42 + servers/slapd/init.c | 61 +- servers/slapd/limits.c | 4 +- servers/slapd/main.c | 23 +- servers/slapd/matchedValues.c | 46 +- servers/slapd/modify.c | 104 ++- servers/slapd/modrdn.c | 51 +- servers/slapd/mods.c | 93 ++- servers/slapd/module.c | 2 +- servers/slapd/mr.c | 69 +- servers/slapd/oc.c | 47 +- servers/slapd/oidm.c | 20 +- servers/slapd/operation.c | 30 +- servers/slapd/proto-slap.h | 80 +- servers/slapd/result.c | 262 ++++-- servers/slapd/root_dse.c | 14 +- servers/slapd/sasl.c | 549 ++++++------- servers/slapd/saslauthz.c | 243 +++--- servers/slapd/schema_check.c | 54 +- servers/slapd/schema_init.c | 6 +- servers/slapd/schema_prep.c | 83 +- servers/slapd/search.c | 254 +++++- servers/slapd/sets.h | 32 + servers/slapd/slap.h | 318 ++++++-- servers/slapd/syntax.c | 48 +- servers/slapd/tools/Makefile.in | 7 +- servers/slapd/tools/mimic.c | 52 +- servers/slapd/tools/slapcommon.c | 11 +- 116 files changed, 5869 insertions(+), 2149 deletions(-) rename servers/slapd/back-bdb/{lcup.c => psearch.c} (68%) create mode 100644 servers/slapd/back-ldap/attribute.c create mode 100644 servers/slapd/back-meta/attribute.c create mode 100644 servers/slapd/back-perl/README create mode 100644 servers/slapd/cancel.c create mode 100644 servers/slapd/index.c create mode 100644 servers/slapd/sets.h diff --git a/configure.in b/configure.in index 27881b66f8..96bc4dab20 100644 --- a/configure.in +++ b/configure.in @@ -632,7 +632,7 @@ AC_LIBTOOL_DLOPEN AC_PROG_LIBTOOL LTSTATIC="" -if test -z "$LTDYNAMIC" -a "${OPENLDAP_CVS}"; then +if test -z "$LTDYNAMIC"; then LTSTATIC="-static" fi AC_SUBST(LTSTATIC)dnl diff --git a/doc/man/man5/slapd.access.5 b/doc/man/man5/slapd.access.5 index c889bcc332..0ef8ab6e7b 100644 --- a/doc/man/man5/slapd.access.5 +++ b/doc/man/man5/slapd.access.5 @@ -266,6 +266,12 @@ pattern, or its trailing part, after a exactly matches the .BR domain pattern. +The +.B domain +of the contacting host is determined by performing a DNS reverse lookup. +As this lookup can easily be spoofed, use of the +.B domain +statement is strongly discouraged. By default, reverse lookups are disabled. .LP The statement .B set= diff --git a/doc/man/man5/slapd.conf.5 b/doc/man/man5/slapd.conf.5 index 80de15be08..dba57ff642 100644 --- a/doc/man/man5/slapd.conf.5 +++ b/doc/man/man5/slapd.conf.5 @@ -520,8 +520,8 @@ may be used to require no conditions (useful for clearly globally set conditions within a particular database). .TP .B reverse-lookup on | off -Enable/disable client name reverse lookup (default is -.BR on +Enable/disable client name unverified reverse lookup (default is +.BR off if compiled with --enable-rlookups). .TP .B rootDSE diff --git a/include/portable.h.in b/include/portable.h.in index 7efd54231b..4cd1077cd3 100644 --- a/include/portable.h.in +++ b/include/portable.h.in @@ -164,6 +164,9 @@ /* Define if you have the getpassphrase function. */ #undef HAVE_GETPASSPHRASE +/* Define if you have the getpeereid function. */ +#undef HAVE_GETPEEREID + /* Define if you have the getpwnam function. */ #undef HAVE_GETPWNAM @@ -233,6 +236,9 @@ /* Define if you have the send function. */ #undef HAVE_SEND +/* Define if you have the sendmsg function. */ +#undef HAVE_SENDMSG + /* Define if you have the sendto function. */ #undef HAVE_SENDTO @@ -542,6 +548,9 @@ /* Define if you have the header file. */ #undef HAVE_SYS_TYPES_H +/* Define if you have the header file. */ +#undef HAVE_SYS_UCRED_H + /* Define if you have the header file. */ #undef HAVE_SYS_UN_H @@ -695,15 +704,6 @@ /* define to support LAN Manager passwords */ #undef SLAPD_LMHASH -/* set to the number of arguments ctime_r() expects */ -#undef CTIME_R_NARGS - -/* set to the number of arguments gethostbyname_r() expects */ -#undef GETHOSTBYNAME_R_NARGS - -/* set to the number of arguments gethostbyaddr_r() expects */ -#undef GETHOSTBYADDR_R_NARGS - /* if you have NT Threads */ #undef HAVE_NT_THREADS @@ -746,6 +746,15 @@ /* define if you have (or want) no threads */ #undef NO_THREADS +/* set to the number of arguments ctime_r() expects */ +#undef CTIME_R_NARGS + +/* set to the number of arguments gethostbyname_r() expects */ +#undef GETHOSTBYNAME_R_NARGS + +/* set to the number of arguments gethostbyaddr_r() expects */ +#undef GETHOSTBYADDR_R_NARGS + /* define if Berkeley DB has DB_THREAD support */ #undef HAVE_BERKELEY_DB_THREAD @@ -887,9 +896,6 @@ /* define this to add syslog code */ #undef LDAP_SYSLOG -/* define this to remove -lldap cache support */ -#undef LDAP_NOCACHE - /* define this for LDAP process title support */ #undef LDAP_PROCTITLE diff --git a/servers/slapd/Makefile.in b/servers/slapd/Makefile.in index 717b91dc70..e3e1ae3e56 100644 --- a/servers/slapd/Makefile.in +++ b/servers/slapd/Makefile.in @@ -19,7 +19,7 @@ SRCS = main.c daemon.c connection.c search.c filter.c add.c cr.c \ schemaparse.c ad.c at.c mr.c syntax.c oc.c saslauthz.c \ oidm.c starttls.c index.c sets.c referral.c \ root_dse.c sasl.c module.c suffixalias.c mra.c mods.c \ - limits.c backglue.c operational.c matchedValues.c \ + limits.c backglue.c operational.c matchedValues.c cancel.c \ $(@PLAT@_SRCS) OBJS = main.o daemon.o connection.o search.o filter.o add.o cr.o \ @@ -32,7 +32,7 @@ OBJS = main.o daemon.o connection.o search.o filter.o add.o cr.o \ schemaparse.o ad.o at.o mr.o syntax.o oc.o saslauthz.o \ oidm.o starttls.o index.o sets.o referral.o \ root_dse.o sasl.o module.o suffixalias.o mra.o mods.o \ - limits.o backglue.o operational.o matchedValues.o \ + limits.o backglue.o operational.o matchedValues.o cancel.o \ $(@PLAT@_OBJS) LDAP_INCDIR= ../../include diff --git a/servers/slapd/abandon.c b/servers/slapd/abandon.c index 5f2ac08275..33bd0ab159 100644 --- a/servers/slapd/abandon.c +++ b/servers/slapd/abandon.c @@ -1,7 +1,7 @@ /* abandon.c - decode and handle an ldap abandon operation */ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -109,7 +109,7 @@ do_abandon( done: -#if LDAP_CLIENT_UPDATE +#ifdef LDAP_CLIENT_UPDATE for ( i = 0; i < nbackends; i++ ) { if ( strncmp( backends[i].be_type, "bdb", 3 ) ) continue; if ( bdb_abandon( &backends[i], conn, id ) == LDAP_SUCCESS ) { diff --git a/servers/slapd/acl.c b/servers/slapd/acl.c index b33a3e921e..20935cad3d 100644 --- a/servers/slapd/acl.c +++ b/servers/slapd/acl.c @@ -1,7 +1,7 @@ /* acl.c - routines to parse and check acl's */ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -130,6 +130,9 @@ access_allowed( slap_control_t control; const char *attr; regmatch_t matches[MAXREMATCHES]; + int st_same_attr = 0; + int st_initialized = 0; + static AccessControlState state_init = ACL_STATE_INIT; assert( e != NULL ); assert( desc != NULL ); @@ -139,7 +142,7 @@ access_allowed( assert( attr != NULL ); - if( state && state->as_recorded ) { + if( state && state->as_recorded && state->as_vd_ad==desc) { if( state->as_recorded & ACL_STATE_RECORDED_NV && val == NULL ) { @@ -150,6 +153,9 @@ access_allowed( { return state->as_result; } + st_same_attr = 1; + } if (state) { + state->as_vd_ad=desc; } #ifdef NEW_LOGGING @@ -246,7 +252,7 @@ access_allowed( ret = 0; control = ACL_BREAK; - if( state && ( state->as_recorded & ACL_STATE_RECORDED_VD )) { + if( st_same_attr ) { assert( state->as_vd_acl != NULL ); a = state->as_vd_acl; @@ -290,6 +296,18 @@ access_allowed( #endif } + if (state) { + if (state->as_vi_acl == a && (state->as_recorded & ACL_STATE_RECORDED_NV)) { + Debug( LDAP_DEBUG_ACL, "access_allowed: result from state (%s)\n", attr, 0, 0 ); + return state->as_result; + } else if (!st_initialized) { + Debug( LDAP_DEBUG_ACL, "access_allowed: no res from state (%s)\n", attr, 0, 0); + *state = state_init; + state->as_vd_ad=desc; + st_initialized=1; + } + } + vd_access: control = acl_mask( a, &mask, be, conn, op, e, desc, val, matches, count, state ); @@ -342,6 +360,9 @@ vd_access: done: if( state != NULL ) { + /* If not value-dependent, save ACL in case of more attrs */ + if ( !(state->as_recorded & ACL_STATE_RECORDED_VD) ) + state->as_vi_acl = a; state->as_recorded |= ACL_STATE_RECORDED; state->as_result = ret; } @@ -961,7 +982,16 @@ dn_match_cleanup:; } if ( b->a_set_pat.bv_len != 0 ) { - if (aci_match_set( &b->a_set_pat, be, e, conn, op, 0 ) == 0) { + struct berval bv; + char buf[ACL_BUF_SIZE]; + if( b->a_set_style == ACL_STYLE_REGEX ){ + bv.bv_len = sizeof(buf) - 1; + bv.bv_val = buf; + string_expand( &bv, &b->a_set_pat, e->e_ndn, matches ); + }else{ + bv = b->a_set_pat; + } + if (aci_match_set( &bv, be, e, conn, op, 0 ) == 0) { continue; } } @@ -1201,6 +1231,7 @@ acl_check_modlist( ) { struct berval *bv; + AccessControlState state = ACL_STATE_INIT; assert( be != NULL ); @@ -1255,9 +1286,6 @@ acl_check_modlist( } for ( ; mlist != NULL; mlist = mlist->sml_next ) { - static AccessControlState state_init = ACL_STATE_INIT; - AccessControlState state; - /* * no-user-modification operational attributes are ignored * by ACL_WRITE checking as any found here are not provided @@ -1276,8 +1304,6 @@ acl_check_modlist( continue; } - state = state_init; - switch ( mlist->sml_op ) { case LDAP_MOD_REPLACE: /* diff --git a/servers/slapd/aclparse.c b/servers/slapd/aclparse.c index d420a0b4c7..e22f3263ec 100644 --- a/servers/slapd/aclparse.c +++ b/servers/slapd/aclparse.c @@ -1,7 +1,7 @@ /* aclparse.c - routines to parse and check acl's */ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -185,7 +185,7 @@ parse_acl( } else if ( strcasecmp( style, "one" ) == 0 ) { a->acl_dn_style = ACL_STYLE_ONE; ber_str2bv( right, 0, 1, &a->acl_dn_pat ); - } else if ( strcasecmp( style, "subtree" ) == 0 ) { + } else if ( strcasecmp( style, "subtree" ) == 0 || strcasecmp( style, "sub" ) == 0 ) { a->acl_dn_style = ACL_STYLE_SUBTREE; ber_str2bv( right, 0, 1, &a->acl_dn_pat ); } else if ( strcasecmp( style, "children" ) == 0 ) { @@ -307,7 +307,7 @@ parse_acl( sty = ACL_STYLE_BASE; } else if ( strcasecmp( style, "one" ) == 0 ) { sty = ACL_STYLE_ONE; - } else if ( strcasecmp( style, "subtree" ) == 0 ) { + } else if ( strcasecmp( style, "subtree" ) == 0 || strcasecmp( style, "sub" ) == 0 ) { sty = ACL_STYLE_SUBTREE; } else if ( strcasecmp( style, "children" ) == 0 ) { sty = ACL_STYLE_CHILDREN; @@ -1282,7 +1282,7 @@ acl_usage( void ) "\t[aci=]\n" #endif "\t[ssf=] [transport_ssf=] [tls_ssf=] [sasl_ssf=]\n" - " ::= regex | base | exact (alias of base) | one | sub | children\n" + " ::= regex | base | exact (alias of base) | one | subtree | children\n" "