From 363841b059d43fb05827e8cf8bcee0fb5191b961 Mon Sep 17 00:00:00 2001
From: Kyle Browning <kylebrowning@me.com>
Date: Fri, 4 Nov 2011 14:50:06 -0700
Subject: [PATCH] Fixes authentication errors

---
 services.module      |    5 ++++-
 services.runtime.inc |   13 ++++++-------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/services.module b/services.module
index cd9b7d1..3e0388b 100644
--- a/services.module
+++ b/services.module
@@ -339,7 +339,10 @@ function services_services_authentication_info() {
  */
 function _services_sessions_authenticate_call() {
   global $user;
-  $user = services_get_server_info('original_user');
+  $arg = func_get_args();
+  if($arg[1]['callback'] != '_user_resource_login') {
+    $user = services_get_server_info('original_user');
+  }
 }
 
 /**
diff --git a/services.runtime.inc b/services.runtime.inc
index 4d1917f..826e5b4 100644
--- a/services.runtime.inc
+++ b/services.runtime.inc
@@ -99,11 +99,10 @@ function services_controller_execute($controller, $args = array(), $options = ar
     watchdog('services', 'Controller: <pre>@controller</pre>', array('@controller' => print_r($controller, TRUE)), WATCHDOG_DEBUG);
     watchdog('services', 'Passed arguments: <pre>@arguments</pre>', array('@arguments' => print_r($args, TRUE)), WATCHDOG_DEBUG);
   }
-
   $original_user = $user;
-  $old_state = drupal_save_session(FALSE);
-  $user = drupal_anonymous_user();
-
+  if($controller['callback'] != '_user_resource_login') {
+    $user = drupal_anonymous_user();
+  }
   services_set_server_info('original_user', $original_user);
 
   // Check authentication.
@@ -159,9 +158,9 @@ function services_controller_execute($controller, $args = array(), $options = ar
   $result = call_user_func_array($controller['callback'], $args);
   
   drupal_alter('services_request_postprocess', $controller, $args, $result);
-  
-  $user = $original_user;
-  drupal_save_session($old_state);
+  if($controller['callback'] != '_user_resource_login') {
+    $user = $original_user;
+  }
   if ($server_info->debug) {
     watchdog('services', 'results: <pre>@results</pre>', array('@results' => print_r($result, TRUE)), WATCHDOG_DEBUG);
   }
-- 
1.7.5.4

