From 3ef9ccc00e80afaefedf6eba89a92f834ac821d0 Mon Sep 17 00:00:00 2001
From: Thorsten Kukuk <kukuk@thkukuk.de>
Date: Tue, 22 Mar 2016 14:43:03 +0100
Subject: [PATCH 1/3] Remove --enable-static-modules option and remove all
 traces in configure.ac, Makefile and libpam.

---
 configure.ac                          |  19 +----
 libpam/Makefile.am                    |   9 +--
 libpam/include/security/pam_modules.h |  78 +++---------------
 libpam/pam_dynamic.c                  |   3 -
 libpam/pam_handlers.c                 |  53 +-----------
 libpam/pam_private.h                  |  12 ---
 libpam/pam_static.c                   | 127 -----------------------------
 libpam/pam_static_modules.h           | 148 ----------------------------------
 modules/pam_unix/Makefile.am          |   6 +-
 modules/pam_unix/pam_unix_static.c    |  23 ------
 modules/pam_unix/pam_unix_static.h    |   6 --
 tests/tst-dlopen.c                    |   4 -
 12 files changed, 19 insertions(+), 469 deletions(-)
 delete mode 100644 libpam/pam_static.c
 delete mode 100644 libpam/pam_static_modules.h
 delete mode 100644 modules/pam_unix/pam_unix_static.c
 delete mode 100644 modules/pam_unix/pam_unix_static.h

diff --git a/configure.ac b/configure.ac
index f33b959..d5cc644 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,23 +61,8 @@ dnl This should be called before any macros that run the C compiler.
 AC_USE_SYSTEM_EXTENSIONS
 
 LT_INIT([disable-static])
-
-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"])
+AC_ENABLE_STATIC([no])
+AC_ENABLE_SHARED([yes])
 
 dnl Checks for programs.
 AC_PROG_CC
diff --git a/libpam/Makefile.am b/libpam/Makefile.am
index ac2a1fb..04a8df0 100644
--- a/libpam/Makefile.am
+++ b/libpam/Makefile.am
@@ -18,16 +18,11 @@ include_HEADERS = include/security/_pam_compat.h \
 	include/security/pam_ext.h include/security/pam_modutil.h
 
 noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \
-		pam_modutil_private.h pam_static_modules.h
+		pam_modutil_private.h
 
 libpam_la_LDFLAGS = -no-undefined -version-info 84:1:84
 libpam_la_LIBADD = @LIBAUDIT@ $(LIBPRELUDE_LIBS) @LIBDL@
 
-if STATIC_MODULES
-  libpam_la_LIBADD += $(shell ls ../modules/pam_*/*.lo) \
-	@LIBDB@ @LIBCRYPT@ $(NIS_LIBS) @LIBCRACK@ -lutil
-  AM_CFLAGS += $(NIS_CFLAGS)
-endif
 if HAVE_VERSIONING
   libpam_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libpam.map
 endif
@@ -38,7 +33,7 @@ libpam_la_SOURCES = pam_account.c pam_auth.c pam_data.c pam_delay.c \
 	pam_dispatch.c pam_end.c pam_env.c pam_get_authtok.c \
 	pam_handlers.c pam_item.c \
 	pam_misc.c pam_password.c pam_prelude.c \
-	pam_session.c pam_start.c pam_static.c pam_strerror.c \
+	pam_session.c pam_start.c pam_strerror.c \
 	pam_vprompt.c pam_syslog.c pam_dynamic.c pam_audit.c \
 	pam_modutil_cleanup.c pam_modutil_getpwnam.c pam_modutil_ioloop.c \
 	pam_modutil_getgrgid.c pam_modutil_getpwuid.c pam_modutil_getgrnam.c \
diff --git a/libpam/include/security/pam_modules.h b/libpam/include/security/pam_modules.h
index 5c516c4..37568e9 100644
--- a/libpam/include/security/pam_modules.h
+++ b/libpam/include/security/pam_modules.h
@@ -30,80 +30,26 @@ pam_get_data(const pam_handle_t *pamh, const char *module_data_name,
 extern int PAM_NONNULL((1,2))
 pam_get_user(pam_handle_t *pamh, const char **user, const char *prompt);
 
-#ifdef PAM_STATIC
-
-#define PAM_EXTERN static
-
-struct pam_module {
-    const char *name;		/* Name of the module */
-
-    /* These are function pointers to the module's key functions.  */
-
-    int (*pam_sm_authenticate)(pam_handle_t *pamh, int flags,
-			       int argc, const char **argv);
-    int (*pam_sm_setcred)(pam_handle_t *pamh, int flags,
-			  int argc, const char **argv);
-    int (*pam_sm_acct_mgmt)(pam_handle_t *pamh, int flags,
-			    int argc, const char **argv);
-    int (*pam_sm_open_session)(pam_handle_t *pamh, int flags,
-			       int argc, const char **argv);
-    int (*pam_sm_close_session)(pam_handle_t *pamh, int flags,
-				int argc, const char **argv);
-    int (*pam_sm_chauthtok)(pam_handle_t *pamh, int flags,
-			    int argc, const char **argv);
-};
-
-#else /* !PAM_STATIC */
-
-#define PAM_EXTERN extern
-
-#endif /* PAM_STATIC */
-
-/* Lots of files include pam_modules.h that don't need these
- * declared.  However, when they are declared static, they
- * need to be defined later.  So we have to protect C files
- * that include these without wanting these functions defined.. */
-
-#if (defined(PAM_STATIC) && defined(PAM_SM_AUTH)) || !defined(PAM_STATIC)
-
 /* Authentication API's */
-PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags,
-                                   int argc, const char **argv);
-PAM_EXTERN int pam_sm_setcred(pam_handle_t *pamh, int flags,
-			      int argc, const char **argv);
-
-#endif /*(defined(PAM_STATIC) && defined(PAM_SM_AUTH))
-	 || !defined(PAM_STATIC)*/
-
-#if (defined(PAM_STATIC) && defined(PAM_SM_ACCOUNT)) || !defined(PAM_STATIC)
+int pam_sm_authenticate(pam_handle_t *pamh, int flags,
+                        int argc, const char **argv);
+int pam_sm_setcred(pam_handle_t *pamh, int flags,
+		   int argc, const char **argv);
 
 /* Account Management API's */
-PAM_EXTERN int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags,
-				int argc, const char **argv);
-
-#endif /*(defined(PAM_STATIC) && defined(PAM_SM_ACCOUNT))
-	 || !defined(PAM_STATIC)*/
-
-#if (defined(PAM_STATIC) && defined(PAM_SM_SESSION)) || !defined(PAM_STATIC)
+int pam_sm_acct_mgmt(pam_handle_t *pamh, int flags,
+		     int argc, const char **argv);
 
 /* Session Management API's */
-PAM_EXTERN int pam_sm_open_session(pam_handle_t *pamh, int flags,
-				   int argc, const char **argv);
-
-PAM_EXTERN int pam_sm_close_session(pam_handle_t *pamh, int flags,
-				    int argc, const char **argv);
+int pam_sm_open_session(pam_handle_t *pamh, int flags,
+			int argc, const char **argv);
 
-#endif /*(defined(PAM_STATIC) && defined(PAM_SM_SESSION))
-	 || !defined(PAM_STATIC)*/
-
-#if (defined(PAM_STATIC) && defined(PAM_SM_PASSWORD)) || !defined(PAM_STATIC)
+int pam_sm_close_session(pam_handle_t *pamh, int flags,
+			 int argc, const char **argv);
 
 /* Password Management API's */
