aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2012-07-04 18:28:28 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2012-07-04 19:06:13 +0300
commit3da6891d134048d9885b00776a36b1e6153d6a14 (patch)
tree410105d22865e6c2b20b7754fb1c0bb7be88c685
parent3ef9904a2217d88ca48e24923c43d2ef17753274 (diff)
downloadpam-modules-3da6891d134048d9885b00776a36b1e6153d6a14.tar.gz
pam-modules-3da6891d134048d9885b00776a36b1e6153d6a14.tar.bz2
Bugfixes.
* acinclude.m4 (PM_ENABLE): Don't test $build_$1 variable before its initialization. * pam_umotd/pam_umotd.c: Remove unnecessary includes. (exec_file): Argv is not const. (pam_sm_open_session): PAM does not guarantee that argv[] is null-terminated. Create a null-terminated copy for use by exec_file.
-rw-r--r--acinclude.m44
-rw-r--r--pam_umotd/pam_umotd.c15
2 files changed, 9 insertions, 10 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index 1ec43dd..5fcbf99 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -16,9 +16,7 @@
AC_DEFUN([PM_ENABLE],[
AC_ARG_ENABLE($1,
AC_HELP_STRING([--disable-$1], [Disable pam_$1]),
- [if test $build_$1 = probe; then
- build_$1=$enableval
- fi],
+ [build_$1=$enableval],
[build_$1=probe])
m4_pushdef([upmodname],translit($1, [a-z.-], [A-Z__]))
if test $build_$1 != no; then
diff --git a/pam_umotd/pam_umotd.c b/pam_umotd/pam_umotd.c
index 639c4d1..2fcd2dc 100644
--- a/pam_umotd/pam_umotd.c
+++ b/pam_umotd/pam_umotd.c
@@ -33,9 +33,6 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include <ldap.h>
-#include <pwd.h>
-#include <grp.h>
#include <signal.h>
#include <time.h>
@@ -126,7 +123,7 @@ read_file(pam_handle_t *pamh, const char *file)
}
static int
-exec_file(pam_handle_t *pamh, const char **argv, const char *logfile)
+exec_file(pam_handle_t *pamh, char **argv, const char *logfile)
{
pid_t pid, rc;
int p[2];
@@ -172,7 +169,7 @@ exec_file(pam_handle_t *pamh, const char **argv, const char *logfile)
} else
dup2(1, 2);
- execv(argv[0], (char**)argv);
+ execv(argv[0], argv);
_exit(127);
}
@@ -300,6 +297,7 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
gray_slist_free(&slist);
} else if (optindex >= 0) {
int i;
+ char **xargv;
argc -= optindex;
argv += optindex;
@@ -307,13 +305,16 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
_pam_log(LOG_INFO, "empty command line");
return retval;
}
+ xargv = gray_malloc((argc + 1) * sizeof (xargv[0]));
slist = gray_slist_create();
for (i = 0; i < argc; i++) {
gray_expand_string(pamh, argv[i], slist);
gray_slist_append_char(slist, 0);
- argv[i] = gray_slist_finish(slist);
+ xargv[i] = gray_slist_finish(slist);
}
- retval = exec_file(pamh, argv, logfile_name);
+ xargv[i] = NULL;
+ retval = exec_file(pamh, xargv, logfile_name);
+ free(xargv);
gray_slist_free(&slist);
} else
_pam_log(LOG_ERR,

Return to:

Send suggestions and report system problems to the System administrator.