Add hooks for gcc handling
[gnus] / lisp / ntlm.el
index 656d090..9626aef 100644 (file)
@@ -1,34 +1,35 @@
 ;;; ntlm.el --- NTLM (NT LanManager) authentication support
 
-;; Copyright (C) 2001 Taro Kawagishi
+;; Copyright (C) 2001, 2007-2012  Free Software Foundation, Inc.
+
 ;; Author: Taro Kawagishi <tarok@transpulse.org>
 ;; Keywords: NTLM, SASL
 ;; Version: 1.00
 ;; Created: February 2001
 
-;; This program is free software; you can redistribute it and/or modify
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ;; GNU General Public License for more details.
-;;
+
 ;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 ;; This library is a direct translation of the Samba release 2.2.0
 ;; implementation of Windows NT and LanManager compatible password
 ;; encryption.
-;; 
+;;
 ;; Interface functions:
-;; 
+;;
 ;; ntlm-build-auth-request
 ;;   This will return a binary string, which should be used in the
 ;;   base64 encoded form and it is the caller's responsibility to encode
@@ -39,7 +40,7 @@
 ;;   (which will be a binary string) as the first argument and to
 ;;   encode the returned string with base64.  The second argument user
 ;;   should be given in user@domain format.
-;; 
+;;
 ;; ntlm-get-password-hashes
 ;;
 ;;
@@ -101,17 +102,23 @@ is not given."
            (md4-pack-int16 ld) ;domain field, count field
            (md4-pack-int16 ld) ;domain field, max count field
            (md4-pack-int32 (cons 0 off-d)) ;domain field, offset field
-           user                        ;bufer field
-           domain              ;bufer field
+           user                        ;buffer field
+           domain              ;buffer field
            )))
 
+(eval-when-compile
+  (defmacro ntlm-string-as-unibyte (string)
+    (if (fboundp 'string-as-unibyte)
+       `(string-as-unibyte ,string)
+      string)))
+
 (defun ntlm-build-auth-response (challenge user password-hashes)
   "Return the response string to a challenge string CHALLENGE given by
 the NTLM based server for the user USER and the password hash list
 PASSWORD-HASHES.  NTLM uses two hash values which are represented
 by PASSWORD-HASHES.  PASSWORD-HASHES should be a return value of
  (list (ntlm-smb-passwd-hash password) (ntlm-md4hash password))"
-  (let* ((rchallenge (string-as-unibyte challenge))
+  (let* ((rchallenge (ntlm-string-as-unibyte challenge))
         ;; get fields within challenge struct
         ;;(ident (substring rchallenge 0 8))   ;ident, 8 bytes
         ;;(msgType (substring rchallenge 8 12))        ;msgType, 4 bytes
@@ -200,16 +207,16 @@ by PASSWORD-HASHES.  PASSWORD-HASHES should be a return value of
            ;; buffer field
            lmRespData                  ;lmResponse, 24 bytes
            ntRespData                  ;ntResponse, 24 bytes
-           (ntlm-ascii2unicode domain  ;unicode domain string, 2*ld bytes
+           (ntlm-ascii2unicode domain  ;Unicode domain string, 2*ld bytes
                                (length domain)) ;
-           (ntlm-ascii2unicode user    ;unicode user string, 2*lu bytes
+           (ntlm-ascii2unicode user    ;Unicode user string, 2*lu bytes
                                (length user)) ;
-           (ntlm-ascii2unicode user    ;unicode user string, 2*lu bytes
+           (ntlm-ascii2unicode user    ;Unicode user string, 2*lu bytes
                                (length user)) ;
            )))
 
 (defun ntlm-get-password-hashes (password)
-  "Return a pair of SMB hash and NT MD4 hash of the given password PASSWORD"
+  "Return a pair of SMB hash and NT MD4 hash of the given password PASSWORD."
   (list (ntlm-smb-passwd-hash password)
        (ntlm-md4hash password)))
 
@@ -433,7 +440,7 @@ length of STR is LEN."
 
 (defun ntlm-smb-dohash (in key forw)
   "Return the hash value for a string IN and a string KEY.
-Length of IN and KEY are 64.  FORW non nill means forward, nil means
+Length of IN and KEY are 64.  FORW non-nil means forward, nil means
 backward."
   (let (pk1                            ;string of length 56
        c                               ;string of length 28
@@ -519,7 +526,7 @@ into a Unicode string.  PASSWD is truncated to 128 bytes if longer."
     (setq len (length passwd))
     (if (> len 128)
        (setq len 128))
-    ;; Password must be converted to NT unicode
+    ;; Password must be converted to NT Unicode
     (setq wpwd (ntlm-ascii2unicode passwd len))
     ;; Calculate length in bytes
     (setq len (* len 2))