Add protected simple authentication as a "strong" mechanism.
disables acceptance of anonymous bind requests.
.B bind_simple
disables simple (bind) authentication.
+.B bind_simple_unprotected
+disables simple (bind) authentication when confidentiality
+protections (e.g. TLS) are not in place.
.B bind_krbv4
disables Kerberos V4 (bind) authentication.
.B tls_2_anon
requires SASL authentication prior to directory operations.
.B strong
requires strong authentication prior to directory operations.
-The
-.B SASL
-and
-.B strong
-conditions are currently same.
+The strong keyword allows protected "simple" authentication
+as well as SASL authentication.
.B none
may be used to require no conditions (useful for clearly globally
set conditions within a particular database).
if( requires & SLAP_REQUIRE_STRONG ) {
/* should check mechanism */
- if( op->o_authmech.bv_len == 0 || op->o_dn.bv_len == 0 )
+ if( ( op->o_transport_ssf < ssf->sss_transport
+ && op->o_authmech.bv_len == 0 ) || op->o_dn.bv_len == 0 )
{
*text = "strong authentication required";
return LDAP_STRONG_AUTH_REQUIRED;
}
if( requires & SLAP_REQUIRE_SASL ) {
- if( op->o_authmech.bv_len == 0 || op->o_dn.bv_len == 0 )
- {
+ if( op->o_authmech.bv_len == 0 || op->o_dn.bv_len == 0 ) {
*text = "SASL authentication required";
return LDAP_STRONG_AUTH_REQUIRED;
}
Debug( LDAP_DEBUG_TRACE,
"do_bind: v%d simple bind(%s) disallowed\n",
version, ndn.bv_val, 0 );
+#endif
+ goto cleanup;
+
+ } else if (( global_disallows & SLAP_DISALLOW_BIND_SIMPLE_UNPROTECTED )
+ && ( op->o_transport_ssf < global_ssf_set.sss_transport ))
+ {
+ rc = LDAP_CONFIDENTIALITY_REQUIRED;
+ text = "unwilling to perform simple authentication "
+ "without confidentilty protection";
+
+ send_ldap_result( conn, op, rc,
+ NULL, text, NULL, NULL );
+
+#ifdef NEW_LOGGING
+ LDAP_LOG(( "operation", LDAP_LEVEL_INFO, "do_bind: conn %d "
+ "v%d unprotected simple bind(%s) disallowed\n",
+ conn->c_connid, version, ndn.bv_val ));
+#else
+ Debug( LDAP_DEBUG_TRACE,
+ "do_bind: v%d unprotected simple bind(%s) disallowed\n",
+ version, ndn.bv_val, 0 );
#endif
goto cleanup;
}
} else if( strcasecmp( cargv[i], "bind_simple" ) == 0 ) {
disallows |= SLAP_DISALLOW_BIND_SIMPLE;
+ } else if( strcasecmp( cargv[i], "bind_simple_unprotected" ) == 0 ) {
+ disallows |= SLAP_DISALLOW_BIND_SIMPLE_UNPROTECTED;
+
} else if( strcasecmp( cargv[i], "bind_krbv4" ) == 0 ) {
disallows |= SLAP_DISALLOW_BIND_KRBV4;
#define SLAP_DISALLOW_BIND_ANON 0x0001U /* no anonymous */
#define SLAP_DISALLOW_BIND_SIMPLE 0x0002U /* simple authentication */
-#define SLAP_DISALLOW_BIND_KRBV4 0x0004U /* Kerberos V4 authentication */
+#define SLAP_DISALLOW_BIND_SIMPLE_UNPROTECTED \
+ 0x0004U /* unprotected simple auth */
+#define SLAP_DISALLOW_BIND_KRBV4 0x0008U /* Kerberos V4 authentication */
#define SLAP_DISALLOW_TLS_2_ANON 0x0010U /* StartTLS -> Anonymous */
#define SLAP_DISALLOW_TLS_AUTHC 0x0020U /* TLS while authenticated */