-PAM_EXTERN int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
-				int argc, const char **argv);
-
-#endif /*(defined(PAM_STATIC) && defined(PAM_SM_PASSWORD))
-	 || !defined(PAM_STATIC)*/
+int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
+		     int argc, const char **argv);
 
 /* The following two flags are for use across the Linux-PAM/module
  * interface only. The Application is not permitted to use these
diff --git a/libpam/pam_dynamic.c b/libpam/pam_dynamic.c
index e1155e5..50bfd79 100644
--- a/libpam/pam_dynamic.c
+++ b/libpam/pam_dynamic.c
@@ -33,8 +33,6 @@
 
 #include "pam_private.h"
 
-#ifndef PAM_STATIC
-
 #ifdef PAM_SHL
 # include <dl.h>
 #elif defined(PAM_DYLD)
@@ -139,4 +137,3 @@ _pam_dlerror (void)
 #endif
 }
 
-#endif
diff --git a/libpam/pam_handlers.c b/libpam/pam_handlers.c
index bc3fd9d..91cccad 100644
--- a/libpam/pam_handlers.c
+++ b/libpam/pam_handlers.c
@@ -665,9 +665,7 @@ _pam_load_module(pam_handle_t *pamh, const char *mod_path, int handler_type)
 {
     int x = 0;
     int success;
-#ifndef PAM_STATIC
     char *mod_full_isa_path=NULL, *isa=NULL;
-#endif
     struct loaded_module *mod;
 
     D(("_pam_load_module: loading module `%s'", mod_path));
@@ -701,27 +699,6 @@ _pam_load_module(pam_handle_t *pamh, const char *mod_path, int handler_type)
 	/* Be pessimistic... */
 	success = PAM_ABORT;
 
-#ifdef PAM_STATIC
-	/* Only load static function if function was not found dynamically.
-	 * This code should work even if no dynamic loading is available. */
-	if (success != PAM_SUCCESS) {
-	    D(("_pam_load_module: open static handler %s", mod_path));
-	    mod->dl_handle = _pam_open_static_handler(pamh, mod_path);
-	    if (mod->dl_handle == NULL) {
-	        D(("_pam_load_module: unable to find static handler %s",
-		   mod_path));
-		if (handler_type != PAM_HT_SILENT_MODULE)
-		    pam_syslog(pamh, LOG_ERR,
-				"unable to open static handler %s", mod_path);
-		/* Didn't find module in dynamic or static..will mark bad */
-	    } else {
-	        D(("static module added successfully"));
-		success = PAM_SUCCESS;
-		mod->type = PAM_MT_STATIC_MOD;
-		pamh->handlers.modules_used++;
-	    }
-	}
-#else
 	D(("_pam_load_module: _pam_dlopen(%s)", mod_path));
 	mod->dl_handle = _pam_dlopen(mod_path);
 	D(("_pam_load_module: _pam_dlopen'ed"));
@@ -758,7 +735,6 @@ _pam_load_module(pam_handle_t *pamh, const char *mod_path, int handler_type)
 	    mod->type = PAM_MT_DYNAMIC_MOD;
 	    pamh->handlers.modules_used++;
 	}
