--- cas.module.orig	2009-11-10 09:18:36.000000000 -0700
+++ cas.module	2009-11-12 09:59:44.000000000 -0700
@@ -298,7 +298,12 @@ function cas_login_check() {
           _ldapauth_init($ldap_config_name);
           module_load_include('module', 'ldap_integration', 'ldapgroups');
           $user->ldap_authentified = TRUE;
-          ldapgroups_user_login($user);
+          $user->ldap_config = $ldap_config_name;
+          $ldapUser = _ldapauth_user_lookup($user->name);
+          $user->memberof = $ldapUser['memberof'];
+          $user->ldap_dn = $ldapUser['dn'];
+          // $edit is a non-existant variable,  however we need to pass one by reference 
+          ldapgroups_user('login', $edit, $user);
         }
       }
       
@@ -323,13 +328,26 @@ function cas_login_check() {
       foreach ($cas_roles as $role) {
         $roles[$role] = $role;
       }
+      $allRoles = user_roles(true);
+      foreach ($user->memberof as $role) {
+        $role = explode(',', $role);
+        if (count($role) > 0 && strtoupper(substr($role[0], 0, 3)) == 'CN=') {
+          $role = substr($role[0], 3);
+          if (($key = array_search($role, $allRoles)) === false) {
+            //db_query("INSERT INTO {role} (name) VALUES ('%s')", $role);
+            $allRoles = user_roles(true);
+            $key = array_search($role, allRoles);
+          }
+          $roles[$key] = $role;
+        }
+      }
+
       /* Removing password cause it cases problems with phpcas. */ 
       $user_up = array(
- //       "pass" => user_password(),
+ //     "pass" => user_password(),
         "roles" => $roles,
       );
       $user = user_save($user, $user_up);
-      
       $edit = array();
       if (module_exists('persistent_login') && $_SESSION['cas_remember']) {
         $edit['persistent_login'] = 1;
@@ -958,19 +976,20 @@ function cas_form_alter(&$form, $form_st
  */
 function _get_ldap_config_name($user_name) {
   module_load_include('module', 'ldap_integration', 'ldapauth');  
+  ldapauth_init();
   $user_found = FALSE;
-  $result = db_query("SELECT name FROM {ldapauth} WHERE status = '%d' ORDER BY sid", 1);
+  $result = db_query("SELECT name, sid FROM {ldapauth} WHERE status = '%d' ORDER BY sid", 1);
   while ($row = db_fetch_object($result)) {
     // cycle thru the authentication schemes - first successful one wins
     // instantiate ldap
-    _ldapauth_init($row->name);
+    _ldapauth_init($row->sid);
     $ldap_user_entry = _ldapauth_user_lookup($user_name);
     if ($ldap_user_entry) {
       $user_found = TRUE;
       break;
     }
   }
-  if ($user_found) return $row->name;
+  if ($user_found) return $row->sid;
   else return FALSE;
 }
 
