aboutsummaryrefslogtreecommitdiff
path: root/pam_umotd
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 /pam_umotd
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.
Diffstat (limited to 'pam_umotd')
-rw-r--r--pam_umotd/pam_umotd.c15
1 files changed, 8 insertions, 7 deletions
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.