]> granicus.if.org Git - linux-pam/commitdiff
Relevant BUGIDs:
authorThorsten Kukuk <kukuk@thkukuk.de>
Tue, 24 Jan 2006 23:28:31 +0000 (23:28 +0000)
committerThorsten Kukuk <kukuk@thkukuk.de>
Tue, 24 Jan 2006 23:28:31 +0000 (23:28 +0000)
Purpose of commit: new feature

Commit summary:
---------------

Add framework for manpages in xml source
Fix --enable-static-modules

2006-01-24  Thorsten Kukuk  <kukuk@thkukuk.de>

        * libpam/pam_static_modules.h: New.
        * Makefile.am: Reorder subdirectories for static modules.
        * configure.in: Add --enable-static-modules option.
        * libpam/Makefile.am: Define WITH_SELINUX and WITH_PWDB if
        necessary, add pam_static_modules.h, link against all PAM
        module object files if STATIC_MODULES is defined.
        * libpam/pam_static.c: Remove old _static_module* includes,
        include pam_static_modules.h.

        * configure.in: Add checks for xsltproc, xmllint and docbook
        xsl stylesheet.
        * m4/jh_path_xml_catalog.m4: New.

12 files changed:
ChangeLog
Makefile.am
NEWS
README
configure.in
libpam/Makefile.am
libpam/pam_static.c
libpam/pam_static_modules.h [new file with mode: 0644]
libpam/pam_tokens.h
m4/jh_path_xml_catalog.m4 [new file with mode: 0644]
modules/pam_exec/Makefile.am
po/de.po

