Hi all

On 15.01.2008, at 18:04, ThomasP wrote:

I was looking into your externauth.php, but could not find any reference
to ldap. Is there any further code somewhere you have in use?

I missed this thread, so I am not sure if this is interesting for you.

I use a self written piece of php (attachment) to get group members out of my LDAP directory (Apple OpenDirectory). It will most likely not work with AD, because AD stores group information inside user containers.

Use something like this in config.php:

$AuthUser['@editors'] = get_ldap_values("cn=groups", "(cn=GROUP)", array("memberUid")); $AuthUser['@admins'] = get_ldap_values("cn=groups", "(cn=OTHERGROUP)", array("memberUid"));

$DefaultPasswords['edit'] = '@editors';
$DefaultPasswords['attr'] = '@editors';
$DefaultPasswords['upload'] = '@editors';
$DefaultPasswords['admin'] = array('@admins','id:ANOTHERUSER');

Thomas

<?php if (!defined('PmWiki')) exit();

/*
	filename:		archbook.php
	purpose:		provide some d-arch specific functionality. my very first cookbook, so, sorry.
	copyright:		see pmwiki license
	created by:		thomas gemperli <[EMAIL PROTECTED]>
	last modified:	2007-02-08 / gem
*/


// vars
$ldaphost = "ldap://host.domain.tld";;		// ldap server (non-ssl: ldap://ldap.example.com, ssl: ldaps://ldap.example.com)
$ldapport = 389;							// ldap server's port number (non-ssl: 389, ssl: 636)
$ldapdn = "dc=domain,dc=tld";					// ldap server's dn
// vars used in config.php
$ldapuserdn = "cn=users";					// ldap user dn
$ldapgroupdn = "cn=groups";					// ldap group dn
$ldapuserprefix = "uid";					// ldap user name container


// connect to the ldap server anonymously
function connect_ldap($ldaphost, $ldapport)
{
	$ldapconn = ldap_connect($ldaphost, $ldapport) 
		or die("Could not connect to $ldaphost");
	
	if ($ldapconn) {
		// specify ldap protocol version 3
		ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
		
		// bind to ldap server (anonymously)
		ldap_bind($ldapconn)
			or die("Could not bind ldap to $ldapconn");
	}
	
	return $ldapconn;
}

// connect to the ldap server with authentication (unused)
function connect_ldap_auth($ldaphost, $ldapport, $ldapcredential, $ldappass)
{
	$ldapconn = ldap_connect($ldaphost, $ldapport) 
		or die("Could not connect to $ldaphost");
	
	if ($ldapconn) {
		// specify ldap protocol version 3
		ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
		
		// bind to ldap server (using credentials)
		// a valid $ldapcredential example for an OpenDirectory: "uid=username,cn=users,dc=domain,dc=tld"
		$ldapbind = ldap_bind($ldapconn, $ldapcredential, $ldappass)
			or die("Could not bind ldap to $ldapconn");
	}
	
	return $ldapconn;
}

// disconnect ldap server
function disconnect_ldap($ldapconn)
{
	if ($ldapconn) {
		ldap_close($ldapconn);
	}
}


// get ldap values
function get_ldap_values($searchdn, $filter, $justthese)
{
	// sorry. but pmwiki is using globals anyway
	global $ldaphost, $ldapport, $ldapdn;
	
	// assemble full searchdn 
	$ldapsearchdn = "$searchdn,$ldapdn";

	// connect ldap
	$ldapconn = connect_ldap($ldaphost, $ldapport);

	// query ldap
	$searchresult = ldap_search($ldapconn, $ldapsearchdn, $filter, $justthese);
	
	// get first returned ldap entry
	$entry = ldap_first_entry($ldapconn, $searchresult);
		
	// get all ldap attributes of this entry
	$attributes = ldap_get_attributes($ldapconn, $entry);	
	for ( $i = 0; $i < $attributes['count']; $i++ ) {
	
		// get all ldap values of this attributes
		$valuefilter = $attributes[$i];
		$values = ldap_get_values($ldapconn, $entry, $valuefilter);			
		for ( $j=0; $j < $values['count']; $j++ ) {
			$returnvalue[$j] = utf8_decode($values[$j]);
		}
	}
	
	// disconnect ldap 
	disconnect_ldap($ldapconn);
	
	// return array with attributes
	return $returnvalue;
}




_______________________________________________
pmwiki-users mailing list
[email protected]
http://www.pmichaud.com/mailman/listinfo/pmwiki-users

Reply via email to