Solved

APEX 4.0, integration with LDAP using SamAccountname

Posted on 2011-02-15
3
2,058 Views
Last Modified: 2013-12-24
I'm not able to easily use LDAP because our SAMAccountnames are our login id's and "CU=first last".  We wrote the following procedure in Oracle 11g, and called it within LDAP UserName edit function (return ldap_test_wayne).  

create or replace
FUNCTION LDAP_TEST_WAYNE ( p_username IN VARCHAR2)
RETURN varchar2 IS
   --p_username     VARCHAR2(256) := 'samAccountname=WAYNEL';
   l_ldap_host    VARCHAR2(256) := 'hnadm.housing.ufl.edu';
   l_ldap_port    VARCHAR2(256) := '389';
   l_ldap_user    VARCHAR2(256) := '';
   l_ldap_passwd  VARCHAR2(256) := 'uvNtVT1mJq';
   l_ldap_base    VARCHAR2(256) := 'OU=Housing,DC=housing,DC=ufl,DC=edu';
   l_dn           VARCHAR2(256) := 'CN=RadiusUser LDAP,OU=Service Accounts,OU=Housing,DC=housing,DC=ufl,DC=edu';
 
   l_retval       PLS_INTEGER;
   l_session      DBMS_LDAP.session;
   l_attrs        DBMS_LDAP.string_collection;
 
   l_message      DBMS_LDAP.message;
   l_entry        DBMS_LDAP.message;
   l_attr_name VARCHAR2(256);
   l_ber_element  DBMS_LDAP.ber_element;
   l_vals         DBMS_LDAP.string_collection;  
BEGIN
   l_attrs(1) := 'cn';
 -- Choose to raise exceptions.
  DBMS_LDAP.USE_EXCEPTION := TRUE;

  -- Connect to the LDAP server.
  l_session := DBMS_LDAP.init(hostname => l_ldap_host,
                              portnum  => l_ldap_port);

  l_retval := DBMS_LDAP.simple_bind_s(ld     => l_session,
                                      dn     => l_dn,
                                      passwd => l_ldap_passwd);

  -- Get all attributes
  -- retrieve all attributes
  l_retval := DBMS_LDAP.search_s(ld       => l_session,
                                 base     => l_ldap_base,
                                 scope    => DBMS_LDAP.SCOPE_SUBTREE,
                                 filter   => p_username,
                                 attrs    => l_attrs,
                                 attronly => 0,
                                 res      => l_message);
                                 
                                 
                                 
  IF DBMS_LDAP.count_entries(ld => l_session, msg => l_message) > 0 THEN
    -- Get all the entries returned by our search.
    l_entry := DBMS_LDAP.first_entry(ld  => l_session,
                                     msg => l_message);

    << entry_loop >>
    WHILE l_entry IS NOT NULL LOOP
      -- Get all the attributes for this entry.
      DBMS_OUTPUT.PUT_LINE('---------------------------------------');
      l_attr_name := DBMS_LDAP.first_attribute(ld        => l_session,
                                               ldapentry => l_entry,
                                               ber_elem  => l_ber_element);
      << attributes_loop >>
      WHILE l_attr_name IS NOT NULL LOOP
        -- Get all the values for this attribute.
        l_vals := DBMS_LDAP.get_values (ld        => l_session,
                                        ldapentry => l_entry,
                                        attr      => l_attr_name);
        << values_loop >>
        FOR i IN l_vals.FIRST .. l_vals.LAST LOOP
          DBMS_OUTPUT.PUT_LINE('ATTIBUTE_NAME: ' || l_attr_name || ' = ' || SUBSTR(l_vals(i),1,200));
          IF l_attr_name = 'cn' then
            l_ldap_user := SUBSTR(l_vals(i),1,200);
          END IF;
        END LOOP values_loop;
        l_attr_name := DBMS_LDAP.next_attribute(ld        => l_session,
                                                ldapentry => l_entry,
                                                ber_elem  => l_ber_element);
      END LOOP attibutes_loop;
      l_entry := DBMS_LDAP.next_entry(ld  => l_session,
                                      msg => l_entry);
    END LOOP entry_loop;
  END IF;
 
  -- Disconnect from the LDAP server.
  l_retval := DBMS_LDAP.unbind_s(ld => l_session);
  DBMS_OUTPUT.PUT_LINE('Unbind return value : ' || l_retval);
--  l_attrs(1) := '*';
 DBMS_OUTPUT.PUT_LINE('Using username : ' || l_ldap_user);
 
 return l_ldap_user;
END LDAP_TEST_WAYNE;

There must be an easier way... and we haven't gotten it to work at this point.

-HELP
0
Comment
Question by:WayneGro
  • 2
3 Comments
 

Accepted Solution

by:
WayneGro earned 0 total points
ID: 34906397
New to forum, trying to learn system for asking questions, making point value 500.
0
 
LVL 3

Assisted Solution

by:gopisera
gopisera earned 20 total points
ID: 34933361
You want LDAP integration with the APEX...

Then very easy then connect to the application under the shared components select the authentication schema as ldap.

You have to provide the ldap sever and port number and dns string.  There is a test tool is also available which will help you in it.

if you require more on it contact me on ramesh.g2005@gmail.com

Will provide you more information
0
 

Author Closing Comment

by:WayneGro
ID: 34990889
this is the basic answer for connecting to LDAP but wont help when connecting with Samaccountname.  So this doesn't really answer anything.
0

Featured Post

What is SQL Server and how does it work?

The purpose of this paper is to provide you background on SQL Server. It’s your self-study guide for learning fundamentals. It includes both the history of SQL and its technical basics. Concepts and definitions will form the solid foundation of your future DBA expertise.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

I guess that all of us know that caching the data usually increase the performance, but I worried if all of us are aware about the risk that caching the data provides and how to minimize this.  That’s the reason why I decided to write this short art…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question