mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-25 00:59:45 -05:00
fix case-insensitive matching
+ documentation cleanup & update
This commit is contained in:
parent
a0b93ce648
commit
4411e0aa17
5 changed files with 63 additions and 32 deletions
|
|
@ -12,4 +12,5 @@
|
|||
- it works with any other driver I tried
|
||||
4) ldapsearch sometimes refuses to show some attributes ("NOT PRINTABLE" diags)
|
||||
on Win32 (on linux everything's fine)
|
||||
5) back-sql crashes on invalid filters (to be fixed ASAP)
|
||||
|
||||
|
|
@ -2,7 +2,7 @@ CONTENT
|
|||
1. Purpose
|
||||
2. Metainformation used
|
||||
3. Typical back-sql operation
|
||||
4. Several important common techniques
|
||||
4. Several important common techniques (referrals, multiclassing)
|
||||
|
||||
1. Purpose
|
||||
Primary purpose of this backend is to PRESENT information stored in some RDBMS
|
||||
|
|
@ -184,6 +184,21 @@ delete instance in relational schema. Those can use a view instead of real
|
|||
table, something like this:
|
||||
|
||||
|
||||
Robin Elfrink wrote:
|
||||
|
||||
> About using a view for ldap_entries...
|
||||
>
|
||||
> This is what I came up with this morning:
|
||||
>
|
||||
> CREATE VIEW ldap_entries (id, dn, oc_map_id, parent, keyval) AS
|
||||
> SELECT (1000000000+userid),
|
||||
> UPPER(CONCAT(CONCAT('cn=',gecos),',o=MyCompany,c=NL'))
|
||||
> , 1, 0, userid FROM unixusers UNION
|
||||
> SELECT (2000000000+groupnummer),
|
||||
> UPPER(CONCAT(CONCAT('cn=',groupnaam),',o=MyCompany,c=NL')), 2, 0,
|
||||
> groupnummer FROM groups;
|
||||
>
|
||||
|
||||
|
||||
3. Typical back-sql operation
|
||||
Having metainformation loaded, back-sql uses these tables to determine a set
|
||||
|
|
@ -219,7 +234,7 @@ Please see samples to find out what are the parameters passed, and other
|
|||
information on this matter - they are self-explanatory for those familiar
|
||||
with concept expressed above.
|
||||
|
||||
4. Several common techniques
|
||||
4. Several common techniques (referrals, multiclassing etc.)
|
||||
First of all, lets remember that among other major differences to complete
|
||||
LDAP data model, the concept above does not directly support such things
|
||||
as multiple objectclasses for entry, and referrals.
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
PLEASE READ THIS WHOLE FILE AND CONCEPT, BECAUSE THEY COVER SEVERAL STICKY
|
||||
ISSUES THAT YOU WILL PROBABLY STUMBLE ACROSS ANYWAY
|
||||
|
||||
1. Build
|
||||
To build slapd with back-sql under Unix you need to build and install
|
||||
iODBC 2.50.3 (later versions should probably work, but not earlier).
|
||||
iODBC 2.50.3 (later versions should probably work, but not earlier),
|
||||
or unixODBC (you will have to change -liodbc to -lodbc then).
|
||||
Then, at top of OpenLDAP source tree, run
|
||||
"configure <other options you need> --enable-sql", then "make" -
|
||||
this should build back-sql-enabled slapd, provided that you have iODBC
|
||||
this should build back-sql-enabled slapd, provided that you have iODBC/unixODBC
|
||||
libraries and include files in include/library paths, "make install"...
|
||||
In other words, follow installation procedure described in OpenLDAP
|
||||
Administrators Guide, adding --enbale-sql option to configure, and
|
||||
having iODBC libraries installed an accessible by compiler.
|
||||
having iODBC/unixODBC libraries installed an accessible by compiler.
|
||||
|
||||
Under Win32/MSVC++, I modified the workspace so that back-sql is built into
|
||||
slapd automatically, since MS odbc32.dll is included in standard library pack,
|
||||
and it does no bad even if you don't plan to use it. I also could provide
|
||||
precompiled executables for those who don't have MSVC.
|
||||
slapd automatically, since MS ODBC manager, odbc32.dll, is included in
|
||||
standard library pack, and it does no bad even if you don't plan to use it.
|
||||
I also could provide precompiled executables for those who don't have MSVC.
|
||||
Note that Win32 port of OpenLDAP itself is experimental, and thus doesn't
|
||||
provide very convenient build environment (yet).
|
||||
|
||||
|
|
@ -20,7 +24,7 @@ provide very convenient build environment (yet).
|
|||
Next, you need to define ODBC datasource with data you want to publish
|
||||
with help of back-sql. Assuming that you have your data in some SQL-compliant
|
||||
RDBMS, and have installed proper ODBC driver for this RDBMS, this is as simple
|
||||
as adding a record into odbc.ini (for iODBC), or using ODBC wizard in
|
||||
as adding a record into odbc.ini (for iODBC/unixODBC), or using ODBC wizard in
|
||||
Control Panel (for odbc32).
|
||||
Next, you need to add appropriate "database" record to your slapd.conf.
|
||||
See samples provided in "back-sql/RDBMS_DEPENDENT/" subdirectory.
|
||||
|
|
@ -34,10 +38,16 @@ Several things worth noting about ODBC:
|
|||
different platforms, proxying and other connectivity and integration issues.
|
||||
They also support iODBC, and have good free customer service through
|
||||
newsserver (at news.openlinksw.com).
|
||||
Also worth noting are: ODBC-ODBC bridge by EasySoft (which was claimed
|
||||
by several people to be far more effective and stable than OpenLink),
|
||||
OpenRDA package etc.
|
||||
- be carefull defining RDBMS connection parameters, you'll probably need only
|
||||
"dbname" directive - all the rest can be defined in datasource. maybe you
|
||||
will want to use dbuser/dbpasswd to override credentials defined in datasource
|
||||
- full list of configuration directives supported is available in file "guide"
|
||||
"dbname" directive - all the rest can be defined in datasource. Every other
|
||||
directive is used to override value stored in datasource definition.
|
||||
Maybe you will want to use dbuser/dbpasswd to override credentials defined in datasource
|
||||
- full list of configuration directives supported is available in file "guide",
|
||||
you may also analyze output of 'slapd -d 5' to find out some useful
|
||||
directives for redefining default queries
|
||||
|
||||
3. Creating and using back-sql metatables
|
||||
Read the file "concept" to understand, what metainformation you need to add,
|
||||
|
|
|
|||
|
|
@ -1,18 +1,8 @@
|
|||
Platforms and configurations it has been tested on (for now I included only
|
||||
configurations I've tested personally):
|
||||
Platforms and configurations it has been tested on:
|
||||
|
||||
1) slapd on redhat linux 6.0/6.1 (glibc 2.1.1/2.1.2), built with egcs
|
||||
(versions packaged with appropriate red hat):
|
||||
iODBC 2.50.3 (on 6.0), 3.0beta (on 6.1),
|
||||
mySQL (on same linux) 3.22.25,3.22.30 trough myODBC 2.50.23,
|
||||
MSSQL (on WinNT 4/sp3) 7.0 through OpenLink driver suite 3 (broker on NT),
|
||||
Personal Oracle (on WinNT4/sp3) 8.0.3 through OpenLink driver suite 3 (broker on NT),
|
||||
Oracle (on linux 6.0) 8.0.5 through OpenLink driver suite 3 (broker on linux)
|
||||
General:
|
||||
- ODBC managers: iODBC,unixODBC under unixes, odbc32.dll under Win32 family
|
||||
- OSes: Linux/glibc, FreeBSD, OpenBSD, Solaris 2.6, Win98, WinNT, Win2000 server
|
||||
- RDBMSes: Oracle 7/8/8i, MS SQL Server 6.5/7, mySQL
|
||||
- access suites: OpenLink DAS, EasySoft OOB, various win32 drivers
|
||||
|
||||
2) slapd on WinNT4/sp3, Win98 second edition, Windows2000pre,
|
||||
built with MSVC++ 5,6:
|
||||
ODBC32.DLL shipped with appropriate system,
|
||||
MSSQL (on WinNT4/sp3,Win98,Win2000) 7.0, through its native driver,
|
||||
Personal Oracle (on WinNT4/sp3,Win98) 8.0.3, through its native driver,
|
||||
Oracle 7 (on Solaris/Sparc 2.6) through its native driver
|
||||
|
||||
|
|
|
|||
|
|
@ -130,7 +130,12 @@ int backsql_process_sub_filter(backsql_srch_info *bsi,Filter *f)
|
|||
}
|
||||
if (f->f_sub_initial!=NULL)
|
||||
{
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,f->f_sub_initial->bv_val,NULL);
|
||||
if (bsi->bi->upper_func)
|
||||
{
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,toupper(f->f_sub_initial->bv_val),NULL);
|
||||
}
|
||||
else
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,f->f_sub_initial->bv_val,NULL);
|
||||
}
|
||||
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,"%",NULL);
|
||||
|
|
@ -139,11 +144,21 @@ int backsql_process_sub_filter(backsql_srch_info *bsi,Filter *f)
|
|||
for(i=0;f->f_sub_any[i]!=NULL;i++)
|
||||
{
|
||||
//Debug(LDAP_DEBUG_TRACE,"==>backsql_process_sub_filter(): sub_any='%s'\n",f->f_sub_any[i]->bv_val,0,0);
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,f->f_sub_any[i]->bv_val,"%",NULL);
|
||||
if (bsi->bi->upper_func)
|
||||
{
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,toupper(f->f_sub_any[i]->bv_val),"%",NULL);
|
||||
}
|
||||
else
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,f->f_sub_any[i]->bv_val,"%",NULL);
|
||||
}
|
||||
|
||||
if (f->f_sub_final!=NULL)
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,f->f_sub_final->bv_val,NULL);
|
||||
if (bsi->bi->upper_func)
|
||||
{
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,toupper(f->f_sub_final->bv_val),NULL);
|
||||
}
|
||||
else
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,f->f_sub_final->bv_val,NULL);
|
||||
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,"')",NULL);
|
||||
|
||||
|
|
@ -225,7 +240,7 @@ int backsql_process_filter(backsql_srch_info *bsi,Filter *f)
|
|||
if (bsi->bi->upper_func)
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,"(",
|
||||
bsi->bi->upper_func,"(",at->sel_expr,")='",
|
||||
f->f_av_value->bv_val,"')",NULL);
|
||||
toupper(f->f_av_value->bv_val),"')",NULL);
|
||||
else
|
||||
bsi->flt_where=backsql_strcat(bsi->flt_where,&bsi->fwhere_len,"(",at->sel_expr,"='",
|
||||
f->f_av_value->bv_val,"')",NULL);
|
||||
|
|
|
|||
Loading…
Reference in a new issue