index 1a8c8d9e08013d588297a6a6e62762bf86a72bc2..3f7a7adb87d17a6a08da32715362c98acab10703 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        * po/POTFILES.in: Add modules/pam_exec/pam_exec.c.
        * po/*.po: Merge new pam_exec strings.
 
+       * libpam/pam_static_modules.h: New.
+       * Makefile.am: Reorder subdirectories for static modules.
+       * configure.in: Add --enable-static-modules option.
+       * libpam/Makefile.am: Define WITH_SELINUX and WITH_PWDB if
+       necessary, add pam_static_modules.h, link against all PAM
+       module object files if STATIC_MODULES is defined.
+       * libpam/pam_static.c: Remove old _static_module* includes,
+       include pam_static_modules.h.
+
+       * configure.in: Add checks for xsltproc, xmllint and docbook
+       xsl stylesheet.
+       * m4/jh_path_xml_catalog.m4: New.
+
 2006-01-22  Thorsten Kukuk  <kukuk@thkukuk.de>
 
        * modules/pam_succeed_if/pam_succeed_if.c: Add support for
index cd22d1b4ee1749308f08f29dc6e113169068423e..282d5f870eca345e371d3967c66739c12b8e5c79 100644 (file)
@@ -4,7 +4,11 @@
 
 AUTOMAKE_OPTIONS = 1.8 gnu dist-bzip2
 
+if STATIC_MODULES
+SUBDIRS = modules libpam libpamc libpam_misc po conf doc examples
+else
 SUBDIRS = libpam libpamc libpam_misc modules po conf doc examples
+endif
 
 CLEANFILES = *~
 
diff --git a/NEWS b/NEWS
index 943bdda4237f38cafd72436732b43d1f5b100a27..ac41ae25d2888d2a36a71e821828a6698d69c97d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ Linux-PAM NEWS -- history of user-visible changes.
 * Fix building of static variants of libpam, libpamc and libpam_misc
 * pam_listfile: Add support for password and session management
 * pam_exec: New PAM module to execute arbitary commands
+* Fix building of a static libpam including all PAM modules
 
 Release 0.99.3.0
 
diff --git a/README b/README
index bcf962a8161376cf5e85d031f48ba751641de9a6..b17723bc69eb77ed2b614defde91112dc3dfd45e 100644 (file)
--- a/README
+++ b/README
@@ -20,3 +20,16 @@ box may stop working..)
 
 That said, please report problems to the bug reporting database
 on sourceforge.net.
+
+If you do not wish to make the modules dynamically loadable, but
+build a static libpam including all PAM modules, you have to call:
+
+      ./configure --enable-static-modules
+
+In this case you cannot use pam_unix in the PAM config files instead you
+have to use pam_unix_acct, pam_unix_auth, pam_unix_passwd and
+pam_unix_session.
+
+To regenerate manual pages from the XML source files you need the
+docbook-xsl stylesheets in version 1.69.1 or newer, older versions had
+a bug which generates a broken layout.
index a262026128e043d16cd7019b823878093e8f2a61..6a22b293e84c9a7963f0d6d327ab284e9e73dbf8 100644 (file)
@@ -43,6 +43,22 @@ dnl Add security to include directory
        fi
 fi
 
+dnl
+dnl check if we should link everything static into libpam
+dnl
+AC_ARG_ENABLE(static-modules,AS_HELP_STRING([--enable-static-modules],
+       [do not make the modules dynamically loadable]),
+       STATIC_MODULES=$enableval,STATIC_MODULES=no)
+if test "$STATIC_MODULES" != "no" ; then
+        CFLAGS="$CFLAGS -DPAM_STATIC"
+       AC_ENABLE_STATIC([yes])
+       AC_ENABLE_SHARED([no])
+else
+# per default don't build static libraries
+       AC_ENABLE_STATIC([no])
+       AC_ENABLE_SHARED([yes])
+fi
+AM_CONDITIONAL([STATIC_MODULES], [test "$STATIC_MODULES" != "no"])
 
 dnl Checks for programs.
 AC_GNU_SOURCE
@@ -52,17 +68,8 @@ AM_PROG_LEX
 AC_PROG_INSTALL
 AC_PROG_LN_S
 AC_PROG_MAKE_SET
-# per default don't build static libraries
-AC_DISABLE_STATIC
 AC_PROG_LIBTOOL
 
-if test "$enable_static" = yes; then
-   CFLAGS="$CFLAGS -DPAM_STATIC"
-fi
-if test "$enable_shared" = yes; then
-   CFLAGS="$CFLAGS -DPAM_DYNAMIC"
-fi
-
 # Largefile support
 AC_SYS_LARGEFILE
 
@@ -418,6 +425,23 @@ else
 fi
 AC_SUBST(PSER)
 
+dnl
+dnl Check for xsltproc
+dnl
+enable_man=yes
+AC_PATH_PROG([XSLTPROC], [xsltproc])
+if test -z "$XSLTPROC"; then
+     enable_man=no
+fi
+AC_PATH_PROG([XMLLINT], [xmllint],[/bin/true])
+dnl check for DocBook DTD and stylesheets in the local catalog.
+JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.3//EN],
+                [DocBook XML DTD V4.3], [], enable_man=no)
+JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+                [DocBook XSL Stylesheets], [], enable_man=no)
+AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test x$enable_man != xno)
+
+
 AM_GNU_GETTEXT_VERSION
 AM_GNU_GETTEXT([external])
 
index 4f60ad47f6525e9f2eac3d1f15e5e66d73c17542..628ba5c59106e833e63c62cbe15552afde14b45e 100644 (file)
@@ -4,6 +4,13 @@
 
 AM_CFLAGS = -DDEFAULT_MODULE_PATH=\"$(SECUREDIR)/\" -DLIBPAM_COMPILE \
        -I$(srcdir)/include $(LIBPRELUDE_CFLAGS) -DPAM_VERSION=\"$(VERSION)\"
+if HAVE_LIBSELINUX
+  AM_CFLAGS += -D"WITH_SELINUX"
+endif
+if HAVE_LIBPWDB
+  AM_CFLAGS += -D"WITH_PWDB"
+endif
+
 AM_LDFLAGS = $(LIBPRELUDE_LIBS) @LIBDL@
 
 CLEANFILES = *~
@@ -14,9 +21,13 @@ include_HEADERS = $(addprefix include/security/, _pam_compat.h _pam_macros.h _pa
        pam_appl.h pam_malloc.h pam_modules.h pam_ext.h pam_modutil.h)
 
 noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \
-               pam_modutil_private.h
+               pam_modutil_private.h pam_static_modules.h
 
 libpam_la_LDFLAGS = -no-undefined -version-info 81:3:81 @LIBAUDIT@
+if STATIC_MODULES
+  libpam_la_LDFLAGS += `ls ../modules/pam_*/*.lo` \
+       @LIBDB@ @LIBCRYPT@ @LIBNSL@ @LIBCRACK@ -lutil
+endif
 if HAVE_VERSIONING
   libpam_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libpam.map
 endif
index 7ea4c81bc3b44c15f1ba05dedf8b35d056bf22b3..75f13414a37a951c6b67a18d8147de0c63630143 100644 (file)
 
 #include "pam_private.h"
 
-/*
- * Need to include pointers to static modules; this was built by each
- * of the modules that register...
- */
-
-#include "../modules/_static_module_list"
-
-/*
- * and here is a structure that connects libpam to the above static
- * modules
- */
-
-static struct pam_module *static_modules[] = {
-
-#include "../modules/_static_module_entry"
-
-    NULL
-};
+#include "pam_static_modules.h"
 
 /*
  * and now for the functions
diff --git a/libpam/pam_static_modules.h b/libpam/pam_static_modules.h
new file mode 100644 (file)
index 0000000..59d7407
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, and the entire permission notice in its entirety,
+ *    including the disclaimer of warranties.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior
+ *    written permission.
+ *
+ * ALTERNATIVELY, this product may be distributed under the terms of
+ * the GNU Public License, in which case the provisions of the GPL are
+ * required INSTEAD OF the above restrictions.  (This clause is
+ * necessary due to a potential bad interaction between the GPL and
+ * the restrictions contained in a BSD-style copyright.)
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Pointers to static module data.  */
+
+extern struct pam_module _pam_access_modstruct;
+extern struct pam_module _pam_cracklib_modstruct;
+extern struct pam_module _pam_debug_modstruct;
+extern struct pam_module _pam_deny_modstruct;
+extern struct pam_module _pam_echo_modstruct;
+extern struct pam_module _pam_env_modstruct;
+extern struct pam_module _pam_exec_modstruct;
+extern struct pam_module _pam_filter_modstruct;
+extern struct pam_module _pam_ftp_modstruct;
+extern struct pam_module _pam_group_modstruct;
+extern struct pam_module _pam_issue_modstruct;
+extern struct pam_module _pam_lastlog_modstruct;
+extern struct pam_module _pam_limits_modstruct;
+extern struct pam_module _pam_listfile_modstruct;
+extern struct pam_module _pam_localuser_modstruct;
+extern struct pam_module _pam_mail_modstruct;
+extern struct pam_module _pam_mkhomedir_modstruct;
+extern struct pam_module _pam_motd_modstruct;
+extern struct pam_module _pam_nologin_modstruct;
+extern struct pam_module _pam_permit_modstruct;
+#ifdef WITH_PWDB
+extern struct pam_module _pam_pwdb_modstruct;
+#endif
+extern struct pam_module _pam_rhosts_auth_modstruct;
+extern struct pam_module _pam_rootok_modstruct;
+extern struct pam_module _pam_securetty_modstruct;
+#ifdef WITH_SELINUX
+extern struct pam_module _pam_selinux_modstruct;
+#endif
+extern struct pam_module _pam_shells_modstruct;
+extern struct pam_module _pam_stress_modstruct;
+extern struct pam_module _pam_succeed_if_modstruct;
+extern struct pam_module _pam_tally_modstruct;
+extern struct pam_module _pam_time_modstruct;
+extern struct pam_module _pam_umask_modstruct;
+extern struct pam_module _pam_unix_acct_modstruct;
+extern struct pam_module _pam_unix_auth_modstruct;
+extern struct pam_module _pam_unix_passwd_modstruct;
+extern struct pam_module _pam_unix_session_modstruct;
+extern struct pam_module _pam_userdb_modstruct;
+extern struct pam_module _pam_warn_modstruct;
+extern struct pam_module _pam_wheel_modstruct;
+extern struct pam_module _pam_xauth_modstruct;
+
+/* and here is a structure that connects libpam to the above static
+   modules.  */
+
+static struct pam_module *static_modules[] = {
+  &_pam_access_modstruct,
+  &_pam_cracklib_modstruct,
+  &_pam_debug_modstruct,
+  &_pam_deny_modstruct,
+  &_pam_echo_modstruct,
+  &_pam_env_modstruct,
+  &_pam_exec_modstruct,
+  &_pam_filter_modstruct,
+  &_pam_ftp_modstruct,
+  &_pam_group_modstruct,
+  &_pam_issue_modstruct,
+  &_pam_lastlog_modstruct,
+  &_pam_limits_modstruct,
+  &_pam_listfile_modstruct,
+  &_pam_localuser_modstruct,
+  &_pam_mail_modstruct,
+  &_pam_mkhomedir_modstruct,
+  &_pam_motd_modstruct,
+  &_pam_nologin_modstruct,
+  &_pam_permit_modstruct,
+#ifdef WITH_PWDB
+  &_pam_pwdb_modstruct,
+#endif
+  &_pam_rhosts_auth_modstruct,
+  &_pam_rootok_modstruct,
+  &_pam_securetty_modstruct,
+#ifdef WITH_SELINUX
+  &_pam_selinux_modstruct,
+#endif
+  &_pam_shells_modstruct,
+  &_pam_stress_modstruct,
+  &_pam_succeed_if_modstruct,
+  &_pam_tally_modstruct,
+  &_pam_time_modstruct,
+  &_pam_umask_modstruct,
+  &_pam_unix_acct_modstruct,
+  &_pam_unix_auth_modstruct,
+  &_pam_unix_passwd_modstruct,
+  &_pam_unix_session_modstruct,
+  &_pam_userdb_modstruct,
+  &_pam_warn_modstruct,
+  &_pam_wheel_modstruct,
+  &_pam_xauth_modstruct,
+  NULL
+};
index fad30759e246d4b34e34616359af9edc3e18b11c..fcda7ec2bc3fbe1b00ea0908232bbb12ddfd818a 100644 (file)
@@ -17,6 +17,9 @@
 
 /* an array of actions */
 
+#ifndef LIBPAM_COMPILE
+static
+#endif
 const char * const _pam_token_actions[-_PAM_ACTION_UNDEF] = {
     "ignore",     /*  0 */
     "ok",         /* -1 */
@@ -28,6 +31,9 @@ const char * const _pam_token_actions[-_PAM_ACTION_UNDEF] = {
 
 /* an array of possible return values */
 
+#ifndef LIBPAM_COMPILE
+static
+#endif
 const char * const _pam_token_returns[_PAM_RETURN_VALUES+1] = {
     "success",           /* 0 */
     "open_err",          /* 1 */
@@ -41,7 +47,7 @@ const char * const _pam_token_returns[_PAM_RETURN_VALUES+1] = {
     "authinfo_unavail",  /* 9 */
     "user_unknown",      /* 10 */
     "maxtries",          /* 11 */
-    "new_authtok_reqd",                /* 12 */
+    "new_authtok_reqd",  /* 12 */
     "acct_expired",      /* 13 */
     "session_err",       /* 14 */
     "cred_unavail",      /* 15 */
diff --git a/m4/jh_path_xml_catalog.m4 b/m4/jh_path_xml_catalog.m4
new file mode 100644 (file)
index 0000000..dd01f16
--- /dev/null
@@ -0,0 +1,54 @@
+# Checks the location of the XML Catalog
+# Usage:
+#   JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
+AC_DEFUN([JH_PATH_XML_CATALOG],
+[
+  # check for the presence of the XML catalog
+  AC_ARG_WITH([xml-catalog],
+              AC_HELP_STRING([--with-xml-catalog=CATALOG],
+                             [path to xml catalog to use]),,
+              [with_xml_catalog=/etc/xml/catalog])
+  jh_found_xmlcatalog=true
+  XML_CATALOG_FILE="$with_xml_catalog"
+  AC_SUBST([XML_CATALOG_FILE])
+  AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
+  if test -f "$XML_CATALOG_FILE"; then
+    AC_MSG_RESULT([found])
+  else
+    jh_found_xmlcatalog=false
+    AC_MSG_RESULT([not found])
+  fi
+
+  # check for the xmlcatalog program
+  AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
+  if test "x$XMLCATALOG" = xno; then
+    jh_found_xmlcatalog=false
+  fi
+
+  if $jh_found_xmlcatalog; then
+    ifelse([$1],,[:],[$1])
+  else
+    ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
+  fi
+])
+
+# Checks if a particular URI appears in the XML catalog
+# Usage:
+#   JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+AC_DEFUN([JH_CHECK_XML_CATALOG],
+[
+  AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
+  AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
+  if $jh_found_xmlcatalog && \
+     AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
+    AC_MSG_RESULT([found])
+    ifelse([$3],,,[$3
+])dnl
+  else
+    AC_MSG_RESULT([not found])
+    ifelse([$4],,
+       [AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
+       [$4])
+  fi
+])
index 8310f3b647d7d50c0275e7fd5ecefa22e5ebfe57..e67013d101ed7c1b421ad9953e6cfcea4d28cbfd 100644 (file)
@@ -4,9 +4,10 @@
 
 CLEANFILES = *~
 
-EXTRA_DIST = README $(MANS)
+EXTRA_DIST = README $(MANS) $(XMLS)
 
 man_MANS = pam_exec.8
+man_XMLS = pam_exec.8.xml
 
 securelibdir = $(SECUREDIR)
 secureconfdir = $(SCONFIGDIR)
@@ -19,3 +20,14 @@ if HAVE_VERSIONING
 endif
 
 securelib_LTLIBRARIES = pam_exec.la
+
+if ENABLE_REGENERATE_MAN
+
+pam_exec.8: pam_exec.8.xml
+       $(XMLLINT) --nonet --xinclude --postvalid --noout $<
+       $(XSLTPROC) --nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+
+#CLEANFILES += $(man_MANS)
+
+endif
+
index c2def450dd5dbd6df8634d4c1c62717dec15f6d3..d40b14923ec5db5fb25c0d01ab0305011ae15d85 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@ msgstr ""
 "Project-Id-Version: Linux-PAM\n"
 "Report-Msgid-Bugs-To: http://sourceforge.net/projects/pam\n"
 "POT-Creation-Date: 2006-01-24 16:51+0100\n"
-"PO-Revision-Date: 2005-12-12 17:55+01:00\n"
+"PO-Revision-Date: 2006-01-25 00:18+01:00\n"
 "Last-Translator: Novell Language <language@novell.com>\n"
 "Language-Team: Novell Language <language@novell.com>\n"
 "MIME-Version: 1.0\n"
@@ -18,17 +18,17 @@ msgstr ""
 #: modules/pam_exec/pam_exec.c:118
 #, c-format
 msgid "%s failed: exit code %d"
-msgstr ""
+msgstr "%s schlug fehl: Fehlercode %d"
 
 #: modules/pam_exec/pam_exec.c:126
 #, c-format
 msgid "%s failed: caught signal %d%s"
-msgstr ""
+msgstr "%s schlug fehl: Signal %d%s erhalten"
 
 #: modules/pam_exec/pam_exec.c:134
 #, c-format
 msgid "%s failed: unknown status 0x%x"
-msgstr ""
+msgstr "%s schlug fehl: Unbekannter Status 0x%x"
 
 #: modules/pam_tally/pam_tally.c:738
 msgid "Authentication error"