]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Portability fix: handle different formal argument lists to PAM conversation structs.
authorFrancesco Chemolli <kinkie@squid-cache.org>
Mon, 26 Apr 2010 16:31:46 +0000 (18:31 +0200)
committerFrancesco Chemolli <kinkie@squid-cache.org>
Mon, 26 Apr 2010 16:31:46 +0000 (18:31 +0200)
acinclude/pam.m4 [new file with mode: 0644]
configure.in
helpers/basic_auth/PAM/basic_pam_auth.cc

diff --git a/acinclude/pam.m4 b/acinclude/pam.m4
new file mode 100644 (file)
index 0000000..be6a3a1
--- /dev/null
@@ -0,0 +1,72 @@
+dnl 
+dnl AUTHOR: Francesco Chemolli <kinkie@squid-cache.org>
+dnl
+dnl SQUID Web Proxy Cache          http://www.squid-cache.org/
+dnl ----------------------------------------------------------
+dnl Squid is the result of efforts by numerous individuals from
+dnl the Internet community; see the CONTRIBUTORS file for full
+dnl details.   Many organizations have provided support for Squid's
+dnl development; see the SPONSORS file for full details.  Squid is
+dnl Copyrighted (C) 2001 by the Regents of the University of
+dnl California; see the COPYRIGHT file for full details.  Squid
+dnl incorporates software developed and/or copyrighted by other
+dnl sources; see the CREDITS file for full details.
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+
+
+
+
+dnl check whether PAM's struct pam_conv takes a const (linux-style) or
+dnl non-const (solaris-style) parametrs to the conv function.
+dnl
+dnl sets the shell variable squid_cv_pam_conv_signature to either
+dnl "linux", "solaris" or "unknown".
+dnl defines the C preprocessor macro PAM_CONV_FUNC_CONST_PARM to either
+dnl "static" (linux-style) or the empty string (solaris-style or default)
+
+AC_DEFUN([CHECK_STRUCT_PAM_CONV], [
+  AH_TEMPLATE([PAM_CONV_FUNC_CONST_PARM],
+    [Defined to const or empty depending on the style used by the OS to refer to the PAM message dialog func])
+  AC_CACHE_CHECK([for PAM conversation struct signature type],
+                  squid_cv_pam_conv_signature, [
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <security/pam_appl.h>
+static int
+password_conversation(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) {}
+static struct pam_conv conv = { &password_conversation, 0 };
+]])], [
+   squid_cv_pam_conv_signature=linux
+], [ 
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <security/pam_appl.h>
+static int
+password_conversation(int num_msg, struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) {}
+static struct pam_conv conv = { &password_conversation, 0 };
+]])], [ 
+  squid_cv_pam_conv_signature=solaris
+ ], [ 
+  squid_cv_pam_conv_signature=unknown
+  ])
+    ])
+  ])
+  case $squid_cv_pam_conv_signature in
+    linux) AC_DEFINE([PAM_CONV_FUNC_CONST_PARM],[const]) ;;
+    solaris) AC_DEFINE([PAM_CONV_FUNC_CONST_PARM],[]) ;;
+    *) AC_DEFINE([PAM_CONV_FUNC_CONST_PARM],[]) ;;
+  esac
+]) dnl CHECK_STRUCT_PAM_CONV
+
+
index a2fa251e645c9a12bc146c456cc68f7b7dcda51b..8bcba74fe787a44df069aa8d4e31a3c472a67cc9 100644 (file)
@@ -18,6 +18,7 @@ m4_include([acinclude/squid-util.m4])
 m4_include([acinclude/compiler-flags.m4])
 m4_include([acinclude/os-deps.m4])
 m4_include([acinclude/krb5.m4])
+m4_include([acinclude/pam.m4])
 
 PRESET_CFLAGS="$CFLAGS"
 PRESET_LDFLAGS="$LDFLAGS"
@@ -2253,6 +2254,9 @@ AC_CHECK_HEADERS( \
        db.h \
        db_185.h
 )
+
+CHECK_STRUCT_PAM_CONV
+
 AC_CHECK_HEADERS(
        linux/netfilter_ipv4.h
 ,,,
index 72e527448c52fa286a4b6f2bce1c16911a0b8662..006e1ab8805d45ba139f8beb9ae80b97a163d373 100644 (file)
@@ -117,7 +117,7 @@ static char *password = NULL;       /* Workaround for Solaris 2.6 brokenness */
  * expects a single converstation message of type PAM_PROMPT_ECHO_OFF.
  */
 static int
-password_conversation(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr)
+password_conversation(int num_msg, PAM_CONV_FUNC_CONST_PARM struct pam_message **msg, struct pam_response **resp, void *appdata_ptr)
 {
     if (num_msg != 1 || msg[0]->msg_style != PAM_PROMPT_ECHO_OFF) {
         fprintf(stderr, "ERROR: Unexpected PAM converstaion '%d/%s'\n", msg[0]->msg_style, msg[0]->msg);