From: Francesco Chemolli Date: Mon, 26 Apr 2010 16:31:46 +0000 (+0200) Subject: Portability fix: handle different formal argument lists to PAM conversation structs. X-Git-Tag: SQUID_3_2_0_1~269 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c586e382d9586a33b9a2ddf35c0bf512c8b63a7;p=thirdparty%2Fsquid.git Portability fix: handle different formal argument lists to PAM conversation structs. --- diff --git a/acinclude/pam.m4 b/acinclude/pam.m4 new file mode 100644 index 0000000000..be6a3a1d9e --- /dev/null +++ b/acinclude/pam.m4 @@ -0,0 +1,72 @@ +dnl +dnl AUTHOR: Francesco Chemolli +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 +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 +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 + + diff --git a/configure.in b/configure.in index a2fa251e64..8bcba74fe7 100644 --- a/configure.in +++ b/configure.in @@ -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 ,,, diff --git a/helpers/basic_auth/PAM/basic_pam_auth.cc b/helpers/basic_auth/PAM/basic_pam_auth.cc index 72e527448c..006e1ab880 100644 --- a/helpers/basic_auth/PAM/basic_pam_auth.cc +++ b/helpers/basic_auth/PAM/basic_pam_auth.cc @@ -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);