From a453df62804311be2277cae8e7ec4ff4601a706c Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Tue, 16 Mar 2004 18:36:38 +0000 Subject: [PATCH] add DN check mode; rework check sinfrastructure --- servers/slapd/main.c | 58 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 8 deletions(-) diff --git a/servers/slapd/main.c b/servers/slapd/main.c index 497d408681..6d4096b9bc 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -116,7 +116,11 @@ static int cnvt_str2int( char *, STRDISP_P, int ); #endif /* LOG_LOCAL4 */ -static int check_config = 0; +#define CHECK_NONE 0x00 +#define CHECK_CONFIG 0x01 +#define CHECK_DN 0x02 +static int check = CHECK_NONE; +static struct berval check_dn = BER_BVC(""); static int version = 0; static void @@ -144,6 +148,7 @@ usage( char *name ) #endif "\t-s level\tSyslog level\n" "\t-t\t\tCheck configuration file and exit\n" + "\t-D dn\tCheck dn and exit\n" #if defined(HAVE_SETUID) && defined(HAVE_SETGID) "\t-u user\t\tUser (id or name) to run as\n" "\t-V\t\tprint version info (-VV only)\n" @@ -266,7 +271,7 @@ int main( int argc, char **argv ) #endif while ( (i = getopt( argc, argv, - "c:d:f:h:s:n:t:T:V" + "c:d:D:f:h:s:n:tT:V" #if LDAP_PF_INET6 "46" #endif @@ -370,8 +375,15 @@ int main( int argc, char **argv ) break; case 't': - check_config++; + check |= CHECK_CONFIG; break; + + case 'D': + check |= CHECK_DN; + check_dn.bv_val = optarg; + check_dn.bv_len = strlen( optarg ); + break; + case 'V': version++; break; @@ -431,7 +443,7 @@ int main( int argc, char **argv ) Debug( LDAP_DEBUG_ANY, "%s", Versionstr, 0, 0 ); #endif - if( !check_config && slapd_daemon_init( urls ) != 0 ) { + if( check == CHECK_NONE && slapd_daemon_init( urls ) != 0 ) { rc = 1; SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 16 ); goto stop; @@ -532,17 +544,21 @@ int main( int argc, char **argv ) rc = 1; SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 19 ); - if ( check_config ) { + if ( check & CHECK_CONFIG ) { fprintf( stderr, "config check failed\n" ); } goto destroy; } - if ( check_config ) { - rc = 0; + if ( check & CHECK_CONFIG ) { fprintf( stderr, "config check succeeded\n" ); - goto destroy; + + check &= ~CHECK_CONFIG; + if ( check == CHECK_NONE ) { + rc = 0; + goto destroy; + } } if ( glue_sub_init( ) != 0 ) { @@ -568,6 +584,32 @@ int main( int argc, char **argv ) goto destroy; } + if ( check & CHECK_DN ) { + struct berval pdn, ndn; + + rc = dnPrettyNormal( NULL, &check_dn, + &pdn, &ndn, NULL ); + if ( rc != LDAP_SUCCESS ) { + fprintf( stderr, "DN: <%s> check failed %d (%s)\n", + check_dn.bv_val, rc, + ldap_err2string( rc ) ); + rc = 1; + + } else { + fprintf( stderr, "DN: <%s> check succeeded\n" + "normalized: <%s>\n" + "pretty: <%s>\n", + check_dn.bv_val, + ndn.bv_val, pdn.bv_val ); + rc = 0; + } + + check &= ~CHECK_DN; + if ( check == CHECK_NONE ) { + goto destroy; + } + } + #ifdef HAVE_TLS rc = ldap_pvt_tls_init(); if( rc != 0) { -- 2.39.5