Revision 1dfc6c56
Added by Scott Ullrich over 17 years ago
etc/inc/auth.inc | ||
---|---|---|
755 | 755 |
$ldapfilter = $config['system']['webgui']['ldapfilter']; |
756 | 756 |
$ldapsearchbase = "{$config['system']['webgui']['ldapsearchbase']}"; |
757 | 757 |
$ldapfilter = str_replace("\$username", $username, $ldapfilter); |
758 |
|
|
759 | 758 |
$ldapauthcontainers = $config['system']['webgui']['ldapauthcontainers']; |
760 | 759 |
|
761 | 760 |
if (!($ldap = ldap_connect($ldapserver))) { |
... | ... | |
798 | 797 |
return $status; |
799 | 798 |
} |
800 | 799 |
|
801 |
$search = ldap_search($ldap, $ou . "," . $ldapsearchbase, $ldapfilter, array('memberOf')); |
|
800 |
$search = ldap_search($ldap, $ldapauthcontainers, $ldapfilter, array('groupmembership')); |
|
801 |
|
|
802 | 802 |
$info = ldap_get_entries($ldap, $search); |
803 |
|
|
803 |
$countem = $info["count"]; |
|
804 | 804 |
$memberof = array(); |
805 | 805 |
|
806 |
if(is_array($info[0]['memberof'])) { |
|
807 |
foreach($info[0]['memberof'] as $member) { |
|
808 |
if(strstr($member, "CN=") !== false) { |
|
806 |
log_error("USER HAS {$countem} LDAP Groups it is {$info[0]['groupmembership'][0]}"); |
|
807 |
|
|
808 |
if(is_array($info[0]['groupmembership'])) { |
|
809 |
foreach($info[0]['groupmembership'] as $member) { |
|
810 |
if(strstr($member, "cn=") !== false) { |
|
809 | 811 |
$membersplit = split(",", $member); |
810 |
$memberof[] = str_replace("CN=", "", $membersplit[0]);
|
|
812 |
$memberof[] = str_replace("cn=", "", $membersplit[0]);
|
|
811 | 813 |
} |
812 | 814 |
} |
813 | 815 |
} |
... | ... | |
834 | 836 |
$ldapserver = $config['system']['webgui']['ldapserver']; |
835 | 837 |
$ldapbindun = $config['system']['webgui']['ldapbindun']; |
836 | 838 |
$ldapbindpw = $config['system']['webgui']['ldapbindpw']; |
837 |
|
|
839 |
$ldapauthcont = $config['system']['webgui']['ldapauthcontainers']; |
|
840 |
|
|
838 | 841 |
if(!$ldapserver) { |
839 | 842 |
log_error("ERROR! ldap_backed() backed selected with no LDAP authentication server defined. Defaulting to built-in htpasswd_backed(). Visit System -> User Manager -> Settings."); |
840 | 843 |
$status = htpasswd_backed($username, $passwd); |
... | ... | |
846 | 849 |
$status = htpasswd_backed($username, $passwd); |
847 | 850 |
return $status; |
848 | 851 |
} |
849 |
|
|
850 |
if (!($res = @ldap_bind($ldap, $username, $passwd))) { |
|
852 |
/* HARD CODED - need to have a uid or something here */ |
|
853 |
$binduser = 'cn='.$username.','.$ldapauthcont; |
|
854 |
log_error("BINDUSER ==== {$binduser}"); |
|
855 |
if (!($res = @ldap_bind($ldap, $binduser, $passwd))) { |
|
851 | 856 |
log_error("ERROR! ldap_backed() could not bind to {$ldapserver} - {$username} - {$passwd}. Defaulting to built-in htpasswd_backed(). Visit System -> User Manager -> Settings."); |
852 | 857 |
$status = htpasswd_backed($username, $passwd); |
853 | 858 |
return $status; |
854 | 859 |
} |
855 | 860 |
|
856 | 861 |
log_error("$username logged in via LDAP."); |
857 |
|
|
862 |
log_error("$binduser ldap name logged in via LDAP."); |
|
858 | 863 |
/* At this point we are binded to LDAP so the user was auth'd okay. */ |
859 | 864 |
return true; |
860 | 865 |
} |
Also available in: Unified diff
Changes to allow Novell eDir to authenticate via LDAP.
Thanks to Mark Batchelor for all of his help with these changes.