--- ldapdata.module.orig	Fri Aug 31 12:36:07 2007
+++ ldapdata.module	Fri Aug 31 12:37:11 2007
@@ -486,13 +486,24 @@
     return;
   }
 
+  $profile_types  = _ldapdata_retrieve_profile_fields_types();
+
   $entry = $ldapdata_ldap->retrieveAttributes($user->ldap_dn);
    if ($entry) {
     $ldap_drupal_mappings = array_flip(_ldapdata_reverse_mappings($user->ldap_config));
     foreach ($ldap_drupal_mappings as $ldap_attr => $drupal_field) {
        if (isset($user->$drupal_field) && $ldap_attr && $drupal_field != 'access') {
-        if ($drupal_field != 'pass') {
-          $user->$drupal_field = $entry[strtolower($ldap_attr)][0];
+          if ($drupal_field != 'pass') {
+             if ($profile_types[$drupal_field] == "list" || $profile_types[$drupal_field] == "urllist"){
+                $user->$drupal_field = $entry[strtolower($ldap_attr)][0];
+                for ($vals = 1; $vals < $entry[strtolower($ldap_attr)]["count"]; $vals++)
+                   $user->$drupal_field .= "\n".$entry[strtolower($ldap_attr)][$vals];
+             } else if ($profile_types[$drupal_field] == "date") {
+		   $user->$drupal_field['month']   = substr($ldap_attr, 4, 2);
+                   $user->$drupal_field['day']     = substr($ldap_attr, 6, 2);
+                   $user->$drupal_field['year']    = substr($ldap_attr, 0, 4);
+             } else
+                $user->$drupal_field = $entry[strtolower($ldap_attr)][0];
         }
       }
     }
@@ -512,17 +523,30 @@
 
   // Retrieve profile fields list
   $profile_fields = _ldapdata_retrieve_profile_fields();
+  $profile_types  = _ldapdata_retrieve_profile_fields_types();
 
   // compare against mapped fields list
   $writeout = array();
   $entry = $ldapdata_ldap->retrieveAttributes($user->ldap_dn);
   foreach ($profile_fields as $key => $field ) {
     if (in_array($key, $ldap_drupal_mappings)) {
-      $writeout[$field] = $entry[strtolower($ldap_drupal_reverse_mappings[$key])][0];
+      if ($profile_types[$field] == "list" || $profile_types[$field] == "urllist"){
+//print_r ($entry);
+        $writeout[$field] = $entry[strtolower($ldap_drupal_reverse_mappings[$key])][0];
+        for ($vals = 1; $vals < $entry[strtolower($ldap_drupal_reverse_mappings[$key])]["count"]; $vals++)
+          $writeout[$field] .= "\n".$entry[strtolower($ldap_drupal_reverse_mappings[$key])][$vals];
+      } else if ($profile_types[$field] == "date") {
+                   $writeout[$field]['month']   = substr($entry[strtolower($ldap_drupal_reverse_mappings[$key])][0], 4, 2);
+                   $writeout[$field]['day']     = substr($entry[strtolower($ldap_drupal_reverse_mappings[$key])][0], 6, 2);
+                   $writeout[$field]['year']    = substr($entry[strtolower($ldap_drupal_reverse_mappings[$key])][0], 0, 4);
+      } else
+        $writeout[$field] = $entry[strtolower($ldap_drupal_reverse_mappings[$key])][0];
     }
   }
   // Write coincidences to Drupal DB
   foreach ($writeout as $field => $value) {
+    if (is_array($value))
+	$value = serialize($value);
     $result = db_fetch_array(db_query("SELECT fid FROM {profile_fields} WHERE name = '%s'", $field));
     $fid = $result['fid'];
     $uid = $user->uid;
@@ -676,11 +700,19 @@
 
   // Retrieve profile fields list
   $profile_fields = _ldapdata_retrieve_profile_fields();
+  $account_field_types = _ldapdata_retrieve_profile_fields_types();
+
   // Compare against $edit list
   $writeout = array();
   foreach ($profile_fields as $key => $field) {
     if (isset($edit[$field]) && isset($ldap_drupal_reverse_mappings[$key])) {
-      $writeout[$ldap_drupal_reverse_mappings[$key]] = $edit[$field];
+      if ($account_field_types[$field] == "list" || $account_field_types[$field] == "urllist"){
+        $writeout[$ldap_drupal_reverse_mappings[$key]] = explode ("\r\n", $edit[$field]);
+      } else if ($account_field_types[$field] == "date"){
+        $writeout[$ldap_drupal_reverse_mappings[$key]] = sprintf ( "%04d%02d%02d00000", 
+		$edit[$field]['year'], $edit[$field]['month'], $edit[$field]['day']);
+      } else
+        $writeout[$ldap_drupal_reverse_mappings[$key]] = $edit[$field];
     }
   }
 
@@ -761,11 +793,25 @@
   $result = db_query($sql);
   $fields = array();
   while ($row = db_fetch_object($result)) {
-      $fields[$row->fid] = $row->name;
+      if ($withtypes)
+         $fields[$row->fid] = Array("name" => $row->name, "type" => $row->type);
+      else
+         $fields[$row->fid] = $row->name;
   }
   return $fields;
 }
 
+function _ldapdata_retrieve_profile_fields_types() {
+
+  $sql = 'SELECT * FROM {profile_fields}';
+  $result = db_query($sql);
+  $fields = array();
+  while ($row = db_fetch_object($result)) {
+     $fields[$row->name] = $row->type;
+   }
+  return $fields;
+}
+
 function _ldapdata_retrieve_standard_user_fields() {
 
   // pablom - 
@@ -912,4 +958,4 @@
 }
 
 
-?>
\ No newline at end of file
+?>
