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
@@ -340,13 +340,19 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
340 char *file; 340 char *file;
341 341
342 slist = gray_slist_create(); 342 slist = gray_slist_create();
343 if (!slist)
344 retval = errno_to_pam(errno);
345 else {
343 gray_expand_string(pamh, motd_file_name, slist); 346 gray_expand_string(pamh, motd_file_name, slist);
344 gray_slist_append_char(slist, 0); 347 gray_slist_append_char(slist, 0);
345 file = gray_slist_finish(slist); 348 file = gray_slist_finish(slist);
349 if (file)
346 retval = read_file(pamh, file); 350 retval = read_file(pamh, file);
351 else
352 retval = errno_to_pam(errno);
353 }
347 gray_slist_free(&slist); 354 gray_slist_free(&slist);
348 } else if (optindex >= 0) { 355 } else if (optindex >= 0) {
349 int i;
350 char **xargv; 356 char **xargv;
351 357
352 argc -= optindex; 358 argc -= optindex;
@@ -355,17 +361,30 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv)
355 _pam_log(LOG_INFO, "empty command line"); 361 _pam_log(LOG_INFO, "empty command line");
356 return retval; 362 return retval;
357 } 363 }
358 xargv = gray_malloc((argc + 1) * sizeof (xargv[0])); 364 xargv = calloc((argc + 1), sizeof (xargv[0]));
365 if (!xargv)
366 return errno_to_pam(errno);
359 slist = gray_slist_create(); 367 slist = gray_slist_create();
368 if (!slist)
369 retval = errno_to_pam(errno);
370 else {
371 int i;
372 int ec;
373
360 for (i = 0; i < argc; i++) { 374 for (i = 0; i < argc; i++) {
361 gray_expand_string(pamh, argv[i], slist); 375 gray_expand_string(pamh, argv[i], slist);
362 gray_slist_append_char(slist, 0); 376 gray_slist_append_char(slist, 0);
363 xargv[i] = gray_slist_finish(slist); 377 xargv[i] = gray_slist_finish(slist);
364 } 378 }
365 xargv[i] = NULL; 379 xargv[i] = NULL;
380 ec = gray_slist_err(slist);
381 if (ec)
382 retval = errno_to_pam(ec);
383 else
366 retval = exec_file(pamh, xargv, logfile_name); 384 retval = exec_file(pamh, xargv, logfile_name);
367 free(xargv); 385 free(xargv);
368 gray_slist_free(&slist); 386 gray_slist_free(&slist);
387 }
369 } else 388 } else
370 _pam_log(LOG_ERR, 389 _pam_log(LOG_ERR,
371 "invalid usage: either file or exec must be specified"); 390 "invalid usage: either file or exec must be specified");

Return to:

Send suggestions and report system problems to the System administrator.