<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: LDAP query memberof in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/LDAP-query-memberof/m-p/928577#M365353</link>
    <description>&lt;P&gt;If you haven't done so already then inspect the SAS supplied script&amp;nbsp;&lt;EM&gt;importad.sas&lt;/EM&gt;. This script contains a macro&amp;nbsp;&lt;EM&gt;%ldapextrpersons&lt;/EM&gt; that should give you pointers.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://support.sas.com/kb/40/628.html" target="_self"&gt;Usage Note 40628: Automating the addition of users and groups to a SAS® Metadata Repository&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The importad.sas script should be available under:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows:&amp;nbsp;SAS-installation-directory\SASFoundation\9.4\core\sample\importad.sas&lt;/LI&gt;
&lt;LI&gt;Unix:&amp;nbsp;&lt;SPAN class="xisDoc-directoryPath"&gt;&lt;EM class="xisDoc-userSuppliedValue"&gt;SAS-installation-directory&lt;/EM&gt;/SASFoundation/9.4/samples/base/importad.sas&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 16 May 2024 00:56:56 GMT</pubDate>
    <dc:creator>Patrick</dc:creator>
    <dc:date>2024-05-16T00:56:56Z</dc:date>
    <item>
      <title>LDAP query memberof</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LDAP-query-memberof/m-p/928573#M365351</link>
      <description>&lt;P&gt;I trying to query company LDAP and extract users from a specific AD Group.&amp;nbsp; &amp;nbsp;I can query/filter on uid, department, etc.... but when trying to pull all users of a specific group, or any group, Suchas with memberof, example filter below,&amp;nbsp; I get no results.&lt;/P&gt;
&lt;P&gt;Any suggestions/help?&lt;/P&gt;
&lt;P&gt;filter="(&amp;amp;(memberOf=cn=myteam_AD_group,OU=groups,DC=com))";&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;full code below...&lt;/P&gt;
&lt;DIV&gt;options mprint mlogic&amp;nbsp; ;&lt;/DIV&gt;
&lt;DIV&gt;%let Attrs= "uid sn givenname groupMembershipSAM, grouppriority groupsToIgnore memberof " ||&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "acting comat comatstationid companycode cosspecifier " ||&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "costcenter countrycode createtimestamp dc " ||&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "delegated departmentaltcontactname departmentcity " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "departmentcomailaddress departmentcontactname departmentcostcenter " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "departmentcountry departmentdescription departmentdivision departmentkeywords " ||&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "departmentlongname departmentname departmentnumber departmentphone departmentpostal " ||&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "displayname employeenumber employmentstatuscode employeetype employmenttypecode entrydn " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "exemptnonexempt expatintlcomaddr fxdivision fxexecbcdraccess fxjobfamily fxjobfunctioncode " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; "fxregion fxsoxstatus fxssomemberof givenName icscalendar inetCanonicalDomainName " ||&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "inetDomainBaseDN inetDomainStatus inetMailGroupStatus inetUserStatus initials " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "jobnumber mail mailAlternateAddress mailEquivalentAddress mailfxaccounttype mailfxhome " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "mailHost mailRoutingHosts mailUserStatus managementlevel manager member " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "memberOfManagedGroup memberOfPAB memberOfPABGroup modifytimestamp nickname " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "nsCalXItemId nscpEntryDN nsds5ReplConflict nsLIProfileName " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "nsUniqueId nswcalCALID ntGroupDomainId ntUserDomainId numsubordinates " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "ou owner parentid pipstatus pipuid positionnumber postalcode " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "postaladdress street isActive isActiveSpecified " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "seeAlso sn telephoneNumber tempworklocation title uid un " ||&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; "uniquemember vendortype workstate xuid"&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;%put &amp;amp;Attrs ;&lt;/DIV&gt;
&lt;DIV&gt;%put &amp;amp;emp ;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;data rpt_output ;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; length entryname $200 attrName $100 value $100 filter $100;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; rc =0; handle =0;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; server="directory.company.com";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; port=389;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; base="ou=people,o=company,c=us";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; bindDN="";&amp;nbsp; Pw="";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; /* open connection to LDAP server */&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; call ldaps_open(handle, server, port, base, bindDn, Pw, rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; else&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put "LDAPS_OPEN call successful.";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; shandle=0;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; num=0;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;filter="(&amp;amp;(objectCategory=user)(memberOf=myteam_AD_group,))";&lt;/DIV&gt;
&lt;DIV&gt;/* filter below works for individual employees */&lt;BR /&gt;/*filter="(&amp;amp;(uid=&amp;amp;emp))";*/&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp;/* search the LDAP directory */&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; call ldaps_search(handle,shandle,filter, attrs, num, rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; else do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put " ";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put "LDAPS_SEARCH call successful.";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put "Num entries returned is " num;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put " ";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; do eIndex = 1 to num;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; numAttrs=0;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; entryname='';&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* retrieve each entry name and number of attributes */&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; call ldaps_entry(shandle, eIndex, entryname, numAttrs, rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; else do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put "&amp;nbsp; ";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put "LDAPS_ENTRY call successful.";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put "Num attributes returned is " numAttrs;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* for each attribute, retrieve name and values */&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; do aIndex = 1 to numAttrs;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; attrName='';&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; numValues=0;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; call ldaps_attrName(shandle, eIndex, aIndex, attrName, numValues, rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;else do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put "&amp;nbsp; ";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put "Attribute name is " attrName;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put "Num values returned is " numValues;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; do vIndex = 1 to numValues;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; call ldaps_attrValue(shandle, eIndex, aIndex, vIndex, value, rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; else do;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; put "Value : " value;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; put "Attribute nbr is " numValues;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; Output rpt_output;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; /* free search resources */&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; call ldaps_free(shandle,rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; else&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put "LDAPS_FREE call successful.";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; /* close connection to LDAP server */&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; call ldaps_close(handle,rc);&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; if rc ne 0 then do;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;msg = sysmsg();&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put msg;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; end;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; else&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;put "LDAPS_CLOSE call successful.";&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp; run;&lt;/DIV&gt;
&lt;DIV&gt;quit;&lt;/DIV&gt;</description>
      <pubDate>Wed, 15 May 2024 23:24:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LDAP-query-memberof/m-p/928573#M365351</guid>
      <dc:creator>wbaldwin</dc:creator>
      <dc:date>2024-05-15T23:24:13Z</dc:date>
    </item>
    <item>
      <title>Re: LDAP query memberof</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LDAP-query-memberof/m-p/928577#M365353</link>
      <description>&lt;P&gt;If you haven't done so already then inspect the SAS supplied script&amp;nbsp;&lt;EM&gt;importad.sas&lt;/EM&gt;. This script contains a macro&amp;nbsp;&lt;EM&gt;%ldapextrpersons&lt;/EM&gt; that should give you pointers.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://support.sas.com/kb/40/628.html" target="_self"&gt;Usage Note 40628: Automating the addition of users and groups to a SAS® Metadata Repository&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The importad.sas script should be available under:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows:&amp;nbsp;SAS-installation-directory\SASFoundation\9.4\core\sample\importad.sas&lt;/LI&gt;
&lt;LI&gt;Unix:&amp;nbsp;&lt;SPAN class="xisDoc-directoryPath"&gt;&lt;EM class="xisDoc-userSuppliedValue"&gt;SAS-installation-directory&lt;/EM&gt;/SASFoundation/9.4/samples/base/importad.sas&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 May 2024 00:56:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LDAP-query-memberof/m-p/928577#M365353</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2024-05-16T00:56:56Z</dc:date>
    </item>
  </channel>
</rss>

