]> git.sur5r.net Git - openldap/commitdiff
Mostly based on patches provided by Hallvard B. Furuseth
authorPierangelo Masarati <ando@openldap.org>
Mon, 8 Apr 2002 09:43:22 +0000 (09:43 +0000)
committerPierangelo Masarati <ando@openldap.org>
Mon, 8 Apr 2002 09:43:22 +0000 (09:43 +0000)
ITS#1677 - cast away const warnings
ITS#1678 - unsigned char args to ctype funcs
ITS#1682 - don't redefine ldap_debug
ITS#1683 - uninitialized vars
ITS#1703 - ldo_debug initialization
ITS#1705 - unsigned testing
ITS#1706 - socklen_t args
ITS#1719 - back-tcl update (other cleanups/fixes/improvements; yet untested)
ITS#1724 - integerNormalize/integerFilter/integerIndexer bugs
ITS#1725 - libdes not required

Implement back-null (/dev/null style backend)
Cleanup some misc warnings ("%lu" format, unused/uninitialized vars,
        ambiguous operator precedence)

Kurt, please regenerate configure

77 files changed:
clients/tools/ldapwhoami.c
configure.in
doc/man/man5/slapd.access.5
doc/man/man5/slapd.conf.5
doc/man/man8/slapd.8
include/ldap_pvt_uc.h
include/portable.h.in
include/portable.nt
libraries/liblber/bprint.c
libraries/libldap/dntest.c
libraries/libldap/ftest.c
libraries/libldap/getdn.c
libraries/libldap/ldap-int.h
libraries/libldap/os-ip.c
libraries/libldap/os-local.c
libraries/libldap/tls.c
libraries/libldap/url.c
libraries/libldap/utf-8.c
libraries/libldif/line64.c
libraries/liblutil/entropy.c
libraries/librewrite/config.c
libraries/librewrite/context.c
libraries/librewrite/map.c
libraries/librewrite/parse.c
libraries/librewrite/session.c
libraries/librewrite/subst.c
libraries/librewrite/var.c
servers/slapd/add.c
servers/slapd/back-bdb/cache.c
servers/slapd/back-bdb/search.c
servers/slapd/back-bdb/tools.c
servers/slapd/back-dnssrv/bind.c
servers/slapd/back-dnssrv/config.c
servers/slapd/back-dnssrv/referral.c
servers/slapd/back-dnssrv/search.c
servers/slapd/back-ldap/bind.c
servers/slapd/back-ldap/config.c
servers/slapd/back-ldbm/attribute.c
servers/slapd/back-ldbm/modrdn.c
servers/slapd/back-ldbm/passwd.c
servers/slapd/back-meta/search.c
servers/slapd/back-monitor/README
servers/slapd/back-monitor/backend.c
servers/slapd/back-monitor/time.c
servers/slapd/back-null/Makefile.in [new file with mode: 0644]
servers/slapd/back-null/README [new file with mode: 0644]
servers/slapd/back-null/external.h [new file with mode: 0644]
servers/slapd/back-null/null.c [new file with mode: 0644]
servers/slapd/back-tcl/README.back-tcl
servers/slapd/back-tcl/tcl_abandon.c
servers/slapd/back-tcl/tcl_add.c
servers/slapd/back-tcl/tcl_back.h
servers/slapd/back-tcl/tcl_bind.c
servers/slapd/back-tcl/tcl_compare.c
servers/slapd/back-tcl/tcl_config.c
servers/slapd/back-tcl/tcl_delete.c
servers/slapd/back-tcl/tcl_init.c
servers/slapd/back-tcl/tcl_modify.c
servers/slapd/back-tcl/tcl_modrdn.c
servers/slapd/back-tcl/tcl_search.c
servers/slapd/back-tcl/tcl_unbind.c
servers/slapd/back-tcl/tcl_util.c
servers/slapd/backend.c
servers/slapd/bind.c
servers/slapd/charray.c
servers/slapd/compare.c
servers/slapd/delete.c
servers/slapd/entry.c
servers/slapd/limits.c
servers/slapd/modify.c
servers/slapd/modrdn.c
servers/slapd/schema_init.c
servers/slapd/search.c
servers/slapd/tools/slapadd.c
servers/slapd/unbind.c
servers/slurpd/ldap_op.c
servers/slurpd/ri.c

index fc7c44cee2a8b4457ca58dc069c9e3884edc9381..d69e35faa4607c9f3347b8dc985d7f3aa7287264 100644 (file)
@@ -93,7 +93,6 @@ main( int argc, char *argv[] )
        int             use_tls = 0;
        int             referrals = 0;
        LDAP           *ld = NULL;
-       struct berval *bv = NULL;
 
        int id, code = LDAP_OTHER;
        LDAPMessage *res;
index 68d7e632745d3aa40a436da09b802aca42338c44..e76123546d41aaad19704c5bc0cdd0230f8f879b 100644 (file)
@@ -199,6 +199,9 @@ OL_ARG_WITH(meta_module,[    --with-meta-module       module type], static,
 OL_ARG_ENABLE(monitor,[    --enable-monitor      enable monitor backend], no)dnl
 OL_ARG_WITH(monitor_module,[    --with-monitor-module module type], static,
        [static dynamic])
+OL_ARG_ENABLE(null,[    --enable-null    enable null backend], no)dnl
+OL_ARG_WITH(null_module,[    --with-null-module        module type], static,
+       [static dynamic])
 OL_ARG_ENABLE(passwd,[    --enable-passwd        enable passwd backend], no)dnl
 OL_ARG_WITH(passwd_module,[    --with-passwd-module  module type], static,
        [static dynamic])
@@ -252,6 +255,9 @@ if test $ol_enable_slapd = no ; then
        if test $ol_enable_monitor = yes ; then
                AC_MSG_WARN([slapd disabled, ignoring --enable-monitor argument])
        fi
+       if test $ol_enable_null = yes ; then
+               AC_MSG_WARN([slapd disabled, ignoring --enable-null argument])
+       fi
        if test $ol_enable_passwd = yes ; then
                AC_MSG_WARN([slapd disabled, ignoring --enable-passwd argument])
        fi
@@ -309,6 +315,9 @@ dnl fi
        if test $ol_with_monitor_module != static ; then
                AC_MSG_WARN([slapd disabled, ignoring --with-monitor-module argument])
        fi
+       if test $ol_with_null_module != static ; then
+               AC_MSG_WARN([slapd disabled, ignoring --with-null-module argument])
+       fi
        if test $ol_with_passwd_module != static ; then
                AC_MSG_WARN([slapd disabled, ignoring --with-passwd-module argument])
        fi
@@ -338,6 +347,7 @@ dnl fi
        ol_enable_ldbm=no
        ol_enable_meta=no
        ol_enable_monitor=no
+       ol_enable_null=no
        ol_enable_passwd=no
        ol_enable_perl=no
        ol_enable_shell=no
@@ -361,6 +371,7 @@ dnl ol_enable_multimaster=no
        ol_with_ldbm_module=static
        ol_with_meta_module=static
        ol_with_monitor_module=static
+       ol_with_null_module=static
        ol_with_passwd_module=static
        ol_with_perl_module=static
        ol_with_shell_module=static
@@ -392,6 +403,7 @@ elif test $ol_enable_ldbm = no ; then
                $ol_enable_ldap = no -a \
                $ol_enable_meta = no -a \
                $ol_enable_monitor = no -a \
+               $ol_enable_null = no -a \
                $ol_enable_passwd = no -a \
                $ol_enable_perl = no -a \
                $ol_enable_shell = no -a \
@@ -506,6 +518,7 @@ BUILD_LDAP=no
 BUILD_LDBM=no
 BUILD_META=no
 BUILD_MONITOR=no
+BUILD_NULL=no
 BUILD_PASSWD=no
 BUILD_PERL=no
 BUILD_SHELL=no
@@ -518,6 +531,7 @@ BUILD_LDAP_DYNAMIC=static
 BUILD_LDBM_DYNAMIC=static
 BUILD_META_DYNAMIC=static
 BUILD_MONITOR_DYNAMIC=static
+BUILD_NULL_DYNAMIC=static
 BUILD_PASSWD_DYNAMIC=static
 BUILD_PERL_DYNAMIC=static
 BUILD_SHELL_DYNAMIC=static
@@ -734,6 +748,7 @@ else
        ol_with_ldbm_module=static
        ol_with_meta_module=static
        ol_with_monitor_module=static
+       ol_with_null_module=static
        ol_with_passwd_module=static
        ol_with_perl_module=static
        ol_with_shell_module=static
@@ -1048,11 +1063,15 @@ if test $ol_with_kerberos = yes -o $ol_with_kerberos = auto \
                                [-l$krb5crypto -lcom_err])
 
                elif test $krb5_impl = heimdal; then
+                       AC_CHECK_LIB(des, main,
+                               [krb5crypto=des],
+                               [krb5crypto=crypto])
+
                        AC_CHECK_LIB(krb5, main,
                                [have_krb5=yes
-                               KRB5_LIBS="-lkrb5 -ldes -lasn1 -lroken -lcom_err"],
+                               KRB5_LIBS="-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err"],
                                [have_krb5=no],
-                               [-ldes -lasn1 -lroken -lcom_err])
+                               [-l$krb5crypto -lasn1 -lroken -lcom_err])
 
                        AC_DEFINE(HAVE_HEIMDAL_KERBEROS, 1,
                                [define if you have HEIMDAL Kerberos])
@@ -1097,7 +1116,7 @@ if test $ol_link_krb5 = yes -a \( $ol_with_kerberos = yes -o \
                elif test $krb5_impl = heimdal; then
                        AC_CHECK_LIB(krb4, main, [have_k425=yes
                                KRB4_LIBS="-lkrb4"], [have_k425=no],
-                               [-lkrb5 -ldes -lasn1 -lroken -lcom_err])
+                               [-lkrb5 -l$krb5crypto -lasn1 -lroken -lcom_err])
 
                else
                        have_425=no
@@ -2599,6 +2618,22 @@ if test "$ol_enable_monitor" != no ; then
        fi
 fi
 
+if test "$ol_enable_null" != no ; then
+       AC_DEFINE(SLAPD_NULL,1,[define to support NULL backend])
+       BUILD_SLAPD=yes
+       BUILD_NULL=yes
+       if test "$ol_with_null_module" != static ; then
+               AC_DEFINE(SLAPD_NULL_DYNAMIC,1,
+                       [define to support dynamic NULL backend])
+               BUILD_NULL=mod
+               BUILD_NULL_DYNAMIC=shared
+               SLAPD_MODULES_LIST="$SLAPD_MODULES_LIST -dlopen \$(SLAP_DIR)back-null/back_null.la"
+               SLAPD_DYNAMIC_BACKENDS="$SLAPD_DYNAMIC_BACKENDS back-null"
+       else
+               SLAPD_STATIC_BACKENDS="$SLAPD_STATIC_BACKENDS back-null"
+       fi
+fi
+
 if test "$ol_enable_passwd" != no ; then
        AC_DEFINE(SLAPD_PASSWD,1,[define to support PASSWD backend])
        BUILD_SLAPD=yes
@@ -2715,6 +2750,7 @@ AC_SUBST(BUILD_SLAPD)
   AC_SUBST(BUILD_LDBM)
   AC_SUBST(BUILD_META)
   AC_SUBST(BUILD_MONITOR)
+  AC_SUBST(BUILD_NULL)
   AC_SUBST(BUILD_PASSWD)
   AC_SUBST(BUILD_PERL)
   AC_SUBST(BUILD_SHELL)
@@ -2726,6 +2762,7 @@ AC_SUBST(BUILD_SLAPD)
   AC_SUBST(BUILD_LDBM_DYNAMIC)
   AC_SUBST(BUILD_META_DYNAMIC)
   AC_SUBST(BUILD_MONITOR_DYNAMIC)
+  AC_SUBST(BUILD_NULL_DYNAMIC)
   AC_SUBST(BUILD_PASSWD_DYNAMIC)
   AC_SUBST(BUILD_PERL_DYNAMIC)
   AC_SUBST(BUILD_SHELL_DYNAMIC)
@@ -2813,6 +2850,7 @@ servers/slapd/back-ldap/Makefile:build/top.mk:servers/slapd/back-ldap/Makefile.i
 servers/slapd/back-ldbm/Makefile:build/top.mk:servers/slapd/back-ldbm/Makefile.in:build/mod.mk \
 servers/slapd/back-meta/Makefile:build/top.mk:servers/slapd/back-meta/Makefile.in:build/mod.mk \
 servers/slapd/back-monitor/Makefile:build/top.mk:servers/slapd/back-monitor/Makefile.in:build/mod.mk \
