]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-sql/init.c
Add a safety check to bvcasechr
[openldap] / servers / slapd / back-sql / init.c
index 8c58f1b27c619083847e42293db1ccf3c096ee75..92f7b5b90ba562fc2716896fc0a7b740269912f2 100644 (file)
@@ -70,7 +70,7 @@ int sql_back_initialize(
        bi->bi_chk_referrals = 0;
  
        bi->bi_connection_init = 0;
-       bi->bi_connection_destroy = 0;
+       bi->bi_connection_destroy = backsql_connection_destroy;
        
        Debug(LDAP_DEBUG_TRACE,"<==backsql_initialize()\n",0,0,0);
        return 0;
@@ -178,6 +178,15 @@ int backsql_db_open (BackendDB *bd)
   Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): setting '%s' by default\n",backsql_def_delentry_query,0,0);
   si->delentry_query=ch_strdup(backsql_def_delentry_query);
  }
+ tmp.c_connid=-1;
+ dbh=backsql_get_db_conn(bd,&tmp);
+ if (!dbh)
+ {
+  Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): connection failed, exiting\n",0,0,0
+);
+  return 1;
+ }
+
  si->id_query=NULL;
  idq_len=0;
  if (si->upper_func==NULL)
@@ -185,17 +194,21 @@ int backsql_db_open (BackendDB *bd)
   si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,"dn=?",NULL);
  }
  else
-  {
-   si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,si->upper_func,"(dn)=",si->upper_func,"(?)",NULL);
-  }
- tmp.c_connid=-1;
- dbh=backsql_get_db_conn(bd,&tmp);
- if (!dbh)
  {
-  Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): connection failed, exiting\n",0,0,0);
-  return 1;
+    if (si->has_ldapinfo_dn_ru) {
+      si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,"dn_ru=?",NULL);
+    }
+    else {
+      if (si->isTimesTen) {
+    si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,si->upper_func,"(dn)=?",NULL);
+      }
+      else {
+               si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,si->upper_func,"(dn)=",si->upper_func,"(?)",NULL);
+         }
+       }
  }
- backsql_free_db_conn(bd,&tmp);
+backsql_free_db_conn(bd,&tmp);
  if (!si->schema_loaded)
  {
   Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): test failed, schema map not loaded - exiting\n",0,0,0);
@@ -212,4 +225,12 @@ int backsql_db_close(BackendDB *bd)
  return 0;
 }
 
+int backsql_connection_destroy(BackendDB *be,Connection *conn)
+{
+ Debug(LDAP_DEBUG_TRACE,"==>backsql_connection_destroy()\n",0,0,0);
+ backsql_free_db_conn(be,conn);
+ Debug(LDAP_DEBUG_TRACE,"<==backsql_connection_destroy()\n",0,0,0);
+ return 0;
+}
+
 #endif /* SLAPD_SQL */