diff -up ldap_integration/ldapdata.module ldap_integration.date_patch/ldapdata.module
--- ldap_integration/ldapdata.module	2009-07-28 07:03:05.000000000 -0700
+++ ldap_integration.date_patch/ldapdata.module	2009-10-14 21:00:57.000000000 -0700
@@ -215,12 +215,27 @@ function _ldapdata_user_load(&$account, 
     // Retrieve profile fields list.
     $profile_fields = _ldapdata_retrieve_profile_fields();
 
+    // Determine which profile fields are dates
+    $placeholders = implode(',', array_fill(0, count($profile_fields), "'%s'"));
+    $result = db_query("SELECT name, options from {profile_fields} WHERE name IN ($placeholders) AND type = 'date'", $profile_fields);
+    $date_fields = array();
+    while ($row = db_fetch_object($result)) {
+     array_push($date_fields,$row->name);
+    }
+
     $drupal_fields = array();
     foreach (_ldapdata_reverse_mappings($account->ldap_config) as $drupal_field => $ldap_attr) {
       $value = isset($entry[strtolower($ldap_attr)]) ? $entry[strtolower($ldap_attr)][0] : '';
 
       // Is it a profile field?
       if (is_numeric($drupal_field)) {
+        if(in_array($profile_fields[$drupal_field],$date_fields)) {
+          $value = serialize( array(
+            "month" => (int)substr($value,4,2),
+            "day" => (int)substr($value,6,2),
+            "year" => (int)substr($value,0,4)
+          ));
+        }
         if ($profile_field = isset($profile_fields[$drupal_field]) ? $profile_fields[$drupal_field] : NULL) {
           if ($row = db_fetch_array(db_query("SELECT value FROM {profile_values} WHERE fid = '%d' AND uid = '%d'", $drupal_field, $account->uid))) {
             if ($row['value'] != $value)
@@ -427,10 +442,21 @@ function _ldapdata_user_update_profile(&
   // Retrieve profile fields list.
   $profile_fields = _ldapdata_retrieve_profile_fields();
 
+  // Determine which profile fields are dates
+  $placeholders = implode(',', array_fill(0, count($profile_fields), "'%s'"));
+  $result = db_query("SELECT name, options from {profile_fields} WHERE name IN ($placeholders) AND type = 'date'", $profile_fields);
+  $date_fields = array();
+  while ($row = db_fetch_object($result)) {
+    array_push($date_fields,$row->name);
+  }
+
   // Compare against $edit list.
   $writeout = array();
   foreach ($profile_fields as $key => $field) {
-    if (isset($edit[$field]) && isset($ldap_drupal_reverse_mappings[$key])) {
+	  if (isset($edit[$field]) && isset($ldap_drupal_reverse_mappings[$key]) && in_array($field,$date_fields)) {
+      // LDAP GeneralizedTime/Integer Format -> YYYYMMDD
+      $writeout[$ldap_drupal_reverse_mappings[$key]] = sprintf('%04d%02d%02d',$edit[$field]['year'],$edit[$field]['month'],$edit[$field]['day']);
+    } elseif (isset($edit[$field]) && isset($ldap_drupal_reverse_mappings[$key])) {
       $writeout[$ldap_drupal_reverse_mappings[$key]] = $edit[$field];
     }
   }
