Diff for /servers/slapd/root_dse.c between versions 1.95.2.4 and 1.95.2.7

version 1.95.2.4, 2005/04/29 21:29:05 version 1.95.2.7, 2005/07/11 05:55:30
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.95.2.3 2005/03/14 22:33:12 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/root_dse.c,v 1.107 2005/07/04 03:24:00 hallvard 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-2005 The OpenLDAP Foundation.   * Copyright 1999-2005 The OpenLDAP Foundation.
Line 176  root_dse_info( Line 176  root_dse_info(
         }          }
   
         /* supportedLDAPVersion */          /* supportedLDAPVersion */
         for ( i=LDAP_VERSION_MIN; i<=LDAP_VERSION_MAX; i++ ) {                  /* don't publish version 2 as we don't really support it
                    * (even when configured to accept version 2 Bind requests)
                    * and the value would never be used by true LDAPv2 (or LDAPv3)
                    * clients.
                    */
           for ( i=LDAP_VERSION3; i<=LDAP_VERSION_MAX; i++ ) {
                 char buf[BUFSIZ];                  char buf[BUFSIZ];
                 if (!( global_allows & SLAP_ALLOW_BIND_V2 ) &&  
                         ( i < LDAP_VERSION3 ) )  
                 {  
                         /* version 2 and lower are disallowed */  
                         continue;  
                 }  
                 snprintf(buf, sizeof buf, "%d", i);                  snprintf(buf, sizeof buf, "%d", i);
                 val.bv_val = buf;                  val.bv_val = buf;
                 val.bv_len = strlen( val.bv_val );                  val.bv_len = strlen( val.bv_val );
Line 235  root_dse_info( Line 234  root_dse_info(
  */   */
 int read_root_dse_file( const char *fname )  int read_root_dse_file( const char *fname )
 {  {
         FILE    *fp;          struct LDIFFP   *fp;
         int rc = 0, lineno = 0, lmax = 0;          int rc = 0, lineno = 0, lmax = 0;
         char    *buf = NULL;          char    *buf = NULL;
   
         if ( (fp = fopen( 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",                          "could not open rootdse attr file \"%s\" - absolute path?\n",
                         fname, 0, 0 );                          fname, 0, 0 );
Line 251  int read_root_dse_file( const char *fnam Line 250  int read_root_dse_file( const char *fnam
         if( usr_attr == NULL ) {          if( usr_attr == NULL ) {
                 Debug( LDAP_DEBUG_ANY,                  Debug( LDAP_DEBUG_ANY,
                         "read_root_dse_file: SLAP_CALLOC failed", 0, 0, 0 );                          "read_root_dse_file: SLAP_CALLOC failed", 0, 0, 0 );
                 fclose( fp );                  ldif_close( fp );
                 return LDAP_OTHER;                  return LDAP_OTHER;
         }          }
         usr_attr->e_attrs = NULL;          usr_attr->e_attrs = NULL;
Line 303  int read_root_dse_file( const char *fnam Line 302  int read_root_dse_file( const char *fnam
   
         ch_free( buf );          ch_free( buf );
   
         fclose( 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
   slap_discover_feature(
           const char      *uri,
           int             version,
           const char      *attr,
           const char      *val )
   {
           LDAP            *ld;
           LDAPMessage     *res = NULL, *entry;
           int             rc, i;
           struct berval   cred = BER_BVC( "" ),
                           bv_val,
                           **values = NULL;
           char            *attrs[ 2 ] = { NULL, NULL };
   
           ber_str2bv( val, 0, 0, &bv_val );
           attrs[ 0 ] = (char *) attr;
   
           rc = ldap_initialize( &ld, uri );
           if ( rc != LDAP_SUCCESS ) {
                   return rc;
           }
   
           rc = ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version );
           if ( rc != LDAP_SUCCESS ) {
                   goto done;
           }
   
           rc = ldap_sasl_bind_s( ld, "", LDAP_SASL_SIMPLE,
                           &cred, NULL, NULL, NULL );
           if ( rc != LDAP_SUCCESS ) {
                   goto done;
           }
   
           rc = ldap_search_ext_s( ld, "", LDAP_SCOPE_BASE, "(objectClass=*)",
                           attrs, 0, NULL, NULL, NULL, 0, &res );
           if ( rc != LDAP_SUCCESS ) {
                   goto done;
           }
   
           entry = ldap_first_entry( ld, res );
           if ( entry == NULL ) {
                   goto done;
           }
   
           values = ldap_get_values_len( ld, entry, attrs[ 0 ] );
           if ( values == NULL ) {
                   rc = LDAP_NO_SUCH_ATTRIBUTE;
                   goto done;
           }
   
           for ( i = 0; values[ i ] != NULL; i++ ) {
                   if ( bvmatch( &bv_val, values[ i ] ) ) {
                           rc = LDAP_COMPARE_TRUE;
                           goto done;
                   }
           }
   
           rc = LDAP_COMPARE_FALSE;
   
   done:;
           if ( values != NULL ) {
                   ldap_value_free_len( values );
           }
   
           if ( res != NULL ) {
                   ldap_msgfree( res );
           }
   
           ldap_unbind_ext( ld, NULL, NULL );
   
           return rc;
   }
   

Removed from v.1.95.2.4  
changed lines
  Added in v.1.95.2.7


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org