/*
- * 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
return next;
}
-backsql_entryID* backsql_dn2id(backsql_entryID *id,SQLHDBC dbh,char *dn)
+backsql_entryID* backsql_dn2id(backsql_info *bi,backsql_entryID *id,SQLHDBC dbh,char *dn)
{
- static char id_query[]="SELECT id,keyval,objclass FROM ldap_entries WHERE dn=?";
SQLHSTMT sth;
BACKSQL_ROW_NTS row;
- //SQLINTEGER nrows=0;
+ /*SQLINTEGER nrows=0;*/
RETCODE rc;
+ /* TimesTen */
+ char upperdn[BACKSQL_MAX_DN_LEN+1];
+ char* toBind;
+ int i, j, k;
+
Debug(LDAP_DEBUG_TRACE,"==>backsql_dn2id(): dn='%s'\n",dn,0,0);
- backsql_Prepare(dbh,&sth,id_query,0);
- if ((rc=backsql_BindParamStr(sth,1,dn,BACKSQL_MAX_DN_LEN)) != SQL_SUCCESS)
- {
+ /* begin TimesTen */
+ Debug(LDAP_DEBUG_TRACE, "id_query '%s'\n", bi->id_query, 0, 0);
+ rc = backsql_Prepare(dbh,&sth,bi->id_query,0);
+ if (rc != SQL_SUCCESS) {
+ Debug(LDAP_DEBUG_TRACE, "backsql_dn2id(): error preparing SQL:\n", 0, 0, 0);
+ Debug(LDAP_DEBUG_TRACE, "%s\n", bi->id_query, 0, 0);
+ backsql_PrintErrors(SQL_NULL_HENV, dbh, sth, rc);
+ SQLFreeStmt(sth, SQL_DROP);
+ return NULL;
+ }
+
+ if (bi->has_ldapinfo_dn_ru) {
+ /* Prepare an upper cased, byte reversed version that can be
+ searched using indexes */
+
+ for ((i=0, j=strlen(dn)-1); *(dn+i); (i++, j--)) {
+ *(upperdn+i) = toupper(*(dn+j));
+ }
+ *(upperdn+i) = '\0';
+ Debug(LDAP_DEBUG_TRACE,"==>backsql_dn2id(): upperdn='%s'\n",upperdn,0,0);
+ toBind = upperdn;
+ }
+ else {
+ if (bi->isTimesTen) {
+ for (i = 0; *(dn+i); i++) {
+ *(upperdn+i) = toupper(*(dn+i)); /* Copy while upper casing */
+ }
+ *(upperdn+i) = '\0';
+ Debug(LDAP_DEBUG_TRACE,"==>backsql_dn2id(): upperdn='%s'\n",upperdn,0,0);
+ toBind = upperdn;
+ }
+ else
+ toBind = dn;
+ }
+
+ if ((rc=backsql_BindParamStr(sth,1,toBind,
+ BACKSQL_MAX_DN_LEN)) != SQL_SUCCESS)
+ /* end TimesTen*/
+ {
Debug(LDAP_DEBUG_TRACE,"backsql_dn2id(): error binding dn parameter:\n",0,0,0);
backsql_PrintErrors(SQL_NULL_HENV,dbh,sth,rc);
SQLFreeStmt(sth,SQL_DROP);
return NULL;
- }
+ }
if ((rc=SQLExecute(sth)) != SQL_SUCCESS)
{
id->id=atoi(row.cols[0]);
id->keyval=atoi(row.cols[1]);
id->oc_id=atoi(row.cols[2]);
- id->dn=strdup(dn);
+ id->dn=ch_strdup(dn);
id->next=NULL;
}
else
if ((rc=SQLExecute(sth)) != SQL_SUCCESS && rc!= SQL_SUCCESS_WITH_INFO)
{
- Debug(LDAP_DEBUG_TRACE,"backsql_get_attr_values(): error executing query\n",0,0,0);
+ Debug(LDAP_DEBUG_TRACE,"backsql_get_attr_values(): error executing attribute query '%s'\n",at->query,0,0);
backsql_PrintErrors(bsi->bi->db_env,bsi->dbh,sth,rc);
SQLFreeStmt(sth,SQL_DROP);
return 1;
{
backsql_entry_addattr(bsi->e,row.col_names[i],row.cols[i],/*row.col_prec[i]*/
strlen(row.cols[i]));
-// Debug(LDAP_DEBUG_TRACE,"prec=%d\n",(int)row.col_prec[i],0,0);
+/* Debug(LDAP_DEBUG_TRACE,"prec=%d\n",(int)row.col_prec[i],0,0);*/
}
- // else
- // Debug(LDAP_DEBUG_TRACE,"NULL value in this row for attribute '%s'\n",row.col_names[i],0,0);
+ /* else
+ Debug(LDAP_DEBUG_TRACE,"NULL value in this row for attribute '%s'\n",row.col_names[i],0,0);
+*/
}
}
backsql_FreeRow(&row);
bsi->e=e;
bsi->c_eid=eid;
e->e_attrs=NULL;
- if (bsi->base_dn != NULL)
- e->e_dn=strdup(bsi->c_eid->dn);
+ e->e_private=NULL;
+
+/* if (bsi->base_dn != NULL)???*/
+
+ e->e_id=eid->id;
+ e->e_dn=ch_strdup(bsi->c_eid->dn);
+ e->e_ndn=dn_normalize(ch_strdup(bsi->c_eid->dn));
if (bsi->attrs!=NULL)
{
{
if (!strcasecmp(*c_at_name,"objectclass") || !strcasecmp(*c_at_name,"0.10"))
{
- //backsql_entry_addattr(bsi->e,"objectclass",bsi->oc->name,strlen(bsi->oc->name));
+ /*backsql_entry_addattr(bsi->e,"objectclass",bsi->oc->name,strlen(bsi->oc->name));*/
continue;
}
at=backsql_at_with_name(bsi->oc,*c_at_name);
return e;
}
-#endif /* SLAPD_SQL */
\ No newline at end of file
+#endif /* SLAPD_SQL */