changeset 73626:064fe7ff7747

(url-http-handle-authentication): If there are several authentication headers, use the first with a supported method.
author Magnus Henoch <mange@freemail.hu>
date Thu, 02 Nov 2006 23:06:20 +0000
parents b4c429c0017c
children e7c14a8e6688
files lisp/url/ChangeLog lisp/url/url-http.el
diffstat 2 files changed, 22 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/url/ChangeLog	Thu Nov 02 22:13:22 2006 +0000
+++ b/lisp/url/ChangeLog	Thu Nov 02 23:06:20 2006 +0000
@@ -1,3 +1,9 @@
+2006-11-03  Shun-ichi GOTO  <gotoh@taiyo.co.jp> (tiny change)
+
+	* url-http.el (url-http-handle-authentication): If there are
+	several authentication headers, use the first with a supported
+	method.
+
 2006-11-01  Magnus Henoch  <mange@freemail.hu>
 
 	* url-http.el (url-http-create-request): Use buffer-local
--- a/lisp/url/url-http.el	Thu Nov 02 22:13:22 2006 +0000
+++ b/lisp/url/url-http.el	Thu Nov 02 23:06:20 2006 +0000
@@ -305,21 +305,29 @@
   (declare (special status success url-http-method url-http-data
 		    url-callback-function url-callback-arguments))
   (url-http-debug "Handling %s authentication" (if proxy "proxy" "normal"))
-  (let ((auth (or (mail-fetch-field (if proxy "proxy-authenticate" "www-authenticate"))
-		  "basic"))
+  (let ((auths (or (nreverse
+		    (mail-fetch-field
+		     (if proxy "proxy-authenticate" "www-authenticate")
+		     nil nil t))
+		  '("basic")))
 	(type nil)
 	(url (url-recreate-url url-current-object))
 	(url-basic-auth-storage 'url-http-real-basic-auth-storage)
-	)
-
+	auth)
     ;; Cheating, but who cares? :)
     (if proxy
 	(setq url-basic-auth-storage 'url-http-proxy-basic-auth-storage))
 
-    (setq auth (url-eat-trailing-space (url-strip-leading-spaces auth)))
-    (if (string-match "[ \t]" auth)
-	(setq type (downcase (substring auth 0 (match-beginning 0))))
-      (setq type (downcase auth)))
+    ;; find first supported auth
+    (while auths
+      (setq auth (url-eat-trailing-space (url-strip-leading-spaces (car auths))))
+      (if (string-match "[ \t]" auth)
+	  (setq type (downcase (substring auth 0 (match-beginning 0))))
+	(setq type (downcase auth)))
+      (if (url-auth-registered type)
+	  (setq auths nil)		; no more check
+	(setq auth nil
+	      auths (cdr auths))))
 
     (if (not (url-auth-registered type))
 	(progn