diff options
Diffstat (limited to 'pam_umotd/pam_umotd.c')
-rw-r--r-- | pam_umotd/pam_umotd.c | 23 |
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 |