|
|
ef2d9b |
NOTE: The patch has been adjusted to match the base code before backporting.
|
|
|
ef2d9b |
|
|
|
ef2d9b |
From 8a259e3df16def3f05828f355e98a5089cd6e6d0 Mon Sep 17 00:00:00 2001
|
|
|
ef2d9b |
From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= <ondra@openldap.org>
|
|
|
ef2d9b |
Date: Thu, 14 Jun 2018 16:14:15 +0100
|
|
|
ef2d9b |
Subject: [PATCH] ITS#8573 allow all libldap options in tools -o option
|
|
|
ef2d9b |
|
|
|
ef2d9b |
---
|
|
|
ef2d9b |
clients/tools/common.c | 15 ++-
|
|
|
ef2d9b |
doc/devel/args | 2 +-
|
|
|
ef2d9b |
doc/man/man1/ldapcompare.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldapdelete.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldapexop.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldapmodify.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldapmodrdn.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldappasswd.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldapsearch.1 | 9 +-
|
|
|
ef2d9b |
doc/man/man1/ldapwhoami.1 | 13 ++-
|
|
|
ef2d9b |
doc/man/man8/slapcat.8 | 2 +-
|
|
|
ef2d9b |
include/ldap_pvt.h | 5 +
|
|
|
ef2d9b |
libraries/libldap/init.c | 231 ++++++++++++++++++++++---------------
|
|
|
ef2d9b |
servers/slapd/slapcommon.c | 5 +-
|
|
|
ef2d9b |
14 files changed, 200 insertions(+), 136 deletions(-)
|
|
|
ef2d9b |
|
|
|
ef2d9b |
diff --git a/clients/tools/common.c b/clients/tools/common.c
|
|
|
ef2d9b |
index 1cd8a2c1b..b1edffdaf 100644
|
|
|
ef2d9b |
--- a/clients/tools/common.c
|
|
|
ef2d9b |
+++ b/clients/tools/common.c
|
|
|
ef2d9b |
@@ -374,9 +374,9 @@ N_(" -I use SASL Interactive mode\n"),
|
|
|
ef2d9b |
N_(" -n show what would be done but don't actually do it\n"),
|
|
|
ef2d9b |
N_(" -N do not use reverse DNS to canonicalize SASL host name\n"),
|
|
|
ef2d9b |
N_(" -O props SASL security properties\n"),
|
|
|
ef2d9b |
-N_(" -o <opt>[=<optparam>] general options\n"),
|
|
|
ef2d9b |
+N_(" -o <opt>[=<optparam>] any libldap ldap.conf options, plus\n"),
|
|
|
ef2d9b |
+N_(" ldif_wrap=<width> (in columns, or \"no\" for no wrapping)\n"),
|
|
|
ef2d9b |
N_(" nettimeout=<timeout> (in seconds, or \"none\" or \"max\")\n"),
|
|
|
ef2d9b |
-N_(" ldif-wrap=<width> (in columns, or \"no\" for no wrapping)\n"),
|
|
|
ef2d9b |
N_(" -p port port on LDAP server\n"),
|
|
|
ef2d9b |
N_(" -Q use SASL Quiet mode\n"),
|
|
|
ef2d9b |
N_(" -R realm SASL realm\n"),
|
|
|
ef2d9b |
@@ -838,6 +838,11 @@ tool_args( int argc, char **argv )
|
|
|
ef2d9b |
if ( (cvalue = strchr( control, '=' )) != NULL ) {
|
|
|
ef2d9b |
*cvalue++ = '\0';
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
+ for ( next=control; *next; next++ ) {
|
|
|
ef2d9b |
+ if ( *next == '-' ) {
|
|
|
ef2d9b |
+ *next = '_';
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
|
|
|
ef2d9b |
if ( strcasecmp( control, "nettimeout" ) == 0 ) {
|
|
|
ef2d9b |
if( nettimeout.tv_sec != -1 ) {
|
|
|
ef2d9b |
@@ -867,7 +872,7 @@ tool_args( int argc, char **argv )
|
|
|
ef2d9b |
exit( EXIT_FAILURE );
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
|
|
|
ef2d9b |
- } else if ( strcasecmp( control, "ldif-wrap" ) == 0 ) {
|
|
|
ef2d9b |
+ } else if ( strcasecmp( control, "ldif_wrap" ) == 0 ) {
|
|
|
ef2d9b |
if ( cvalue == 0 ) {
|
|
|
ef2d9b |
ldif_wrap = LDIF_LINE_WIDTH;
|
|
|
ef2d9b |
|
|
|
ef2d9b |
@@ -878,13 +883,13 @@ tool_args( int argc, char **argv )
|
|
|
ef2d9b |
unsigned int u;
|
|
|
ef2d9b |
if ( lutil_atou( &u, cvalue ) ) {
|
|
|
ef2d9b |
fprintf( stderr,
|
|
|
ef2d9b |
- _("Unable to parse ldif-wrap=\"%s\"\n"), cvalue );
|
|
|
ef2d9b |
+ _("Unable to parse ldif_wrap=\"%s\"\n"), cvalue );
|
|
|
ef2d9b |
exit( EXIT_FAILURE );
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
ldif_wrap = (ber_len_t)u;
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
|
|
|
ef2d9b |
- } else {
|
|
|
ef2d9b |
+ } else if ( ldap_pvt_conf_option( control, cvalue, 1 ) ) {
|
|
|
ef2d9b |
fprintf( stderr, "Invalid general option name: %s\n",
|
|
|
ef2d9b |
control );
|
|
|
ef2d9b |
usage();
|
|
|
ef2d9b |
diff --git a/doc/devel/args b/doc/devel/args
|
|
|
ef2d9b |
index 9796fe528..c5aa02f11 100644
|
|
|
ef2d9b |
--- a/doc/devel/args
|
|
|
ef2d9b |
+++ b/doc/devel/args
|
|
|
ef2d9b |
@@ -28,7 +28,7 @@ ldapwhoami * DE**HI** NO QR UVWXYZ def*h*** *nop* vwxy
|
|
|
ef2d9b |
-h host
|
|
|
ef2d9b |
-n no-op
|
|
|
ef2d9b |
-N no (SASLprep) normalization of simple bind password
|
|
|
ef2d9b |
- -o general options (currently nettimeout and ldif-wrap only)
|
|
|
ef2d9b |
+ -o general libldap options (plus ldif_wrap and nettimeout for backwards comp.)
|
|
|
ef2d9b |
-p port
|
|
|
ef2d9b |
-v verbose
|
|
|
ef2d9b |
-V version
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapcompare.1 b/doc/man/man1/ldapcompare.1
|
|
|
ef2d9b |
index 9e66cd4b2..a0e58d7c3 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapcompare.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapcompare.1
|
|
|
ef2d9b |
@@ -186,13 +186,14 @@ Compare extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapdelete.1 b/doc/man/man1/ldapdelete.1
|
|
|
ef2d9b |
index 394d35275..85dbf4360 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapdelete.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapdelete.1
|
|
|
ef2d9b |
@@ -192,13 +192,14 @@ Delete extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapexop.1 b/doc/man/man1/ldapexop.1
|
|
|
ef2d9b |
index 503d681ca..26e1730a8 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapexop.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapexop.1
|
|
|
ef2d9b |
@@ -189,13 +189,14 @@ Specify general extensions. \'!\' indicates criticality.
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapmodify.1 b/doc/man/man1/ldapmodify.1
|
|
|
ef2d9b |
index 2792d460b..6c277d89c 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapmodify.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapmodify.1
|
|
|
ef2d9b |
@@ -255,13 +255,14 @@ Modify extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapmodrdn.1 b/doc/man/man1/ldapmodrdn.1
|
|
|
ef2d9b |
index 5d0f3fcd9..b24e500fe 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapmodrdn.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapmodrdn.1
|
|
|
ef2d9b |
@@ -186,13 +186,14 @@ Modrdn extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldappasswd.1 b/doc/man/man1/ldappasswd.1
|
|
|
ef2d9b |
index 36857ab8f..a2805e57b 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldappasswd.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldappasswd.1
|
|
|
ef2d9b |
@@ -188,13 +188,14 @@ Passwd Modify extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapsearch.1 b/doc/man/man1/ldapsearch.1
|
|
|
ef2d9b |
index 036ce6245..1914eafbf 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapsearch.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapsearch.1
|
|
|
ef2d9b |
@@ -332,13 +332,14 @@ Search extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man1/ldapwhoami.1 b/doc/man/man1/ldapwhoami.1
|
|
|
ef2d9b |
index 5912af5ba..2c8cfded2 100644
|
|
|
ef2d9b |
--- a/doc/man/man1/ldapwhoami.1
|
|
|
ef2d9b |
+++ b/doc/man/man1/ldapwhoami.1
|
|
|
ef2d9b |
@@ -143,13 +143,18 @@ WhoAmI extensions:
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-o \ opt \fR[= optparam \fR]
|
|
|
ef2d9b |
|
|
|
ef2d9b |
-Specify general options.
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
-General options:
|
|
|
ef2d9b |
+Specify any
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+option or one of the following:
|
|
|
ef2d9b |
.nf
|
|
|
ef2d9b |
nettimeout=<timeout> (in seconds, or "none" or "max")
|
|
|
ef2d9b |
- ldif-wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
+ ldif_wrap=<width> (in columns, or "no" for no wrapping)
|
|
|
ef2d9b |
.fi
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+.B -o
|
|
|
ef2d9b |
+option that can be passed here, check
|
|
|
ef2d9b |
+.BR ldap.conf (5)
|
|
|
ef2d9b |
+for details.
|
|
|
ef2d9b |
.TP
|
|
|
ef2d9b |
.BI \-O \ security-properties
|
|
|
ef2d9b |
Specify SASL security properties.
|
|
|
ef2d9b |
diff --git a/doc/man/man8/slapcat.8 b/doc/man/man8/slapcat.8
|
|
|
ef2d9b |
index 57c41deff..2085e9176 100644
|
|
|
ef2d9b |
--- a/doc/man/man8/slapcat.8
|
|
|
ef2d9b |
+++ b/doc/man/man8/slapcat.8
|
|
|
ef2d9b |
@@ -149,7 +149,7 @@ Possible generic options/values are:
|
|
|
ef2d9b |
syslog\-level=<level> (see `\-S' in slapd(8))
|
|
|
ef2d9b |
syslog\-user=<user> (see `\-l' in slapd(8))
|
|
|
ef2d9b |
|
|
|
ef2d9b |
- ldif-wrap={no|<n>}
|
|
|
ef2d9b |
+ ldif_wrap={no|<n>}
|
|
|
ef2d9b |
|
|
|
ef2d9b |
.in
|
|
|
ef2d9b |
\fIn\fP is the number of columns allowed for the LDIF output
|
|
|
ef2d9b |
diff --git a/include/ldap_pvt.h b/include/ldap_pvt.h
|
|
|
ef2d9b |
index 31f37277c..e86b032cb 100644
|
|
|
ef2d9b |
--- a/include/ldap_pvt.h
|
|
|
ef2d9b |
+++ b/include/ldap_pvt.h
|
|
|
ef2d9b |
@@ -326,6 +326,11 @@ struct ldifrecord;
|
|
|
ef2d9b |
LDAP_F ( int ) ldap_pvt_discard LDAP_P((
|
|
|
ef2d9b |
struct ldap *ld, ber_int_t msgid ));
|
|
|
ef2d9b |
|
|
|
ef2d9b |
+/* init.c */
|
|
|
ef2d9b |
+LDAP_F( int )
|
|
|
ef2d9b |
+ldap_pvt_conf_option LDAP_P((
|
|
|
ef2d9b |
+ char *cmd, char *opt, int userconf ));
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
/* messages.c */
|
|
|
ef2d9b |
LDAP_F( BerElement * )
|
|
|
ef2d9b |
ldap_get_message_ber LDAP_P((
|
|
|
ef2d9b |
diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c
|
|
|
ef2d9b |
index 548d2c1cb..4a7e81bdb 100644
|
|
|
ef2d9b |
--- a/libraries/libldap/init.c
|
|
|
ef2d9b |
+++ b/libraries/libldap/init.c
|
|
|
ef2d9b |
@@ -147,6 +147,141 @@ static const struct ol_attribute {
|
|
|
ef2d9b |
#define MAX_LDAP_ATTR_LEN sizeof("GSSAPI_ALLOW_REMOTE_PRINCIPAL")
|
|
|
ef2d9b |
#define MAX_LDAP_ENV_PREFIX_LEN 8
|
|
|
ef2d9b |
|
|
|
ef2d9b |
+static int
|
|
|
ef2d9b |
+ldap_int_conf_option(
|
|
|
ef2d9b |
+ struct ldapoptions *gopts,
|
|
|
ef2d9b |
+ char *cmd, char *opt, int userconf )
|
|
|
ef2d9b |
+{
|
|
|
ef2d9b |
+ int i;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ for(i=0; attrs[i].type != ATTR_NONE; i++) {
|
|
|
ef2d9b |
+ void *p;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ if( !userconf && attrs[i].useronly ) {
|
|
|
ef2d9b |
+ continue;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ if(strcasecmp(cmd, attrs[i].name) != 0) {
|
|
|
ef2d9b |
+ continue;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ switch(attrs[i].type) {
|
|
|
ef2d9b |
+ case ATTR_BOOL:
|
|
|
ef2d9b |
+ if((strcasecmp(opt, "on") == 0)
|
|
|
ef2d9b |
+ || (strcasecmp(opt, "yes") == 0)
|
|
|
ef2d9b |
+ || (strcasecmp(opt, "true") == 0))
|
|
|
ef2d9b |
+ {
|
|
|
ef2d9b |
+ LDAP_BOOL_SET(gopts, attrs[i].offset);
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ } else {
|
|
|
ef2d9b |
+ LDAP_BOOL_CLR(gopts, attrs[i].offset);
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ case ATTR_INT: {
|
|
|
ef2d9b |
+ char *next;
|
|
|
ef2d9b |
+ long l;
|
|
|
ef2d9b |
+ p = &((char *) gopts)[attrs[i].offset];
|
|
|
ef2d9b |
+ l = strtol( opt, &next, 10 );
|
|
|
ef2d9b |
+ if ( next != opt && next[ 0 ] == '\0' ) {
|
|
|
ef2d9b |
+ * (int*) p = l;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+ } break;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ case ATTR_KV: {
|
|
|
ef2d9b |
+ const struct ol_keyvalue *kv;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ for(kv = attrs[i].data;
|
|
|
ef2d9b |
+ kv->key != NULL;
|
|
|
ef2d9b |
+ kv++) {
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ if(strcasecmp(opt, kv->key) == 0) {
|
|
|
ef2d9b |
+ p = &((char *) gopts)[attrs[i].offset];
|
|
|
ef2d9b |
+ * (int*) p = kv->value;
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+ } break;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ case ATTR_STRING:
|
|
|
ef2d9b |
+ p = &((char *) gopts)[attrs[i].offset];
|
|
|
ef2d9b |
+ if (* (char**) p != NULL) LDAP_FREE(* (char**) p);
|
|
|
ef2d9b |
+ * (char**) p = LDAP_STRDUP(opt);
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ case ATTR_OPTION:
|
|
|
ef2d9b |
+ ldap_set_option( NULL, attrs[i].offset, opt );
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ case ATTR_SASL:
|
|
|
ef2d9b |
+#ifdef HAVE_CYRUS_SASL
|
|
|
ef2d9b |
+ ldap_int_sasl_config( gopts, attrs[i].offset, opt );
|
|
|
ef2d9b |
+#endif
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ case ATTR_GSSAPI:
|
|
|
ef2d9b |
+#ifdef HAVE_GSSAPI
|
|
|
ef2d9b |
+ ldap_int_gssapi_config( gopts, attrs[i].offset, opt );
|
|
|
ef2d9b |
+#endif
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ case ATTR_TLS:
|
|
|
ef2d9b |
+#ifdef HAVE_TLS
|
|
|
ef2d9b |
+ ldap_int_tls_config( NULL, attrs[i].offset, opt );
|
|
|
ef2d9b |
+#endif
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ case ATTR_OPT_TV: {
|
|
|
ef2d9b |
+ struct timeval tv;
|
|
|
ef2d9b |
+ char *next;
|
|
|
ef2d9b |
+ tv.tv_usec = 0;
|
|
|
ef2d9b |
+ tv.tv_sec = strtol( opt, &next, 10 );
|
|
|
ef2d9b |
+ if ( next != opt && next[ 0 ] == '\0' && tv.tv_sec > 0 ) {
|
|
|
ef2d9b |
+ (void)ldap_set_option( NULL, attrs[i].offset, (const void *)&tv );
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+ } break;
|
|
|
ef2d9b |
+ case ATTR_OPT_INT: {
|
|
|
ef2d9b |
+ long l;
|
|
|
ef2d9b |
+ char *next;
|
|
|
ef2d9b |
+ l = strtol( opt, &next, 10 );
|
|
|
ef2d9b |
+ if ( next != opt && next[ 0 ] == '\0' && l > 0 && (long)((int)l) == l ) {
|
|
|
ef2d9b |
+ int v = (int)l;
|
|
|
ef2d9b |
+ (void)ldap_set_option( NULL, attrs[i].offset, (const void *)&v );
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+ } break;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ break;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ if ( attrs[i].type == ATTR_NONE ) {
|
|
|
ef2d9b |
+ Debug( LDAP_DEBUG_TRACE, "ldap_int_tls_config: "
|
|
|
ef2d9b |
+ "unknown option '%s'",
|
|
|
ef2d9b |
+ cmd, 0, 0 );
|
|
|
ef2d9b |
+ return 1;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ return 0;
|
|
|
ef2d9b |
+}
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+int
|
|
|
ef2d9b |
+ldap_pvt_conf_option(
|
|
|
ef2d9b |
+ char *cmd, char *opt, int userconf )
|
|
|
ef2d9b |
+{
|
|
|
ef2d9b |
+ struct ldapoptions *gopts;
|
|
|
ef2d9b |
+ int rc = LDAP_OPT_ERROR;
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ /* Get pointer to global option structure */
|
|
|
ef2d9b |
+ gopts = LDAP_INT_GLOBAL_OPT();
|
|
|
ef2d9b |
+ if (NULL == gopts) {
|
|
|
ef2d9b |
+ return LDAP_NO_MEMORY;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ if ( gopts->ldo_valid != LDAP_INITIALIZED ) {
|
|
|
ef2d9b |
+ ldap_int_initialize(gopts, NULL);
|
|
|
ef2d9b |
+ if ( gopts->ldo_valid != LDAP_INITIALIZED )
|
|
|
ef2d9b |
+ return LDAP_LOCAL_ERROR;
|
|
|
ef2d9b |
+ }
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
+ return ldap_int_conf_option( gopts, cmd, opt, userconf );
|
|
|
ef2d9b |
+}
|
|
|
ef2d9b |
+
|
|
|
ef2d9b |
static void openldap_ldap_init_w_conf(
|
|
|
ef2d9b |
const char *file, int userconf )
|
|
|
ef2d9b |
{
|
|
|
ef2d9b |
@@ -212,101 +347,7 @@ static void openldap_ldap_init_w_conf(
|
|
|
ef2d9b |
while(isspace((unsigned char)*start)) start++;
|
|
|
ef2d9b |
opt = start;
|
|
|
ef2d9b |
|
|
|
ef2d9b |
- for(i=0; attrs[i].type != ATTR_NONE; i++) {
|
|
|
ef2d9b |
- void *p;
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- if( !userconf && attrs[i].useronly ) {
|
|
|
ef2d9b |
- continue;
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- if(strcasecmp(cmd, attrs[i].name) != 0) {
|
|
|
ef2d9b |
- continue;
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- switch(attrs[i].type) {
|
|
|
ef2d9b |
- case ATTR_BOOL:
|
|
|
ef2d9b |
- if((strcasecmp(opt, "on") == 0)
|
|
|
ef2d9b |
- || (strcasecmp(opt, "yes") == 0)
|
|
|
ef2d9b |
- || (strcasecmp(opt, "true") == 0))
|
|
|
ef2d9b |
- {
|
|
|
ef2d9b |
- LDAP_BOOL_SET(gopts, attrs[i].offset);
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- } else {
|
|
|
ef2d9b |
- LDAP_BOOL_CLR(gopts, attrs[i].offset);
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- case ATTR_INT: {
|
|
|
ef2d9b |
- char *next;
|
|
|
ef2d9b |
- long l;
|
|
|
ef2d9b |
- p = &((char *) gopts)[attrs[i].offset];
|
|
|
ef2d9b |
- l = strtol( opt, &next, 10 );
|
|
|
ef2d9b |
- if ( next != opt && next[ 0 ] == '\0' ) {
|
|
|
ef2d9b |
- * (int*) p = l;
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
- } break;
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- case ATTR_KV: {
|
|
|
ef2d9b |
- const struct ol_keyvalue *kv;
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- for(kv = attrs[i].data;
|
|
|
ef2d9b |
- kv->key != NULL;
|
|
|
ef2d9b |
- kv++) {
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- if(strcasecmp(opt, kv->key) == 0) {
|
|
|
ef2d9b |
- p = &((char *) gopts)[attrs[i].offset];
|
|
|
ef2d9b |
- * (int*) p = kv->value;
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
- } break;
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- case ATTR_STRING:
|
|
|
ef2d9b |
- p = &((char *) gopts)[attrs[i].offset];
|
|
|
ef2d9b |
- if (* (char**) p != NULL) LDAP_FREE(* (char**) p);
|
|
|
ef2d9b |
- * (char**) p = LDAP_STRDUP(opt);
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- case ATTR_OPTION:
|
|
|
ef2d9b |
- ldap_set_option( NULL, attrs[i].offset, opt );
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- case ATTR_SASL:
|
|
|
ef2d9b |
-#ifdef HAVE_CYRUS_SASL
|
|
|
ef2d9b |
- ldap_int_sasl_config( gopts, attrs[i].offset, opt );
|
|
|
ef2d9b |
-#endif
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- case ATTR_GSSAPI:
|
|
|
ef2d9b |
-#ifdef HAVE_GSSAPI
|
|
|
ef2d9b |
- ldap_int_gssapi_config( gopts, attrs[i].offset, opt );
|
|
|
ef2d9b |
-#endif
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- case ATTR_TLS:
|
|
|
ef2d9b |
-#ifdef HAVE_TLS
|
|
|
ef2d9b |
- ldap_int_tls_config( NULL, attrs[i].offset, opt );
|
|
|
ef2d9b |
-#endif
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- case ATTR_OPT_TV: {
|
|
|
ef2d9b |
- struct timeval tv;
|
|
|
ef2d9b |
- char *next;
|
|
|
ef2d9b |
- tv.tv_usec = 0;
|
|
|
ef2d9b |
- tv.tv_sec = strtol( opt, &next, 10 );
|
|
|
ef2d9b |
- if ( next != opt && next[ 0 ] == '\0' && tv.tv_sec > 0 ) {
|
|
|
ef2d9b |
- (void)ldap_set_option( NULL, attrs[i].offset, (const void *)&tv );
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
- } break;
|
|
|
ef2d9b |
- case ATTR_OPT_INT: {
|
|
|
ef2d9b |
- long l;
|
|
|
ef2d9b |
- char *next;
|
|
|
ef2d9b |
- l = strtol( opt, &next, 10 );
|
|
|
ef2d9b |
- if ( next != opt && next[ 0 ] == '\0' && l > 0 && (long)((int)l) == l ) {
|
|
|
ef2d9b |
- int v = (int)l;
|
|
|
ef2d9b |
- (void)ldap_set_option( NULL, attrs[i].offset, (const void *)&v );
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
- } break;
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
-
|
|
|
ef2d9b |
- break;
|
|
|
ef2d9b |
- }
|
|
|
ef2d9b |
+ ldap_int_conf_option( gopts, cmd, opt, userconf );
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
|
|
|
ef2d9b |
fclose(fp);
|
|
|
ef2d9b |
diff --git a/servers/slapd/slapcommon.c b/servers/slapd/slapcommon.c
|
|
|
ef2d9b |
index 87ea0ea06..39384e5e9 100644
|
|
|
ef2d9b |
--- a/servers/slapd/slapcommon.c
|
|
|
ef2d9b |
+++ b/servers/slapd/slapcommon.c
|
|
|
ef2d9b |
@@ -228,7 +228,8 @@ parse_slapopt( int tool, int *mode )
|
|
|
ef2d9b |
break;
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
|
|
|
ef2d9b |
- } else if ( strncasecmp( optarg, "ldif-wrap", len ) == 0 ) {
|
|
|
ef2d9b |
+ } else if ( ( strncasecmp( optarg, "ldif_wrap", len ) == 0 ) ||
|
|
|
ef2d9b |
+ ( strncasecmp( optarg, "ldif-wrap", len ) == 0 ) ) {
|
|
|
ef2d9b |
switch ( tool ) {
|
|
|
ef2d9b |
case SLAPCAT:
|
|
|
ef2d9b |
if ( strcasecmp( p, "no" ) == 0 ) {
|
|
|
ef2d9b |
@@ -237,7 +238,7 @@ parse_slapopt( int tool, int *mode )
|
|
|
ef2d9b |
} else {
|
|
|
ef2d9b |
unsigned int u;
|
|
|
ef2d9b |
if ( lutil_atou( &u, p ) ) {
|
|
|
ef2d9b |
- Debug( LDAP_DEBUG_ANY, "unable to parse ldif-wrap=\"%s\".\n", p, 0, 0 );
|
|
|
ef2d9b |
+ Debug( LDAP_DEBUG_ANY, "unable to parse ldif_wrap=\"%s\".\n", p, 0, 0 );
|
|
|
ef2d9b |
return -1;
|
|
|
ef2d9b |
}
|
|
|
ef2d9b |
ldif_wrap = (ber_len_t)u;
|
|
|
ef2d9b |
--
|
|
|
ef2d9b |
2.26.2
|
|
|
ef2d9b |
|