aboutsummaryrefslogtreecommitdiff
path: root/pam_umotd/pam_umotd.c
diff options
context:
space:
mode:
Diffstat (limited to 'pam_umotd/pam_umotd.c')
-rw-r--r--pam_umotd/pam_umotd.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/pam_umotd/pam_umotd.c b/pam_umotd/pam_umotd.c
index 2fea67c..008e87b 100644
--- a/pam_umotd/pam_umotd.c
+++ b/pam_umotd/pam_umotd.c
@@ -342,2 +342,5 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
slist = gray_slist_create();
+ if (!slist)
+ retval = errno_to_pam(errno);
+ else {
gray_expand_string(pamh, motd_file_name, slist);
@@ -345,6 +348,9 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
file = gray_slist_finish(slist);
+ if (file)
retval = read_file(pamh, file);
+ else
+ retval = errno_to_pam(errno);
+ }
gray_slist_free(&slist);
} else if (optindex >= 0) {
- int i;
char **xargv;
@@ -357,4 +363,12 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
}
- xargv = gray_malloc((argc + 1) * sizeof (xargv[0]));
+ xargv = calloc((argc + 1), sizeof (xargv[0]));
+ if (!xargv)
+ return errno_to_pam(errno);
slist = gray_slist_create();
+ if (!slist)
+ retval = errno_to_pam(errno);
+ else {
+ int i;
+ int ec;
+
for (i = 0; i < argc; i++) {
@@ -365,2 +379,6 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
xargv[i] = NULL;
+ ec = gray_slist_err(slist);
+ if (ec)
+ retval = errno_to_pam(ec);
+ else
retval = exec_file(pamh, xargv, logfile_name);
@@ -368,2 +386,3 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
gray_slist_free(&slist);
+ }
} else

Return to:

Send suggestions and report system problems to the System administrator.