From: Magnus H. <leg...@us...> - 2007-06-03 18:33:19
|
Update of /cvsroot/emacs-jabber/emacs-jabber In directory sc8-pr-cvs17:/tmp/cvs-serv22380 Modified Files: jabber-ft-server.el Log Message: Revision: ma...@fr...--2005/emacs-jabber--cvs-head--0--patch-364 Creator: Magnus Henoch <ma...@fr...> Check MD5 hash of received files Index: jabber-ft-server.el =================================================================== RCS file: /cvsroot/emacs-jabber/emacs-jabber/jabber-ft-server.el,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- jabber-ft-server.el 7 Feb 2007 13:49:38 -0000 1.13 +++ jabber-ft-server.el 3 Jun 2007 18:33:11 -0000 1.14 @@ -1,7 +1,7 @@ ;; jabber-ft-server.el - handle incoming file transfers, by JEP-0096 +;; Copyright (C) 2003, 2004, 2007 - Magnus Henoch - ma...@fr... ;; Copyright (C) 2002, 2003, 2004 - tom berger - ob...@in... -;; Copyright (C) 2003, 2004 - Magnus Henoch - ma...@fr... ;; This file is a part of jabber.el. @@ -28,6 +28,9 @@ (defvar jabber-ft-size nil "Size of the file that is being downloaded") +(defvar jabber-ft-md5-hash nil + "MD5 hash of the file that is being downloaded") + (add-to-list 'jabber-advertised-features "http://jabber.org/protocol/si/profile/file-transfer") (add-to-list 'jabber-si-profiles @@ -78,8 +81,10 @@ (if (fboundp 'set-buffer-multibyte) (set-buffer-multibyte nil)) (set-visited-file-name file-name t) - (make-local-variable 'jabber-ft-size) - (setq jabber-ft-size (string-to-number size))) + (set (make-local-variable 'jabber-ft-size) + (string-to-number size)) + (set (make-local-variable 'jabber-ft-md5-hash) + md5-hash)) (add-to-list 'jabber-ft-sessions (cons (list si-id from) buffer))) @@ -107,7 +112,17 @@ (if (and data (< (buffer-size) jabber-ft-size)) t (basic-save-buffer) - (message "%s downloaded" (file-name-nondirectory buffer-file-name)) + (if (and jabber-ft-md5-hash + (let ((file-hash (jabber-ft-get-md5 buffer-file-name))) + (and file-hash + (not (string= file-hash jabber-ft-md5-hash))))) + ;; hash mismatch! + (progn + (message "%s downloaded - CHECKSUM MISMATCH!" + (file-name-nondirectory buffer-file-name)) + (sleep-for 5)) + ;; all is fine + (message "%s downloaded" (file-name-nondirectory buffer-file-name))) (kill-buffer buffer) nil)))) |