aboutsummaryrefslogtreecommitdiff
path: root/libpam/pam_start.c
diff options
context:
space:
mode:
authorSam Hartman <hartmans@debian.org>2024-12-02 09:55:34 -0700
committerSam Hartman <hartmans@debian.org>2024-12-02 09:55:34 -0700
commit4f3cfaf827bfa42a239c255092a128a3a02198bf (patch)
treeeac7f023f043739b79b2a51bd68c3006acb12964 /libpam/pam_start.c
parent6408d4b1baff9a7e58fd66e1d1c0871be0823777 (diff)
parent7c9fb6472dcfae34ddbf4fbc9ecfafae2cf173c3 (diff)
downloadpam-4f3cfaf827bfa42a239c255092a128a3a02198bf.tar.gz
pam-4f3cfaf827bfa42a239c255092a128a3a02198bf.tar.bz2
pam-4f3cfaf827bfa42a239c255092a128a3a02198bf.zip
Update upstream source from tag 'upstream/1.7.0'
Update to upstream version '1.7.0' with Debian dir 0b3cd490884352e14273caeca2f05c6a525499fa
Diffstat (limited to 'libpam/pam_start.c')
-rw-r--r--libpam/pam_start.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/libpam/pam_start.c b/libpam/pam_start.c
index 99dd0389..97bc35b1 100644
--- a/libpam/pam_start.c
+++ b/libpam/pam_start.c
@@ -8,6 +8,7 @@
*/
#include "pam_private.h"
+#include "pam_i18n.h"
#include <ctype.h>
#include <stdlib.h>
@@ -25,6 +26,21 @@ static int _pam_start_internal (
D(("called pam_start: [%s] [%s] [%p] [%p]"
,service_name, user, pam_conversation, pamh));
+#if defined HAVE_BINDTEXTDOMAIN && defined ENABLE_NLS
+ /* Bind text domain to pull in PAM translations for a case where
+ linux-pam is installed to non-default prefix.
+
+ It is safe to call bindtextdomain() from multiple threads, but it
+ has a chance to have some overhead. Let's try to do it once (or a
+ small number of times as `bound_text_domain` is not protected by
+ a lock. */
+ static int bound_text_domain = 0;
+ if (!bound_text_domain) {
+ bound_text_domain = 1;
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ }
+#endif
+
if (pamh == NULL) {
pam_syslog(NULL, LOG_CRIT,
"pam_start: invalid argument: pamh == NULL");
@@ -67,7 +83,7 @@ static int _pam_start_internal (
char *tmp;
for (tmp=(*pamh)->service_name; *tmp; ++tmp)
- *tmp = tolower(*tmp); /* require lower case */
+ *tmp = tolower((unsigned char)*tmp); /* require lower case */
}
if (user) {
@@ -143,6 +159,7 @@ static int _pam_start_internal (
if ( _pam_init_handlers(*pamh) != PAM_SUCCESS ) {
pam_syslog(*pamh, LOG_ERR, "pam_start: failed to initialize handlers");
+ _pam_free_handlers(*pamh);
_pam_drop_env(*pamh); /* purge the environment */
_pam_drop((*pamh)->pam_conversation);
_pam_drop((*pamh)->service_name);
@@ -152,7 +169,7 @@ static int _pam_start_internal (
return PAM_ABORT;
}
- D(("exiting pam_start successfully"));
+ D(("exiting successfully"));
return PAM_SUCCESS;
}