--- servers/slapd/root_dse.c 2000/07/29 01:53:14 1.12.2.4 +++ servers/slapd/root_dse.c 2002/01/04 20:38:29 1.12.2.8 @@ -1,7 +1,7 @@ -/* $OpenLDAP: pkg/ldap/servers/slapd/root_dse.c,v 1.12.2.3 2000/06/13 17:57:29 kurt Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/root_dse.c,v 1.12.2.7 2001/12/06 18:48:12 kurt Exp $ */ /* root_dse.c - Provides the ROOT DSA-Specific Entry * - * Copyright 1999-2000 The OpenLDAP Foundation. + * Copyright 1999-2002 The OpenLDAP Foundation. * All rights reserved. * * Redistribution and use in source and binary forms are permitted only @@ -17,6 +17,12 @@ #include "slap.h" +static char *supportedFeatures[] = { + "1.3.6.1.4.1.4203.1.5.1", /* All Operational Attributes ("+") */ + NULL +}; + + int root_dse_info( Connection *conn, @@ -36,6 +42,7 @@ root_dse_info( AttributeDescription *ad_supportedExtension = slap_schema.si_ad_supportedExtension; AttributeDescription *ad_supportedLDAPVersion = slap_schema.si_ad_supportedLDAPVersion; AttributeDescription *ad_supportedSASLMechanisms = slap_schema.si_ad_supportedSASLMechanisms; + AttributeDescription *ad_supportedFeatures = slap_schema.si_ad_supportedFeatures; AttributeDescription *ad_ref = slap_schema.si_ad_ref; vals[0] = &val; @@ -80,8 +87,21 @@ root_dse_info( attr_merge( e, ad_supportedExtension, vals ); } + /* supportedFeatures */ + for ( i=0; supportedFeatures[i] != NULL; i++ ) { + val.bv_val = supportedFeatures[i]; + val.bv_len = strlen( val.bv_val ); + attr_merge( e, ad_supportedFeatures, vals ); + } + /* supportedLDAPVersion */ for ( i=LDAP_VERSION_MIN; i<=LDAP_VERSION_MAX; i++ ) { + if (( global_disallows & SLAP_DISALLOW_BIND_V2 ) && + ( i < LDAP_VERSION3 ) ) + { + /* version 2 and lower are disallowed */ + continue; + } sprintf(buf,"%d",i); val.bv_val = buf; val.bv_len = strlen( val.bv_val ); @@ -97,6 +117,7 @@ root_dse_info( val.bv_len = strlen( val.bv_val ); attr_merge( e, ad_supportedSASLMechanisms, vals ); } + charray_free( supportedSASLMechanisms ); } if ( default_referral != NULL ) {