Bokningssystem kopplat till OS X Server via LDAP.
Kanske inte nåt att ha där hemma direkt men jag tänkte ändå skriva ner detta eftersom jag mekkade en hel del innan jag fick det att fungera som jag ville. Bokningsystemet som jag använder heter MRBS (Meeting Room Booking System) och servern OS X 10.5 Server.
Börja med att installera MRBS på en linux-server, eller på OS X för den delen om du vill. Jag har installerat på både Ubuntu Server 7.04 LTS. samt 8.04 LTS. Följ instruktionerna på sidan ovan.
Jag ville ha fornamn.efternamn som login i bokningssystemet. Det krävdes lite modifiering av ldap-filerna för att den skulle söka efter rätt fält i LDAP-servern och inte gå på uid som den gör default.
Här nedan finns den modifierade auth_ldap.inc från MRBS.
$base_dn)
{
if (isset($ldap_dn_search_attrib))
{
// Anonymous bind
if (@ldap_bind($ldap))
{
$res = @ldap_search($ldap,
$base_dn,
"(". $ldap_dn_search_attrib ."=$user)"
);
if (@ldap_count_entries($ldap, $res) == 1)
{
$entries = ldap_get_entries($ldap, $res);
$dn = $entries[0]["dn"];
}
}
}
else
{
// construct dn for user
$dn = $all_ldap_user_attrib[$idx] . "=" . $user . "," . $base_dn;
}
if (isset($dn))
{
// try an authenticated bind
// use this to confirm that the user/password pair
if(@ldap_bind($ldap, $dn, $pass))
{
// however if there is a filter check that the
// user is part of the group defined by the filter
if (! $ldap_filter)
{
@ldap_unbind($ldap);
return 1;
}
else
{
$res = @ldap_search(
$ldap,
$base_dn,
"(&(". $all_ldap_user_attrib[$idx] ."=$user)($ldap_filter))",
array()
);
if (@ldap_count_entries($ldap, $res) > 0)
{
@ldap_unbind($ldap);
return 1;
}
}
}
}
}
@ldap_unbind($ldap);
}
// return failure if no connection is established
return 0;
}
/* authGetUserLevel($user)
*
* Determines the users access level
*
* $user - The user name
*
* Returns:
* The users access level
*/
function authGetUserLevel($user, $lev1_admin)
{
// User not logged in, user level '0'
if(!isset($user))
return 0;
// Check if the user is can modify
for($i = 0; $lev1_admin[$i]; $i++)
{
if(strcasecmp($user, $lev1_admin[$i]) == 0)
return 2;
}
// Everybody else is access level '1'
return 1;
}
?>
Lägg också till denna nya rad i config.inc.php
$ldap_dn_search_attrib = ‘cn’;
Här ska du speca i vilket fält som användarnamnet den skall hämta på LDAP-servern finns. cn i mitt fall.
En annan sak som är rätt bra är att du i config.inc.php kan speca vilka användare från LDAP som skall vara administratörer.
Lämna gärna en kommentar nedan om du finner denna guide användbar.
Mycket bra! LOLDAP!