Index: ldapgroups.module
===================================================================
--- ldapgroups.module	(revision 244)
+++ ldapgroups.module	(revision 245)
@@ -226,7 +226,30 @@
   }
 }
 
+/**
+ * Find groups the user is in in LDAP.
+ *
+ * This hook allows modules to provide groups a user is in.
+ * Useful for awkward LDAP layouts that can't be catered by the 3 provided strategies.
+ *
+ * @param $ldap
+ *   An open LDAPInterface
+ * @param $user
+ *   The user objects. $user->ldap_dn will be of particular interest.
+ * @return
+ *   Array of groupnames the user is in.
+ */
 
+function hook_detect_ldapgroups($ldap, $user) {
+  $rv = array();
+  $gid = $ldap->retrieveAttribute($user->ldap_dn, 'gidNumber');
+  $gid = int($gid);
+  $entries = $ldap->search('ou=Group,dc=example,dc=com', "(gidNumber=$gid)");
+  foreach ($entries as $entry)
+    $rv[] = $entry['dn'];
+  return $rv;
+}
+
 /*********************************
  *     2. Delegate functions     *
  *********************************/
@@ -386,8 +409,11 @@
     }
   }
 
+  // Strategy 4: Custom strategies defined in hooks
+  $hook_groups = module_invoke_all('detect_ldapgroups', $ldapgroups_ldap, $user);
+
   $ldapgroups_ldap->disconnect();
-  return array_merge($dn_groups, $attrib_groups, $entries_groups);
+  return array_merge($dn_groups, $attrib_groups, $entries_groups, $hook_groups);
 }
 
 function _ldapgroups_grant_role($user, $rolename) {