+servers/slapd/back-null/Makefile:build/top.mk:servers/slapd/back-null/Makefile.in:build/mod.mk \
 servers/slapd/back-passwd/Makefile:build/top.mk:servers/slapd/back-passwd/Makefile.in:build/mod.mk \
 servers/slapd/back-perl/Makefile:build/top.mk:servers/slapd/back-perl/Makefile.in:build/mod.mk \
 servers/slapd/back-shell/Makefile:build/top.mk:servers/slapd/back-shell/Makefile.in:build/mod.mk \
index b2a0cb8df4d4a8d455d60049622bb88c4d26a205..87a97f2bc9960d282a672546db20b182d84be4da 100644 (file)
@@ -139,13 +139,13 @@ It can have the forms
        users
        self
 
-       dn[.<dnstyle>]=<pattern>
+       dn[.<dnstyle>[,<modifier>]]=<pattern>
        dnattr=<attrname>
        group[/<objectclass>[/<attrname>]]
                [.<style>]=<pattern>
        peername[.<style>]=<pattern>
        sockname[.<style>]=<pattern>
-       domain[.<style>]=<pattern>
+       domain[.<domainstyle>[,<modifier>]]=<pattern>
        sockurl[.<style>]=<pattern>
        set[.<style>]=<pattern>
 
@@ -254,7 +254,18 @@ The same
 .B style
 rules for pattern match described for the
 .B group
-case apply.
+case apply. 
+The
+.BR domain 
+clause also allows the
+.B subtree
+style, which succeeds when a fully qualified name exactly matches the
+.BR domain
+pattern, or its trailing part, after a 
+.BR dot ,
+exactly matches the 
+.BR domain
+pattern.
 .LP
 The statement
 .B set=<pattern>
index 6227c02572963aca5ae68168679087d26821f931..049e4c80207b291622fc8726d3b5cff7087ad87e 100644 (file)
@@ -277,7 +277,6 @@ and
 .BR timelimit ;
 no limit is set on 
 .BR unchecked .
-This feature is currently exploited by the ldbm backend only.
 .RE
 .TP
 .B loglevel <integer>
@@ -418,6 +417,11 @@ conditions are currently same.
 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 
+if compiled with --enable-rlookups).
+.TP
 .B rootDSE <file>
 Specify the name of an LDIF(5) file containing user defined attributes
 for the root DSE.  These attributes are returned in addition to the
@@ -682,10 +686,19 @@ type of backend.
 .B backend <databasetype>
 Mark the beginning of a backend definition. <databasetype>
 should be one of
+.B bdb,
+.B dnssrv,
+.B ldap,
 .B ldbm,
+.B meta,
+.B monitor,
+.B null,
+.B passwd,
+.B perl,
 .B shell,
+.B sql,
 or
-.B passwd
+.B tcl,
 depending on which backend will serve the database.
 
 .SH GENERAL DATABASE OPTIONS
@@ -697,10 +710,18 @@ type of backend.
 Mark the beginning of a new database instance definition. <databasetype>
 should be one of
 .B bdb,
+.B dnssrv,
+.B ldap,
 .B ldbm,
+.B meta,
+.B monitor,
+.B null,
+.B passwd,
+.B perl,
 .B shell,
+.B sql,
 or
-.B passwd
+.B tcl,
 depending on which backend will serve the database.
 .TP
 .B lastmod on | off
@@ -806,7 +827,7 @@ required for each database definition.
 .B subordinate
 Specify that the current backend database is a subordinate of another
 backend database. A subordinate database may have only one suffix. This
-option may bse used to glue multiple databases into a single namingContext.
+option may be used to glue multiple databases into a single namingContext.
 If the suffix of the current database is within the namingContext of a
 superior database, searches against the superior database will be
 propagated to the subordinate as well. All of the databases
@@ -969,6 +990,10 @@ file.
 .B file <filename>
 Specifies an alternate passwd file to use.  The default is
 .B /etc/passwd.
+.SH OTHER DATABASE-SPECIFIC OPTIONS
+Other databases may allow specific configuration options; they will be
+documented separately since most of these databases are very specific
+or experimental.
 .SH EXAMPLE
 "OpenLDAP Administrator's Guide" contains an annotated
 example of a configuration file.
index 209818ad1930af589d51259ed92ab090cc6bacff..2886953084eaa464361af04bd9d13ef4cd8c0926 100644 (file)
@@ -124,7 +124,7 @@ Specifies a chroot "jail" directory.  slapd will
 .BR chdir (2)
 then
 .BR chroot (2)
-to this directory after opening listeners but before any reading
+to this directory after opening listeners but before reading
 any configuration file or initializing any backend.
 .TP
 .BI \-u " user"
index 1cc84620eb72b1cf5b93cdb600d42e6f178c8c6e..6a2e4af2642a38f9075fa1fd59c3c9031d999202 100644 (file)
@@ -84,16 +84,16 @@ LDAP_F (char*) ldap_utf8_strtok( char* sp, const char* sep, char **last);
 LDAP_V (const char) ldap_utf8_lentab[128];
 LDAP_V (const char) ldap_utf8_mintab[32];
 
-#define LDAP_UTF8_ISASCII(p) ( !(*(unsigned char *)(p) & 0x80 ) )
+#define LDAP_UTF8_ISASCII(p) ( !(*(const unsigned char *)(p) & 0x80 ) )
 #define LDAP_UTF8_CHARLEN(p) ( LDAP_UTF8_ISASCII(p) \
-       ? 1 : ldap_utf8_lentab[*(unsigned char *)(p) ^ 0x80] )
+       ? 1 : ldap_utf8_lentab[*(const unsigned char *)(p) ^ 0x80] )
 
 /* This is like CHARLEN but additionally validates to make sure
  * the char used the shortest possible encoding.
  * 'l' is used to temporarily hold the result of CHARLEN.
  */
 #define LDAP_UTF8_CHARLEN2(p, l) ( ( ( l = LDAP_UTF8_CHARLEN( p )) < 3 || \
-       ( ldap_utf8_mintab[*(unsigned char *)(p) & 0x1f] & (p)[1] ) ) ? \
+       ( ldap_utf8_mintab[*(const unsigned char *)(p) & 0x1f] & (p)[1] ) ) ? \
        l : 0 )
 
 #define LDAP_UTF8_OFFSET(p) ( LDAP_UTF8_ISASCII(p) \
index 92ca6c08e6153e8bc5fa591cf0fdbee00e5591dd..2e2d7a9c7bd66a670cc02a2c6db2c82d801c5e4b 100644 (file)
 /* define to support dynamic cn=Monitor backend */
 #undef SLAPD_MONITOR_DYNAMIC
 
+/* define to support NULL backend */
+#undef SLAPD_NULL
+
+/* define to support dynamic NULL backend */
+#undef SLAPD_NULL_DYNAMIC
+
 /* define to support PASSWD backend */
 #undef SLAPD_PASSWD
 
index 7117c220531fd86b7cf577c6dd954ff18663f96b..921b3dd20e657737505a4531217c8f11b0be0765 100644 (file)
 /* define to support dynamic cn=Monitor backend */
 /* #undef SLAPD_MONITOR_DYNAMIC */
 
+/* define to support NULL backend */
+/* #undef SLAPD_NULL */
+
+/* define to support dynamic NULL backend */
+/* #undef SLAPD_NULL_DYNAMIC */
+
 /* define to support PASSWD backend */
 /* #undef SLAPD_PASSWD */
 
