aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvorlon <Unknown>2007-08-25 11:54:06 +0000
committervorlon <Unknown>2007-08-25 11:54:06 +0000
commit989fb041d612a49aebc2bc21bf311def0cfc139e (patch)
tree48fbb51dab8446ac07a34ad30c1c96c780cb3f1e
parent4d76cdc378e5677787b42a42756a50d9ca7161a8 (diff)
downloadpam-989fb041d612a49aebc2bc21bf311def0cfc139e.tar.gz
pam-989fb041d612a49aebc2bc21bf311def0cfc139e.tar.bz2
pam-989fb041d612a49aebc2bc21bf311def0cfc139e.zip
Separate patch to remove pthreads references from libpam; we don't really
need any mutexes here, and trying to use them causes linking problems.
-rw-r--r--changelog6
-rw-r--r--patches-applied/015_hurd_portability13
-rw-r--r--patches-applied/autoconf.patch12
-rw-r--r--patches-applied/no_pthread_mutexes205
-rw-r--r--patches-applied/series1
5 files changed, 210 insertions, 27 deletions
diff --git a/changelog b/changelog
index 5fb9d485..25301322 100644
--- a/changelog
+++ b/changelog
@@ -146,8 +146,10 @@ pam (0.99.7.1-2) UNRELEASED; urgency=low
Laurent Bigonville for the hint. Closes: #439038.
* Add a watch file for use with uscan; thanks to Laurent Bigonville for
this patch as well. Closes: #439040.
- * Update 015_hurd_portability to include -pthread in
- libpam_la_LDFLAGS, required for portability to non-Linux platforms.
+ * New patch no_pthread_mutexes: don't use pthread mutexes in
+ pam_modutil functions, they're not needed because pam handles
+ themselves should not be used concurrently by multiple threads and
+ using pthreads causes problems for portable linking.
* New patch hurd_no_setfsuid: if we don't have sys/fsuid.h, work around
using setreuid instead.
diff --git a/patches-applied/015_hurd_portability b/patches-applied/015_hurd_portability
index f39ae126..1abf9e9e 100644
--- a/patches-applied/015_hurd_portability
+++ b/patches-applied/015_hurd_portability
@@ -59,16 +59,3 @@ Index: Linux-PAM/modules/pam_limits/pam_limits.c
if (rlimit_value != RLIM_INFINITY)
rlimit_value *= 1024;
break;
-Index: Linux-PAM/libpam/Makefile.am
-===================================================================
---- Linux-PAM/libpam/Makefile.am.orig
-+++ Linux-PAM/libpam/Makefile.am
-@@ -20,7 +20,7 @@
- noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \
- pam_modutil_private.h pam_static_modules.h
-
--libpam_la_LDFLAGS = -no-undefined -version-info 81:6:81 \
-+libpam_la_LDFLAGS = -pthread -no-undefined -version-info 81:6:81 \
- @LIBAUDIT@ $(LIBPRELUDE_LIBS) @LIBDL@
- if STATIC_MODULES
- libpam_la_LDFLAGS += `ls ../modules/pam_*/*.lo` \
diff --git a/patches-applied/autoconf.patch b/patches-applied/autoconf.patch
index 615edc76..e18a43ce 100644
--- a/patches-applied/autoconf.patch
+++ b/patches-applied/autoconf.patch
@@ -4382,18 +4382,6 @@ Index: pam/Linux-PAM/libpam/Makefile.in
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
-@@ -272,8 +274,9 @@
- noinst_HEADERS = pam_prelude.h pam_private.h pam_tokens.h \
- pam_modutil_private.h pam_static_modules.h
-
--libpam_la_LDFLAGS = -no-undefined -version-info 81:6:81 @LIBAUDIT@ \
-- $(LIBPRELUDE_LIBS) @LIBDL@ $(am__append_2) $(am__append_3)
-+libpam_la_LDFLAGS = -pthread -no-undefined -version-info 81:6:81 \
-+ @LIBAUDIT@ $(LIBPRELUDE_LIBS) @LIBDL@ $(am__append_2) \
-+ $(am__append_3)
- lib_LTLIBRARIES = libpam.la
- 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_handlers.c pam_item.c \
Index: pam/Linux-PAM/libpam_misc/Makefile.in
===================================================================
--- pam.orig/Linux-PAM/libpam_misc/Makefile.in
diff --git a/patches-applied/no_pthread_mutexes b/patches-applied/no_pthread_mutexes
new file mode 100644
index 00000000..692fd792
--- /dev/null
+++ b/patches-applied/no_pthread_mutexes
@@ -0,0 +1,205 @@
+Don't use pthread mutexes in libpam unnecessarily; this avoids linking
+problems on non-Linux platforms.
+
+Authors: Steve Langasek <vorlon@debian.org>
+
+Upstream status: submitted in <20070825115252.GD23503@dario.dodds.net>
+
+Index: pam/Linux-PAM/libpam/pam_modutil_getgrgid.c
+===================================================================
+--- pam.orig/Linux-PAM/libpam/pam_modutil_getgrgid.c
++++ pam/Linux-PAM/libpam/pam_modutil_getgrgid.c
+@@ -12,20 +12,9 @@
+ #include <errno.h>
+ #include <limits.h>
+ #include <grp.h>
+-#include <pthread.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+
+-static pthread_mutex_t _pammodutil_mutex = PTHREAD_MUTEX_INITIALIZER;
+-static void _pammodutil_lock(void)
+-{
+- pthread_mutex_lock(&_pammodutil_mutex);
+-}
+-static void _pammodutil_unlock(void)
+-{
+- pthread_mutex_unlock(&_pammodutil_mutex);
+-}
+-
+ static int intlen(int number)
+ {
+ int len = 2;
+@@ -95,13 +84,11 @@
+ for (i = 0; i < INT_MAX; i++) {
+ sprintf(data_name, "_pammodutil_getgrgid_%ld_%d",
+ (long) gid, i);
+- _pammodutil_lock();
+ status = PAM_NO_MODULE_DATA;
+ if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
+ status = pam_set_data(pamh, data_name,
+ result, pam_modutil_cleanup);
+ }
+- _pammodutil_unlock();
+ if (status == PAM_SUCCESS) {
+ break;
+ }
+Index: pam/Linux-PAM/libpam/pam_modutil_getgrnam.c
+===================================================================
+--- pam.orig/Linux-PAM/libpam/pam_modutil_getgrnam.c
++++ pam/Linux-PAM/libpam/pam_modutil_getgrnam.c
+@@ -12,20 +12,9 @@
+ #include <errno.h>
+ #include <limits.h>
+ #include <grp.h>
+-#include <pthread.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+
+-static pthread_mutex_t _pammodutil_mutex = PTHREAD_MUTEX_INITIALIZER;
+-static void _pammodutil_lock(void)
+-{
+- pthread_mutex_lock(&_pammodutil_mutex);
+-}
+-static void _pammodutil_unlock(void)
+-{
+- pthread_mutex_unlock(&_pammodutil_mutex);
+-}
+-
+ static int intlen(int number)
+ {
+ int len = 2;
+@@ -84,13 +73,11 @@
+ if (pamh != NULL) {
+ for (i = 0; i < INT_MAX; i++) {
+ sprintf(data_name, "_pammodutil_getgrnam_%s_%d", group, i);
+- _pammodutil_lock();
+ status = PAM_NO_MODULE_DATA;
+ if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
+ status = pam_set_data(pamh, data_name,
+ result, pam_modutil_cleanup);
+ }
+- _pammodutil_unlock();
+ if (status == PAM_SUCCESS) {
+ break;
+ }
+Index: pam/Linux-PAM/libpam/pam_modutil_getpwnam.c
+===================================================================
+--- pam.orig/Linux-PAM/libpam/pam_modutil_getpwnam.c
++++ pam/Linux-PAM/libpam/pam_modutil_getpwnam.c
+@@ -11,21 +11,10 @@
+
+ #include <errno.h>
+ #include <limits.h>
+-#include <pthread.h>
+ #include <pwd.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+
+-static pthread_mutex_t _pammodutil_mutex = PTHREAD_MUTEX_INITIALIZER;
+-static void _pammodutil_lock(void)
+-{
+- pthread_mutex_lock(&_pammodutil_mutex);
+-}
+-static void _pammodutil_unlock(void)
+-{
+- pthread_mutex_unlock(&_pammodutil_mutex);
+-}
+-
+ static int intlen(int number)
+ {
+ int len = 2;
+@@ -84,13 +73,11 @@
+ if (pamh != NULL) {
+ for (i = 0; i < INT_MAX; i++) {
+ sprintf(data_name, "_pammodutil_getpwnam_%s_%d", user, i);
+- _pammodutil_lock();
+ status = PAM_NO_MODULE_DATA;
+ if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
+ status = pam_set_data(pamh, data_name,
+ result, pam_modutil_cleanup);
+ }
+- _pammodutil_unlock();
+ if (status == PAM_SUCCESS) {
+ break;
+ }
+Index: pam/Linux-PAM/libpam/pam_modutil_getpwuid.c
+===================================================================
+--- pam.orig/Linux-PAM/libpam/pam_modutil_getpwuid.c
++++ pam/Linux-PAM/libpam/pam_modutil_getpwuid.c
+@@ -11,21 +11,10 @@
+
+ #include <errno.h>
+ #include <limits.h>
+-#include <pthread.h>
+ #include <pwd.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+
+-static pthread_mutex_t _pammodutil_mutex = PTHREAD_MUTEX_INITIALIZER;
+-static void _pammodutil_lock(void)
+-{
+- pthread_mutex_lock(&_pammodutil_mutex);
+-}
+-static void _pammodutil_unlock(void)
+-{
+- pthread_mutex_unlock(&_pammodutil_mutex);
+-}
+-
+ static int intlen(int number)
+ {
+ int len = 2;
+@@ -95,13 +84,11 @@
+ for (i = 0; i < INT_MAX; i++) {
+ sprintf(data_name, "_pammodutil_getpwuid_%ld_%d",
+ (long) uid, i);
+- _pammodutil_lock();
+ status = PAM_NO_MODULE_DATA;
+ if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
+ status = pam_set_data(pamh, data_name,
+ result, pam_modutil_cleanup);
+ }
+- _pammodutil_unlock();
+ if (status == PAM_SUCCESS) {
+ break;
+ }
+Index: pam/Linux-PAM/libpam/pam_modutil_getspnam.c
+===================================================================
+--- pam.orig/Linux-PAM/libpam/pam_modutil_getspnam.c
++++ pam/Linux-PAM/libpam/pam_modutil_getspnam.c
+@@ -11,21 +11,10 @@
+
+ #include <errno.h>
+ #include <limits.h>
+-#include <pthread.h>
+ #include <shadow.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+
+-static pthread_mutex_t _pammodutil_mutex = PTHREAD_MUTEX_INITIALIZER;
+-static void _pammodutil_lock(void)
+-{
+- pthread_mutex_lock(&_pammodutil_mutex);
+-}
+-static void _pammodutil_unlock(void)
+-{
+- pthread_mutex_unlock(&_pammodutil_mutex);
+-}
+-
+ static int intlen(int number)
+ {
+ int len = 2;
+@@ -84,13 +73,11 @@
+ if (pamh != NULL) {
+ for (i = 0; i < INT_MAX; i++) {
+ sprintf(data_name, "_pammodutil_getspnam_%s_%d", user, i);
+- _pammodutil_lock();
+ status = PAM_NO_MODULE_DATA;
+ if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
+ status = pam_set_data(pamh, data_name,
+ result, pam_modutil_cleanup);
+ }
+- _pammodutil_unlock();
+ if (status == PAM_SUCCESS) {
+ break;
+ }
diff --git a/patches-applied/series b/patches-applied/series
index 73fcfd4d..a8bd5798 100644
--- a/patches-applied/series
+++ b/patches-applied/series
@@ -29,4 +29,5 @@ hurd_no_setfsuid -p0
064_pam_unix_cracklib_dictpath
065_pam_unix_cracklib_disable
PAM-manpage-section
+no_pthread_mutexes
autoconf.patch