]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/other.c
Experimental cruft to propagate valid Operation to SASL callbacks.
[openldap] / servers / slapd / back-sql / other.c
index 62dcbe81509a666c9437b6193058876e23bb3af9..1629a086e30b2b7f57619ec1f678cb83fc635935 100644 (file)
 #include "slap.h"
 #include "back-sql.h"
 #include "sql-wrap.h"
-
-int
-backsql_dummy( void )
-{
-       return 0;
-}
+#include "entry-id.h"
 
 int
 backsql_compare(
@@ -49,5 +44,70 @@ backsql_abandon(
        return 0;
 }
 
+
+/*
+ * sets the supported operational attributes (if required)
+ */
+
+int
+backsql_operational(
+       BackendDB       *be,
+       Connection      *conn, 
+       Operation       *op,
+       Entry           *e,
+       AttributeName   *attrs,
+       int             opattrs,
+       Attribute       **a )
+{
+
+       backsql_info            *bi = (backsql_info*)be->be_private;
+       SQLHDBC                 dbh = SQL_NULL_HDBC;
+       Attribute               **aa = a;
+       int                     rc;
+
+       Debug( LDAP_DEBUG_TRACE, "==>backsql_operational(): entry '%s'\n",
+                       e->e_nname.bv_val, 0, 0 );
+
+
+       if ( opattrs || ad_inlist( slap_schema.si_ad_hasSubordinates, attrs ) ) {
+               rc = backsql_get_db_conn( be, conn, &dbh );
+               if ( rc != LDAP_SUCCESS ) {
+                       goto no_connection;
+               }
+               
+               rc = backsql_has_children( bi, dbh, &e->e_nname );
+
+               switch( rc ) {
+               case LDAP_COMPARE_TRUE:
+               case LDAP_COMPARE_FALSE:
+                       *aa = slap_operational_hasSubordinate( rc == LDAP_COMPARE_TRUE );
+                       if ( *aa != NULL ) {
+                               aa = &(*aa)->a_next;
+                       }
+                       rc = 0;
+                       break;
+
+               default:
+                       Debug(LDAP_DEBUG_TRACE, 
+                               "backsql_operational(): "
+                               "has_children failed( %d)\n", 
+                               rc, 0, 0 );
+                       rc = 1;
+                       break;
+               }
+       }
+
+       return rc;
+
+no_connection:;
+       Debug( LDAP_DEBUG_TRACE, "backsql_operational(): "
+               "could not get connection handle - exiting\n", 
+               0, 0, 0 );
+       send_ldap_result( conn, op, rc, "", 
+                       rc == LDAP_OTHER ? "SQL-backend error" : "",
+                       NULL, NULL );
+       return 1;
+}
+
 #endif /* SLAPD_SQL */