checkpw with crypt password (patch)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear All,

I like to submit you our patches applied to lib/checkpw.c lib/Makefile.am

The patches add crypt() compare for salted crypt password.
We use this to allow postfix using sasl read and validate crypt passwords
for a database table (postgres).

Tests are successful done on a Debian Wheezy with following configuration:

/etc/postfix/sasl/smtpd.conf
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: pgsql
password_format: crypt
mech_list: LOGIN PLAIN

sql_engine: pgsql
sql_user: postfix
sql_passwd: *********
sql_hostnames: localhost
sql_database: *******
sql_select: select cryptpw as password from mailacct where account='%u@%r'
sql_usessl: no


testmaildb=> SELECT id,account,cryptpw from mailacct where id=1
;
 id |        account       |              cryptpw
----+----------------------+------------------------------------
  1 | tester@testdom.local | $1$.wMUVvWa$cPWzm5.zHZAqgMBcEC7fA/
(1 row)


Please review the patch and submit it to your upstream releases.

happy new year !

Cheers
Chris
#! /bin/sh /usr/share/dpatch/dpatch-run
## 0038_checkpw_add_cryptcmp.dpatch by  <chris.ruehl@xxxxxxxxxx>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: No description.

@DPATCH@
diff -urNad cyrus-sasl2-2.1.23.dfsg1/lib/checkpw.c.orig cyrus-sasl2-2.1.23.dfsg1/lib/checkpw.c
--- cyrus-sasl2-2.1.23.dfsg1/lib/checkpw.c.orig	2013-01-03 10:14:11.420579153 +0800
+++ cyrus-sasl2-2.1.23.dfsg1/lib/checkpw.c	2013-01-03 10:22:02.264429733 +0800
@@ -94,6 +94,7 @@
 # endif
 #endif
 
+extern char *crypt();
 
 /* we store the following secret to check plaintext passwords:
  *
@@ -184,10 +185,17 @@
      * and we've done the auxprop lookup.  This should be easy. */
     if(auxprop_values[0].name
        && auxprop_values[0].values
-       && auxprop_values[0].values[0]
-       && !strcmp(auxprop_values[0].values[0], passwd)) {
-	/* We have a plaintext version and it matched! */
-	return SASL_OK;
+       && auxprop_values[0].values[0] ) {
+
+	    if ( !strcmp(auxprop_values[0].values[0], passwd)) {
+		    /* We have a plaintext version and it matched! */
+		    return SASL_OK;
+	    }
+	    if ( !strcmp(auxprop_values[0].values[0], crypt(passwd, auxprop_values[0].values[0]))) {
+		    /* We have a crypt version and it matched! */
+		    return SASL_OK;
+	    }
+
     } else if(auxprop_values[1].name
 	      && auxprop_values[1].values
 	      && auxprop_values[1].values[0]) {

diff -urNad cyrus-sasl2-2.1.25.dfsg1/lib/Makefile.am cyrus-sasl2-2.1.25.dfsg1/lib/Makefile.am.patch
--- cyrus-sasl2-2.1.25.dfsg1/lib/Makefile.am	2013-01-03 12:14:11.000000000 +0800
+++ cyrus-sasl2-2.1.25.dfsg1/lib/Makefile.am.patch	2013-01-03 12:17:22.392096999 +0800
@@ -58,13 +58,14 @@
 LTLIBOBJS = @LTLIBOBJS@
 LIBOBJS = @LIBOBJS@
 LIB_DOOR= @LIB_DOOR@
+LIB_CRYPT= @LIB_CRYPT@
 
 lib_LTLIBRARIES = libsasl2.la
 
 libsasl2_la_SOURCES = $(common_sources) $(common_headers)
 libsasl2_la_LDFLAGS = -version-info $(sasl_version) -Wl,--version-script=$(top_srcdir)/Versions
 libsasl2_la_DEPENDENCIES = $(LTLIBOBJS) $(top_srcdir)/Versions
-libsasl2_la_LIBADD = $(LTLIBOBJS) $(SASL_DL_LIB) $(LIB_SOCKET) $(LIB_DOOR)
+libsasl2_la_LIBADD = $(LTLIBOBJS) $(SASL_DL_LIB) $(LIB_SOCKET) $(LIB_DOOR) $(LIB_CRYPT)
 
 if MACOSX
 framedir = /Library/Frameworks/SASL2.framework


[Index of Archives]     [Info Cyrus]     [Squirrel Mail]     [Linux Media]     [Yosemite News]     [gtk]     [KDE]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux