dbTalk Databases Forums  

PL/SQL accessing LDAP server

comp.databases.oracle.misc comp.databases.oracle.misc


Discuss PL/SQL accessing LDAP server in the comp.databases.oracle.misc forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
M Rothwell
 
Posts: n/a

Default PL/SQL accessing LDAP server - 02-16-2005 , 06:06 PM






I am trying to get information from an LDAP server using the DBMS_LDAP
package. I got the following code from the sample directory that came
with the Oracle dist.

I have the correct LDAP server and port. I can init and bind, but when
I get to the search_st procedure it errors out with the following message:

Error Message : ORA-31202: DBMS_LDAP: LDAP client/server error: No such
object

I'm using Oracle 9i R2 on HP-UX.

I have tried different filters and scopes, but still get the same error.
Any help would be much appreciated.



DECLARE
retval PLS_INTEGER;
my_session DBMS_LDAP.session;
my_attrs DBMS_LDAP.string_collection;
my_timeout DBMS_LDAP.timeval;
my_message DBMS_LDAP.message;
my_entry DBMS_LDAP.message;
entry_index PLS_INTEGER;
my_dn VARCHAR2(256);
my_attr_name VARCHAR2(256);
my_ber_elmt DBMS_LDAP.ber_element;
attr_index PLS_INTEGER;
i PLS_INTEGER;
my_vals DBMS_LDAP.STRING_COLLECTION ;
ldap_host VARCHAR2(256);
ldap_port VARCHAR2(256);
ldap_user VARCHAR2(256);
ldap_passwd VARCHAR2(256);
ldap_base VARCHAR2(256);
BEGIN
retval := -1;

-- Please customize the following variables as needed
ldap_host := 'ldap.mycomp.com';
ldap_port := '389';
ldap_user := null;
ldap_passwd:= null;
ldap_base := 'cn=Users,o=mycomp,dc=com';
-- end of customizable settings

DBMS_OUTPUT.PUT('DBMS_LDAP Search Example ');
DBMS_OUTPUT.PUT_LINE('to directory .. ');
DBMS_OUTPUT.PUT_LINE(RPAD('LDAP Host ',25,' ') || ': ' || ldap_host);
DBMS_OUTPUT.PUT_LINE(RPAD('LDAP Port ',25,' ') || ': ' || ldap_port);

-- Choosing exceptions to be raised by DBMS_LDAP library.
DBMS_LDAP.USE_EXCEPTION := TRUE;


my_session := DBMS_LDAP.init(ldap_host,ldap_port);

DBMS_OUTPUT.PUT_LINE (RPAD('Ldap session ',25,' ') || ': ' ||
RAWTOHEX(SUBSTR(my_session,1,8)) ||
'(returned from init)');

-- bind to the directory
retval := DBMS_LDAP.simple_bind_s(my_session, ldap_user, ldap_passwd);

DBMS_OUTPUT.PUT_LINE(RPAD('simple_bind_s Returns ',25,' ') || ': '
Quote:
| TO_CHAR(retval));
-- issue the search
my_attrs(1) := '*'; -- retrieve all attributes
my_timeout.seconds := 10;
my_timeout.useconds := 0;
retval := DBMS_LDAP.search_st( my_session, ldap_base,
DBMS_LDAP.SCOPE_SUBTREE,
'employeeNumber=544032',
my_attrs,
0,
my_timeout,
my_message );

DBMS_OUTPUT.PUT_LINE(RPAD('search_s Returns ',25,' ') || ': '
Quote:
| TO_CHAR(retval));
DBMS_OUTPUT.PUT_LINE (RPAD('LDAP message ',25,' ') || ': ' ||
RAWTOHEX(SUBSTR(my_message,1,8)) ||
'(returned from search_s)');

-- count the number of entries returned
retval := DBMS_LDAP.count_entries(my_session, my_message);
DBMS_OUTPUT.PUT_LINE(RPAD('Number of Entries ',25,' ') || ': '
Quote:
| TO_CHAR(retval));
DBMS_OUTPUT.PUT_LINE('---------------------------------------------------');


