From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Joseph Gay Newsgroups: gmane.emacs.devel Subject: [PATCH 2/2] response handlers needed for SASL PLAIN authentication Date: Wed, 01 Feb 2012 12:22:58 -0600 Message-ID: <87obtie7lp.fsf@geneva.hpsy.me> References: <87ty3ae7s1.fsf@geneva.hpsy.me> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1328120721 26333 80.91.229.3 (1 Feb 2012 18:25:21 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 1 Feb 2012 18:25:21 +0000 (UTC) Cc: Michael Olson To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Feb 01 19:25:20 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([140.186.70.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Rserv-0000bj-TJ for ged-emacs-devel@m.gmane.org; Wed, 01 Feb 2012 19:25:20 +0100 Original-Received: from localhost ([::1]:39820 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rserv-0004th-10 for ged-emacs-devel@m.gmane.org; Wed, 01 Feb 2012 13:25:19 -0500 Original-Received: from eggs.gnu.org ([140.186.70.92]:44991) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rsern-0004tc-Gj for emacs-devel@gnu.org; Wed, 01 Feb 2012 13:25:17 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rserj-0006im-SA for emacs-devel@gnu.org; Wed, 01 Feb 2012 13:25:11 -0500 Original-Received: from plane.gmane.org ([80.91.229.3]:55343) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rserj-0006iN-Mz for emacs-devel@gnu.org; Wed, 01 Feb 2012 13:25:07 -0500 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1Rserg-0000TQ-95 for emacs-devel@gnu.org; Wed, 01 Feb 2012 19:25:04 +0100 Original-Received: from 166.137.14.7 ([166.137.14.7]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 01 Feb 2012 19:25:04 +0100 Original-Received: from gilleylen by 166.137.14.7 with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 01 Feb 2012 19:25:04 +0100 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 85 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: 166.137.14.7 User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.92 (gnu/linux) Cancel-Lock: sha1:bwTB2iQNUbSgm0/JWjDSQhThL2E= X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 80.91.229.3 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:148100 Archived-At: --- erc-sasl.el | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 71 insertions(+), 0 deletions(-) create mode 100644 erc-sasl.el diff --git a/erc-sasl.el b/erc-sasl.el new file mode 100644 index 0000000..392ab5d --- /dev/null +++ b/erc-sasl.el @@ -0,0 +1,71 @@ +;; erc-sasl.el -- handle SASL PLAIN authentication + +;; Copyright (C) 2012 Free Software Foundation, Inc. + +;; Author: Joseph Gay +;; Keywords: comm + +;; 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 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 GNU Emacs. If not, see . + +;;; Commentary: + +;; This file implements SASL PLAIN authentication +;; To activate: +;; +;; (require 'erc-sasl) +;; +;; To disable: +;; (setq erc-sasl-use-sasl nil) +;; +;; NOTE: requires passing a password initially to (erc) and variants + +;;; Code: + +(defvar erc-sasl-use-sasl t + "Set to nil to disable SASL auth") + +(define-erc-response-handler (CAP) + "Client capability framework is used to request SASL auth, need + to wait for ACK to begin" nil + (let ((msg (erc-response.contents parsed))) + (when (string-match " *sasl" msg) + (erc-server-send "AUTHENTICATE PLAIN") + ;; now wait for AUTHENTICATE + + ))) + +(define-erc-response-handler (AUTHENTICATE) + "Handling empty server response indicating ready to receive authentication." nil + (if erc-session-password + (let ((msg (erc-response.contents parsed))) + (when (string= "+" msg) + ;; plain auth + (erc-server-send (format "AUTHENTICATE %s" + (base64-encode-string + (concat "\0" (erc-current-nick) "\0" erc-session-password) t))))) + (progn + (erc-display-messaged parsed 'error (if erc-server-connected 'active proc) + "You must set a password in order to use SASL authentication.") + ;; aborting SASL auth + (erc-server-send (erc-server-send "AUTHENTICATE *"))))) + +(define-erc-response-handler (903) + "Handling a successful SASL authentication." nil + (erc-server-send "CAP END")) + +;;; erc-sasl.el ends here +;; Local Variables: +;; indent-tabs-mode: nil +;; End: -- 1.7.2.5