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: Re: [PATCH 2/2] response handlers needed for SASL PLAIN authentication Date: Wed, 18 Apr 2012 23:35:31 -0500 Message-ID: <87y5psqqy4.fsf@geneva.hpsy.me> References: <87ty3ae7s1.fsf@geneva.hpsy.me> <87obtie7lp.fsf@geneva.hpsy.me> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: dough.gmane.org 1334810046 17986 80.91.229.3 (19 Apr 2012 04:34:06 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 19 Apr 2012 04:34:06 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Apr 19 06:34:02 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SKj4D-0001nF-PC for ged-emacs-devel@m.gmane.org; Thu, 19 Apr 2012 06:34:02 +0200 Original-Received: from localhost ([::1]:42296 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SKj4D-0006NW-4S for ged-emacs-devel@m.gmane.org; Thu, 19 Apr 2012 00:34:01 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:35853) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SKj47-0006MQ-4m for emacs-devel@gnu.org; Thu, 19 Apr 2012 00:33:59 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SKj42-0002Qj-Fx for emacs-devel@gnu.org; Thu, 19 Apr 2012 00:33:54 -0400 Original-Received: from plane.gmane.org ([80.91.229.3]:42622) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SKj42-0002QW-5A for emacs-devel@gnu.org; Thu, 19 Apr 2012 00:33:50 -0400 Original-Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1SKj3w-0001Xt-Ao for emacs-devel@gnu.org; Thu, 19 Apr 2012 06:33:44 +0200 Original-Received: from 68-113-85-213.dhcp.leds.al.charter.com ([68.113.85.213]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 19 Apr 2012 06:33:44 +0200 Original-Received: from ysph by 68-113-85-213.dhcp.leds.al.charter.com with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Thu, 19 Apr 2012 06:33:44 +0200 X-Injected-Via-Gmane: http://gmane.org/ Original-Lines: 110 Original-X-Complaints-To: usenet@dough.gmane.org X-Gmane-NNTP-Posting-Host: 68-113-85-213.dhcp.leds.al.charter.com User-Agent: Gnus/5.130004 (Ma Gnus v0.4) Emacs/24.1.50 (gnu/linux) Cancel-Lock: sha1:xsXw3Qh1bzIyOXXqWCchP0Go/tg= 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:149801 Archived-At: Part 2 of 2. --- erc-sasl.el | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 95 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..70eaf3c --- /dev/null +++ b/erc-sasl.el @@ -0,0 +1,95 @@ +;; 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) +;; +;; (add-to-list 'erc-sasl-server-regexp-list "host\\.server\\.com") +;; e.g. irc\\.freenode\\.net, or .* for any host +;; +;; To disable: +;; (setq erc-sasl-use-sasl nil) +;; +;; NOTE: requires passing a password initially to (erc) and variants + +;;; Code: + +(eval-when-compile (require 'cl)) + +(defvar erc-sasl-use-sasl t + "Set to nil to disable SASL auth") + +(defvar erc-sasl-server-regexp-list '() + "List of regexps matching server host names for which sasl + should be used") + +(defun erc-sasl-use-sasl-p () + "Used internally to decide whether SASL should be used in the +current session" + (and erc-sasl-use-sasl + (boundp 'erc-session-server) + (loop for re in erc-sasl-server-regexp-list + thereis (integerp (string-match re erc-session-server))))) + +(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-message + 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")) + +(provide 'erc-sasl) + +;;; erc-sasl.el ends here +;; Local Variables: +;; indent-tabs-mode: nil +;; End: -- 1.7.2.5