aboutsummaryrefslogtreecommitdiff
path: root/pam_umotd/pam_umotd.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-08-15 22:22:31 +0300
committerSergey Poznyakoff <gray@gnu.org>2018-08-15 22:22:31 +0300
commit7a40b7873bd666809183cdd952d6e2a8f1870981 (patch)
tree0ae71532dc78f597b717152b564d6681d1ad832a /pam_umotd/pam_umotd.c
parent988b8e27f5df26d7e9f6fd7984677873ca1c40cb (diff)
downloadpam-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.c49
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

Return to:

Send suggestions and report system problems to the System administrator.