-- get the first entry
my_entry := DBMS_LDAP.first_entry(my_session, my_message);
entry_index := 1;

-- Loop through each of the entries one by one
while my_entry IS NOT NULL loop
-- print the current entry
my_dn := DBMS_LDAP.get_dn(my_session, my_entry);
-- DBMS_OUTPUT.PUT_LINE (' entry #' || TO_CHAR(entry_index) ||
-- ' entry ptr: ' || RAWTOHEX(SUBSTR(my_entry,1,8)));
DBMS_OUTPUT.PUT_LINE (' dn: ' || my_dn);
my_attr_name := DBMS_LDAP.first_attribute(my_session,my_entry,
my_ber_elmt);
attr_index := 1;
while my_attr_name IS NOT NULL loop
my_vals := DBMS_LDAP.get_values (my_session, my_entry,
my_attr_name);
if my_vals.COUNT > 0 then
FOR i in my_vals.FIRST..my_vals.LAST loop
DBMS_OUTPUT.PUT_LINE(' ' || my_attr_name || ' : ' ||
SUBSTR(my_vals(i),1,200));
end loop;
end if;
my_attr_name := DBMS_LDAP.next_attribute(my_session,my_entry,
my_ber_elmt);
attr_index := attr_index+1;
end loop;
-- Free ber_element
DBMS_LDAP.ber_free(my_ber_elmt, 0);
my_entry := DBMS_LDAP.next_entry(my_session, my_entry);

DBMS_OUTPUT.PUT_LINE('============================ =======================');
entry_index := entry_index+1;
end loop;

-- free LDAP Message
retval := DBMS_LDAP.msgfree(my_message);

-- unbind from the directory
retval := DBMS_LDAP.unbind_s(my_session);
DBMS_OUTPUT.PUT_LINE(RPAD('unbind_res Returns ',25,' ') || ': ' ||
TO_CHAR(retval));

DBMS_OUTPUT.PUT_LINE('Directory operation Successful .. exiting');

-- Handle Exceptions
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' Error code : ' || TO_CHAR(SQLCODE));
DBMS_OUTPUT.PUT_LINE(' Error Message : ' || SQLERRM);
DBMS_OUTPUT.PUT_LINE(' Exception encountered .. exiting');
retval := DBMS_LDAP.unbind_s(my_session);
DBMS_OUTPUT.PUT_LINE(RPAD('unbind_res Returns ',25,' ') || ': ' ||
TO_CHAR(retval));
END;


Reply With Quote
  #2  
Old   
Mark Bole
 
Posts: n/a

Default Re: PL/SQL accessing LDAP server - 02-17-2005 , 11:05 AM






M Rothwell wrote:
Quote:
I am trying to get information from an LDAP server using the DBMS_LDAP
package. I got the following code from the sample directory that came
with the Oracle dist.

I have the correct LDAP server and port. I can init and bind, but when
I get to the search_st procedure it errors out with the following message:

Error Message : ORA-31202: DBMS_LDAP: LDAP client/server error: No such
object

I'm using Oracle 9i R2 on HP-UX.

I have tried different filters and scopes, but still get the same error.
Any help would be much appreciated.
[...]
ldap_base := 'cn=Users,o=mycomp,dc=com';
-- end of customizable settings
[...]

It's been a while since I've used this, but is it possible your
ldap_base isn't quite right? It would be easy to test without the
"cn=Users" piece.

-Mark Bole





Reply With Quote
  #3  
Old   
M Rothwell
 
Posts: n/a

Default Re: PL/SQL accessing LDAP server - 02-17-2005 , 01:05 PM



Mark Bole wrote:
Quote:
It's been a while since I've used this, but is it possible your
ldap_base isn't quite right? It would be easy to test without the
"cn=Users" piece.

-Mark Bole
I had tried that a couple times, but apparently with some other things
wrong. I finally came up with a combination that works.

Thanks.

I now have:

ldap_base := 'ou=People,o=mycomp.com';
....
retval := DBMS_LDAP.search_st( my_session, ldap_base,
DBMS_LDAP.SCOPE_SUBTREE,
'employeeNumber=00123456',
my_attrs,
0,
my_timeout,
my_message );


Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.