OpenLDAP and PostgreSQL

From: Gilles DAROLD <gilles(at)darold(dot)net>
To: pgsql-general(at)postgresql(dot)org
Cc: pgsql-odbc(at)postgresql(dot)org
Subject: OpenLDAP and PostgreSQL
Date: 2001-07-27 18:53:16
Message-ID: 3B61B89C.BE38719B@darold.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-odbc

Hi all,

I've passed the entire week to try to run Openldap over PostgreSQL and have
experienced
maby troubles. All the documentation and mail I had found seem not really
working, at least
for me. Seeing my time lost to have this working a documentation seems
necessary for this
more and more openLDAP asked feature. I've in plan to write a working HOWTO for
this or
contribute to one in work and I would like to compare my experience with
others.

Here is what I've done:

- Write the first lines of a HOWTO for installation and configuration.
- Able to give some working samples.
- Write a portable patch to cast the objectClass statement in OpenLDAP. The
previous
patch proposed is not portable and need a new slapd.conf option. I will submit
it to the
OpenLDAP team next week.

I still have some trouble with entry creation that finish to make me crazy.

Problem:

I always received the same id (134551209) when inserting multiple entries, so
integrity failed. For example, to load this LDIFF data:

dn: cn=User Test_Add_Entry,o=sql,c=RU
cn: User Test_Add_Entry
sn: User Test_Add_Entry
objectClass: person

I have 'create_proc' set to "SELECT set_person_name(?,?)" and the function is:

CREATE FUNCTION create_person(int4)
RETURNS int4 AS '
INSERT INTO persons (id, name) VALUES ($1, '' '');
SELECT 1;
'
LANGUAGE 'sql';

Given argument is 134551209 (???)
DEBUG: query: SELECT create_person(134551209)

I use SELECT 1; as final query of the function because whatever I want to
return
(like a current sequence number) is not return or at least I don't know how to
have
it back to the next following query.

Here 'add_proc' is set to "SELECT set_person_name(?,?)" and the function is:

CREATE FUNCTION set_person_name(int4, varchar)
RETURNS int4 AS '
UPDATE persons SET name=text($2) WHERE $1=id;
SELECT 1;
'
LANGUAGE 'sql';

Given arg1 is 134551209 and arg2 'User Test_Add_Entry'
DEBUG: query: SELECT set_person_name(134551209,'User Test_Add_Entry')

And then the ldap_entry is inserted like that:

DEBUG: query: INSERT INTO ldap_entries (id,dn,oc_map_id,parent,keyval)
VALUES (currval('ldap_entries_id_seq'),'cn= User Test_Add_Entry,o=sql,c=RU',
1,1,134551209)

Ok, this works but when I insert more dn I always get the same id 134551209 so
all next queries fail.

What does it means ? I have trace a little what openldap is doing and it seams
(possibly wrong, my knowledge with C++ and ODBC is not enougth) that the
ODBC function SQLBindParamater never update the rgbValue that is used to
set a new identifier. Am I wrong ? Is anybody have ever seen that ?

I'm using PostgreSQL 7.1.2, libiodbc-3.0.5 compiled with libpsqlodbc provided
in 7.1.2 and openldap-2.0.11.

The only workaround I've found is using sequences to first create the entry
and then modify the entry to set the attributes. That works pretty well but
don't
permit direct LDIFF export/import.

Thanks for your help,

Gilles DAROLD

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Andre Schnabel 2001-07-27 19:06:50 Re: Database Design Question
Previous Message Mike Mascari 2001-07-27 18:31:58 Re: Re: D308-E9AF-4C11 : CONFIRM from pgsql-sql (subscribe)

Browse pgsql-odbc by date

  From Date Subject
Next Message Hiroshi Inoue 2001-07-27 22:17:17 RE: A problem with the nextval('') function
Previous Message Ryan C. Bonham 2001-07-27 16:59:36 Visual Basic and PostgreSQL ODBC