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.

1 kommentar

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>