index 44f15d56636a8f9a3ea6744bde8f61786e0916a0..a6ae8ce7ed68337196edc622c1382071d440ba36 100644 (file)
@@ -210,7 +210,7 @@ ber_bprint(
                
                off = BP_GRAPH + n + ((n >= 8)?1:0);
 
-               if ( isprint( data[i] )) {
+               if ( isprint( (unsigned char) data[i] )) {
                        line[ BP_GRAPH + n ] = data[i];
                } else {
                        line[ BP_GRAPH + n ] = '.';
index caa03212c95b4f48fe6dafd75e1eb4610c9e9319..72d3c52febb82f4e73f4c1564564ccfcef8a84eb 100644 (file)
@@ -72,8 +72,8 @@ main( int argc, char *argv[] )
                size_t len;
                
                fgets( buf, sizeof( buf ), stdin );
-               len = strlen( buf ) - 1;
-               if ( len >= 0 && buf[ len ] == '\n' ) {
+               len = strlen( buf );
+               if ( len > 0 && buf[ --len ] == '\n' ) {
                        buf[ len ] = '\0';
                }
                strin = buf;
index 587c0638bfe6d6993105ab18dadad39aafc1722a..f61298992ed4e7b372d38f2e0aa0ade4dc8a2e83 100644 (file)
@@ -38,7 +38,6 @@ main( int argc, char *argv[] )
 {
        int c;
        int debug=0;
-       char *filter=NULL;
 
     while( (c = getopt( argc, argv, "d:" )) != EOF ) {
                switch ( c ) {
index 4eec0896e838217cdda2a7bcd7b094bd748ef2c6..db9fdb90836f7e3aaa18cd7452cf1594b3d8cf9b 100644 (file)
@@ -1753,7 +1753,7 @@ quotedIA52strval( const char *str, struct berval *val, const char **next, unsign
        }
 
        len = endPos - startPos - escapes;
-       assert( len >= 0 );
+       assert( endPos >= startPos + escapes );
        val->bv_len = len;
        if ( escapes == 0 ) {
                val->bv_val = LDAP_STRNDUP( startPos, len );
index baeebd69260764efd08b346c9f462020367d494c..4ad20dd9f4c813a6172fbc9e940e42b441803d9d 100644 (file)
@@ -128,6 +128,7 @@ struct ldapoptions {
 #define LDAP_UNINITIALIZED     0x0
 #define LDAP_INITIALIZED       0x1
 #define LDAP_VALID_SESSION     0x2
+       int   ldo_debug;
 #ifdef LDAP_CONNECTIONLESS
 #define        LDAP_IS_UDP(ld)         ((ld)->ld_options.ldo_is_udp)
        void*                   ldo_peer;       /* struct sockaddr* */
@@ -135,7 +136,6 @@ struct ldapoptions {
        int                     ldo_is_udp;
 #endif
 
-       int             ldo_debug;
        /* per API call timeout */
        struct timeval          *ldo_tm_api;
        struct timeval          *ldo_tm_net;
index 3ebe3e719d7c57f99d9a7bddcc7ff71a3e6ee034..0084743d8498fe922a32e9aade7835416abbe656 100644 (file)
@@ -152,7 +152,7 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s)
 #if defined( notyet ) /* && defined( SO_ERROR ) */
 {
        int so_errno;
-       int dummy = sizeof(so_errno);
+       socklen_t dummy = sizeof(so_errno);
        if ( getsockopt( s, SOL_SOCKET, SO_ERROR, &so_errno, &dummy )
                == AC_SOCKET_ERROR )
        {
@@ -170,7 +170,7 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s)
        /* error slippery */
        struct sockaddr_in sin;
        char ch;
-       int dummy = sizeof(sin);
+       socklen_t dummy = sizeof(sin);
        if ( getpeername( s, (struct sockaddr *) &sin, &dummy )
                == AC_SOCKET_ERROR )
        {
@@ -344,7 +344,7 @@ ldap_connect_to_host(LDAP *ld, Sockbuf *sb,
                hints.ai_socktype = socktype;
 
                snprintf(serv, sizeof serv, "%d", port );
-               if ( err = getaddrinfo(host, serv, &hints, &res) ) {
+               if ( ( err = getaddrinfo(host, serv, &hints, &res) ) ) {
                        osip_debug(ld, "ldap_connect_to_host: getaddrinfo failed: %s\n",
                                AC_GAI_STRERROR(err), 0, 0);
                        return -1;
index c5476909ef928f32d0e5e9b0fc34f6b09b1330b5..8b3da9f2285d919e42e786f8f973b2b649f404b2 100644 (file)
@@ -97,7 +97,7 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s)
 #if defined( notyet ) /* && defined( SO_ERROR ) */
 {
        int so_errno;
-       int dummy = sizeof(so_errno);
+       socklen_t dummy = sizeof(so_errno);
        if ( getsockopt( s, SOL_SOCKET, SO_ERROR, &so_errno, &dummy )
                == AC_SOCKET_ERROR )
        {
@@ -115,7 +115,7 @@ ldap_pvt_is_socket_ready(LDAP *ld, int s)
        /* error slippery */
        struct sockaddr_un sa;
        char ch;
-       int dummy = sizeof(sa);
+       socklen_t dummy = sizeof(sa);
        if ( getpeername( s, (struct sockaddr *) &sa, &dummy )
                == AC_SOCKET_ERROR )
        {
index 2b755120d94bbbbbb1cb110e83f65fd9a6ffe654..7fcb778c1170e73ae900a5bc3d426fb2377bcfae 100644 (file)
@@ -906,7 +906,7 @@ ldap_pvt_tls_check_hostname( void *s, const char *name_in )
        alt = X509V3_EXT_d2i(ex);
        if (alt)
        {
-           int n, len1, len2;
+           int n, len1, len2 = 0;
            char *domain;
            GENERAL_NAME *gn;
            X509V3_EXT_METHOD *method;
index 42a595aee5f5c884effe91c542a07321ca03aea2..97059170b7d214db18b30fe4d1e417de65933ef9 100644 (file)
@@ -891,7 +891,7 @@ ldap_url_parselist (LDAPURLDesc **ludlist, const char *url )
        if (url == NULL)
                return LDAP_PARAM_ERROR;
 
-       urls = ldap_str2charray((char *)url, ", ");
+       urls = ldap_str2charray(url, ", ");
        if (urls == NULL)
                return LDAP_NO_MEMORY;
 
@@ -928,7 +928,7 @@ ldap_url_parsehosts(
        if (hosts == NULL)
                return LDAP_PARAM_ERROR;
 
-       specs = ldap_str2charray((char *)hosts, ", ");
+       specs = ldap_str2charray(hosts, ", ");
        if (specs == NULL)
                return LDAP_NO_MEMORY;
 
index 9000e0a19b56b007bda51df7ab9c1eb973eb0fcb..a241a6313c1f4158c223fd545999a716ee182d3e 100644 (file)
@@ -86,7 +86,7 @@ int ldap_utf8_charlen( const char * p )
        if (!(*p & 0x80))
                return 1;
 
-       return ldap_utf8_lentab[*(unsigned char *)p ^ 0x80];
+       return ldap_utf8_lentab[*(const unsigned char *)p ^ 0x80];
 }
 
 /*
index 6081645129a4ea25cd0dd6ae16c5eb9fe79b7c1d..3f16c95d600a5a24c213d1dae8d76f0b99d04582 100644 (file)
@@ -411,8 +411,8 @@ ldif_sput(
        stop = (const unsigned char *) (val + vlen);
 
        if ( type == LDIF_PUT_VALUE
-               && isgraph( val[0] ) && val[0] != ':' && val[0] != '<'
-               && isgraph( val[vlen-1] )
+               && isgraph( (unsigned char) val[0] ) && val[0] != ':' && val[0] != '<'
+               && isgraph( (unsigned char) val[vlen-1] )
 #ifndef LDAP_BINARY_DEBUG
                && strstr( name, ";binary" ) == NULL
 #endif
@@ -542,8 +542,8 @@ int ldif_is_not_printable(
                return -1;
        }
 
-       if( isgraph( val[0] ) && val[0] != ':' && val[0] != '<' &&
-               isgraph( val[vlen-1] ) )
+       if( isgraph( (unsigned char) val[0] ) && val[0] != ':' && val[0] != '<' &&
+               isgraph( (unsigned char) val[vlen-1] ) )
        {
                ber_len_t i;
 
index 220d15ddac6b08d4d120ca444ade63b03f140834..cd379c67246abdf878a57de454cef4123ba8aa20 100644 (file)
@@ -48,7 +48,7 @@ int lutil_entropy( unsigned char *buf, ber_len_t nbytes )
                close(fd);
 
                /* should return nbytes */
-               if( rc < nbytes ) return -1;
+               if( rc != nbytes ) return -1;
 
                return 0;
        }
index 3e10ac200c8526022236154917b520088ab8545e..556fd3094779810f1add33e235ea9e45a198b635 100644 (file)
@@ -273,8 +273,8 @@ rewrite_builtin_map_cmp(
 {
        const struct rewrite_builtin_map *m1, *m2;
 
-        m1 = ( struct rewrite_builtin_map * )c1;
-        m2 = ( struct rewrite_builtin_map * )c2;
+        m1 = ( const struct rewrite_builtin_map * )c1;
+        m2 = ( const struct rewrite_builtin_map * )c2;
 
         assert( m1 != NULL );
         assert( m2 != NULL );
index e32eb8a11d147390b925a3a482d8491583cc6e45..115cca6f1e26200d0d5f89bb6525d15ed7f9b747 100644 (file)
@@ -36,10 +36,10 @@ rewrite_context_cmp(
                const void *c2
 )
 {
-       struct rewrite_context *lc1, *lc2;
+       const struct rewrite_context *lc1, *lc2;
        
-       lc1 = (struct rewrite_context *)c1;
-       lc2 = (struct rewrite_context *)c2;
+       lc1 = (const struct rewrite_context *)c1;
+       lc2 = (const struct rewrite_context *)c2;
        
        assert( c1 != NULL );
        assert( c2 != NULL );
index 816a27edf76dd3c4afa8c8648615c225b9b6124e..2180d8907757164816ad4c23e19b8babe54a5fe2 100644 (file)
@@ -253,7 +253,7 @@ rewrite_map_parse(
                         * '\' followed by a digit may mark the beginning
                         * of an old map
                         */
-                       } else if ( isdigit( p[ 1 ] ) && p[ 2 ] == '{' ) {
+                       } else if ( isdigit( (unsigned char) p[ 1 ] ) && p[ 2 ] == '{' ) {
                                cnt++;
                                p++;
                        }
@@ -329,12 +329,12 @@ rewrite_map_parse(
        /*
         * Check the syntax of the variable name
         */
-       if ( !isalpha( p[ 0 ] ) ) {
+       if ( !isalpha( (unsigned char) p[ 0 ] ) ) {
                free( s );
                return NULL;
        }
        for ( p++; p[ 0 ] != '\0'; p++ ) {
-               if ( !isalnum( p[ 0 ] ) ) {
+               if ( !isalnum( (unsigned char) p[ 0 ] ) ) {
                        free( s );
                        return NULL;
                }
index 7b65d1897f7866666b3817547257d67b4b426e8e..a8129c41aed5ecfd83b2bce50d2961282eff3beb 100644 (file)
@@ -38,7 +38,7 @@ parse_line(
        int in_quoted_field = 0, cnt = 0;
        char quote = '\0';
        
-       for ( p = buf; isspace( p[ 0 ] ); p++ );
+       for ( p = buf; isspace( (unsigned char) p[ 0 ] ); p++ );
        
        if ( p[ 0 ] == '#' ) {
                return 0;
@@ -57,7 +57,7 @@ parse_line(
                                        *argc = cnt;
                                        return 1;
                                }
-                               for ( p++; isspace( p[ 0 ] ); p++ );
+                               for ( p++; isspace( (unsigned char) p[ 0 ] ); p++ );
                                begin = p;
                                p--;
                                
@@ -69,7 +69,7 @@ parse_line(
                                in_quoted_field = 1 - in_quoted_field;
                                quote = p[ 0 ];
                        }
-               } else if ( isspace( p[ 0 ] ) && !in_quoted_field ) {
+               } else if ( isspace( (unsigned char) p[ 0 ] ) && !in_quoted_field ) {
                        p[ 0 ] = '\0';
                        argv[ cnt ] = begin;
 
@@ -78,7 +78,7 @@ parse_line(
                                return 1;
                        }
 
-                       for ( p++; isspace( p[ 0 ] ); p++ );
+                       for ( p++; isspace( (unsigned char) p[ 0 ] ); p++ );
                        begin = p;
                        p--;
                }
index b372eff5da9d0a7d452ace02e114d85f9a4b4732..fa5c78354a682211ca80e85084c50c3ed3e2d5cf 100644 (file)
@@ -35,10 +35,10 @@ rewrite_cookie_cmp(
                 const void *c2
 )
 {
-       struct rewrite_session *s1, *s2;
+       const struct rewrite_session *s1, *s2;
 
-       s1 = ( struct rewrite_session * )c1;
-       s2 = ( struct rewrite_session * )c2;
+       s1 = ( const struct rewrite_session * )c1;
+       s2 = ( const struct rewrite_session * )c2;
 
        assert( s1 != NULL );
        assert( s2 != NULL );
index f84ed44c251f47cecc61f6994b2bf4412a67c7b3..1024517463519212239e7985e28a8f1b6cd81b61 100644 (file)
@@ -101,7 +101,7 @@ rewrite_subst_compile(
                /*
                 * Substitution pattern
                 */
-               if ( isdigit( p[ 1 ] ) ) {
+               if ( isdigit( (unsigned char) p[ 1 ] ) ) {
                        int d = p[ 1 ] - '0';
                        struct rewrite_submatch **tmpsm;
 
index ca39ed13db2556205b8ec2bcda9810bb0ef71cff..d4d28ad4b1bd56823ecf2d421a85d7d89b59665c 100644 (file)
@@ -37,8 +37,8 @@ rewrite_var_cmp(
 {
        const struct rewrite_var *v1, *v2;
 
-       v1 = ( struct rewrite_var * )c1;
-       v2 = ( struct rewrite_var * )c2;
+       v1 = ( const struct rewrite_var * )c1;
+       v2 = ( const struct rewrite_var * )c2;
        
        assert( v1 != NULL );
        assert( v2 != NULL );
index 5d222c5af0a81a920c87ad5f7610e94770339e58..3c5c66a9ddfc54b760b424ca9ed11c0433830bae 100644 (file)
@@ -181,7 +181,7 @@ do_add( Connection *conn, Operation *op )
                goto done;
        }
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d ADD dn=\"%s\"\n",
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu ADD dn=\"%s\"\n",
            op->o_connid, op->o_opid, e->e_dn, 0, 0 );
 
        if( e->e_nname.bv_len == 0 ) {
index d63a5b7f60b569e8d64de4ddf9dd142b7c6acf60..f26541a57c92b009d97dc56d21aec5a6b54e4413 100644 (file)
@@ -42,7 +42,7 @@ typedef struct bdb_entry_info {
 
 static int     bdb_cache_delete_entry_internal(Cache *cache, Entry *e);
 #ifdef LDAP_DEBUG
-static void    lru_print(Cache *cache);
+static void    bdb_lru_print(Cache *cache);
 #endif
 
 static int
index af75427d2a6be4746f30e1ea3cd9260145571a58..af5048a4c2c012d34bc28be04ec0f2ab61ae14cf 100644 (file)
@@ -600,7 +600,6 @@ static int search_candidates(
        Filter  af;
        AttributeAssertion aa_alias;
 #endif
-       struct bdb_info *bdb = (struct bdb_info *) be->be_private;
 
        /*
         * This routine takes as input a filter (user-filter)
index 6ed8ec343e42825f4efa37d96dba76d845277747..0203ef71068b7ede316b0f0bc60d540f3d00abc4 100644 (file)
@@ -30,8 +30,6 @@ int bdb_tool_entry_open(
 int bdb_tool_entry_close(
        BackendDB *be )
 {
-       struct bdb_info *bdb = (struct bdb_info *) be->be_private;
-
        assert( be != NULL );
 
        if( key.data ) {
index 0ef516b1d959f7731189af901270dd6cb765f51a..adb59251481b4f9f6620fe23adefbc9ae6389144 100644 (file)
@@ -33,7 +33,7 @@ dnssrv_back_bind(
                
        if( method == LDAP_AUTH_SIMPLE && cred != NULL && cred->bv_len ) {
                Statslog( LDAP_DEBUG_STATS,
-                       "conn=%ld op=%d DNSSRV BIND dn=\"%s\" provided passwd\n",
+                       "conn=%lu op=%lu DNSSRV BIND dn=\"%s\" provided passwd\n",
                         op->o_connid, op->o_opid,
                        dn->bv_val == NULL ? "" : dn->bv_val , 0, 0 );
 
index e382b17b1f324e3c8ab943e89e0997f81655201c..4bdb093846b17b19536f7e09c5fbe538d13a21eb 100644 (file)
@@ -24,7 +24,6 @@ dnssrv_back_db_config(
     char       **argv )
 {
        struct ldapinfo *li = (struct ldapinfo *) be->be_private;
-       char *port;
 
        if ( li == NULL ) {
                fprintf( stderr, "%s: line %d: DNSSRV backend info is null!\n",
index 49dbdaf4aeec0e3cfd3a129bc4a588b382e3a895..6d7e240dcecf9ecdfa712763c80a051c420866b5 100644 (file)
@@ -56,7 +56,7 @@ dnssrv_back_referrals(
                domain == NULL ? "" : domain,
                0 );
 
-       if( rc = ldap_domain2hostlist( domain, &hostlist ) ) {
+       if( ( rc = ldap_domain2hostlist( domain, &hostlist ) ) ) {
                Debug( LDAP_DEBUG_TRACE,
                        "DNSSRV: domain2hostlist(%s) returned %d\n",
                        domain, rc, 0 );
@@ -90,7 +90,7 @@ dnssrv_back_referrals(
        }
 
        Statslog( LDAP_DEBUG_STATS,
-           "conn=%ld op=%d DNSSRV p=%d dn=\"%s\" url=\"%s\"\n",
+           "conn=%lu op=%lu DNSSRV p=%d dn=\"%s\" url=\"%s\"\n",
            op->o_connid, op->o_opid, op->o_protocol,
                dn->bv_val, urls[0].bv_val );
 
index a35ab1f446db37510c29a55df0e92ce6a111d79b..a619e3c23d391c7b137acf10de218f58d8fb9bcb 100644 (file)
@@ -55,7 +55,7 @@ dnssrv_back_search(
                domain == NULL ? "" : domain,
                0 );
 
-       if( rc = ldap_domain2hostlist( domain, &hostlist ) ) {
+       if( ( rc = ldap_domain2hostlist( domain, &hostlist ) ) ) {
                Debug( LDAP_DEBUG_TRACE, "DNSSRV: domain2hostlist returned %d\n",
                        rc, 0, 0 );
                send_ldap_result( conn, op, LDAP_NO_SUCH_OBJECT,
@@ -91,7 +91,7 @@ dnssrv_back_search(
        }
 
        Statslog( LDAP_DEBUG_STATS,
-           "conn=%ld op=%d DNSSRV p=%d dn=\"%s\" url=\"%s\"\n",
+           "conn=%lu op=%lu DNSSRV p=%d dn=\"%s\" url=\"%s\"\n",
            op->o_connid, op->o_opid, op->o_protocol,
                dn->bv_len ? dn->bv_val : "", urls[0].bv_val );
 
index 3031f2e457a9e4f837e6cc7b0fb2942af922815d..064bca788eea1f9ede2b0fc37a3f501bb0b9f3bb 100644 (file)
@@ -130,8 +130,8 @@ ldap_back_conn_cmp(
        const void *c2
        )
 {
-       struct ldapconn *lc1 = (struct ldapconn *)c1;
-        struct ldapconn *lc2 = (struct ldapconn *)c2;
+       const struct ldapconn *lc1 = (const struct ldapconn *)c1;
+       const struct ldapconn *lc2 = (const struct ldapconn *)c2;
        
        return ( ( lc1->conn < lc2->conn ) ? -1 : ( ( lc1->conn > lc2-> conn ) ? 1 : 0 ) );
 }
index 30d00755c6edb2c0babd4d1d109c79911e473baf..87e4fe40a0f8208a474aad90b05e62ad39c474c0 100644 (file)
@@ -303,10 +303,11 @@ ldap_back_db_config(
 static char *
 suffix_massage_regexize( const char *s )
 {
-       char *res, *p, *r, *ptr;
+       char *res, *ptr;
+       const char *p, *r;
        int i;
 
-       for ( i = 0, p = ( char * )s; 
+       for ( i = 0, p = s; 
                        ( r = strchr( p, ',' ) ) != NULL; 
                        p = r + 1, i++ )
                ;
@@ -314,7 +315,7 @@ suffix_massage_regexize( const char *s )
        res = ch_calloc( sizeof( char ), strlen( s ) + 4 + 4*i + 1 );
 
        ptr = slap_strcopy( res, "(.*)" );
-       for ( i = 0, p = ( char * )s;
+       for ( i = 0, p = s;
                        ( r = strchr( p, ',' ) ) != NULL;
                        p = r + 1 , i++ ) {
                ptr = slap_strncopy( ptr, p, r - p + 1 );
index b15729333763065759240a4c71ddbf6b3cc09ff6..eaa8d3e116e2cece0b479d0b0cb8c1f4605e0b89 100644 (file)
@@ -38,6 +38,7 @@ ldbm_back_attribute(
        const char *entry_at_name = entry_at->ad_cname.bv_val;
        struct berval *iv, *jv;
        AccessControlState acl_state = ACL_STATE_INIT;
+       int nvals = 0;
 
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ARGS,
@@ -179,6 +180,8 @@ ldbm_back_attribute(
                if( jv->bv_val != NULL ) jv++;
        }
 
+       nvals = jv - v;
+
        if( jv == v ) {
                ch_free( v );
                *vals = NULL;
@@ -198,11 +201,11 @@ return_results:
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ENTRY,
                   "ldbm_back_attribute: rc=%d nvals=%d.\n",
-                  rc, jv - v ));
+                  rc, nvals ));
 #else
        Debug( LDAP_DEBUG_TRACE,
                "ldbm_back_attribute: rc=%d nvals=%d\n",
-               rc, jv - v, 0 ); 
+               rc, nvals, 0 ); 
 #endif
 
        return(rc);
index 36f8e03536991f183964818eafb3d8fa02c6e8ed..eb5ec10b2e93b49439a879277101107743e8d0cc 100644 (file)
@@ -53,7 +53,6 @@ ldbm_back_modrdn(
        Entry           *e, *p = NULL;
        Entry           *matched;
        int             isroot = -1;
-       int             rootlock = 0;
 #define CAN_ROLLBACK   -1
 #define MUST_DESTROY   1
        int             rc = CAN_ROLLBACK;
index 8ad0948f09fe06cf33e52c8dbf5b25eaa306db2a..ae0f245858baf04814381e36a3d84261622085b1 100644 (file)
@@ -31,7 +31,7 @@ ldbm_back_exop_passwd(
 )
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
-       int rc, locked=0;
+       int rc;
        Entry *e = NULL;
        struct berval hash = { 0, NULL };
 
index 2ea04998d7464be083c4c70de6aa4603920d2f18..98754a69e357904698ba23c7dfdffe61716113ac 100644 (file)
@@ -76,6 +76,7 @@
 #include "../back-ldap/back-ldap.h"
 #include "back-meta.h"
 #include "ldap_pvt.h"
+#undef ldap_debug      /* silence a warning in ldap-int.h */
 #include "../../../libraries/libldap/ldap-int.h"
 
 static void
index d98f9d89a19057f16c66f9686cf195d066f0d03b..24216eba7e5a6ebdf4bca6f189450c3c4d655d42 100644 (file)
@@ -91,13 +91,16 @@ The subsystems are:
        Read Waiters
        Write Waiters
        Log
+       Operations
+       Statistics
+       Time
 
 
 
 LISTENER SUBSYSTEM
 
-Currently empty, it will presumably contain the description of the
-devices the server is currently listening on
+It contains the description of the devices the server is currently 
+listening on
 
 
 
@@ -143,6 +146,8 @@ The main entry is empty; it should contain some statistics on the number
 of connections.
 Dynamic subentries are created for each open connection, with stats on
 the activity on that connection (the format will be detailed later).
+There are two special subentries that show the number of total and
+current connections respectively.
 
 
 
@@ -184,6 +189,33 @@ messages are sent to the syslog device.
 
 
 
+OPERATIONS SUBSYSTEM
+
+It shows some statistics on the operations performed by the server:
+
+       Initiated
+       Completed
+
+
+
+SENT SUBSYSTEM
+
+It shows some statistics on the data sent by the server:
+
+       Bytes
+       PDU
+       Referrals
+       Entries
+
+
+
+TIME SUBSISTEM
+
+It contains two subentries with the start time and the current time 
+of the server.
+
+
+
 NOTES
 
 This document is in a very early stage of maturity and will 
index a9f324ed49468eb98b7f4bb9016e8641e9e053c9..bd65f90639b2b2df3f995200e1137b6583fe763c 100644 (file)
@@ -99,7 +99,7 @@ monitor_subsys_backend_init(
 #else
                        Debug( LDAP_DEBUG_ANY,
                                "monitor_subsys_backend_init: "
-                               "unable to create entry 'Backend cn=%d,%s'\n%s",
+                               "unable to create entry 'cn=Backend %d,%s'\n%s",
                                i, 
                                monitor_subsys[SLAPD_MONITOR_BACKEND].mss_ndn.bv_val,
                                "" );
index f01f895bdbbe4f3a9f669ee9a478e83964e0cc66..8bd0b8045d4401dbfdc1eb768fd0279b75c19a0c 100644 (file)
 #include "proto-slap.h"
 #include "back-monitor.h"
 
+#ifdef HACK_LOCAL_TIME
 static int
 local_time( const struct tm *ztm, long delta, char *buf, size_t len );
+#endif /* HACK_LOCAL_TIME */
 
 int
 monitor_subsys_time_init(
@@ -236,11 +238,13 @@ monitor_subsys_time_update(
 #ifdef HACK_LOCAL_TIME
        char            ltmbuf[20];
        struct tm       *
-#endif
+#endif /* HACK_LOCAL_TIME */
        time_t          currenttime;
        Attribute       *a;
+#ifdef HACK_LOCAL_TIME
        static AttributeDescription     *ad_local = NULL;
        const char      *text = NULL;
+#endif /* HACK_LOCAL_TIME */
        ber_len_t       len;
 
        static int      init_start = 0;
@@ -304,6 +308,7 @@ monitor_subsys_time_update(
        return( 0 );
 }
 
+#ifdef HACK_LOCAL_TIME
 /*
  * assumes gmtime_mutex is locked
  */
@@ -331,4 +336,5 @@ local_time( const struct tm *ltm, long delta, char *buf, size_t len )
        
        return 0;
 }
+#endif /* HACK_LOCAL_TIME */
 
diff --git a/servers/slapd/back-null/Makefile.in b/servers/slapd/back-null/Makefile.in
new file mode 100644 (file)
index 0000000..7fd3a93
--- /dev/null
@@ -0,0 +1,26 @@
+SRCS = null.c
+OBJS = null.lo
+
+LDAP_INCDIR= ../../../include       
+LDAP_LIBDIR= ../../../libraries
+
+BUILD_OPT = "--enable-null"
+BUILD_MOD = @BUILD_NULL@
+BUILD_MOD_DYNAMIC = @BUILD_NULL_DYNAMIC@
+
+mod_DEFS = -DSLAPD_IMPORT
+MOD_DEFS = $(@BUILD_NULL@_DEFS)
+
+shared_LDAP_LIBS = $(LDAP_LIBPATH) -lldap_r -llber
+NT_LINK_LIBS = -L.. -lslapd $(@BUILD_LIBS_DYNAMIC@_LDAP_LIBS)
+
+LIBBASE = back_null
+
+XINCPATH = -I.. -I$(srcdir)/..
+XDEFS = $(MODULES_CPPFLAGS)
+
+all-local-lib: ../.backend
+
+../.backend: lib$(LIBBASE).a
+       @touch $@
+
diff --git a/servers/slapd/back-null/README b/servers/slapd/back-null/README
new file mode 100644 (file)
index 0000000..a2d8cb1
--- /dev/null
@@ -0,0 +1,14 @@
+Null Backend Interface for OpenLDAP
+
+The Null backend is surely the most useful part of slapd:
+- Searches return success but no entries.
+- Compares return compareFalse.
+- Updates return success (unless readonly is on) but do nothing.
+- Binds fail unless the database option "bind on" is given.
+  The "bind" option is "off" by default.
+Inspired by the /dev/null device.
+
+slapd.conf example:
+  database null
+  suffix   "cn=Nothing"
+  bind     on
diff --git a/servers/slapd/back-null/external.h b/servers/slapd/back-null/external.h
new file mode 100644 (file)
index 0000000..8b54f39
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2002 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
+#ifndef _NULL_EXTERNAL_H
+#define _NULL_EXTERNAL_H
+
+LDAP_BEGIN_DECL
+
+extern BI_init         null_back_initialize;
+
+extern BI_db_init      null_back_db_init;
+extern BI_db_destroy null_back_db_destroy;
+
+extern BI_db_config    null_back_db_config;
+
+extern BI_op_bind      null_back_bind;
+
+extern BI_op_search    null_back_search;
+
+extern BI_op_compare null_back_compare;
+
+extern BI_op_modify    null_back_modify;
+
+extern BI_op_modrdn    null_back_modrdn;
+
+extern BI_op_add       null_back_add;
+
+extern BI_op_delete    null_back_delete;
+
+LDAP_END_DECL
+
+#endif /* _NULL_EXTERNAL_H */
diff --git a/servers/slapd/back-null/null.c b/servers/slapd/back-null/null.c
new file mode 100644 (file)
index 0000000..8d81277
--- /dev/null
@@ -0,0 +1,236 @@
+/* null.c - the null backend */
+/*
+ * Copyright 2002 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
+
+#include "portable.h"
+
+#include <stdio.h>
+#include <ac/string.h>
+
+#include "slap.h"
+#include "external.h"
+
+struct null_info {
+       int bind_allowed;
+};
+
+int
+null_back_bind(
+       Backend                 *be,
+       Connection              *conn,
+       Operation               *op,
+       struct berval   *dn,
+       struct berval   *ndn,
+       int                             method,
+       struct berval   *cred,
+       struct berval   *edn
+)
+{
+       struct null_info *ni = (struct null_info *) be->be_private;
+
+       if( ni->bind_allowed )
+               /* front end with send result on success (0) */
+               return 0;
+       send_ldap_result( conn, op, LDAP_INVALID_CREDENTIALS,
+                         NULL, NULL, NULL, NULL );
+       return LDAP_INVALID_CREDENTIALS;
+}
+
+int
+null_back_add(
+       BackendDB       *be,
+       Connection      *conn,
+       Operation       *op,
+       Entry           *e )
+{
+       send_ldap_result( conn, op, LDAP_SUCCESS, NULL, NULL, NULL, NULL );
+       return 0;
+}
+
+int
+null_back_compare(
+       BackendDB               *be,
+       Connection              *conn,
+       Operation               *op,
+       struct berval   *dn,
+       struct berval   *ndn,
+       AttributeAssertion *ava
+)
+{
+       send_ldap_result( conn, op, LDAP_COMPARE_FALSE, NULL, NULL, NULL, NULL );
+       return 0;
+}
+
+int
+null_back_delete(
+       BackendDB               *be,
+       Connection              *conn,
+       Operation               *op,
+       struct berval   *dn,
+       struct berval   *ndn
+)
+{
+       send_ldap_result( conn, op, LDAP_SUCCESS, NULL, NULL, NULL, NULL );
+       return 0;
+}
+
+int
+null_back_modify(
+       BackendDB               *be,
+       Connection              *conn,
+       Operation               *op,
+       struct berval   *dn,
+       struct berval   *ndn,
+       Modifications   *modlist )
+{
+       send_ldap_result( conn, op, LDAP_SUCCESS, NULL, NULL, NULL, NULL );
+       return 0;
+}
+
+int
+null_back_modrdn(
+       Backend                 *be,
+       Connection              *conn,
+       Operation               *op,
+       struct berval   *dn,
+       struct berval   *ndn,
+       struct berval   *newrdn,
+       struct berval   *nnewrdn,
+       int                             deleteoldrdn,
+       struct berval   *newSuperior,
+       struct berval   *nnewSuperior )
+{
+       send_ldap_result( conn, op, LDAP_SUCCESS, NULL, NULL, NULL, NULL );
+       return 0;
+}
+
+int
+null_back_search(
+       BackendDB               *be,
+       Connection              *conn,
+       Operation               *op,
+       struct berval   *base,
+       struct berval   *nbase,
+       int                             scope,
+       int                             deref,
+       int                             slimit,
+       int                             tlimit,
+       Filter                  *filter,
+       struct berval   *filterstr,
+       AttributeName   *attrs,
+       int                             attrsonly )
+{
+       send_search_result( conn, op, LDAP_SUCCESS, NULL, NULL, NULL, NULL, 0 );
+       return 1;
+}
+
+
+int
+null_back_db_config(
+       BackendDB       *be,
+       const char      *fname,
+       int                     lineno,
+       int                     argc,
+       char            **argv )
+{
+       struct null_info *ni = (struct null_info *) be->be_private;
+
+       if ( ni == NULL ) {
+               fprintf( stderr, "%s: line %d: null database info is null!\n",
+                       fname, lineno );
+               return 1;
+       }
+
+       /* bind requests allowed */
+       if ( strcasecmp( argv[0], "bind" ) == 0 ) {
+               if ( argc < 2 ) {
+                       fprintf( stderr,
+       "%s: line %d: missing <on/off> in \"bind <on/off>\" line\n",
+                                fname, lineno );
+                       return 1;
+               }
+               ni->bind_allowed = strcasecmp( argv[1], "off" );
+
+       /* anything else */
+       } else {
+               fprintf( stderr,
+"%s: line %d: unknown directive \"%s\" in null database definition (ignored)\n",
+                        fname, lineno, argv[0] );
+       }
+
+       return 0;
+}
+
+
+int
+null_back_db_init( BackendDB *be )
+{
+       be->be_private = ch_calloc( 1, sizeof(struct null_info) );
+       return 0;
+}
+
+int
+null_back_db_destroy(
+    Backend    *be
+)
+{
+       free( be->be_private );
+       return 0;
+}
+
+
+int
+null_back_initialize(
+    BackendInfo        *bi
+)
+{
+       bi->bi_open = 0;
+       bi->bi_close = 0;
+       bi->bi_config = 0;
+       bi->bi_destroy = 0;
+
+       bi->bi_db_init = null_back_db_init;
+       bi->bi_db_config = null_back_db_config;
+       bi->bi_db_open = 0;
+       bi->bi_db_close = 0;
+       bi->bi_db_destroy = null_back_db_destroy;
+
+       bi->bi_op_bind = null_back_bind;
+       bi->bi_op_unbind = 0;
+       bi->bi_op_search = null_back_search;
+       bi->bi_op_compare = null_back_compare;
+       bi->bi_op_modify = null_back_modify;
+       bi->bi_op_modrdn = null_back_modrdn;
+       bi->bi_op_add = null_back_add;
+       bi->bi_op_delete = null_back_delete;
+       bi->bi_op_abandon = 0;
+
+       bi->bi_extended = 0;
+
+       bi->bi_acl_group = 0;
+       bi->bi_acl_attribute = 0;
+       bi->bi_chk_referrals = 0;
+
+       bi->bi_connection_init = 0;
+       bi->bi_connection_destroy = 0;
+
+       return 0;
+}
+
+#ifdef SLAPD_NULL_DYNAMIC
+int back_null_LTX_init_module(
+       int argc,
+       char *argv[] )
+{
+    BackendInfo bi;
+
+    memset( &bi, '\0', sizeof(bi) );
+    bi.bi_type = "null";
+    bi.bi_init = null_back_initialize;
+
+    backend_add(&bi);
+    return 0;
+}
+#endif /* SLAPD_NULL_DYNAMIC */
index f3bcef886f355b6fba0dedc6a2323cb584b18e44..b7b890be5696c950a36b1463e749657bcfba601f 100644 (file)
@@ -11,7 +11,7 @@ suffix          o=Suffix
 # The full path to the tcl script used for this database
 scriptpath      /usr/lib/ldap/database.tcl
 
-# The procs for each ldap function. This similar to how
+# The procs for each ldap function. This is similar to how
 # the shell backend setup works, but these refer to
 # the tcl procs in the 'scriptpath' script that handle them
 search          <proc>
@@ -25,12 +25,12 @@ compare             <proc>
 abandon                <proc>
 
 # This is one of the biggest pluses of using the tcl backend.
-# The realm let's you group several databases to the same interpretor.
+# The realm let's you group several databases to the same interpreter.
 # This basically means they share the same global variables and proc
-# space. So global variables, as well as all the procs are callable
+# space. So global variables, as well as all the procs, are callable
 # between databases. If no tclrealm is specified, it is put into the
 # "default" realm.
-tclrealm        <interpretor name>
+tclrealm        <interpreter name>
 
 
 -----------------------------------------
@@ -42,14 +42,14 @@ abandon { action msgid suffix }
        action - Always equal to ABANDON
        msgid  - The msgid of this ldap session
        suffix - List of suffix(es) associated with the call. Each one is
-                and entry in a tcl formatted list (surrounded by {}'s)
+                an entry in a tcl formatted list (surrounded by {}'s)
 
 add { action msgid suffix entry }
 
        action - Always equal to ADD
        msgid  - The msgid of this ldap session
        suffix - List of suffix(es) associated with the call. Each one is
-                and entry in a tcl formatted list (surrounded by {}'s)
+                an entry in a tcl formatted list (surrounded by {}'s)
        entry  - Full entry to add. Each "type: val" is an element in a
                 tcl formatted list.
 
@@ -58,7 +58,7 @@ bind { action msgid suffix dn method cred_len cred }
        action   - Always equal to BIND
        msgid    - The msgid of this ldap session
        suffix   - List of suffix(es) associated with the call. Each one
-                  is and entry in a tcl formatted list (surrounded by {}'s)
+                  is an entry in a tcl formatted list (surrounded by {}'s)
        dn       - DN being bound to
        method   - One of the ldap authentication methods
        cred_len - Length of cred
@@ -156,25 +156,25 @@ This is best accomplished with this type of tcl code
   lappend ret_val ""
   return $ret_val
 
-The final empty string (item in list) is neccesary to point to the end of
-list. The 'code', 'matched', and 'info' values are not neccesary, and
+The final empty string (item in list) is necessary to point to the end of
+list. The 'code', 'matched', and 'info' values are not necessary, and
 default values are given if not specified. The 'code' value is usually an
 LDAP error in decimal notation from ldap.h. The 'info', may be sent back
 to the client, depending on the function. LDAP uses the value of 'code' to
 indicate whether or not the authentication is acceptible in the bind proc.
 
 The other type of return is for searches. It is similar format to the
-shell backend return (as is most of the syntax here). It's format follows:
+shell backend return (as is most of the syntax here). Its format follows:
 
     {dn: o=Company, c=US} {attr: val} {objectclass: val} {}
     {dn: o=CompanyB, c=US} {attr: val} {objectclass: val} {}
 
 Again, newlines are for visual purposes here. Also note the {} marking the
-end of the entry (same affect as a newline in ldif format). Here is some
+end of the entry (same effect as a newline in ldif format). Here is some
 example code again, showing a full search proc example.
 
-# Note that 'args' let's you lump all possible args into one var, used
-# here for simplicity of exmaple
+# Note that 'args' lets you lump all possible args into one var, used
+# here for simplicity of example
 proc ldap:search { args } {
   # perform some operations
 
@@ -191,7 +191,7 @@ proc ldap:search { args } {
   return $ret_val
 }
 
-NOTE: Newlines in the return value is acceptible in search entries (ie.
+NOTE: Newlines in the return value is acceptable in search entries (i.e.
 when returning base64 encoded binary entries).
 
 
@@ -201,6 +201,6 @@ Synopsis of Builtin Commands and Vars
 
 ldap:debug <msg>
 
-  Allows you to send debug messages through OpenLDAP's native debuging
+  Allows you to send debug messages through OpenLDAP's native debugging
   system, this is sent as a LDAP_DEBUG_ANY and will be logged. Useful for
   debugging scripts or logging bind failures.
index 5fcf8c5a2815f8f5471b975719be072b83d09ee2..c416a2b3e09f31e014d8e897fbd9f6547bf9266e 100644 (file)
@@ -24,22 +24,24 @@ tcl_back_abandon (
        int msgid
 )
 {
-       char *suf_tcl, *results, *command;
-       int i, code, err = 0;
+       char *results, *command;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_abandon == NULL) {
+       if (ti->ti_abandon.bv_len == 0) {
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist(be->be_suffix, &suf_tcl) == NULL) {
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_abandon) + strlen (suf_tcl)
+       command = (char *) ch_malloc (ti->ti_abandon.bv_len + suf_tcl.bv_len
                + 20);
        sprintf (command, "%s ABANDON {%ld} {%s}",
-               ti->ti_abandon, op->o_msgid, suf_tcl);
-       Tcl_Free (suf_tcl);
+               ti->ti_abandon.bv_val, (long) op->o_msgid, suf_tcl.bv_val);
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index e2d324bba63fb996759f574cd6226946b41e3ade..3fa0d0769caa21fab66d3fae17d04620c6c139ac 100644 (file)
@@ -24,27 +24,31 @@ tcl_back_add (
        Entry * e
 )
 {
-       char *command, *suf_tcl, *entrystr, *results;
-       int i, code, err = 0;
+       char *command, *entrystr, *results;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_add == NULL) {
+       if (ti->ti_add.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "add not implemented", NULL, NULL );
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
-       entrystr = tcl_clean_entry (e);
+       entrystr = tcl_clean_entry(e);
 
-       command = (char *) ch_malloc (strlen (ti->ti_add) + strlen
-               (suf_tcl) +
-               strlen (entrystr) + 32);
+       command = (char *) ch_malloc (ti->ti_add.bv_len + suf_tcl.bv_len +
+               strlen(entrystr) + 32);
        sprintf (command, "%s ADD {%ld} {%s} {%s}",
-               ti->ti_add, op->o_msgid, suf_tcl, entrystr);
-       Tcl_Free (suf_tcl);
+               ti->ti_add.bv_val, (long) op->o_msgid, 
+               suf_tcl.bv_val, entrystr);
+       Tcl_Free (suf_tcl.bv_val);
        free (entrystr);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
index 4936b7702968a5fad211e9419e5f9a1769f4ba77..63da57236e38502a3386ead337e915a89fe50995 100644 (file)
@@ -29,21 +29,22 @@ struct i_info {
 extern struct i_info *global_i;
 
 struct tclinfo {
-       char *script_path;
+       struct berval ti_script_path;
        struct i_info *ti_ii;
-       char *ti_bind;
-       char *ti_unbind;
-       char *ti_search;
-       char *ti_compare;
-       char *ti_modify;
-       char *ti_modrdn;
-       char *ti_add;
-       char *ti_delete;
-       char *ti_abandon;
+       struct berval ti_bind;
+       struct berval ti_unbind;
+       struct berval ti_search;
+       struct berval ti_compare;
+       struct berval ti_modify;
+       struct berval ti_modrdn;
+       struct berval ti_add;
+       struct berval ti_delete;
+       struct berval ti_abandon;
 };
 
 void readtclscript (char *script, Tcl_Interp * my_tcl);
 char *tcl_clean_entry (Entry * e);
+struct berval *tcl_merge_bvlist (struct berval **bvlist, struct berval *out);
 
 int tcl_ldap_debug (
        ClientData clientData,
index daa89d12c991ea64b9781cb73db8c0446aac14a5..f5ade3e7521729f8aba41cc3a74034a7fadbd6f4 100644 (file)
@@ -28,26 +28,29 @@ tcl_back_bind (
        struct berval *edn
 )
 {
-       char *command, *suf_tcl, *results;
-       int i, code, err = 0;
+       char *command, *results;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_bind == NULL) {
+       if (ti->ti_bind.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "bind not implemented", NULL, NULL );
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_bind) + strlen
-               (suf_tcl) +
+       command = (char *) ch_malloc (ti->ti_bind.bv_len + suf_tcl.bv_len +
                dn->bv_len + cred->bv_len + 64);
        sprintf (command, "%s BIND {%ld} {%s} {%s} {%d} {%lu} {%s}",
-               ti->ti_bind, op->o_msgid, suf_tcl, dn->bv_val, method, cred->bv_len,
-               cred->bv_val);
-       Tcl_Free (suf_tcl);
+               ti->ti_bind.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               dn->bv_val, method, cred->bv_len, cred->bv_val);
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index 54341e375a26a4b65cf3dc341554575537d08843..2f7b522dcf09995cb1fddca7864e253d223e29f3 100644 (file)
@@ -21,31 +21,36 @@ tcl_back_compare (
        Backend * be,
        Connection * conn,
        Operation * op,
-       const char *dn,
-       const char *ndn,
-       Ava * ava
+       struct berval *dn,
+       struct berval *ndn,
+       AttributeAssertion * ava
 )
 {
-       char *command, *suf_tcl, *results;
-       int i, code, err = 0;
+       char *command, *results;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_compare == NULL) {
+       if (ti->ti_compare.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "compare not implemented", NULL, NULL );
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_compare) +
-               strlen (suf_tcl) + strlen (dn) + strlen (ava->ava_type) +
-               strlen (ava->ava_value.bv_val) + 64);
+       command = (char *) ch_malloc (ti->ti_compare.bv_len +
+               suf_tcl.bv_len + dn->bv_len + ava->aa_desc->ad_cname.bv_len +
+               ava->aa_value.bv_len + 64);
        sprintf (command, "%s COMPARE {%ld} {%s} {%s} {%s: %s}",
-               ti->ti_compare, op->o_msgid, suf_tcl, dn, ava->ava_type,
-               ava->ava_value.bv_val);
-       Tcl_Free (suf_tcl);
+               ti->ti_compare.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               dn->bv_val,
+               ava->aa_desc->ad_cname.bv_val, ava->aa_value.bv_val);
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index 64174bca83e4aea140754dc1d4fc4b94682abead..f7ceed9a661fbf2a49c4d642f4a92fdbc114f5a1 100644 (file)
@@ -28,7 +28,6 @@ tcl_back_db_config (
 )
 {
        struct tclinfo *ti = (struct tclinfo *) bd->be_private;
-       int script_loaded = 0;
 
        if (ti == NULL) {
                fprintf (stderr,
@@ -48,7 +47,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->script_path = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_script_path );
 
                /* use local interpreter */
        } else if (strcasecmp (argv[0], "tclrealm") == 0) {
@@ -90,7 +89,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_bind = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_bind );
 
                /* proc for unbinds */
        } else if (strcasecmp (argv[0], "unbind") == 0) {
@@ -100,7 +99,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_unbind = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_unbind );
 
                /* proc for search */
        } else if (strcasecmp (argv[0], "search") == 0) {
@@ -110,7 +109,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_search = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_search );
 
                /* proc for compares */
        } else if (strcasecmp (argv[0], "compare") == 0) {
@@ -120,7 +119,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_compare = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_compare );
 
                /* proc for modify */
        } else if (strcasecmp (argv[0], "modify") == 0) {
@@ -130,7 +129,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_modify = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_modify );
 
                /* proc for modrdn */
        } else if (strcasecmp (argv[0], "modrdn") == 0) {
@@ -140,7 +139,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_modrdn = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_modrdn );
 
                /* proc for add */
        } else if (strcasecmp (argv[0], "add") == 0) {
@@ -150,7 +149,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_add = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_add );
 
                /* proc for delete */
        } else if (strcasecmp (argv[0], "delete") == 0) {
@@ -160,7 +159,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_delete = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_delete );
 
                /* proc for abandon */
        } else if (strcasecmp (argv[0], "abandon") == 0) {
@@ -170,7 +169,7 @@ tcl_back_db_config (
                                fname, lineno, 0);
                        return (1);
                }
-               ti->ti_search = (char *) ch_strdup (argv[1]);
+               ber_str2bv( argv[1], 0, 1, &ti->ti_abandon );
 
        } else {
                Debug (LDAP_DEBUG_CONFIG,
index 87c7ed1dbadcedfdeacddabdd16b3227dd80ec63..fe48fb188f2500688624813cf4490629711f3fbe 100644 (file)
 #include "slap.h"
 #include "tcl_back.h"
 
+int
 tcl_back_delete (
        Backend * be,
        Connection * conn,
        Operation * op,
-       const char *dn,
-       const char *ndn
+       struct berval *dn,
+       struct berval *ndn
 )
 {
-       char *command, *suf_tcl, *results;
-       int i, code, err = 0;
+       char *command, *results;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_delete == NULL) {
+       if (ti->ti_delete.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "delete not implemented", NULL, NULL );
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_delete) + strlen (suf_tcl)
-               + strlen (dn) + 64);
+       command = (char *) ch_malloc (ti->ti_delete.bv_len + suf_tcl.bv_len
+               + dn->bv_len + 64);
        sprintf (command, "%s DELETE {%ld} {%s} {%s}",
-               ti->ti_delete, op->o_msgid, suf_tcl, dn);
-       Tcl_Free (suf_tcl);
+               ti->ti_delete.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               dn->bv_val);
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index b35f0f750f6ffc2762e3bedac5fb94d35a16805c..2133b6781aa241d837baf96384181f3328852216 100644 (file)
@@ -111,19 +111,39 @@ tcl_back_db_init (
 
        ti = (struct tclinfo *) ch_calloc (1, sizeof (struct tclinfo));
 
+       ti->ti_script_path.bv_len = 0;
+       ti->ti_script_path.bv_val = NULL;
+
        /*
         * For some reason this causes problems
         * specifically set to NULL
         */
-       ti->ti_bind = NULL;
-       ti->ti_unbind = NULL;
-       ti->ti_search = NULL;
-       ti->ti_compare = NULL;
-       ti->ti_modify = NULL;
-       ti->ti_modrdn = NULL;
-       ti->ti_add = NULL;
-       ti->ti_delete = NULL;
-       ti->ti_abandon = NULL;
+       ti->ti_bind.bv_len = 0;
+       ti->ti_bind.bv_val = NULL;
+
+       ti->ti_unbind.bv_len = 0;
+       ti->ti_unbind.bv_val = NULL;
+
+       ti->ti_search.bv_len = 0;
+       ti->ti_search.bv_val = NULL;
+
+       ti->ti_compare.bv_len = 0;
+       ti->ti_compare.bv_val = NULL;
+
+       ti->ti_modify.bv_len = 0;
+       ti->ti_modify.bv_val = NULL;
+
+       ti->ti_modrdn.bv_len = 0;
+       ti->ti_modrdn.bv_val = NULL;
+
+       ti->ti_add.bv_len = 0;
+       ti->ti_add.bv_val = NULL;
+
+       ti->ti_delete.bv_len = 0;
+       ti->ti_delete.bv_val = NULL;
+
+       ti->ti_abandon.bv_len = 0;
+       ti->ti_abandon.bv_val = NULL;
 
        be->be_private = ti;
 
@@ -146,9 +166,9 @@ tcl_back_db_open (
        ti->ti_ii->count++;
 
        /* now let's (try to) load the script */
-       readtclscript (ti->script_path, ti->ti_ii->interp);
+       readtclscript (ti->ti_script_path.bv_val, ti->ti_ii->interp);
 
-       /* Intall the debug command */
+       /* install the debug command */
        Tcl_CreateCommand (ti->ti_ii->interp, "ldap:debug", &tcl_ldap_debug,
                NULL, NULL);
 
index 00157bf3a1de101d02e4fcb56d1ef75eb9902d3a..a140bc3153b9cfda6b552083e3918786359e15cb 100644 (file)
@@ -21,77 +21,88 @@ tcl_back_modify (
        Backend * be,
        Connection * conn,
        Operation * op,
-       const char *dn,
-       const char *ndn,
-       LDAPModList * modlist
+       struct berval *dn,
+       struct berval *ndn,
+       Modifications * modlist
 )
 {
-       char *command, *suf_tcl, *bp, *tcl_mods, *results;
+       char *command, *bp, *tcl_mods, *results;
+       struct berval suf_tcl;
        int i, code, err = 0, len, bsize;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_modify == NULL) {
+       if (ti->ti_modify.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "modify not implemented", NULL, NULL );
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
        tcl_mods = (char *) ch_malloc (BUFSIZ);
        tcl_mods[0] = '\0';
        bsize = BUFSIZ;
        bp = tcl_mods;
 
-       for (; modlist != NULL; modlist = modlist->ml_next) {
-               LDAPMod *mods = &modlist->ml_mod;
-               char *op = NULL;
+       for (; modlist != NULL; modlist = modlist->sml_next) {
+               Modification *mods = &modlist->sml_mod;
+               const struct berval 
+                       op_add = { sizeof("add") - 1, "add" },
+                       op_delete = { sizeof("delete") - 1, "delete" },
+                       op_replace = { sizeof("replace") - 1, "replace" },
+                       *op = NULL;
 
-               switch (mods->mod_op & ~LDAP_MOD_BVALUES) {
+               switch (mods->sm_op & ~LDAP_MOD_BVALUES) {
                case LDAP_MOD_ADD:
-                       op = "add";
+                       op = &op_add;
                        break;
                case LDAP_MOD_DELETE:
-                       op = "delete";
+                       op = &op_delete;
                        break;
                case LDAP_MOD_REPLACE:
-                       op = "replace";
+                       op = &op_replace;
                        break;
+               default:
+                       assert(0);
                }
 
-               len = strlen (mods->mod_type) + strlen (op) + 7;
+               len = mods->sm_type.bv_len + op->bv_len + 7;
                while (bp + len - tcl_mods > bsize) {
                        bsize += BUFSIZ;
                        tcl_mods = (char *) ch_realloc (tcl_mods, bsize);
                }
-               sprintf (bp, "{ {%s: %s} ", op, mods->mod_type);
+               sprintf (bp, "{ {%s: %s} ", op->bv_val, mods->sm_type.bv_val);
                bp += len;
                for (i = 0;
-                       mods->mod_bvalues != NULL && mods->mod_bvalues[i]
+                       mods->sm_bvalues != NULL && mods->sm_bvalues[i].bv_val
                        != NULL;
                        i++) {
-                       len = strlen (mods->mod_type) + strlen (
-                               mods->mod_bvalues[i]->bv_val) + 5 +
-                               (mods->mod_bvalues[i + 1] == NULL ? 2 : 0);
+                       len = mods->sm_type.bv_len +
+                               mods->sm_bvalues[i].bv_len + 5 +
+                               (mods->sm_bvalues[i + 1].bv_val == NULL ? 2 : 0);
                        while (bp + len - tcl_mods > bsize) {
                                bsize += BUFSIZ;
                                tcl_mods = (char *) ch_realloc (tcl_mods, bsize);
                        }
-                       sprintf (bp, "{%s: %s} %s", mods->mod_type,
-                               mods->mod_bvalues[i]->bv_val,
-                               mods->mod_bvalues[i + 1] ==
+                       sprintf (bp, "{%s: %s} %s", mods->sm_type.bv_val,
+                               mods->sm_bvalues[i].bv_val,
+                               mods->sm_bvalues[i + 1].bv_val ==
                                NULL ? "} " : "");
                        bp += len;
                }
        }
 
-       command = (char *) ch_malloc (strlen (ti->ti_modify) + strlen (suf_tcl)
-               + strlen (dn) + strlen (tcl_mods) + 64);
+       command = (char *) ch_malloc (ti->ti_modify.bv_len + suf_tcl.bv_len
+               + dn->bv_len + strlen (tcl_mods) + 64);
        /* This space is simply for aesthetics--\  */
        sprintf (command, "%s MODIFY {%ld} {%s} {%s} { %s}",
-               ti->ti_modify, op->o_msgid, suf_tcl, dn, tcl_mods);
-       Tcl_Free (suf_tcl);
+               ti->ti_modify.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               dn->bv_val, tcl_mods);
+       Tcl_Free (suf_tcl.bv_val);
        free (tcl_mods);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
index 360b0d72c438244dd19980c773c0f9be48c0af9f..e3dc71731f7068d3fe6d780b0a20cbf648451d23 100644 (file)
@@ -34,39 +34,48 @@ tcl_back_modrdn (
        Backend * be,
        Connection * conn,
        Operation * op,
-       const char *dn,
-       const char *ndn,
-       const char *newrdn,
+       struct berval *dn,
+       struct berval *ndn,
+       struct berval *newrdn,
+       struct berval *nnewrdn,
        int deleteoldrdn,
-       const char *newSuperior
+       struct berval *newSuperior,
+       struct berval *nnewSuperior
 )
 {
-       char *command, *suf_tcl, *results;
-       int i, code, err = 0;
+       char *command, *results;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_modrdn == NULL) {
+       if (ti->ti_modrdn.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "modrdn not implemented", NULL, NULL );
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_modrdn) + strlen (suf_tcl)
-               + strlen (dn) + strlen (newrdn)
-               + (newSuperior ? strlen(newSuperior) : 0) + 64);
+       command = (char *) ch_malloc (ti->ti_modrdn.bv_len + suf_tcl.bv_len
+               + dn->bv_len + newrdn->bv_len
+               + (newSuperior ? newSuperior->bv_len : 0) + 64);
        if ( newSuperior ) {
                sprintf (command, "%s MODRDN {%ld} {%s} {%s} {%s} %d {%s}",
-                        ti->ti_add, op->o_msgid, suf_tcl, dn, newrdn,
-                        deleteoldrdn ? 1 : 0, newSuperior );
+                        ti->ti_modrdn.bv_val, (long) op->o_msgid, 
+                        suf_tcl.bv_val, dn->bv_val,
+                        newrdn->bv_val, deleteoldrdn ? 1 : 0, 
+                        newSuperior->bv_val );
        } else {
                sprintf (command, "%s MODRDN {%ld} {%s} {%s} {%s} %d",
-                        ti->ti_add, op->o_msgid, suf_tcl, dn, newrdn,
-                        deleteoldrdn ? 1 : 0 );
+                        ti->ti_modrdn.bv_val, (long) op->o_msgid, 
+                        suf_tcl.bv_val, dn->bv_val,
+                        newrdn->bv_val, deleteoldrdn ? 1 : 0 );
        }       
-       Tcl_Free (suf_tcl);
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index 0764900d85a4e8043dcaf5a7630e6eb139b97edf..b4c886e7640ae12e3ccacca29b8ef72ded9d6010 100644 (file)
@@ -21,26 +21,25 @@ tcl_back_search (
        Backend * be,
        Connection * conn,
        Operation * op,
-       const char *base,
-       const char *nbase,
+       struct berval *base,
+       struct berval *nbase,
        int scope,
        int deref,
        int sizelimit,
        int timelimit,
        Filter * filter,
-       const char *filterstr,
+       struct berval *filterstr,
        AttributeName *attrs,
        int attrsonly
 )
 {
-       char *attrs_tcl = NULL, *suf_tcl, *results, *command;
+       char *attrs_tcl = NULL, *results, *command;
+       struct berval suf_tcl;
        int i, err = 0, code;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
-       char **sattrs = NULL;
-       Entry *e;
        AttributeName *an;
 
-       if (ti->ti_search == NULL) {
+       if (ti->ti_search.bv_len == 0) {
                send_ldap_result (conn, op, LDAP_UNWILLING_TO_PERFORM, NULL,
                        "search not implemented", NULL, NULL );
                return (-1);
@@ -48,29 +47,32 @@ tcl_back_search (
 
        for (i = 0, an = attrs; an && an->an_name.bv_val; an++, i++);
        if (i > 0) {
-               sattrs = ch_malloc( (i+1) * sizeof(char *));
+               char *sattrs[i+1];
+
                for (i = 0, an = attrs; an->an_name.bv_val; an++, i++)
                        sattrs[i] = an->an_name.bv_val;
                sattrs[i] = NULL;
                attrs_tcl = Tcl_Merge (i, sattrs);
-               free(sattrs);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               Tcl_Free (attrs_tcl);
+               send_ldap_result (conn, op, LDAP_OPERATIONS_ERROR, NULL,
+                       NULL, NULL, NULL );
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_search) + strlen (suf_tcl)
-               + strlen (base) + 40 + strlen (filterstr) + (attrs_tcl ==
-                       NULL ? 5
-                       : strlen (attrs_tcl)) + 72);
+       command = (char *) ch_malloc (ti->ti_search.bv_len + suf_tcl.bv_len
+               + base->bv_len + 40 + filterstr->bv_len + 
+               (attrs_tcl == NULL ? 5 : strlen (attrs_tcl)) + 72);
        sprintf (command,
                "%s SEARCH {%ld} {%s} {%s} {%d} {%d} {%d} {%d} {%s} {%d} {%s}",
-               ti->ti_search, op->o_msgid, suf_tcl, base, scope, deref,
-               sizelimit, timelimit, filterstr, attrsonly ? 1 : 0,
-               attrs_tcl ==
-               NULL ? "{all}" : attrs_tcl);
+               ti->ti_search.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               base->bv_val, scope, deref,
+               sizelimit, timelimit, filterstr->bv_val, attrsonly ? 1 : 0,
+               attrs_tcl == NULL ? "{all}" : attrs_tcl);
        Tcl_Free (attrs_tcl);
-       Tcl_Free (suf_tcl);
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index a4f547751d7d2e19b18750c5c3bdc161d6327363..70ec08a7fae6d0bcd5556575db24423b6cdb4331 100644 (file)
@@ -23,23 +23,25 @@ tcl_back_unbind (
        Operation * op
 )
 {
-       char *command, *suf_tcl, *results;
-       int i, code, err = 0;
+       char *command, *results;
+       struct berval suf_tcl;
+       int code, err = 0;
        struct tclinfo *ti = (struct tclinfo *) be->be_private;
 
-       if (ti->ti_unbind == NULL) {
+       if (ti->ti_unbind.bv_len == 0) {
                return (-1);
        }
 
-       for (i = 0; be->be_suffix[i] != NULL; i++);
-       suf_tcl = Tcl_Merge (i, be->be_suffix);
+       if (tcl_merge_bvlist (be->be_suffix, &suf_tcl) == NULL) {
+               return (-1);
+       }
 
-       command = (char *) ch_malloc (strlen (ti->ti_unbind) + strlen (suf_tcl)
-               + strlen (conn->c_dn ? conn->c_dn : "") + 64);
+       command = (char *) ch_malloc (ti->ti_unbind.bv_len + suf_tcl.bv_len
+               + conn->c_dn.bv_len + 64);
        sprintf (command, "%s UNBIND {%ld} {%s} {%s}",
-               ti->ti_unbind, op->o_msgid, suf_tcl, conn->c_dn ?
-               conn->c_dn : "");
-       Tcl_Free (suf_tcl);
+               ti->ti_unbind.bv_val, (long) op->o_msgid, suf_tcl.bv_val, 
+               conn->c_dn.bv_val ?  conn->c_dn.bv_val : "");
+       Tcl_Free (suf_tcl.bv_val);
 
        ldap_pvt_thread_mutex_lock (&tcl_interpreter_mutex);
        code = Tcl_GlobalEval (ti->ti_ii->interp, command);
index 85f156aabbaa3cfb5c039e6966af138d23120d0c..f7cddf0204d6339a3dc72ca4e5604853ae384fa1 100644 (file)
@@ -188,3 +188,42 @@ readtclscript (
                return;
        }
 }
+
+
+struct berval *
+tcl_merge_bvlist(
+       struct berval **bvlist, struct berval *out)
+{
+       struct berval *ret = NULL;
+       int i;
+
+       if (bvlist == NULL)
+               return NULL;
+
+       if (out == NULL) {
+               ret = (struct berval *)ch_malloc(sizeof(struct berval));
+               if (ret == NULL) {
+                       return NULL;
+               }
+       } else {
+               ret = out;
+       }
+
+       ret->bv_len = 0;
+       ret->bv_val = NULL;
+
+       for (i = 0; bvlist[i] != NULL; i++);
+
+       if (i) {
+               char *strlist[i + 1];
+               for (i = 0; bvlist[i] != NULL; i++) {
+                       strlist[i] = bvlist[i]->bv_val;
+               }
+               strlist[i] = NULL;
+               ret->bv_val = Tcl_Merge(i, strlist);
+               ret->bv_len = ret->bv_val ? strlen(ret->bv_val) : 0;
+       }
+
+       return ret;
+}
+
index 07be37e36e0a4673ba2fc7029bdbd374362b0150..b010528dde9aebec8b0627dba6a49f9a0d223728 100644 (file)
@@ -44,6 +44,9 @@
 #if defined(SLAPD_MONITOR) && !defined(SLAPD_MONITOR_DYNAMIC)
 #include "back-monitor/external.h"
 #endif
+#if defined(SLAPD_NULL) && !defined(SLAPD_NULL_DYNAMIC)
+#include "back-null/external.h"
+#endif
 #if defined(SLAPD_PASSWD) && !defined(SLAPD_PASSWD_DYNAMIC)
 #include "back-passwd/external.h"
 #endif
@@ -82,6 +85,9 @@ static BackendInfo binfo[] = {
 #if defined(SLAPD_MONITOR) && !defined(SLAPD_MONITOR_DYNAMIC)
        {"monitor",     monitor_back_initialize},
 #endif
+#if defined(SLAPD_NULL) && !defined(SLAPD_NULL_DYNAMIC)
+       {"null",        null_back_initialize},
+#endif
 #if defined(SLAPD_PASSWD) && !defined(SLAPD_PASSWD_DYNAMIC)
        {"passwd",      passwd_back_initialize},
 #endif
index 142bf0f7a95f4a74c9d1868a7a120c2d6ce23d95..b2b4d32b4a298df0358da2694f1b4db6cba1c30b 100644 (file)
@@ -191,7 +191,7 @@ do_bind(
 #endif
        }
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d BIND dn=\"%s\" method=%ld\n",
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu BIND dn=\"%s\" method=%ld\n",
            op->o_connid, op->o_opid, pdn.bv_val, (unsigned long) method, 0 );
 
        if ( version < LDAP_VERSION_MIN || version > LDAP_VERSION_MAX ) {
index 927d7e3ad9896eeb91691e5e9b4dccd2baf0d31e..e8c3dbc048d1f74a11d5f6de7b8334c8bfceef64 100644 (file)
@@ -225,7 +225,7 @@ slap_strcopy(
        if (!a || !b)
                return a;
        
-       while (*a++ = *b++) ;
+       while ((*a++ = *b++)) ;
        return a-1;
 }
 
index 87a88e4886c107b8e3a295d79660b60db3cec6c9..ead4af626e45d00cbc9611d403c19202e12178ff 100644 (file)
@@ -155,7 +155,7 @@ do_compare(
 #endif
 
                Statslog( LDAP_DEBUG_STATS,
-                       "conn=%ld op=%d CMP dn=\"%s\" attr=\"%s\"\n",
+                       "conn=%lu op=%lu CMP dn=\"%s\" attr=\"%s\"\n",
                        op->o_connid, op->o_opid, pdn.bv_val,
                        ava.aa_desc->ad_cname.bv_val, 0 );
 
@@ -183,7 +183,7 @@ do_compare(
 #endif
 
                Statslog( LDAP_DEBUG_STATS,
-                       "conn=%ld op=%d CMP dn=\"%s\" attr=\"%s\"\n",
+                       "conn=%lu op=%lu CMP dn=\"%s\" attr=\"%s\"\n",
                        op->o_connid, op->o_opid, pdn.bv_val,
                        ava.aa_desc->ad_cname.bv_val, 0 );
 
@@ -258,7 +258,7 @@ do_compare(
            pdn.bv_val, ava.aa_desc->ad_cname.bv_val, ava.aa_value.bv_val );
 #endif
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d CMP dn=\"%s\" attr=\"%s\"\n",
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu CMP dn=\"%s\" attr=\"%s\"\n",
            op->o_connid, op->o_opid, pdn.bv_val,
                ava.aa_desc->ad_cname.bv_val, 0 );
 
index 5f808303aded0bc0c33fc336e0dfd3dae4a65ad6..38324be6eafd713367f1ce0d479e4c0d06bf770b 100644 (file)
@@ -118,7 +118,7 @@ do_delete(
 #endif
        }
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d DEL dn=\"%s\"\n",
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu DEL dn=\"%s\"\n",
                op->o_connid, op->o_opid, pdn.bv_val, 0, 0 );
 
        manageDSAit = get_manageDSAit( op );
index 8094a09e8b841daf31edab5d3af15a1973fb224c..48afbf5d9d3e99724999f9246196f253e7e1af56 100644 (file)
@@ -589,7 +589,7 @@ int entry_decode(struct berval *bv, Entry **e)
        bptr = (BerVarray)x->e_attrs;
        a = NULL;
 
-       while (i = entry_getlen(&ptr)) {
+       while ((i = entry_getlen(&ptr))) {
                struct berval bv;
                bv.bv_len = i;
                bv.bv_val = ptr;
index d9088ca8ac9a90b094dc8c67ee52b8f984017aa5..01011a7250aeb9ce02ef2a83a89510d231c6505e 100644 (file)
@@ -55,11 +55,11 @@ get_limits(
                                break;
                        }
 
-                       d = ndn->bv_len - lm[0]->lm_dn_pat.bv_len;
                        /* ndn shorter than dn_pat */
-                       if ( d < 0 ) {
+                       if ( ndn->bv_len < lm[0]->lm_dn_pat.bv_len ) {
                                break;
                        }
+                       d = ndn->bv_len - lm[0]->lm_dn_pat.bv_len;
 
                        /* allow exact match for SUBTREE only */
                        if ( d == 0 ) {
index 62a6a6da30923e25208f619afaf15711e9b7ecf8..6bb923671bd7f22db33136e0057eb5528ef87f91 100644 (file)
@@ -278,7 +278,7 @@ do_modify(
        }
 #endif
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d MOD dn=\"%s\"\n",
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu MOD dn=\"%s\"\n",
            op->o_connid, op->o_opid, dn.bv_val, 0, 0 );
 
        manageDSAit = get_manageDSAit( op );
index 529cea45d9cb84ba44656ea139872426643c03bd..eca68cace571f2fd5b35d3499c6d871b367853f2 100644 (file)
@@ -270,7 +270,7 @@ do_modrdn(
                }
        }
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d MODRDN dn=\"%s\"\n",
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu MODRDN dn=\"%s\"\n",
            op->o_connid, op->o_opid, pdn.bv_val, 0, 0 );
 
        manageDSAit = get_manageDSAit( op );
index 5e6d7f94eb92b947bf3aeb5db7642c63c5057e47..8695cd8fe63855189fc1f100c9bf0ab59143a48e 100644 (file)
@@ -1844,11 +1844,12 @@ integerNormalize(
        }
        else {
                normalized->bv_len = len+negative;
-               normalized->bv_val = ch_malloc( normalized->bv_len );
+               normalized->bv_val = ch_malloc( normalized->bv_len + 1 );
                if( negative ) {
                        normalized->bv_val[0] = '-';
                }
                AC_MEMCPY( normalized->bv_val + negative, p, len );
+               normalized->bv_val[len+negative] = '\0';
        }
 
        return LDAP_SUCCESS;
@@ -1865,19 +1866,45 @@ static int integerIndexer(
        BerVarray *keysp )
 {
        int i;
+       size_t slen, mlen;
        BerVarray keys;
-
-       /* we should have at least one value at this point */
-       assert( values != NULL && values[0].bv_val != NULL );
+       HASH_CONTEXT   HASHcontext;
+       unsigned char   HASHdigest[HASH_BYTES];
+       struct berval digest;
+       digest.bv_val = HASHdigest;
+       digest.bv_len = sizeof(HASHdigest);
 
        for( i=0; values[i].bv_val != NULL; i++ ) {
-               /* empty -- just count them */
+               /* empty - just count them */
        }
 
+       /* we should have at least one value at this point */
+       assert( i > 0 );
+
        keys = ch_malloc( sizeof( struct berval ) * (i+1) );
 
+       slen = syntax->ssyn_oidlen;
+       mlen = mr->smr_oidlen;
+
        for( i=0; values[i].bv_val != NULL; i++ ) {
-               integerNormalize( syntax, &values[i], &keys[i] );
+               struct berval norm;
+               integerNormalize( syntax, &values[i], &norm );
+
+               HASH_Init( &HASHcontext );
+               if( prefix != NULL && prefix->bv_len > 0 ) {
+                       HASH_Update( &HASHcontext,
+                               prefix->bv_val, prefix->bv_len );
+               }
+               HASH_Update( &HASHcontext,
+                       syntax->ssyn_oid, slen );
+               HASH_Update( &HASHcontext,
+                       mr->smr_oid, mlen );
+               HASH_Update( &HASHcontext,
+                       norm.bv_val, norm.bv_len );
+               HASH_Final( HASHdigest, &HASHcontext );
+
+               ber_dupbv( &keys[i], &digest );
+               ch_free( norm.bv_val );
        }
 
        keys[i].bv_val = NULL;
@@ -1895,13 +1922,40 @@ static int integerFilter(
        void * assertValue,
        BerVarray *keysp )
 {
+       size_t slen, mlen;
        BerVarray keys;
+       HASH_CONTEXT   HASHcontext;
+       unsigned char   HASHdigest[HASH_BYTES];
+       struct berval norm;
+       struct berval digest;
+       digest.bv_val = HASHdigest;
+       digest.bv_len = sizeof(HASHdigest);
+
+       slen = syntax->ssyn_oidlen;
+       mlen = mr->smr_oidlen;
+
+       integerNormalize( syntax, assertValue, &norm );
 
        keys = ch_malloc( sizeof( struct berval ) * 2 );
-       integerNormalize( syntax, assertValue, &keys[0] );
+
+       HASH_Init( &HASHcontext );
+       if( prefix != NULL && prefix->bv_len > 0 ) {
+               HASH_Update( &HASHcontext,
+                       prefix->bv_val, prefix->bv_len );
+       }
+       HASH_Update( &HASHcontext,
+               syntax->ssyn_oid, slen );
+       HASH_Update( &HASHcontext,
+               mr->smr_oid, mlen );
+       HASH_Update( &HASHcontext,
+               norm.bv_val, norm.bv_len );
+       HASH_Final( HASHdigest, &HASHcontext );
+
+       ber_dupbv( &keys[0], &digest );
        keys[1].bv_val = NULL;
-       *keysp = keys;
+       ch_free( norm.bv_val );
 
+       *keysp = keys;
        return LDAP_SUCCESS;
 }
 
index 6ba03faf3a19d9f507edf35e2271c493a0acf1c9..c4db3e52e664bb210845a9949a740ca3bc33b156 100644 (file)
@@ -212,7 +212,7 @@ do_search(
 #endif
 
        Statslog( LDAP_DEBUG_STATS,
-           "conn=%ld op=%d SRCH base=\"%s\" scope=%d filter=\"%s\"\n",
+           "conn=%lu op=%lu SRCH base=\"%s\" scope=%d filter=\"%s\"\n",
            op->o_connid, op->o_opid, pbase.bv_val, scope, fstr.bv_val );
 
        manageDSAit = get_manageDSAit( op );
index d3ce99b9d2e6dd27a1890f4e2019cddc643fe9fc..ad18fe9c6b18e658d02cc6997e9c3f4c685d190d 100644 (file)
@@ -115,7 +115,8 @@ main( int argc, char **argv )
                        if( sc == NULL ) {
                                struct berval vals[2];
 
-                               int ret = structural_class( oc->a_vals, vals,
+                               /* int ret = */ 
+                                       structural_class( oc->a_vals, vals,
                                        NULL, &text, textbuf, textlen );
 
                                if( vals[0].bv_len == 0 ) {
index 0ec5ce8641b21b2dc69bf2dd7bc68b66d9f752db..40457cfe9ace176af24e749075d2b23bba5f3eb4 100644 (file)
@@ -47,7 +47,7 @@ do_unbind(
         *      UnBindRequest ::= NULL
         */
 
-       Statslog( LDAP_DEBUG_STATS, "conn=%ld op=%d UNBIND\n", op->o_connid,
+       Statslog( LDAP_DEBUG_STATS, "conn=%lu op=%lu UNBIND\n", op->o_connid,
            op->o_opid, 0, 0, 0 );
 
        /* pass the unbind to all backends */
index 1cff03c8aa5e14441f3304d19523912bf984bbbc..4d676fe4523cacbdba673d9998b28a5eb780f328 100644 (file)
@@ -223,7 +223,7 @@ op_ldap_modify(
     int                state;  /* This code is a simple-minded state machine */
     int                nvals;  /* Number of values we're modifying */
     int                nops;   /* Number of LDAPMod structs in ldmarr */
-    LDAPMod    *ldm, **ldmarr;
+    LDAPMod    *ldm = NULL, **ldmarr;
     int                i, len;
     char       *type, *value;
     int                rc = 0;
@@ -289,6 +289,8 @@ op_ldap_modify(
                continue;
            }
 
+           assert( ldm );
+
            /*
             * We should have an attribute: value pair here.
             * Construct the mod_bvalues part of the ldapmod struct.
@@ -369,7 +371,7 @@ op_ldap_modrdn(
        int             lderr = 0;
     int                state = 0;
     int                drdnflag = -1;
-    char       *newrdn;
+    char       *newrdn = NULL;
        char    *newsup = NULL;
 
     if ( re->re_mods == NULL ) {
@@ -462,6 +464,8 @@ op_ldap_modrdn(
     }
 #endif /* LDAP_DEBUG */
 
+    assert( newrdn );
+
     /* Do the modrdn */
     rc = ldap_rename2_s( ri->ri_ldp, re->re_dn, newrdn, newsup, drdnflag );
 
index aa12a79c0f24b078ba63e4e76fef4db2f7ed621b..a805060a98f0672683e25c0127854154cd7d09a5 100644 (file)
@@ -48,7 +48,7 @@ Ri_process(
 )
 {
     Rq         *rq = sglob->rq;
-    Re         *re, *new_re;
+    Re         *re = NULL, *new_re = NULL;
     int                rc ;
     char       *errmsg;