version 1.119, 2006/08/28 23:43:24
|
version 1.123, 2007/01/02 19:01:05
|
Line 1
|
Line 1
|
/* root_dse.c - Provides the Root DSA-Specific Entry */ |
/* root_dse.c - Provides the Root DSA-Specific Entry */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/root_dse.c,v 1.118 2006/08/25 18:05:14 kurt Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/root_dse.c,v 1.122 2006/12/24 14:43:18 ando Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 1999-2006 The OpenLDAP Foundation. |
* Copyright 1999-2007 The OpenLDAP Foundation. |
* All rights reserved. |
* All rights reserved. |
* |
* |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
Line 375 fail:
|
Line 375 fail:
|
return LDAP_SUCCESS; |
return LDAP_SUCCESS; |
} |
} |
|
|
|
int |
|
root_dse_init( void ) |
|
{ |
|
return 0; |
|
} |
|
|
|
int |
|
root_dse_destroy( void ) |
|
{ |
|
if ( usr_attr ) { |
|
entry_free( usr_attr ); |
|
usr_attr = NULL; |
|
} |
|
|
|
return 0; |
|
} |
|
|
/* |
/* |
* Read the entries specified in fname and merge the attributes |
* Read the entries specified in fname and merge the attributes |
* to the user defined rootDSE. Note thaat if we find any errors |
* to the user defined rootDSE. Note thaat if we find any errors |
* what so ever, we will discard the entire entries, print an |
* what so ever, we will discard the entire entries, print an |
* error message and return. |
* error message and return. |
*/ |
*/ |
int read_root_dse_file( const char *fname ) |
int |
|
root_dse_read_file( const char *fname ) |
{ |
{ |
struct LDIFFP *fp; |
struct LDIFFP *fp; |
int rc = 0, lineno = 0, lmax = 0; |
int rc = 0, lineno = 0, lmax = 0; |
Line 389 int read_root_dse_file( const char *fnam
|
Line 407 int read_root_dse_file( const char *fnam
|
|
|
if ( (fp = ldif_open( fname, "r" )) == NULL ) { |
if ( (fp = ldif_open( fname, "r" )) == NULL ) { |
Debug( LDAP_DEBUG_ANY, |
Debug( LDAP_DEBUG_ANY, |
"could not open rootdse attr file \"%s\" - absolute path?\n", |
"root_dse_read_file: could not open rootdse attr file \"%s\" - absolute path?\n", |
fname, 0, 0 ); |
fname, 0, 0 ); |
perror( fname ); |
perror( fname ); |
return EXIT_FAILURE; |
return EXIT_FAILURE; |
Line 398 int read_root_dse_file( const char *fnam
|
Line 416 int read_root_dse_file( const char *fnam
|
usr_attr = entry_alloc(); |
usr_attr = entry_alloc(); |
if( usr_attr == NULL ) { |
if( usr_attr == NULL ) { |
Debug( LDAP_DEBUG_ANY, |
Debug( LDAP_DEBUG_ANY, |
"read_root_dse_file: entry_alloc failed", 0, 0, 0 ); |
"root_dse_read_file: entry_alloc failed", 0, 0, 0 ); |
ldif_close( fp ); |
ldif_close( fp ); |
return LDAP_OTHER; |
return LDAP_OTHER; |
} |
} |
Line 409 int read_root_dse_file( const char *fnam
|
Line 427 int read_root_dse_file( const char *fnam
|
Attribute *a; |
Attribute *a; |
|
|
if( e == NULL ) { |
if( e == NULL ) { |
fprintf( stderr, "root_dse: could not parse entry (line=%d)\n", |
Debug( LDAP_DEBUG_ANY, "root_dse_read_file: " |
lineno ); |
"could not parse entry (file=\"%s\" line=%d)\n", |
|
fname, lineno, 0 ); |
rc = EXIT_FAILURE; |
rc = EXIT_FAILURE; |
break; |
break; |
} |
} |
|
|
/* make sure the DN is the empty DN */ |
/* make sure the DN is the empty DN */ |
if( e->e_nname.bv_len ) { |
if( e->e_nname.bv_len ) { |
fprintf( stderr, |
Debug( LDAP_DEBUG_ANY, |
"root_dse: invalid rootDSE - dn=\"%s\" (line=%d)\n", |
"root_dse_read_file: invalid rootDSE " |
e->e_dn, lineno ); |
"- dn=\"%s\" (file=\"%s\" line=%d)\n", |
|
e->e_dn, fname, lineno ); |
entry_free( e ); |
entry_free( e ); |
rc = EXIT_FAILURE; |
rc = EXIT_FAILURE; |
break; |
break; |
Line 453 int read_root_dse_file( const char *fnam
|
Line 473 int read_root_dse_file( const char *fnam
|
|
|
ldif_close( fp ); |
ldif_close( fp ); |
|
|
Debug(LDAP_DEBUG_CONFIG, "rootDSE file %s read.\n", fname, 0, 0); |
Debug(LDAP_DEBUG_CONFIG, "rootDSE file=\"%s\" read.\n", fname, 0, 0); |
return rc; |
return rc; |
} |
} |
|
|
int |
int |
slap_discover_feature( |
slap_discover_feature( |
const char *uri, |
slap_bindconf *sb, |
int version, |
|
const char *attr, |
const char *attr, |
const char *val ) |
const char *val ) |
{ |
{ |
LDAP *ld; |
LDAP *ld = NULL; |
LDAPMessage *res = NULL, *entry; |
LDAPMessage *res = NULL, *entry; |
int rc, i; |
int rc, i; |
struct berval cred = BER_BVC( "" ), |
struct berval bv_val, |
bv_val, |
|
**values = NULL; |
**values = NULL; |
char *attrs[ 2 ] = { NULL, NULL }; |
char *attrs[ 2 ] = { NULL, NULL }; |
|
|
ber_str2bv( val, 0, 0, &bv_val ); |
rc = slap_client_connect( &ld, sb ); |
attrs[ 0 ] = (char *) attr; |
|
|
|
rc = ldap_initialize( &ld, uri ); |
|
if ( rc != LDAP_SUCCESS ) { |
|
return rc; |
|
} |
|
|
|
rc = ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, |
|
(const void *)&version ); |
|
if ( rc != LDAP_SUCCESS ) { |
|
goto done; |
|
} |
|
|
|
rc = ldap_sasl_bind_s( ld, "", LDAP_SASL_SIMPLE, |
|
&cred, NULL, NULL, NULL ); |
|
if ( rc != LDAP_SUCCESS ) { |
if ( rc != LDAP_SUCCESS ) { |
goto done; |
goto done; |
} |
} |
|
|
|
attrs[ 0 ] = (char *) attr; |
rc = ldap_search_ext_s( ld, "", LDAP_SCOPE_BASE, "(objectClass=*)", |
rc = ldap_search_ext_s( ld, "", LDAP_SCOPE_BASE, "(objectClass=*)", |
attrs, 0, NULL, NULL, NULL, 0, &res ); |
attrs, 0, NULL, NULL, NULL, 0, &res ); |
if ( rc != LDAP_SUCCESS ) { |
if ( rc != LDAP_SUCCESS ) { |
Line 509 slap_discover_feature(
|
Line 513 slap_discover_feature(
|
goto done; |
goto done; |
} |
} |
|
|
|
ber_str2bv( val, 0, 0, &bv_val ); |
for ( i = 0; values[ i ] != NULL; i++ ) { |
for ( i = 0; values[ i ] != NULL; i++ ) { |
if ( bvmatch( &bv_val, values[ i ] ) ) { |
if ( bvmatch( &bv_val, values[ i ] ) ) { |
rc = LDAP_COMPARE_TRUE; |
rc = LDAP_COMPARE_TRUE; |