]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/other.c
Converted ch_malloc, ch_calloc and ch_realloc calls to SLAP_MALLOC,
[openldap] / servers / slapd / back-sql / other.c
index a736b1d63da43c7e70c831e59ce28ac573b47a63..b2638960f4c697c6b7f0ea3991e64db1183e92d4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *      Copyright 1999, Dmitry Kovalev (zmit@mail.ru), All rights reserved.
+ *      Copyright 1999, Dmitry Kovalev <mit@openldap.org>, All rights reserved.
  *
  *      Redistribution and use in source and binary forms are permitted only
  *      as authorized by the OpenLDAP Public License.  A copy of this
 
 #include "portable.h"
 
+#ifdef SLAPD_SQL
+
 #include <stdio.h>
 #include <sys/types.h>
 #include "slap.h"
 #include "back-sql.h"
 #include "sql-wrap.h"
+#include "entry-id.h"
 
-int backsql_dummy()
+int
+backsql_compare(
+       BackendDB       *bd,
+       Connection      *conn,
+       Operation       *op,
+       struct berval   *dn,
+       struct berval   *ndn,
+       AttributeAssertion *ava )
 {
- return 0;
+       Debug( LDAP_DEBUG_TRACE, "==>backsql_compare() - not implemented\n",
+                       0, 0, 0 );
+       return 1;
 }
 
-int backsql_compare(BackendDB *be,Connection *conn,Operation *op,
-       char *dn,char *ndn,Ava *ava)
+int
+backsql_abandon(
+       BackendDB       *be,
+       Connection      *conn, 
+       Operation       *op, 
+       int             msgid )
 {
- Debug(LDAP_DEBUG_TRACE,"==>backsql_compare()\n",0,0,0);
- return 0;
+       Debug( LDAP_DEBUG_TRACE, "==>backsql_abandon()\n", 0, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "<==backsql_abandon()\n", 0, 0, 0 );
+       return 0;
 }
 
-int backsql_abandon( BackendDB *be,
-       Connection *conn, Operation *op, int msgid )
+
+/*
+ * sets the supported operational attributes (if required)
+ */
+
+int
+backsql_operational(
+       BackendDB       *be,
+       Connection      *conn, 
+       Operation       *op,
+       Entry           *e,
+       AttributeName   *attrs,
+       int             opattrs,
+       Attribute       **a )
 {
- Debug(LDAP_DEBUG_TRACE,"==>backsql_abandon()\n",0,0,0);
- Debug(LDAP_DEBUG_TRACE,"<==backsql_abandon()\n",0,0,0);
- return 0;
+
+       backsql_info            *bi = (backsql_info*)be->be_private;
+       SQLHDBC                 dbh = SQL_NULL_HDBC;
+       Attribute               **aa = a;
+       int                     rc = 0;
+
+       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 ) ) 
+#ifdef SLAP_X_FILTER_HASSUBORDINATES
+                       && attr_find( e->e_attrs, slap_schema.si_ad_hasSubordinates ) == NULL
+#endif /* SLAP_X_FILTER_HASSUBORDINATES */
+                       ) {
+               
+               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 */
+