-#endif
 
 	if (success != PAM_SUCCESS) {	         /* add a malformed module */
 	    mod->dl_handle = NULL;
@@ -869,16 +845,8 @@ int _pam_add_handler(pam_handle_t *pamh
     }
 
     /* are the modules reliable? */
-    if (
-#ifdef PAM_STATIC
-	 mod_type != PAM_MT_STATIC_MOD
-	 &&
-#else
-	 mod_type != PAM_MT_DYNAMIC_MOD
-	 &&
-#endif
-	 mod_type != PAM_MT_FAULTY_MOD
-	) {
+    if (mod_type != PAM_MT_DYNAMIC_MOD &&
+	 mod_type != PAM_MT_FAULTY_MOD) {
 	D(("_pam_add_handlers: illegal module library type; %d", mod_type));
 	pam_syslog(pamh, LOG_ERR,
 			"internal error: module library type not known: %s;%d",
@@ -888,30 +856,15 @@ int _pam_add_handler(pam_handle_t *pamh
 
     /* now identify this module's functions - for non-faulty modules */
 
-#ifdef PAM_STATIC
-    if ((mod_type == PAM_MT_STATIC_MOD) &&
-        (func = (servicefn)_pam_get_static_sym(mod->dl_handle, sym)) == NULL) {
-	pam_syslog(pamh, LOG_ERR, "unable to resolve static symbol: %s", sym);
-    }
-#else
     if ((mod_type == PAM_MT_DYNAMIC_MOD) &&
         !(func = _pam_dlsym(mod->dl_handle, sym)) ) {
 	pam_syslog(pamh, LOG_ERR, "unable to resolve symbol: %s", sym);
     }
-#endif
     if (sym2) {
-#ifdef PAM_STATIC
-	if ((mod_type == PAM_MT_STATIC_MOD) &&
-	    (func2 = (servicefn)_pam_get_static_sym(mod->dl_handle, sym2))
-	    == NULL) {
-	    pam_syslog(pamh, LOG_ERR, "unable to resolve symbol: %s", sym2);
-	}
-#else
 	if ((mod_type == PAM_MT_DYNAMIC_MOD) &&
 	    !(func2 = _pam_dlsym(mod->dl_handle, sym2)) ) {
 	    pam_syslog(pamh, LOG_ERR, "unable to resolve symbol: %s", sym2);
 	}
-#endif
     }
 
     /* here func (and perhaps func2) point to the appropriate functions */
@@ -994,11 +947,9 @@ int _pam_free_handlers(pam_handle_t *pamh)
     while (pamh->handlers.modules_used) {
 	D(("_pam_free_handlers: dlclose(%s)", mod->name));
 	free(mod->name);
-#ifndef PAM_STATIC
 	if (mod->type == PAM_MT_DYNAMIC_MOD) {
 	    _pam_dlclose(mod->dl_handle);
 	}
-#endif
 	mod++;
 	pamh->handlers.modules_used--;
     }
diff --git a/libpam/pam_private.h b/libpam/pam_private.h
index 1138277..7ff9f75 100644
--- a/libpam/pam_private.h
+++ b/libpam/pam_private.h
@@ -241,22 +241,10 @@ void _pam_await_timer(pam_handle_t *pamh, int status);
 typedef void (*voidfunc(void))(void);
 typedef int (*servicefn)(pam_handle_t *, int, int, char **);
 
-#ifdef PAM_STATIC
-/* The next two in ../modules/_pam_static/pam_static.c */
-
-/* Return pointer to data structure used to define a static module */
-struct pam_module * _pam_open_static_handler (pam_handle_t *pamh,
-					      const char *path);
-
-/* Return pointer to function requested from static module */
-
-voidfunc *_pam_get_static_sym(struct pam_module *mod, const char *symname);
-#else
 void *_pam_dlopen (const char *mod_path);
 servicefn _pam_dlsym (void *handle, const char *symbol);
 void _pam_dlclose (void *handle);
 const char *_pam_dlerror (void);
-#endif
 
 /* For now we just use a stack and linear search for module data. */
 /* If it becomes apparent that there is a lot of data, it should  */
diff --git a/libpam/pam_static.c b/libpam/pam_static.c
deleted file mode 100644
index 511026d..0000000
--- a/libpam/pam_static.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * pam_static.c -- static module loading helper functions
- *
- * created by Michael K. Johnson, johnsonm@redhat.com
- */
-
-/* This whole file is only used for PAM_STATIC */
-
-#ifdef PAM_STATIC
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "pam_private.h"
-
-#include "pam_static_modules.h"
-
-/*
- * and now for the functions
- */
-
-/* Return pointer to data structure used to define a static module */
-struct pam_module *
-_pam_open_static_handler (pam_handle_t *pamh, const char *path)
-{
-    int i;
-    const char *clpath = path;
-    char *lpath, *end;
-
-    if (strchr(clpath, '/')) {
-        /* ignore path and leading "/" */
-	clpath = strrchr(path, '/') + 1;
-    }
-    /* create copy to muck with (must free before return) */
-    lpath = _pam_strdup(clpath);
-    /* chop .so off copy if it exists (or other extension on other
-       platform...) */
-    end = strstr(lpath, ".so");
-    if (end) {
-        *end = '\0';
-    }
-
-    /* now go find the module */
-    for (i = 0; static_modules[i] != NULL; i++) {
-	D(("%s=?%s\n", lpath, static_modules[i]->name));
-        if (static_modules[i]->name &&
-	    ! strcmp(static_modules[i]->name, lpath)) {
-	    break;
-	}
-    }
-
-    if (static_modules[i] == NULL) {
-      pam_syslog (pamh, LOG_ERR, "no static module named %s", lpath);
-    }
-
-    free(lpath);
-    return (static_modules[i]);
-}
-
-/* Return pointer to function requested from static module
- * Can't just return void *, because ANSI C disallows casting a
- * pointer to a function to a void *...
- * This definition means:
- * _pam_get_static_sym is a function taking two arguments and
- * returning a pointer to a function which takes no arguments
- * and returns void... */
-voidfunc *_pam_get_static_sym(struct pam_module *mod, const char *symname) {
-
-    if (! strcmp(symname, "pam_sm_authenticate")) {
-        return ((voidfunc *)mod->pam_sm_authenticate);
-    } else if (! strcmp(symname, "pam_sm_setcred")) {
-        return ((voidfunc *)mod->pam_sm_setcred);
-    } else if (! strcmp(symname, "pam_sm_acct_mgmt")) {
-        return ((voidfunc *)mod->pam_sm_acct_mgmt);
-    } else if (! strcmp(symname, "pam_sm_open_session")) {
-        return ((voidfunc *)mod->pam_sm_open_session);
-    } else if (! strcmp(symname, "pam_sm_close_session")) {
-        return ((voidfunc *)mod->pam_sm_close_session);
-    } else if (! strcmp(symname, "pam_sm_chauthtok")) {
-        return ((voidfunc *)mod->pam_sm_chauthtok);
-    }
-    /* getting to this point is an error */
-    return ((voidfunc *)NULL);
-}
-
-#else /* ! PAM_STATIC */
-
-typedef int blarg;
-
-#endif /* ! PAM_STATIC */
-
-/*
- * Copyright (C) 1995 by Red Hat Software, Michael K. Johnson
- * All rights reserved
- *
- * 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.
- */
diff --git a/libpam/pam_static_modules.h b/libpam/pam_static_modules.h
deleted file mode 100644
index 698989b..0000000
--- a/libpam/pam_static_modules.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * 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_faildelay_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;
-#ifdef HAVE_KEY_MANAGEMENT
-extern struct pam_module _pam_keyinit_modstruct;
-#endif
-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_loginuid_modstruct;
-extern struct pam_module _pam_mail_modstruct;
-extern struct pam_module _pam_mkhomedir_modstruct;
-extern struct pam_module _pam_motd_modstruct;
-#ifdef HAVE_UNSHARE
-extern struct pam_module _pam_namespace_modstruct;
-#endif
-extern struct pam_module _pam_nologin_modstruct;
-extern struct pam_module _pam_permit_modstruct;
-extern struct pam_module _pam_pwhistory_modstruct;
-extern struct pam_module _pam_rhosts_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;
-extern struct pam_module _pam_sepermit_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_tally2_modstruct;
-extern struct pam_module _pam_time_modstruct;
-extern struct pam_module _pam_timestamp_modstruct;
-#ifdef HAVE_AUDIT_TTY_STATUS
-extern struct pam_module _pam_tty_audit_modstruct;
-#endif
-extern struct pam_module _pam_umask_modstruct;
-extern struct pam_module _pam_unix_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,
-#ifdef HAVE_LIBCRACK
-  &_pam_cracklib_modstruct,
-#endif
-  &_pam_debug_modstruct,
-  &_pam_deny_modstruct,
-  &_pam_echo_modstruct,
-  &_pam_env_modstruct,
-  &_pam_exec_modstruct,
-  &_pam_faildelay_modstruct,
-  &_pam_filter_modstruct,
-  &_pam_ftp_modstruct,
-  &_pam_group_modstruct,
-  &_pam_issue_modstruct,
-#ifdef HAVE_KEY_MANAGEMENT
-  &_pam_keyinit_modstruct,
-#endif
-  &_pam_lastlog_modstruct,
-  &_pam_limits_modstruct,
-  &_pam_listfile_modstruct,
-  &_pam_localuser_modstruct,
-  &_pam_loginuid_modstruct,
-  &_pam_mail_modstruct,
-  &_pam_mkhomedir_modstruct,
-  &_pam_motd_modstruct,
-#ifdef HAVE_UNSHARE
-  &_pam_namespace_modstruct,
-#endif
-  &_pam_nologin_modstruct,
-  &_pam_permit_modstruct,
-  &_pam_pwhistory_modstruct,
-  &_pam_rhosts_modstruct,
-  &_pam_rootok_modstruct,
-  &_pam_securetty_modstruct,
-#ifdef WITH_SELINUX
-  &_pam_selinux_modstruct,
-  &_pam_sepermit_modstruct,
-#endif
-  &_pam_shells_modstruct,
-  &_pam_stress_modstruct,
-  &_pam_succeed_if_modstruct,
-  &_pam_tally_modstruct,
-  &_pam_tally2_modstruct,
-  &_pam_time_modstruct,
-  &_pam_timestamp_modstruct,
-#ifdef HAVE_AUDIT_TTY_STATUS
-  &_pam_tty_audit_modstruct,
-#endif
-  &_pam_umask_modstruct,
-  &_pam_unix_modstruct,
-  &_pam_userdb_modstruct,
-  &_pam_warn_modstruct,
-  &_pam_wheel_modstruct,
-  &_pam_xauth_modstruct,
-  NULL
-};
diff --git a/modules/pam_unix/Makefile.am b/modules/pam_unix/Makefile.am
index 56ed591..ab0d55a 100644
--- a/modules/pam_unix/Makefile.am
+++ b/modules/pam_unix/Makefile.am
@@ -34,8 +34,7 @@ pam_unix_la_LIBADD = $(top_builddir)/libpam/libpam.la \
 
 securelib_LTLIBRARIES = pam_unix.la
 
-noinst_HEADERS = md5.h support.h yppasswd.h bigcrypt.h passverify.h \
-		 pam_unix_static.h
+noinst_HEADERS = md5.h support.h yppasswd.h bigcrypt.h passverify.h
 
 sbin_PROGRAMS = unix_chkpwd unix_update
 
@@ -44,9 +43,6 @@ noinst_PROGRAMS = bigcrypt
 pam_unix_la_SOURCES = bigcrypt.c pam_unix_acct.c \
 	pam_unix_auth.c pam_unix_passwd.c pam_unix_sess.c support.c \
 	passverify.c yppasswd_xdr.c md5_good.c md5_broken.c
-if STATIC_MODULES
-pam_unix_la_SOURCES += pam_unix_static.c
-endif
 
 bigcrypt_SOURCES = bigcrypt.c bigcrypt_main.c
 bigcrypt_CFLAGS = $(AM_CFLAGS)
diff --git a/modules/pam_unix/pam_unix_static.c b/modules/pam_unix/pam_unix_static.c
deleted file mode 100644
index 160268c..0000000
--- a/modules/pam_unix/pam_unix_static.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "config.h"
-
-#ifdef PAM_STATIC
-
-#define static extern
-#define PAM_SM_ACCOUNT
-#define PAM_SM_AUTH
-#define PAM_SM_PASSWORD
-#define PAM_SM_SESSION
-#include "pam_unix_static.h"
-#include <security/pam_modules.h>
-
-struct pam_module _pam_unix_modstruct = {
-	"pam_unix",
-	pam_sm_authenticate,
-	pam_sm_setcred,
-	pam_sm_acct_mgmt,
-	pam_sm_open_session,
-	pam_sm_close_session,
-	pam_sm_chauthtok,
-};
-
-#endif
diff --git a/modules/pam_unix/pam_unix_static.h b/modules/pam_unix/pam_unix_static.h
deleted file mode 100644
index 39b05ef..0000000
--- a/modules/pam_unix/pam_unix_static.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#define pam_sm_acct_mgmt _pam_unix_sm_acct_mgmt
-#define pam_sm_authenticate _pam_unix_sm_authenticate
-#define pam_sm_setcred _pam_unix_sm_setcred
-#define pam_sm_chauthtok _pam_unix_sm_chauthtok
-#define pam_sm_open_session _pam_unix_sm_open_session
-#define pam_sm_close_session _pam_unix_sm_close_session
diff --git a/tests/tst-dlopen.c b/tests/tst-dlopen.c
index 3000055..7092716 100644
--- a/tests/tst-dlopen.c
+++ b/tests/tst-dlopen.c
@@ -19,9 +19,6 @@
 /* Simple program to see if dlopen() would succeed. */
 int main(int argc, char **argv)
 {
-#ifdef PAM_STATIC
-  return 77;
-#else
   int i;
   struct stat st;
   char buf[PATH_MAX];
@@ -43,5 +40,4 @@ int main(int argc, char **argv)
     }
   }
   return 0;
-#endif
 }
-- 
1.8.5.6

