X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fntlm.el;h=bff3bab720759874b8efc28331c14124e36638cc;hb=2ec37f63143ecc8adf5054974df68062c5498e75;hp=656d090a3d1c7fdf6cd95641ce494e9c1ffd39bf;hpb=099b95de1712551a867c9a895d42cdafbd3d5506;p=gnus diff --git a/lisp/ntlm.el b/lisp/ntlm.el index 656d090a3..bff3bab72 100644 --- a/lisp/ntlm.el +++ b/lisp/ntlm.el @@ -1,34 +1,35 @@ ;;; ntlm.el --- NTLM (NT LanManager) authentication support -;; Copyright (C) 2001 Taro Kawagishi +;; Copyright (C) 2001, 2007-2014 Free Software Foundation, Inc. + ;; Author: Taro Kawagishi ;; 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 . ;;; 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))