changeset 109229:d3e42c34c64a

Merge from mainline.
author Katsumi Yamaoka <katsumi@flagship2>
date Wed, 23 Jun 2010 13:17:54 +0000
parents 266c496c7220 (current diff) 3cf8b3dca100 (diff)
children edba7a045a72
files
diffstat 4 files changed, 73 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Tue Jun 22 13:27:02 2010 +0000
+++ b/lisp/gnus/ChangeLog	Wed Jun 23 13:17:54 2010 +0000
@@ -1,3 +1,8 @@
+2010-06-22  Mark A. Hershberger  <mah@everybody.org>
+
+	* mm-url.el (mm-url-encode-multipart-form-data): New function to handle
+	the *other* type of HTML form submission.
+
 2010-06-15  Michael Albinus  <michael.albinus@gmx.de>
 
 	* auth-source.el (auth-source-pick): If choice does not contain a
--- a/lisp/gnus/mm-url.el	Tue Jun 22 13:27:02 2010 +0000
+++ b/lisp/gnus/mm-url.el	Wed Jun 23 13:17:54 2010 +0000
@@ -418,6 +418,48 @@
 	     (mm-url-form-encode-xwfu (cdr data))))
    pairs "&"))
 
+(defun mm-url-encode-multipart-form-data (pairs &optional boundary)
+  "Return PAIRS encoded in multipart/form-data."
+  ;; RFC1867
+
+  ;; Get a good boundary
+  (unless boundary
+    (setq boundary (mml-compute-boundary '())))
+
+  (concat
+
+   ;; Start with the boundary
+   "--" boundary "\r\n"
+
+   ;; Create name value pairs
+   (mapconcat
+    'identity
+    ;; Delete any returned items that are empty
+    (delq nil
+          (mapcar (lambda (data)
+            (when (car data)
+              ;; For each pair
+              (concat
+
+               ;; Encode the name
+               "Content-Disposition: form-data; name=\""
+               (car data) "\"\r\n"
+               "Content-Type: text/plain; charset=utf-8\r\n"
+               "Content-Transfer-Encoding: binary\r\n\r\n"
+
+               (cond ((stringp (cdr data))
+                      (cdr data))
+                     ((integerp (cdr data))
+                      (int-to-string (cdr data))))
+
+               "\r\n")))
+                  pairs))
+    ;; use the boundary as a separator
+    (concat "--" boundary "\r\n"))
+
+   ;; put a boundary at the end.
+   "--" boundary "--\r\n"))
+
 (defun mm-url-fetch-form (url pairs)
   "Fetch a form from URL with PAIRS as the data using the POST method."
   (mm-url-load-url)
--- a/lisp/url/ChangeLog	Tue Jun 22 13:27:02 2010 +0000
+++ b/lisp/url/ChangeLog	Wed Jun 23 13:17:54 2010 +0000
@@ -1,3 +1,9 @@
+2010-06-22  Mark A. Hershberger  <mah@everybody.org>
+
+	* url-parse.el (url-user-for-url, url-password-for-url):
+	Convenience functions that get usernames and passwords for urls
+	from auth-source functions.
+
 2010-06-12  Štěpán Němec  <stepnem@gmail.com>  (tiny change)
 
 	* url-vars.el (url-privacy-level): Fix doc typo.  (Bug#6406)
--- a/lisp/url/url-parse.el	Tue Jun 22 13:27:02 2010 +0000
+++ b/lisp/url/url-parse.el	Wed Jun 23 13:17:54 2010 +0000
@@ -25,6 +25,7 @@
 ;;; Code:
 
 (require 'url-vars)
+(require 'auth-source)
 (eval-when-compile (require 'cl))
 
 (autoload 'url-scheme-get-property "url-methods")
@@ -174,6 +175,25 @@
           (url-parse-make-urlobj
            prot user pass host port file refs attr full)))))))
 
+(defmacro url-bit-for-url (method lookfor url)
+  `(let* ((urlobj (url-generic-parse-url url))
+          (bit (funcall ,method urlobj))
+          (methods (list 'url-recreate-url
+                         'url-host)))
+     (while (and (not bit) (> (length methods) 0))
+       (setq bit
+             (auth-source-user-or-password
+              ,lookfor (funcall (pop methods) urlobj) (url-type urlobj))))
+     bit))
+
+(defun url-user-for-url (url)
+  "Attempt to use .authinfo to find a user for this URL."
+  (url-bit-for-url 'url-user "login" url))
+
+(defun url-password-for-url (url)
+  "Attempt to use .authinfo to find a password for this URL."
+  (url-bit-for-url 'url-password "password" url))
+
 (provide 'url-parse)
 
 ;; arch-tag: f338325f-71ab-4bee-93cc-78fb9a03d403