]> err.no Git - sope/commitdiff
minor fix in authenticator
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 19 Oct 2004 13:46:37 +0000 (13:46 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 19 Oct 2004 13:46:37 +0000 (13:46 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@277 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-appserver/NGObjWeb/ChangeLog
sope-appserver/NGObjWeb/SoObjects/SoHTTPAuthenticator.m
sope-appserver/NGObjWeb/Version

index 542ae2a265340ee4c3e30579db9afea417e7064f..6e981dbd8d73133166a7b3078ab99b8ce1286548 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-19  Helge Hess  <helge.hess@skyrix.com>
+       
+       * SoObjects/SoHTTPAuthenticator.m: return 401 instead of 400 if the
+         authentication method was not recognized (eg if Evo attempts an NTLM
+         connect) (v4.3.68)
+
 2004-10-17  Helge Hess  <helge.hess@opengroupware.org>
 
        * include config.make if available (v4.3.67)
index 93eb7f2b6028556cff48de7856a9bee662b5d6be..6f29469a40160bf41b2493ce376fb1d96d32c8ac 100644 (file)
@@ -18,7 +18,6 @@
   Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.
 */
-// $Id$
 
 #include "SoHTTPAuthenticator.h"
 #include "SoUser.h"
   return [[[SoUser alloc] initWithLogin:login roles:uroles] autorelease];
 }
 
+- (WOResponse *)unauthorized:(NSString *)_reason inContext:(WOContext *)_ctx {
+  WOResponse *r;
+  NSString *auth;
+
+  if ([_reason length] == 0) _reason = @"Unauthorized";
+  
+  auth = [NSString stringWithFormat:@"basic realm=\"%@\"", [self authRealm]];
+  
+  r = [_ctx response];
+  [r setStatus:401 /* unauthorized */];
+  [r setHeader:auth forKey:@"www-authenticate"];
+  [r appendContentString:_reason];
+  return r;
+}
+
 - (WOResponse *)preprocessCredentialsInContext:(WOContext *)_ctx {
   WOResponse *r;
   NSString *auth;
   r = [_ctx response];
   if ([auth length] < 6) {
     [self logWithFormat:@"tried unknown authentication method: %@ (A)", auth];
-    [r setStatus:400 /* bad request */];
-    [r appendContentString:@"tried unsupported authentication"];
-    return r;
+    return [self unauthorized:@"unsupported authentication method"
+                 inContext:_ctx];
   }
   k = [[auth substringToIndex:5] lowercaseString];
   if (![k hasPrefix:@"basic"]) {
     [self logWithFormat:@"tried unknown authentication method: %@ (B)", auth];
-    [r setStatus:400 /* bad request */];
-    [r appendContentString:@"tried unsupported authentication"];
-    return r;
+    return [self unauthorized:@"unsupported authentication method"
+                 inContext:_ctx];
   }
   
   k = [auth substringFromIndex:6];
   if ((k = [k stringByDecodingBase64]) == nil) {
     [self logWithFormat:@"tried unknown authentication method: %@ (C)", auth];
-    [r setStatus:400 /* bad request */];
-    [r appendContentString:@"could not decode base64 credentials"];
-    return r;
+    return [self unauthorized:@"unsupported authentication method"
+                 inContext:_ctx];
   }
 
   rng = [k rangeOfString:@":"];
   if (rng.length <= 0) {
-    [self logWithFormat:@"got malformed basic credentials!"];
-    [r setStatus:400 /* bad request */];
-    [r appendContentString:@"did not find colon separator in credentials"];
-    return r;
+    [self logWithFormat:@"got malformed basic credentials (missing colon)!"];
+    return [self unauthorized:@"malformed basic credentials!" inContext:_ctx];
   }
-
+  
   user = [k substringToIndex:rng.location];
   pwd  = [k substringFromIndex:(rng.location + rng.length)];
-
+  
   rng = [user rangeOfString:@"\\"];
   if (rng.length > 0) {
     [self debugWithFormat:@"splitting of domain in user: '%@'", user];
   
   if ([user length] == 0) {
     [self logWithFormat:@"got malformed basic credentials!"];
-    [r setStatus:400 /* bad request */];
-    [r appendContentString:@"invalid login in credentials"];
-    return r;
+    return [self unauthorized:@"empty login in credentials?" inContext:_ctx];
   }
   if ([pwd length] == 0) {
     [self logWithFormat:@"got empty password for user '%@'!", user];
-    
-    auth = [NSString stringWithFormat:@"basic realm=\"%@\"",[self authRealm]];
-    [r setStatus:401 /* unauthorized */];
-    [r setHeader:auth forKey:@"www-authenticate"];
-    [r appendContentString:@"empty password in credentials"];
-    return r;
+    return [self unauthorized:@"empty passwords unsupported!" inContext:_ctx];
   }
   
   /* authenticate valid credentials */
-
+  
   if (![self checkLogin:user password:pwd]) {
     [self logWithFormat:@"tried wrong password for user '%@'!", user];
-    auth = [NSString stringWithFormat:@"basic realm=\"%@\"",[self authRealm]];
-    [r setStatus:401 /* unauthorized */];
-    [r setHeader:auth forKey:@"www-authenticate"];
-    return r;
+    return [self unauthorized:nil inContext:_ctx];
   }
   
   //[self debugWithFormat:@"authenticated user '%@'", user];
index a147ab14108a39d9b4c021aad276b7665c3a9dd4..5bd9547b48b23d59457983aae748d5ee3700ef76 100644 (file)
@@ -1,6 +1,6 @@
 # version file
 
-SUBMINOR_VERSION:=67
+SUBMINOR_VERSION:=68
 
 # v4.3.42  requires libNGExtensions v4.3.116
 # v4.3.40  requires libNGExtensions v4.3.115