+2003-06-15  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * gnus-sum.el (gnus-summary-force-verify-and-decrypt): Bind
+       `gnus-article-emulate-mime'.
+
+2003-06-15  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+       From Tommi Vainikainen <thv+gnus@iki.fi>.
+
+       * message.el (message-is-yours-p): New function.  Separated common
+       code from message-cancel-news and message-supersede.  Added
+       matching code which uses message-alternative-emails regexp as last
+       resort.
+       (message-cancel-news, message-supersede): Use message-is-yours-p.
+
+2003-06-13  Kai Gro\e,A_\e(Bjohann  <kai.grossjohann@gmx.net>
+
+       * nnimap.el (nnimap-split-articles): Narrow the right buffer to
+       the headers.  From Niklas Morberg <niklas.morberg@axis.com>.
+
 2003-06-12  Dave Love  <fx@gnu.org>
 
        * nnheader.el (nnheader-functionp): Deleted.
 
              message-id (message-fetch-field "message-id" t)
              distribution (message-fetch-field "distribution")))
       ;; Make sure that this article was written by the user.
-      (unless (or
-              ;; Canlock-logic as suggested by Per Abrahamsen
-              ;; <abraham@dina.kvl.dk>
-              ;;
-              ;; IF article has cancel-lock THEN
-              ;;   IF we can verify it THEN
-              ;;     issue cancel
-              ;;   ELSE
-              ;;     error: cancellock: article is not yours
-              ;; ELSE
-              ;;   Use old rules, comparing sender...
-              (if (message-fetch-field "Cancel-Lock")
-                  (if (null (canlock-verify))
-                      t
-                    (error "Failed to verify Cancel-lock: This article is not yours"))
-                nil)
-              (message-gnksa-enable-p 'cancel-messages)
-              (and sender
-                   (string-equal
-                    (downcase sender)
-                    (downcase (message-make-sender))))
-              (string-equal
-               (downcase (cadr (std11-extract-address-components from)))
-               (downcase (cadr (std11-extract-address-components
-                                (message-make-from))))))
+      (unless (message-is-yours-p)
        (error "This article is not yours"))
       (when (yes-or-no-p "Do you really want to cancel this article? ")
        ;; Make control message.
        (sender (message-fetch-field "sender"))
        (from (message-fetch-field "from")))
     ;; Check whether the user owns the article that is to be superseded.
-    (unless (or
-            ;; Canlock-logic as suggested by Per Abrahamsen
-            ;; <abraham@dina.kvl.dk>
-            ;;
-            ;; IF article has cancel-lock THEN
-            ;;   IF we can verify it THEN
-            ;;     issue cancel
-            ;;   ELSE
-            ;;     error: cancellock: article is not yours
-            ;; ELSE
-            ;;   Use old rules, comparing sender...
-            (if (message-fetch-field "Cancel-Lock")
-                (if (null (canlock-verify))
-                    t
-                  (error "Failed to verify Cancel-lock: This article is not yours"))
-              nil)
-            (message-gnksa-enable-p 'cancel-messages)
-            (and sender
-                 (string-equal
-                  (downcase sender)
-                  (downcase (message-make-sender))))
-            (string-equal
-             (downcase (cadr (std11-extract-address-components from)))
-             (downcase (cadr (std11-extract-address-components
-                              (message-make-from))))))
+    (unless (message-is-yours-p)
       (error "This article is not yours"))
     ;; Get a normal message buffer.
     (message-pop-to-buffer (message-buffer-name "supersede"))
                (cdr local)))))
      locals)))
 
+;;;###autoload
+(defun message-is-yours-p ()
+  "Non-nil means current article is yours.
+If you have added 'cancel-messages to 'message-shoot-gnksa-feet', all articles
+are yours except those that have Cancel-Lock header not belonging to you.
+Instead of shooting GNKSA feet, you should modify 'message-alternative-emails'
+regexp to match all of yours addresses."
+  ;; Canlock-logic as suggested by Per Abrahamsen
+  ;; <abraham@dina.kvl.dk>
+  ;;
+  ;; IF article has cancel-lock THEN
+  ;;   IF we can verify it THEN
+  ;;     issue cancel
+  ;;   ELSE
+  ;;     error: cancellock: article is not yours
+  ;; ELSE
+  ;;   Use old rules, comparing sender...
+  (if (message-fetch-field "Cancel-Lock")
+      (if (null (canlock-verify))
+         t
+       (error "Failed to verify Cancel-lock: This article is not yours"))
+    (or
+     (message-gnksa-enable-p 'cancel-messages)
+     (and sender
+         (string-equal
+          (downcase sender)
+          (downcase (message-make-sender))))
+     ;; Email address in From field equals to our address
+     (string-equal
+      (downcase (cadr (std11-extract-address-components from)))
+      (downcase (cadr (std11-extract-address-components
+                      (message-make-from)))))
+     ;; Email address in From field matches
+     ;; 'message-alternative-emails' regexp
+     (and message-alternative-emails
+         (string-match
+          message-alternative-emails
+          (cadr (std11-extract-address-components from)))))))
+
 
 ;;; @ for MIME Edit mode
 ;;;