From: Kurt Zeilenga Date: Sun, 9 Feb 2003 18:01:37 +0000 (+0000) Subject: Round 2 of changes from HEAD X-Git-Tag: OPENLDAP_REL_ENG_2_1_13~39 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4a3dc100a28c87df0dde1d7554e6112246a35533;p=openldap Round 2 of changes from HEAD --- diff --git a/clients/tools/common.c b/clients/tools/common.c index b477850942..3b4983336c 100644 --- a/clients/tools/common.c +++ b/clients/tools/common.c @@ -653,7 +653,7 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count ) int i = 0, j, crit = 0, err; LDAPControl c[3], **ctrls; - ctrls = (LDAPControl **)malloc( sizeof(c) + (count + 1)*sizeof(LDAPControl *) ); + ctrls = (LDAPControl**) malloc(sizeof(c) + (count+1)*sizeof(LDAPControl*)); if ( ctrls == NULL ) { fprintf( stderr, "No memory\n" ); exit( EXIT_FAILURE ); diff --git a/clients/tools/ldapsearch.c b/clients/tools/ldapsearch.c index e65ca0ca36..ee7611c6a4 100644 --- a/clients/tools/ldapsearch.c +++ b/clients/tools/ldapsearch.c @@ -64,6 +64,9 @@ usage( void ) " -A retrieve attribute names only (no values)\n" " -b basedn base dn for search\n" " -E [!][=] search controls (! indicates criticality)\n" +#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE +" [!]domainScope (domain scope)\n" +#endif " [!]mv= (matched values filter)\n" #ifdef LDAP_CONTROL_PAGEDRESULTS " [!]pr= (paged results)\n" @@ -72,15 +75,15 @@ usage( void ) " [!]subentries[=true|false] (subentries)\n" #endif #ifdef LDAP_CLIENT_UPDATE -" [!]lcup= p/// (client update)\n" +" [!]lcup=p/// (LDAP client update)\n" /* - * " s// (client update)\n" + * " s// (LDAP client update)\n" * " sp///\n" * */ #endif #ifdef LDAP_SYNC -" [!]sync= ro[/] (ldap sync - refreshOnly)\n" -" rp[/][/] (ldap sync - refreshAndPersist)\n" +" [!]sync=ro[/] (LDAP Sync refreshOnly)\n" +" rp[/][/] (LDAP Sync refreshAndPersist)\n" #endif " -F prefix URL prefix for files (default: %s)\n" " -l limit time limit (in seconds) for search\n" @@ -153,6 +156,10 @@ static int includeufn, vals2tmp = 0, ldif = 0; static int subentries = 0, valuesReturnFilter = 0; static char *vrFilter = NULL; +#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE +static int domainScope = 0; +#endif + #if defined(LDAP_CLIENT_UPDATE) || defined(LDAP_SYNC) static int lcup = 0; static int ldapsync = 0; @@ -289,6 +296,21 @@ handle_private_option( int i ) pagedResults = 1 + crit; #endif +#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE + } else if ( strcasecmp( control, "domainScope" ) == 0 ) { + if( domainScope ) { + fprintf( stderr, + "domainScope control previously specified\n"); + exit( EXIT_FAILURE ); + } + if( cvalue != NULL ) { + fprintf( stderr, + "domainScope: no control value expected\n" ); + usage(); + } + + domainScope = 1 + crit; +#endif #ifdef LDAP_CONTROL_SUBENTRIES } else if ( strcasecmp( control, "subentries" ) == 0 ) { if( subentries ) { @@ -609,6 +631,9 @@ main( int argc, char **argv ) getNextPage: if ( manageDSAit || noop || subentries || valuesReturnFilter +#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE + || domainScope +#endif #ifdef LDAP_CONTROL_PAGEDRESULTS || pageSize #endif @@ -621,7 +646,17 @@ getNextPage: ) { int err; int i=0; - LDAPControl c[3]; + LDAPControl c[6]; + +#ifdef LDAP_CONTROL_X_DOMAIN_SCOPE + if ( domainScope ) { + c[i].ldctl_oid = LDAP_CONTROL_X_DOMAIN_SCOPE; + c[i].ldctl_value.bv_val = NULL; + c[i].ldctl_value.bv_len = 0; + c[i].ldctl_iscritical = domainScope > 1; + i++; + } +#endif #ifdef LDAP_CONTROL_SUBENTRIES if ( subentries ) { @@ -656,7 +691,7 @@ getNextPage: err = ber_printf( cuber, "{ei}", abs(lcup), lcup_cint ); } else { err = ber_printf( cuber, "{ei{sO}}", abs(lcup), lcup_cint, - LDAP_LCUP_COOKIE_OID, &lcup_cookie ); + LDAP_CUP_COOKIE_OID, &lcup_cookie ); } if ( err == LBER_ERROR ) { diff --git a/configure b/configure index 8e51755842..bd9b24638a 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # $OpenLDAP$ -# from OpenLDAP: pkg/ldap/configure.in,v 1.456 2003/02/09 06:42:24 kurt Exp +# from OpenLDAP: pkg/ldap/configure.in,v 1.408.2.29 2003/02/09 16:31:35 kurt Exp # Copyright 1998-2003 The OpenLDAP Foundation. All Rights Reserved. # @@ -7760,7 +7760,7 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool' LTSTATIC="" -if test -z "$LTDYNAMIC" -a "${OPENLDAP_CVS}"; then +if test -z "$LTDYNAMIC"; then LTSTATIC="-static" fi diff --git a/include/ac/assert.h b/include/ac/assert.h new file mode 100644 index 0000000000..323c18dfc0 --- /dev/null +++ b/include/ac/assert.h @@ -0,0 +1,54 @@ +/* Generic assert.h */ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2003 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. + */ + +#ifndef _AC_ASSERT_H +#define _AC_ASSERT_H + +#undef assert + +#ifdef LDAP_DEBUG + +#if defined( HAVE_ASSERT_H ) || defined( STDC_HEADERS ) + +#undef NDEBUG +#include + +#else /* !(HAVE_ASSERT_H || STDC_HEADERS) */ + +#define LDAP_NEED_ASSERT 1 + +/* + * no assert()... must be a very old compiler. + * create a replacement and hope it works + */ + +LBER_F (void) ber_pvt_assert LDAP_P(( const char *file, int line, + const char *test )); + +/* Can't use LDAP_STRING(test), that'd expand to "test" */ +#if defined(__STDC__) || defined(__cplusplus) +#define assert(test) \ + ((test) ? (void)0 : ber_pvt_assert( __FILE__, __LINE__, #test ) ) +#else +#define assert(test) \ + ((test) ? (void)0 : ber_pvt_assert( __FILE__, __LINE__, "test" ) ) +#endif + +#endif /* (HAVE_ASSERT_H || STDC_HEADERS) */ + +#else /* !LDAP_DEBUG */ +/* no asserts */ +#define assert(test) ((void)0) +#endif /* LDAP_DEBUG */ + +#endif /* _AC_ASSERT_H */ diff --git a/include/ac/bytes.h b/include/ac/bytes.h new file mode 100644 index 0000000000..4563ae192e --- /dev/null +++ b/include/ac/bytes.h @@ -0,0 +1,75 @@ +/* Generic bytes.h */ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2003 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. + */ + +#ifndef _AC_BYTES_H +#define _AC_BYTES_H + +/* cross compilers should define both AC_INT{2,4}_TYPE in CPPFLAGS */ + +#if !defined( AC_INT4_TYPE ) + /* use autoconf defines to provide sized typedefs */ +# if SIZEOF_LONG == 4 +# define AC_INT4_TYPE long +# elif SIZEOF_INT == 4 +# define AC_INT4_TYPE int +# elif SIZEOF_SHORT == 4 +# define AC_INT4_TYPE short +# else +# error "AC_INT4_TYPE?" +# endif +#endif + +typedef AC_INT4_TYPE ac_int4; +typedef signed AC_INT4_TYPE ac_sint4; +typedef unsigned AC_INT4_TYPE ac_uint4; + +#if !defined( AC_INT2_TYPE ) +# if SIZEOF_SHORT == 2 +# define AC_INT2_TYPE short +# elif SIZEOF_INT == 2 +# define AC_INT2_TYPE int +# elif SIZEOF_LONG == 2 +# define AC_INT2_TYPE long +# else +# error "AC_INT2_TYPE?" +# endif +#endif + +#if defined( AC_INT2_TYPE ) +typedef AC_INT2_TYPE ac_int2; +typedef signed AC_INT2_TYPE ac_sint2; +typedef unsigned AC_INT2_TYPE ac_uint2; +#endif + +#ifndef BYTE_ORDER +/* cross compilers should define BYTE_ORDER in CPPFLAGS */ + +/* + * Definitions for byte order, according to byte significance from low + * address to high. + */ +#define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ +#define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */ +#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */ + +/* assume autoconf's AC_C_BIGENDIAN has been ran */ +/* if it hasn't, we assume (maybe falsely) the order is LITTLE ENDIAN */ +# ifdef WORDS_BIGENDIAN +# define BYTE_ORDER BIG_ENDIAN +# else +# define BYTE_ORDER LITTLE_ENDIAN +# endif + +#endif /* BYTE_ORDER */ + +#endif /* _AC_BYTES_H */ diff --git a/include/ac/socket.h b/include/ac/socket.h index 6e931ab28d..ded4c46968 100644 --- a/include/ac/socket.h +++ b/include/ac/socket.h @@ -1,7 +1,7 @@ /* Generic socket.h */ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -197,8 +197,12 @@ LDAP_F (int) ldap_pvt_inet_aton LDAP_P(( const char *, struct in_addr * )); # define AC_GAI_STRERROR(x) (gai_strerror((x))) # else # define AC_GAI_STRERROR(x) (ldap_pvt_gai_strerror((x))) - char * ldap_pvt_gai_strerror( int ); + LDAP_F (char *) ldap_pvt_gai_strerror( int ); # endif #endif +#ifndef HAVE_GETPEEREID +LDAP_LUTIL_F( int ) getpeereid( int s, uid_t *, gid_t * ); +#endif + #endif /* _AC_SOCKET_H_ */ diff --git a/include/lber.h b/include/lber.h index aa952bd2c3..ea24431fcc 100644 --- a/include/lber.h +++ b/include/lber.h @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -469,6 +469,12 @@ ber_flatten LDAP_P(( BerElement *ber, struct berval **bvPtr )); +LBER_F( int ) +ber_flatten2 LDAP_P(( + BerElement *ber, + struct berval *bv, + int alloc )); + /* * LBER ber accessor functions */ diff --git a/include/ldap.h b/include/ldap.h index f30a60ee1a..a6d6c1a146 100644 --- a/include/ldap.h +++ b/include/ldap.h @@ -205,18 +205,18 @@ typedef struct ldapcontrol { #ifdef LDAP_CLIENT_UPDATE #define LDAP_CONTROL_CLIENT_UPDATE "1.3.6.1.4.1.4203.666.5.3" #define LDAP_CONTROL_ENTRY_UPDATE "1.3.6.1.4.1.4203.666.5.4" -#define LDAP_CONTROL_CLIENT_UPDATE_DONE "1.3.6.1.4.1.4203.666.5.5" -#define LDAP_LCUP_COOKIE_OID "1.3.6.1.4.1.4203.666.10.1" +#define LDAP_CONTROL_CLIENT_UPDATE_DONE "1.3.6.1.4.1.4203.666.5.5" +#define LDAP_CUP_COOKIE_OID "1.3.6.1.4.1.4203.666.10.1" #endif #ifdef LDAP_SYNC -#define LDAP_CONTROL_SYNC "1.3.6.1.4.1.4203.666.5.6" -#define LDAP_CONTROL_SYNC_STATE "1.3.6.1.4.1.4203.666.5.7" -#define LDAP_CONTROL_SYNC_DONE "1.3.6.1.4.1.4203.666.5.8" -#define LDAP_SYNC_INFO "1.3.6.1.4.1.4203.666.10.2" +#define LDAP_CONTROL_SYNC "1.3.6.1.4.1.4203.666.5.6" +#define LDAP_CONTROL_SYNC_STATE "1.3.6.1.4.1.4203.666.5.7" +#define LDAP_CONTROL_SYNC_DONE "1.3.6.1.4.1.4203.666.5.8" +#define LDAP_SYNC_INFO "1.3.6.1.4.1.4203.666.10.2" -#define LDAP_SYNC_REFRESH_DONE 0 -#define LDAP_SYNC_NEW_COOKIE 1 +#define LDAP_SYNC_REFRESH_DONE 0 +#define LDAP_SYNC_NEW_COOKIE 1 #define LDAP_SYNC_PRESENT 0 #define LDAP_SYNC_ADD 1 @@ -230,8 +230,8 @@ typedef struct ldapcontrol { #define LDAP_CONTROL_VLVRESPONSE "2.16.840.1.113730.3.4.10" #ifdef LDAP_DEVEL -#define LDAP_CONTROL_PERMITMODIFY "1.2.840.113556.1.4.1413" -#define LDAP_CONTROL_NOREFERRALS "1.2.840.113556.1.4.1339" +#define LDAP_CONTROL_X_DOMAIN_SCOPE "1.2.840.113556.1.4.1339" +#define LDAP_CONTROL_X_PERMISSIVE_MODIFY "1.2.840.113556.1.4.1413" #endif /* LDAP Unsolicited Notifications */ @@ -247,10 +247,11 @@ typedef struct ldapcontrol { #define LDAP_TAG_EXOP_MODIFY_PASSWD_NEW ((ber_tag_t) 0x82U) #define LDAP_TAG_EXOP_MODIFY_PASSWD_GEN ((ber_tag_t) 0x80U) +#define LDAP_EXOP_X_WHO_AM_I "1.3.6.1.4.1.4203.1.11.3" + #ifdef LDAP_DEVEL #define LDAP_EXOP_X_CANCEL "1.3.6.1.4.1.4203.666.6.3" #endif -#define LDAP_EXOP_X_WHO_AM_I "1.3.6.1.4.1.4203.1.11.3" /* LDAP Features */ #define LDAP_FEATURE_ALL_OPERATIONAL_ATTRS "1.3.6.1.4.1.4203.1.5.1" /* + */ @@ -300,8 +301,8 @@ typedef struct ldapcontrol { #define LDAP_TAG_SASL_RES_CREDS ((ber_tag_t) 0x87U) /* context specific + primitive */ #ifdef LDAP_CLIENT_UPDATE -#define LDAP_TAG_INTERVAL ((ber_tag_t) 0x02U) /* integer */ -#define LDAP_LCUP_TAG_COOKIE ((ber_tag_t) 0x30U) /* sequence */ +#define LDAP_CUP_TAG_INTERVAL ((ber_tag_t) 0x02U) /* integer */ +#define LDAP_CUP_TAG_COOKIE ((ber_tag_t) 0x30U) /* sequence */ #endif #ifdef LDAP_SYNC @@ -310,32 +311,32 @@ typedef struct ldapcontrol { /* possible operations a client can invoke */ -#define LDAP_REQ_BIND ((ber_tag_t) 0x60U) /* application + constructed */ -#define LDAP_REQ_UNBIND ((ber_tag_t) 0x42U) /* application + primitive */ -#define LDAP_REQ_SEARCH ((ber_tag_t) 0x63U) /* application + constructed */ -#define LDAP_REQ_MODIFY ((ber_tag_t) 0x66U) /* application + constructed */ -#define LDAP_REQ_ADD ((ber_tag_t) 0x68U) /* application + constructed */ -#define LDAP_REQ_DELETE ((ber_tag_t) 0x4aU) /* application + primitive */ -#define LDAP_REQ_MODDN ((ber_tag_t) 0x6cU) /* application + constructed */ -#define LDAP_REQ_MODRDN LDAP_REQ_MODDN -#define LDAP_REQ_RENAME LDAP_REQ_MODDN -#define LDAP_REQ_COMPARE ((ber_tag_t) 0x6eU) /* application + constructed */ -#define LDAP_REQ_ABANDON ((ber_tag_t) 0x50U) /* application + primitive */ -#define LDAP_REQ_EXTENDED ((ber_tag_t) 0x77U) /* application + constructed */ +#define LDAP_REQ_BIND ((ber_tag_t) 0x60U) /* application + constructed */ +#define LDAP_REQ_UNBIND ((ber_tag_t) 0x42U) /* application + primitive */ +#define LDAP_REQ_SEARCH ((ber_tag_t) 0x63U) /* application + constructed */ +#define LDAP_REQ_MODIFY ((ber_tag_t) 0x66U) /* application + constructed */ +#define LDAP_REQ_ADD ((ber_tag_t) 0x68U) /* application + constructed */ +#define LDAP_REQ_DELETE ((ber_tag_t) 0x4aU) /* application + primitive */ +#define LDAP_REQ_MODDN ((ber_tag_t) 0x6cU) /* application + constructed */ +#define LDAP_REQ_MODRDN LDAP_REQ_MODDN +#define LDAP_REQ_RENAME LDAP_REQ_MODDN +#define LDAP_REQ_COMPARE ((ber_tag_t) 0x6eU) /* application + constructed */ +#define LDAP_REQ_ABANDON ((ber_tag_t) 0x50U) /* application + primitive */ +#define LDAP_REQ_EXTENDED ((ber_tag_t) 0x77U) /* application + constructed */ /* possible result types a server can return */ -#define LDAP_RES_BIND ((ber_tag_t) 0x61U) /* application + constructed */ -#define LDAP_RES_SEARCH_ENTRY ((ber_tag_t) 0x64U) /* application + constructed */ +#define LDAP_RES_BIND ((ber_tag_t) 0x61U) /* application + constructed */ +#define LDAP_RES_SEARCH_ENTRY ((ber_tag_t) 0x64U) /* application + constructed */ #define LDAP_RES_SEARCH_REFERENCE ((ber_tag_t) 0x73U) /* V3: application + constructed */ -#define LDAP_RES_SEARCH_RESULT ((ber_tag_t) 0x65U) /* application + constructed */ -#define LDAP_RES_MODIFY ((ber_tag_t) 0x67U) /* application + constructed */ -#define LDAP_RES_ADD ((ber_tag_t) 0x69U) /* application + constructed */ -#define LDAP_RES_DELETE ((ber_tag_t) 0x6bU) /* application + constructed */ -#define LDAP_RES_MODDN ((ber_tag_t) 0x6dU) /* application + constructed */ -#define LDAP_RES_MODRDN LDAP_RES_MODDN /* application + constructed */ -#define LDAP_RES_RENAME LDAP_RES_MODDN /* application + constructed */ -#define LDAP_RES_COMPARE ((ber_tag_t) 0x6fU) /* application + constructed */ -#define LDAP_RES_EXTENDED ((ber_tag_t) 0x78U) /* V3: application + constructed */ +#define LDAP_RES_SEARCH_RESULT ((ber_tag_t) 0x65U) /* application + constructed */ +#define LDAP_RES_MODIFY ((ber_tag_t) 0x67U) /* application + constructed */ +#define LDAP_RES_ADD ((ber_tag_t) 0x69U) /* application + constructed */ +#define LDAP_RES_DELETE ((ber_tag_t) 0x6bU) /* application + constructed */ +#define LDAP_RES_MODDN ((ber_tag_t) 0x6dU) /* application + constructed */ +#define LDAP_RES_MODRDN LDAP_RES_MODDN /* application + constructed */ +#define LDAP_RES_RENAME LDAP_RES_MODDN /* application + constructed */ +#define LDAP_RES_COMPARE ((ber_tag_t) 0x6fU) /* application + constructed */ +#define LDAP_RES_EXTENDED ((ber_tag_t) 0x78U) /* V3: application + constructed */ #define LDAP_RES_EXTENDED_PARTIAL ((ber_tag_t) 0x79U) /* V3+: application + constructed */ #ifdef LDAP_DEVEL #define LDAP_RES_INTERMEDIATE_RESP ((ber_tag_t) 0x7aU) @@ -346,40 +347,40 @@ typedef struct ldapcontrol { /* sasl methods */ -#define LDAP_SASL_SIMPLE ((char*)0) -#define LDAP_SASL_NULL ("") +#define LDAP_SASL_SIMPLE ((char*)0) +#define LDAP_SASL_NULL ("") /* authentication methods available */ -#define LDAP_AUTH_NONE ((ber_tag_t) 0x00U) /* no authentication */ -#define LDAP_AUTH_SIMPLE ((ber_tag_t) 0x80U) /* context specific + primitive */ -#define LDAP_AUTH_SASL ((ber_tag_t) 0xa3U) /* context specific + constructed */ -#define LDAP_AUTH_KRBV4 ((ber_tag_t) 0xffU) /* means do both of the following */ -#define LDAP_AUTH_KRBV41 ((ber_tag_t) 0x81U) /* context specific + primitive */ -#define LDAP_AUTH_KRBV42 ((ber_tag_t) 0x82U) /* context specific + primitive */ +#define LDAP_AUTH_NONE ((ber_tag_t) 0x00U) /* no authentication */ +#define LDAP_AUTH_SIMPLE ((ber_tag_t) 0x80U) /* context specific + primitive */ +#define LDAP_AUTH_SASL ((ber_tag_t) 0xa3U) /* context specific + constructed */ +#define LDAP_AUTH_KRBV4 ((ber_tag_t) 0xffU) /* means do both of the following */ +#define LDAP_AUTH_KRBV41 ((ber_tag_t) 0x81U) /* context specific + primitive */ +#define LDAP_AUTH_KRBV42 ((ber_tag_t) 0x82U) /* context specific + primitive */ /* filter types */ -#define LDAP_FILTER_AND ((ber_tag_t) 0xa0U) /* context specific + constructed */ -#define LDAP_FILTER_OR ((ber_tag_t) 0xa1U) /* context specific + constructed */ -#define LDAP_FILTER_NOT ((ber_tag_t) 0xa2U) /* context specific + constructed */ +#define LDAP_FILTER_AND ((ber_tag_t) 0xa0U) /* context specific + constructed */ +#define LDAP_FILTER_OR ((ber_tag_t) 0xa1U) /* context specific + constructed */ +#define LDAP_FILTER_NOT ((ber_tag_t) 0xa2U) /* context specific + constructed */ #define LDAP_FILTER_EQUALITY ((ber_tag_t) 0xa3U) /* context specific + constructed */ #define LDAP_FILTER_SUBSTRINGS ((ber_tag_t) 0xa4U) /* context specific + constructed */ -#define LDAP_FILTER_GE ((ber_tag_t) 0xa5U) /* context specific + constructed */ -#define LDAP_FILTER_LE ((ber_tag_t) 0xa6U) /* context specific + constructed */ +#define LDAP_FILTER_GE ((ber_tag_t) 0xa5U) /* context specific + constructed */ +#define LDAP_FILTER_LE ((ber_tag_t) 0xa6U) /* context specific + constructed */ #define LDAP_FILTER_PRESENT ((ber_tag_t) 0x87U) /* context specific + primitive */ #define LDAP_FILTER_APPROX ((ber_tag_t) 0xa8U) /* context specific + constructed */ -#define LDAP_FILTER_EXT ((ber_tag_t) 0xa9U) /* context specific + constructed */ +#define LDAP_FILTER_EXT ((ber_tag_t) 0xa9U) /* context specific + constructed */ /* extended filter component types */ -#define LDAP_FILTER_EXT_OID ((ber_tag_t) 0x81U) /* context specific */ +#define LDAP_FILTER_EXT_OID ((ber_tag_t) 0x81U) /* context specific */ #define LDAP_FILTER_EXT_TYPE ((ber_tag_t) 0x82U) /* context specific */ #define LDAP_FILTER_EXT_VALUE ((ber_tag_t) 0x83U) /* context specific */ #define LDAP_FILTER_EXT_DNATTRS ((ber_tag_t) 0x84U) /* context specific */ /* substring filter component types */ #define LDAP_SUBSTRING_INITIAL ((ber_tag_t) 0x80U) /* context specific */ -#define LDAP_SUBSTRING_ANY ((ber_tag_t) 0x81U) /* context specific */ +#define LDAP_SUBSTRING_ANY ((ber_tag_t) 0x81U) /* context specific */ #define LDAP_SUBSTRING_FINAL ((ber_tag_t) 0x82U) /* context specific */ /* search scopes */ @@ -390,7 +391,7 @@ typedef struct ldapcontrol { /* substring filter component types */ #define LDAP_SUBSTRING_INITIAL ((ber_tag_t) 0x80U) /* context specific */ -#define LDAP_SUBSTRING_ANY ((ber_tag_t) 0x81U) /* context specific */ +#define LDAP_SUBSTRING_ANY ((ber_tag_t) 0x81U) /* context specific */ #define LDAP_SUBSTRING_FINAL ((ber_tag_t) 0x82U) /* context specific */ /* @@ -399,13 +400,13 @@ typedef struct ldapcontrol { #define LDAP_RANGE(n,x,y) (((x) <= (n)) && ((n) <= (y))) -#define LDAP_SUCCESS 0x00 +#define LDAP_SUCCESS 0x00 #define LDAP_OPERATIONS_ERROR 0x01 -#define LDAP_PROTOCOL_ERROR 0x02 +#define LDAP_PROTOCOL_ERROR 0x02 #define LDAP_TIMELIMIT_EXCEEDED 0x03 #define LDAP_SIZELIMIT_EXCEEDED 0x04 -#define LDAP_COMPARE_FALSE 0x05 -#define LDAP_COMPARE_TRUE 0x06 +#define LDAP_COMPARE_FALSE 0x05 +#define LDAP_COMPARE_TRUE 0x06 #define LDAP_AUTH_METHOD_NOT_SUPPORTED 0x07 #define LDAP_STRONG_AUTH_NOT_SUPPORTED LDAP_AUTH_METHOD_NOT_SUPPORTED #define LDAP_STRONG_AUTH_REQUIRED 0x08 @@ -420,18 +421,18 @@ typedef struct ldapcontrol { #define LDAP_ATTR_ERROR(n) LDAP_RANGE((n),0x10,0x15) /* 16-21 */ #define LDAP_NO_SUCH_ATTRIBUTE 0x10 -#define LDAP_UNDEFINED_TYPE 0x11 +#define LDAP_UNDEFINED_TYPE 0x11 #define LDAP_INAPPROPRIATE_MATCHING 0x12 #define LDAP_CONSTRAINT_VIOLATION 0x13 #define LDAP_TYPE_OR_VALUE_EXISTS 0x14 -#define LDAP_INVALID_SYNTAX 0x15 +#define LDAP_INVALID_SYNTAX 0x15 #define LDAP_NAME_ERROR(n) LDAP_RANGE((n),0x20,0x24) /* 32-34,36 */ -#define LDAP_NO_SUCH_OBJECT 0x20 -#define LDAP_ALIAS_PROBLEM 0x21 +#define LDAP_NO_SUCH_OBJECT 0x20 +#define LDAP_ALIAS_PROBLEM 0x21 #define LDAP_INVALID_DN_SYNTAX 0x22 -#define LDAP_IS_LEAF 0x23 /* not LDAPv3 */ +#define LDAP_IS_LEAF 0x23 /* not LDAPv3 */ #define LDAP_ALIAS_DEREF_PROBLEM 0x24 #define LDAP_SECURITY_ERROR(n) LDAP_RANGE((n),0x2F,0x32) /* 47-50 */ @@ -443,10 +444,10 @@ typedef struct ldapcontrol { #define LDAP_SERVICE_ERROR(n) LDAP_RANGE((n),0x33,0x36) /* 51-54 */ -#define LDAP_BUSY 0x33 -#define LDAP_UNAVAILABLE 0x34 +#define LDAP_BUSY 0x33 +#define LDAP_UNAVAILABLE 0x34 #define LDAP_UNWILLING_TO_PERFORM 0x35 -#define LDAP_LOOP_DETECT 0x36 +#define LDAP_LOOP_DETECT 0x36 #define LDAP_UPDATE_ERROR(n) LDAP_RANGE((n),0x40,0x47) /* 64-69,71 */ @@ -454,16 +455,16 @@ typedef struct ldapcontrol { #define LDAP_OBJECT_CLASS_VIOLATION 0x41 #define LDAP_NOT_ALLOWED_ON_NONLEAF 0x42 #define LDAP_NOT_ALLOWED_ON_RDN 0x43 -#define LDAP_ALREADY_EXISTS 0x44 +#define LDAP_ALREADY_EXISTS 0x44 #define LDAP_NO_OBJECT_CLASS_MODS 0x45 #define LDAP_RESULTS_TOO_LARGE 0x46 /* CLDAP */ #define LDAP_AFFECTS_MULTIPLE_DSAS 0x47 /* LDAPv3 */ -#define LDAP_OTHER 0x50 +#define LDAP_OTHER 0x50 #define LDAP_API_ERROR(n) LDAP_RANGE((n),0x51,0x61) /* 81-97 */ #define LDAP_API_RESULT(n) (((n) == LDAP_SUCCESS) || \ - LDAP_RANGE((n),0x51,0x61)) /* 0,81-97 */ + LDAP_RANGE((n),0x51,0x61)) /* 0,81-97 */ /* reserved for APIs */ #define LDAP_SERVER_DOWN 0x51 @@ -502,11 +503,6 @@ typedef struct ldapcontrol { #define LDAP_NO_SUCH_OPERATION 0x111 #define LDAP_TOO_LATE 0x112 #define LDAP_CANNOT_CANCEL 0x113 - -#define LDAP_CANCEL_NONE 0x00 -#define LDAP_CANCEL_REQ 0x01 -#define LDAP_CANCEL_ACK 0x02 -#define LDAP_CANCEL_DONE 0x03 #endif #ifdef LDAP_CLIENT_UPDATE @@ -539,10 +535,10 @@ typedef struct ldapmsg LDAPMessage; typedef struct ldapmod { int mod_op; -#define LDAP_MOD_ADD ((ber_int_t) 0x0000) -#define LDAP_MOD_DELETE ((ber_int_t) 0x0001) -#define LDAP_MOD_REPLACE ((ber_int_t) 0x0002) -#define LDAP_MOD_BVALUES ((ber_int_t) 0x0080) +#define LDAP_MOD_ADD (0x0000) +#define LDAP_MOD_DELETE (0x0001) +#define LDAP_MOD_REPLACE (0x0002) +#define LDAP_MOD_BVALUES (0x0080) /* IMPORTANT: do not use code 0x1000 (or above), * it is used internally by the backends! * (see ldap/servers/slapd/slap.h) @@ -564,17 +560,17 @@ typedef struct ldapmod { */ typedef struct ldap LDAP; -#define LDAP_DEREF_NEVER 0x00 +#define LDAP_DEREF_NEVER 0x00 #define LDAP_DEREF_SEARCHING 0x01 -#define LDAP_DEREF_FINDING 0x02 -#define LDAP_DEREF_ALWAYS 0x03 +#define LDAP_DEREF_FINDING 0x02 +#define LDAP_DEREF_ALWAYS 0x03 -#define LDAP_NO_LIMIT 0 +#define LDAP_NO_LIMIT 0 /* how many messages to retrieve results for */ -#define LDAP_MSG_ONE 0x00 -#define LDAP_MSG_ALL 0x01 -#define LDAP_MSG_RECEIVED 0x02 +#define LDAP_MSG_ONE 0x00 +#define LDAP_MSG_ALL 0x01 +#define LDAP_MSG_RECEIVED 0x02 /* * types for ldap URL handling @@ -893,31 +889,6 @@ ldap_kerberos_bind2_s LDAP_P(( /* deprecated */ LDAP *ld, LDAP_CONST char *who )); -/* - * in cache.c - * (deprecated) - */ -LDAP_F( int ) -ldap_enable_cache LDAP_P(( LDAP *ld, long timeout, ber_len_t maxmem )); - -LDAP_F( void ) -ldap_disable_cache LDAP_P(( LDAP *ld )); - -LDAP_F( void ) -ldap_set_cache_options LDAP_P(( LDAP *ld, unsigned long opts )); - -LDAP_F( void ) -ldap_destroy_cache LDAP_P(( LDAP *ld )); - -LDAP_F( void ) -ldap_flush_cache LDAP_P(( LDAP *ld )); - -LDAP_F( void ) -ldap_uncache_entry LDAP_P(( LDAP *ld, LDAP_CONST char *dn )); - -LDAP_F( void ) -ldap_uncache_request LDAP_P(( LDAP *ld, int msgid )); - /* * LDAP Cancel Extended Operation diff --git a/include/ldap_config.h.in b/include/ldap_config.h.in index 705466c861..46d96036ea 100644 --- a/include/ldap_config.h.in +++ b/include/ldap_config.h.in @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -60,12 +60,4 @@ #define LDAP_RUNDIR "%RUNDIR%" #endif -/* command locations */ -#ifndef LDAP_EDITOR -#define LDAP_EDITOR "%EDITOR%" -#endif -#ifndef LDAP_SENDMAIL -#define LDAP_SENDMAIL "%SENDMAIL%" -#endif - #endif /* _LDAP_CONFIG_H */ diff --git a/include/ldap_config.nt b/include/ldap_config.nt index 18646ac9e0..8d3b44d9c4 100644 --- a/include/ldap_config.nt +++ b/include/ldap_config.nt @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA * All rights reserved. * * Redistribution and use in source and binary forms are permitted only @@ -52,12 +52,4 @@ #define LDAP_RUNDIR LDAP_PREFIX "\\run" #endif -/* command locations */ -#ifndef LDAP_EDITOR -#define LDAP_EDITOR "%EDITOR%" -#endif -#ifndef LDAP_SENDMAIL -#define LDAP_SENDMAIL "%SENDMAIL%" -#endif - #endif /* _LDAP_CONFIG_H */ diff --git a/include/ldap_features.h.in b/include/ldap_features.h.in new file mode 100644 index 0000000000..5f20ccc72b --- /dev/null +++ b/include/ldap_features.h.in @@ -0,0 +1,66 @@ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2003 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. + */ + +/* + * LDAP Features + */ + +#ifndef _LDAP_FEATURES_H +#define _LDAP_FEATURES_H 1 + +/* OpenLDAP API version macros */ +#undef LDAP_VENDOR_VERSION +#undef LDAP_VENDOR_VERSION_MAJOR +#undef LDAP_VENDOR_VERSION_MINOR +#undef LDAP_VENDOR_VERSION_PATCH + +/* +** WORK IN PROGRESS! +** +** OpenLDAP reentrancy/thread-safeness should be dynamically +** checked using ldap_get_option(). +** +** The -lldap implementation is not thread-safe. +** +** The -lldap_r implementation is: +** LDAP_API_FEATURE_THREAD_SAFE (basic thread safety) +** but also be: +** LDAP_API_FEATURE_SESSION_THREAD_SAFE +** LDAP_API_FEATURE_OPERATION_THREAD_SAFE +** +** The preprocessor flag LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE +** can be used to determine if -lldap_r is available at compile +** time. You must define LDAP_THREAD_SAFE if and only if you +** link with -lldap_r. +** +** If you fail to define LDAP_THREAD_SAFE when linking with +** -lldap_r or define LDAP_THREAD_SAFE when linking with -lldap, +** provided header definations and declarations may be incorrect. +** +*/ + +/* is -lldap_r available or not */ +#undef LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE + +/* LDAP v2 Kerberos Bind */ +#undef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND + +/* LDAP v2 Referrals */ +#undef LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS + +/* LDAP Server Side Sort. */ +#define LDAP_API_FEATURE_SERVER_SIDE_SORT 1000 + +/* LDAP Virtual List View. */ +#define LDAP_API_FEATURE_VIRTUAL_LIST_VIEW 1000 + +#endif /* LDAP_FEATURES */ diff --git a/include/ldap_features.nt b/include/ldap_features.nt new file mode 100644 index 0000000000..69f5c62e4c --- /dev/null +++ b/include/ldap_features.nt @@ -0,0 +1,69 @@ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA + * All rights reserved. + * + * Redistribution and use in source and binary forms 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. + */ +/* + * LDAP Features + */ +#ifndef _LDAP_FEATURES_H +#define _LDAP_FEATURES_H 1 + +/* OpenLDAP API version macros */ +#define LDAP_VENDOR_VERSION 0 +#define LDAP_VENDOR_VERSION_MAJOR 2 +#define LDAP_VENDOR_VERSION_MINOR X +#define LDAP_VENDOR_VERSION_PATCH X + +/* +** WORK IN PROGRESS! +** +** OpenLDAP reentrancy/thread-safeness should be dynamically +** checked using ldap_get_option(). +** +** The -lldap implementation may or may not be: +** LDAP_API_FEATURE_THREAD_SAFE +** +** The preprocessor flag LDAP_API_FEATURE_X_OPENLDAP_REENTRANT can +** be used to determine if -lldap is LDAP_API_FEATURE_THREAD_SAFE at +** compile time. +** +** The -lldap_r implementation is always THREAD_SAFE but +** may also be: +** LDAP_API_FEATURE_SESSION_THREAD_SAFE +** LDAP_API_FEATURE_OPERATION_THREAD_SAFE +** +** The preprocessor flag LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE +** can be used to determine if -lldap_r is availalbe at compile +** time. You must define LDAP_THREAD_SAFE if and only if you +** link with -lldap_r. +** +** If you fail to define LDAP_THREAD_SAFE when linking with +** -lldap_r or define LDAP_THREAD_SAFE when linking with -lldap, +** provided header definations and declarations may be incorrect. +** +*/ + +/* is -lldap reentrant or not */ +/* #undef LDAP_API_FEATURE_X_OPENLDAP_REENTRANT */ + +/* is threadsafe version of -lldap (ie: -lldap_r) *available* or not */ +#define LDAP_API_FEATURE_X_OPENLDAP_THREAD_SAFE LDAP_VENDOR_VERSION + +/* LDAP v2 Referrals */ +#define LDAP_API_FEATURE_X_OPENLDAP_V2_REFERRALS LDAP_VENDOR_VERSION + +/* LDAP Server Side Sort. */ +#define LDAP_API_FEATURE_SERVER_SIDE_SORT 1000 + +/* LDAP Virtual List View. Version = 1000 + draft revision. + * VLV requires Server Side Sort control. + */ +#define LDAP_API_FEATURE_VIRTUAL_LIST_VIEW 1000 + +#endif /* LDAP_FEATURES */ diff --git a/include/ldap_pvt_thread.h b/include/ldap_pvt_thread.h index 27c90e6c61..d02359ad9e 100644 --- a/include/ldap_pvt_thread.h +++ b/include/ldap_pvt_thread.h @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -97,6 +97,9 @@ ldap_pvt_thread_mutex_trylock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); LDAP_F( int ) ldap_pvt_thread_mutex_unlock LDAP_P(( ldap_pvt_thread_mutex_t *mutex )); +LDAP_F( ldap_pvt_thread_t ) +ldap_pvt_thread_self LDAP_P(( void )); + #ifndef LDAP_THREAD_HAVE_RDWR typedef struct ldap_int_thread_rdwr_s * ldap_pvt_thread_rdwr_t; #endif @@ -184,6 +187,9 @@ ldap_pvt_thread_pool_setkey LDAP_P(( void *data, ldap_pvt_thread_pool_keyfree_t *kfree )); +LDAP_F( void *) +ldap_pvt_thread_pool_context LDAP_P(( + ldap_pvt_thread_pool_t *pool )); LDAP_END_DECL diff --git a/include/portable.nt b/include/portable.nt index ae2c2ae107..4e45bb60dd 100644 --- a/include/portable.nt +++ b/include/portable.nt @@ -2,7 +2,7 @@ /* include/portable.nt -- manually updated of MS NT (MS VC5) */ /* synced with portable.h.in 1.191 */ /* - * Copyright 1998-2002 The OpenLDAP Foundation, Redwood City, California, USA + * Copyright 1998-2003 The OpenLDAP Foundation, Redwood City, California, USA * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -246,9 +246,6 @@ /* Define if you have the recvfrom function. */ /* #undef HAVE_RECVFROM */ -/* Define if you have the recvmsg function. */ -/* #undef HAVE_RECVMSG */ - /* Define if you have the sched_yield function. */ /* #undef HAVE_SCHED_YIELD */ diff --git a/libraries/libldap/Makefile.in b/libraries/libldap/Makefile.in index 22e60b365a..0d03a80580 100644 --- a/libraries/libldap/Makefile.in +++ b/libraries/libldap/Makefile.in @@ -10,8 +10,8 @@ PROGRAMS = apitest dntest ftest ltest SRCS = bind.c open.c result.c error.c compare.c search.c \ controls.c messages.c references.c extended.c cyrus.c \ - modify.c add.c modrdn.c delete.c abandon.c cache.c \ - sasl.c sbind.c kbind.c unbind.c cancel.c \ + modify.c add.c modrdn.c delete.c abandon.c \ + sasl.c sbind.c kbind.c unbind.c cancel.c \ filter.c free.c sort.c passwd.c whoami.c \ getdn.c getentry.c getattr.c getvalues.c addentry.c \ request.c os-ip.c url.c sortctrl.c vlvctrl.c \ @@ -19,7 +19,7 @@ SRCS = bind.c open.c result.c error.c compare.c search.c \ charray.c tls.c os-local.c dnssrv.c utf-8.c utf-8-conv.c OBJS = bind.lo open.lo result.lo error.lo compare.lo search.lo \ controls.lo messages.lo references.lo extended.lo cyrus.lo \ - modify.lo add.lo modrdn.lo delete.lo abandon.lo cache.lo \ + modify.lo add.lo modrdn.lo delete.lo abandon.lo \ sasl.lo sbind.lo kbind.lo unbind.lo cancel.lo \ filter.lo free.lo sort.lo passwd.lo whoami.lo \ getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \ diff --git a/libraries/libldap/compare.c b/libraries/libldap/compare.c index bb13bcc11f..ce850217bc 100644 --- a/libraries/libldap/compare.c +++ b/libraries/libldap/compare.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -97,17 +97,6 @@ ldap_compare_ext( return( ld->ld_errno ); } -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - if ( ldap_check_cache( ld, LDAP_REQ_COMPARE, ber ) == 0 ) { - ber_free( ber, 1 ); - ld->ld_errno = LDAP_SUCCESS; - *msgidp = ld->ld_msgid; - return( ld->ld_errno ); - } - ldap_add_request_to_cache( ld, LDAP_REQ_COMPARE, ber ); - } -#endif /* LDAP_NOCACHE */ /* send the message */ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_COMPARE, dn, ber ); diff --git a/libraries/libldap/kbind.c b/libraries/libldap/kbind.c index eadf2ac72d..0d32aac0e0 100644 --- a/libraries/libldap/kbind.c +++ b/libraries/libldap/kbind.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -101,11 +101,6 @@ ldap_kerberos_bind1( LDAP *ld, LDAP_CONST char *dn ) LDAP_FREE( cred ); -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - ldap_flush_cache( ld ); - } -#endif /* !LDAP_NOCACHE */ /* send the message */ return ( ldap_send_initial_request( ld, LDAP_REQ_BIND, dn, ber )); diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c index 01e51e7ba8..149ac4a31a 100644 --- a/libraries/libldap/open.c +++ b/libraries/libldap/open.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -22,6 +22,8 @@ #include #include +#include + #include "ldap-int.h" #include "ldap_log.h" diff --git a/libraries/libldap/os-local.c b/libraries/libldap/os-local.c index b752a382fe..0e03335de6 100644 --- a/libraries/libldap/os-local.c +++ b/libraries/libldap/os-local.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -131,6 +131,10 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s) } #undef TRACE +#if !defined(HAVE_GETPEEREID) && !defined(SO_PEERCRED) && !defined(LOCAL_PEERCRED) && defined(HAVE_SENDMSG) +#define DO_SENDMSG +#endif + static int ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_un *sa, int async) { @@ -155,6 +159,25 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_un *sa, int async) if ( ldap_pvt_ndelay_off(ld, s) == -1 ) { return ( -1 ); } +#ifdef DO_SENDMSG + /* Send a dummy message with access rights. Remote side will + * obtain our uid/gid by fstat'ing this descriptor. + */ +sendcred: { + int fds[2]; + struct iovec iov = {(char *)fds, sizeof(int)}; + struct msghdr msg = {0}; + if (pipe(fds) == 0) { + msg.msg_iov = &iov; + msg.msg_iovlen = 1; + msg.msg_accrights = (char *)fds; + msg.msg_accrightslen = sizeof(int); + sendmsg( s, &msg, 0 ); + close(fds[0]); + close(fds[1]); + } + } +#endif return ( 0 ); } @@ -181,7 +204,11 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr_un *sa, int async) return ( -1 ); if ( ldap_pvt_ndelay_off(ld, s) == -1 ) return ( -1 ); +#ifdef DO_SENDMSG + goto sendcred; +#else return ( 0 ); +#endif } oslocal_debug(ld, "ldap_connect_timeout: timed out\n",0,0,0); ldap_pvt_set_errno( ETIMEDOUT ); diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c index 913a9cb806..ac60a337c5 100644 --- a/libraries/libldap/result.c +++ b/libraries/libldap/result.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -811,11 +811,6 @@ lr->lr_res_matched ? lr->lr_res_matched : "" ); new->lm_msgtype = tag; new->lm_ber = ber; -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - ldap_add_result_to_cache( ld, new ); - } -#endif /* LDAP_NOCACHE */ /* is this the one we're looking for? */ if ( msgid == LDAP_RES_ANY || id == msgid ) { @@ -883,18 +878,7 @@ lr->lr_res_matched ? lr->lr_res_matched : "" ); prev->lm_next = l->lm_next; *result = l; ld->ld_errno = LDAP_SUCCESS; -#ifdef LDAP_WORLD_P16 - /* - * XXX questionable fix; see text for [P16] on - * http://www.critical-angle.com/ldapworld/patch/ - * - * inclusion of this patch causes searchs to hang on - * multiple platforms - */ - return( l->lm_msgtype ); -#else /* LDAP_WORLD_P16 */ return( tag ); -#endif /* !LDAP_WORLD_P16 */ } leave: diff --git a/libraries/libldap/sasl.c b/libraries/libldap/sasl.c index 7a053dfeb8..2c73abccf2 100644 --- a/libraries/libldap/sasl.c +++ b/libraries/libldap/sasl.c @@ -1,6 +1,6 @@ /* $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 */ @@ -138,11 +138,6 @@ ldap_sasl_bind( return ld->ld_errno; } -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - ldap_flush_cache( ld ); - } -#endif /* !LDAP_NOCACHE */ /* send the message */ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_BIND, dn, ber ); diff --git a/libraries/libldap/search.c b/libraries/libldap/search.c index 2817e65082..a28629cfa7 100644 --- a/libraries/libldap/search.c +++ b/libraries/libldap/search.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -98,17 +98,6 @@ ldap_search_ext( return ld->ld_errno; } -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - if ( ldap_check_cache( ld, LDAP_REQ_SEARCH, ber ) == 0 ) { - ber_free( ber, 1 ); - ld->ld_errno = LDAP_SUCCESS; - *msgidp = ld->ld_msgid; - return ld->ld_errno; - } - ldap_add_request_to_cache( ld, LDAP_REQ_SEARCH, ber ); - } -#endif /* LDAP_NOCACHE */ /* send the message */ *msgidp = ldap_send_initial_request( ld, LDAP_REQ_SEARCH, base, ber ); @@ -199,16 +188,6 @@ ldap_search( return( -1 ); } -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - if ( ldap_check_cache( ld, LDAP_REQ_SEARCH, ber ) == 0 ) { - ber_free( ber, 1 ); - ld->ld_errno = LDAP_SUCCESS; - return( ld->ld_msgid ); - } - ldap_add_request_to_cache( ld, LDAP_REQ_SEARCH, ber ); - } -#endif /* LDAP_NOCACHE */ /* send the message */ return ( ldap_send_initial_request( ld, LDAP_REQ_SEARCH, base, ber )); diff --git a/libraries/libldap/test.c b/libraries/libldap/test.c index 1300418abc..7d39dddac4 100644 --- a/libraries/libldap/test.c +++ b/libraries/libldap/test.c @@ -1,6 +1,6 @@ /* $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 */ @@ -47,8 +47,6 @@ static void print_ldap_result LDAP_P(( LDAP *ld, LDAPMessage *lm, static void print_search_entry LDAP_P(( LDAP *ld, LDAPMessage *res )); static void free_list LDAP_P(( char **list )); -#define NOCACHEERRMSG "don't compile with -DLDAP_NOCACHE if you desire local caching" - static char *dnsuffix; #ifndef HAVE_GETLINE @@ -646,39 +644,6 @@ main( int argc, char **argv ) strcpy( dnsuffix, line ); break; - case 'e': /* enable cache */ -#ifdef LDAP_NOCACHE - printf( NOCACHEERRMSG ); -#else /* LDAP_NOCACHE */ - getline( line, sizeof(line), stdin, "Cache timeout (secs)? " ); - i = atoi( line ); - getline( line, sizeof(line), stdin, "Maximum memory to use (bytes)? " ); - if ( ldap_enable_cache( ld, i, atoi( line )) == 0 ) { - printf( "local cache is on\n" ); - } else { - printf( "ldap_enable_cache failed\n" ); - } -#endif /* LDAP_NOCACHE */ - break; - - case 'x': /* uncache entry */ -#ifdef LDAP_NOCACHE - printf( NOCACHEERRMSG ); -#else /* LDAP_NOCACHE */ - getline( line, sizeof(line), stdin, "DN? " ); - ldap_uncache_entry( ld, line ); -#endif /* LDAP_NOCACHE */ - break; - - case 'X': /* uncache request */ -#ifdef LDAP_NOCACHE - printf( NOCACHEERRMSG ); -#else /* LDAP_NOCACHE */ - getline( line, sizeof(line), stdin, "request msgid? " ); - ldap_uncache_request( ld, atoi( line )); -#endif /* LDAP_NOCACHE */ - break; - case 'o': /* set ldap options */ getline( line, sizeof(line), stdin, "alias deref (0=never, 1=searching, 2=finding, 3=always)?" ); ld->ld_deref = atoi( line ); @@ -701,39 +666,16 @@ main( int argc, char **argv ) } break; - case 'O': /* set cache options */ -#ifdef LDAP_NOCACHE - printf( NOCACHEERRMSG ); -#else /* LDAP_NOCACHE */ - getline( line, sizeof(line), stdin, "cache errors (0=smart, 1=never, 2=always)?" ); - switch( atoi( line )) { - case 0: - ldap_set_cache_options( ld, 0 ); - break; - case 1: - ldap_set_cache_options( ld, - LDAP_CACHE_OPT_CACHENOERRS ); - break; - case 2: - ldap_set_cache_options( ld, - LDAP_CACHE_OPT_CACHEALLERRS ); - break; - default: - printf( "not a valid cache option\n" ); - } -#endif /* LDAP_NOCACHE */ - break; - case '?': /* help */ - printf( "Commands: [ad]d [ab]andon [b]ind\n" ); - printf( " [B]ind async [c]ompare\n" ); - printf( " [modi]fy [modr]dn [rem]ove\n" ); - printf( " [res]ult [s]earch [q]uit/unbind\n\n" ); - printf( " [d]ebug [e]nable cache set ms[g]id\n" ); - printf( " d[n]suffix [t]imeout [v]ersion\n" ); - printf( " [?]help [o]ptions [O]cache options\n" ); - printf( " [E]xplode dn [p]arse LDAP URL\n" ); - printf( " [x]uncache entry [X]uncache request\n" ); + printf( +"Commands: [ad]d [ab]andon [b]ind\n" +" [B]ind async [c]ompare\n" +" [modi]fy [modr]dn [rem]ove\n" +" [res]ult [s]earch [q]uit/unbind\n\n" +" [d]ebug set ms[g]id\n" +" d[n]suffix [t]imeout [v]ersion\n" +" [?]help [o]ptions" +" [E]xplode dn [p]arse LDAP URL\n" ); break; default: diff --git a/libraries/libldap/unbind.c b/libraries/libldap/unbind.c index e09ef637be..a34939abc0 100644 --- a/libraries/libldap/unbind.c +++ b/libraries/libldap/unbind.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -93,12 +93,6 @@ ldap_ld_free( ldap_msgfree( lm ); } -#ifndef LDAP_NOCACHE - if ( ld->ld_cache != NULL ) { - ldap_destroy_cache( ld ); - ld->ld_cache = NULL; - } -#endif /* !LDAP_NOCACHE */ if ( ld->ld_error != NULL ) { LDAP_FREE( ld->ld_error ); diff --git a/libraries/libldap_r/Makefile.in b/libraries/libldap_r/Makefile.in index fd18f64333..25345f588d 100644 --- a/libraries/libldap_r/Makefile.in +++ b/libraries/libldap_r/Makefile.in @@ -12,8 +12,8 @@ XXDIR = $(srcdir)/../libldap XXSRCS = apitest.c test.c \ bind.c open.c result.c error.c compare.c search.c \ controls.c messages.c references.c extended.c cyrus.c \ - modify.c add.c modrdn.c delete.c abandon.c cache.c \ - sasl.c sbind.c kbind.c unbind.c \ + modify.c add.c modrdn.c delete.c abandon.c \ + sasl.c sbind.c kbind.c unbind.c cancel.c \ filter.c free.c sort.c passwd.c whoami.c \ getdn.c getentry.c getattr.c getvalues.c addentry.c \ request.c os-ip.c url.c sortctrl.c vlvctrl.c \ @@ -27,8 +27,8 @@ OBJS = threads.lo rdwr.lo tpool.lo \ thr_pth.lo thr_stub.lo \ bind.lo open.lo result.lo error.lo compare.lo search.lo \ controls.lo messages.lo references.lo extended.lo cyrus.lo \ - modify.lo add.lo modrdn.lo delete.lo abandon.lo cache.lo \ - sasl.lo sbind.lo kbind.lo unbind.lo \ + modify.lo add.lo modrdn.lo delete.lo abandon.lo \ + sasl.lo sbind.lo kbind.lo unbind.lo cancel.lo \ filter.lo free.lo sort.lo passwd.lo whoami.lo \ getdn.lo getentry.lo getattr.lo getvalues.lo addentry.lo \ request.lo os-ip.lo url.lo sortctrl.lo vlvctrl.lo \ diff --git a/libraries/librewrite/var.c b/libraries/librewrite/var.c index d4d28ad4b1..941e54b426 100644 --- a/libraries/librewrite/var.c +++ b/libraries/librewrite/var.c @@ -173,9 +173,10 @@ rewrite_var_set( */ static void rewrite_var_free( - struct rewrite_var *var + void *v_var ) { + struct rewrite_var *var = v_var; assert( var != NULL ); assert( var->lv_name != NULL ); @@ -193,7 +194,7 @@ rewrite_var_delete( Avlnode *tree ) { - avl_free( tree, ( AVL_FREE )rewrite_var_free ); + avl_free( tree, rewrite_var_free ); return REWRITE_SUCCESS; }