diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-08-15 22:22:31 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-08-15 22:22:31 +0300 |
commit | 7a40b7873bd666809183cdd952d6e2a8f1870981 (patch) | |
tree | 0ae71532dc78f597b717152b564d6681d1ad832a /pam_umotd/pam_umotd.c | |
parent | 988b8e27f5df26d7e9f6fd7984677873ca1c40cb (diff) | |
download | pam-modules-7a40b7873bd666809183cdd952d6e2a8f1870981.tar.gz pam-modules-7a40b7873bd666809183cdd952d6e2a8f1870981.tar.bz2 |
Major cleanup
* lib/graypam.h (gray_pam_init)
(gray_raise,gray_malloc,gray_zalloc,gray_calloc)
(gray_realloc,gray_strdup): Remove.
(gray_slist_err,gray_slist_clrerr): New functions.
(gray_slist_append,gray_slist_append_char): Return ssize_t.
(gray_slist_coalesce): Likewise.
(gray_slist_grow_backslash_num)
(gray_slist_grow_backslash): Return int.
(errno_to_pam): New function.
(gray_set_transform_expr): Return int.
* lib/mem.c (gray_raise,gray_malloc,gray_zalloc,gray_calloc)
(gray_realloc,gray_strdup): Remove.
(gray_2nrealloc): Rewrite.
* lib/base64.c: Check return from gray_slist_append_char
* lib/env.c: Check return values from gray_slist functions
* lib/ldappass.c: Likewise.
* lib/slist.c (gray_slist_bucket) <ec>: New member.
(gray_slist_err,gray_slist_clrerr): New functions.
(gray_slist_append,gray_slist_append_char): Return ssize_t.
(gray_slist_coalesce): Likewise.
(gray_slist_grow_backslash_num)
(gray_slist_grow_backslash): Return int.
* lib/transform.c: Use standard memory allocation functions.
* pam_ldaphome/pam_ldaphome.c: Likewise.
* pam_innetgr/pam_innetgr.c: Likewise.
* pam_log/pam_log.c: Likewise.
* pam_regex/pam_regex.c: Likewise.
* pam_sql/pam_mysql.c: Likewise.
* pam_sql/pam_pgsql.c: Likewise.
Diffstat (limited to 'pam_umotd/pam_umotd.c')
-rw-r--r-- | pam_umotd/pam_umotd.c | 49 |
1 files changed, 34 insertions, 15 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,11 +342,17 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) slist = gray_slist_create(); - gray_expand_string(pamh, motd_file_name, slist); - gray_slist_append_char(slist, 0); - file = gray_slist_finish(slist); - retval = read_file(pamh, file); + if (!slist) + retval = errno_to_pam(errno); + else { + gray_expand_string(pamh, motd_file_name, slist); + gray_slist_append_char(slist, 0); + 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; - + argc -= optindex; @@ -357,13 +363,26 @@ 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(); - for (i = 0; i < argc; i++) { - gray_expand_string(pamh, argv[i], slist); - gray_slist_append_char(slist, 0); - xargv[i] = gray_slist_finish(slist); + if (!slist) + retval = errno_to_pam(errno); + else { + int i; + int ec; + + for (i = 0; i < argc; i++) { + gray_expand_string(pamh, argv[i], slist); + gray_slist_append_char(slist, 0); + xargv[i] = gray_slist_finish(slist); + } + xargv[i] = NULL; + ec = gray_slist_err(slist); + if (ec) + retval = errno_to_pam(ec); + else + retval = exec_file(pamh, xargv, logfile_name); + free(xargv); + gray_slist_free(&slist); } - xargv[i] = NULL; - retval = exec_file(pamh, xargv, logfile_name); - free(xargv); - gray_slist_free(&slist); } else |