Index: siteminder_roles.install
===================================================================
RCS file: siteminder_roles.install
diff -N siteminder_roles.install
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ siteminder_roles.install	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,8 @@
+<?php 
+
+function siteminder_roles_install(){
+  db_query("update {system} set weight=-1000 where name='siteminder_roles'");
+}
+
+
+?>
Index: siteminder_roles.module
===================================================================
RCS file: siteminder_roles.module
diff -N siteminder_roles.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ siteminder_roles.module	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,91 @@
+<?php 
+
+function siteminder_roles_init() {
+  global $user;  
+  // User is already logged in, pass through.
+  // Proceed if there is an enabled map.
+  siteminder_roles_apply_user_roles($user);
+  // need to reset the user_access cache just in case
+  user_access('', $user, true);
+  
+}
+
+
+// implementation of hook_user
+function siteminder_roles_user($op, $edit, &$userref){
+  global $user;
+  if ($op == 'load' && $user->uid==$userref->uid) {
+    $roles = siteminder_roles_apply_user_roles($userref); // This returns all $user->roles and includes siteminder roles if any
+  } // end $op load
+  
+}
+
+
+function siteminder_roles_apply_user_roles(&$user){
+  $map = siteminder_map_load(variable_get('siteminder_active_map', ''));
+  // if no map has been defined, or there is no active map, dont do anything.
+  if(is_array($map)||!$map){
+    return false;
+  }
+  
+  $roles=user_roles(true);
+  
+  // parse the header for role assignment
+  $groups=explode($map->map['core']['roles_header_split_chars'], $_SERVER[$map->map['core']['roles_header']]);
+  foreach((array)$map->map['header_role_map'] as $rid => $value){
+    $role_groups=preg_split("/[\r\n]+/", $value);
+    foreach((array)$role_groups as $group){
+      if(array_search($group, $groups) !== false){
+        $user->roles[$rid]=$roles[$rid];
+      }
+    }
+  }
+}
+
+
+// there is a hook siteminder_fields hook, but it doesnt provide any information about the form being worked with.
+// so when creating multiple profiles this would be a problem
+
+function siteminder_roles_form_siteminder_map_form_alter(&$form, &$form_state){
+  
+  $config = siteminder_map_load($form['siteminder']['name']['#value']);
+
+  $form['siteminder']['core']['roles_header']=$form['siteminder']['core']['siteminder_email'];
+  $form['siteminder']['core']['roles_header']['#title']=t("Group/Role Header");
+  $form['siteminder']['core']['roles_header']['#default_value']=$config->map['core']['roles_header'];
+  
+  $form['siteminder']['core']['roles_header_split_chars']=array(
+    '#type'=>"textfield",
+    '#title'=>t("Role Seperator Character"),
+    '#default_value'=>$config->map['core']['roles_header_split_chars'],
+  
+  );
+  
+  
+  if($config->map['core']['roles_header']){
+    $roles = user_roles(true);
+    unset($roles[2]); // 2 is the authenticated role. it is not assignable and thus shouldnt be allowed here
+    $options=explode($config->map['core']['roles_header_split_chars'], $_SERVER[$config->map['core']['roles_header']]);
+    $form['siteminder']['header_role_map']=array(
+      '#type'=>"fieldset",
+      '#title'=>"Header to Role maps",
+      '#description'=> t('supply header values that will map to roles'),
+    );
+    $form['siteminder']['header_role_map']['header_value']=array(
+      '#type'=>'item',
+      '#title'=>t("Current possible values"),
+      '#description'=>t("These are the current possible values in this header. They will varry between users so use this as an example only!"),
+      '#value'=>implode("<br>", $options),
+    );
+    foreach($roles as $id=>$role){
+      $form['siteminder']['header_role_map'][$id]=array(
+        '#type'=>"textarea",
+        '#title'=>$role,
+        '#description'=>t("a blank value will not assign a role. put each group on a new line."),
+        '#default_value'=>$config->map['header_role_map'][$id],
+      );
+    }
+  }
+}
+
+?>
Index: siteminder_roles.info
===================================================================
RCS file: siteminder_roles.info
diff -N siteminder_roles.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ siteminder_roles.info	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,6 @@
+name = Siteminder Roles
+description = "Grant roles to users based on their siteminder headers"
+version = 6.x-1.0
+core = 6.x
+dependencies[] = siteminder
+package = Siteminder
