diff options
author | Tomas Mraz <tm@t8m.info> | 2011-03-18 23:15:54 +0000 |
---|---|---|
committer | Tomas Mraz <tm@t8m.info> | 2011-03-18 23:15:54 +0000 |
commit | f052833acfa231b68d024fef7637883d81400e42 (patch) | |
tree | 6934623919088182297c1f8ee52e03cbe6ba9962 /modules/pam_namespace/argv_parse.c | |
parent | 24557b231f549dc6511d62f5ad35d15d95e1f44f (diff) | |
download | pam-f052833acfa231b68d024fef7637883d81400e42.tar.gz pam-f052833acfa231b68d024fef7637883d81400e42.tar.bz2 pam-f052833acfa231b68d024fef7637883d81400e42.zip |
Relevant BUGIDs:
Purpose of commit: bugfix
Commit summary:
---------------
2011-03-18 Tomas Mraz <tm@t8m.info>
* modules/pam_namespace/md5.c (MD5Final): Clear the whole ctx.
* modules/pam_namespace/pam_namespace.c (del_polydir): Guard for NULL poly.
(protect_dir): Guard for -1 passing to close().
(ns_setup): Likewise.
(pam_sm_open_session): Correctly test for SELinux enabled flag.
Diffstat (limited to 'modules/pam_namespace/argv_parse.c')
-rw-r--r-- | modules/pam_namespace/argv_parse.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/modules/pam_namespace/argv_parse.c b/modules/pam_namespace/argv_parse.c index acc76d74..40510542 100644 --- a/modules/pam_namespace/argv_parse.c +++ b/modules/pam_namespace/argv_parse.c @@ -44,15 +44,15 @@ int argv_parse(const char *in_buf, int *ret_argc, char ***ret_argv) { int argc = 0, max_argc = 0; char **argv, **new_argv, *buf, ch; - const char *cp = 0; - char *outcp = 0; + const char *cp = NULL; + char *outcp = NULL; int state = STATE_WHITESPACE; buf = malloc(strlen(in_buf)+1); if (!buf) return -1; - max_argc = 0; argc = 0; argv = 0; + argv = NULL; outcp = buf; for (cp = in_buf; (ch = *cp); cp++) { if (state == STATE_WHITESPACE) { @@ -111,23 +111,30 @@ int argv_parse(const char *in_buf, int *ret_argc, char ***ret_argv) } if (state != STATE_WHITESPACE) *outcp++ = '\0'; - if (argv == 0) { - argv = malloc(sizeof(char *)); + if (ret_argv) { + if (argv == NULL) { + free(buf); + if ((argv=malloc(sizeof(char *))) == NULL) + return -1; + } + argv[argc] = NULL; + *ret_argv = argv; + } else { free(buf); + free(argv); } - argv[argc] = 0; if (ret_argc) *ret_argc = argc; - if (ret_argv) - *ret_argv = argv; return 0; } void argv_free(char **argv) { - if (*argv) - free(*argv); - free(argv); + if (argv) { + if (*argv) + free(*argv); + free(argv); + } } #ifdef DEBUG_ARGV_PARSE |