summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2011-08-08 10:57:16 +0200
committerStephen Gallagher <sgallagh@redhat.com>2011-08-08 10:24:40 -0400
commit174dd7cfef0dfb2a8aee6be54045d40bcac2294c (patch)
treed1015996d7d318529d6a527e68806ac27e0a0cb6 /src
parentae4dc7846e60f2fb14a04d797369360182cf0a69 (diff)
downloadsssd-174dd7cfef0dfb2a8aee6be54045d40bcac2294c.tar.gz
sssd-174dd7cfef0dfb2a8aee6be54045d40bcac2294c.tar.xz
sssd-174dd7cfef0dfb2a8aee6be54045d40bcac2294c.zip
Prevent segfault if vetoed_shells are specified without allowed_shells
https://fedorahosted.org/sssd/ticket/954
Diffstat (limited to 'src')
-rw-r--r--src/responder/nss/nsssrv_cmd.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index 415e7a31a..2aa7a9126 100644
--- a/src/responder/nss/nsssrv_cmd.c
+++ b/src/responder/nss/nsssrv_cmd.c
@@ -316,8 +316,7 @@ static const char *get_shell_override(TALLOC_CTX *mem_ctx,
if (!user_shell) return NULL;
if (!nctx->allowed_shells && !nctx->vetoed_shells) return talloc_strdup(mem_ctx, user_shell);
- if (nctx->vetoed_shells)
- {
+ if (nctx->vetoed_shells) {
for (i=0; nctx->vetoed_shells[i]; i++) {
if (strcmp(nctx->vetoed_shells[i], user_shell) == 0) {
DEBUG(5, ("The shell '%s' is vetoed. "
@@ -327,24 +326,28 @@ static const char *get_shell_override(TALLOC_CTX *mem_ctx,
}
}
- for (i=0; nctx->etc_shells[i]; i++) {
- if (strcmp(user_shell, nctx->etc_shells[i]) == 0) {
- DEBUG(9, ("Shell %s found in /etc/shells\n",
- nctx->etc_shells[i]));
- break;
+ if (nctx->etc_shells) {
+ for (i=0; nctx->etc_shells[i]; i++) {
+ if (strcmp(user_shell, nctx->etc_shells[i]) == 0) {
+ DEBUG(9, ("Shell %s found in /etc/shells\n",
+ nctx->etc_shells[i]));
+ break;
+ }
}
- }
- if (nctx->etc_shells[i]) {
- DEBUG(9, ("Using original shell '%s'\n", user_shell));
- return talloc_strdup(mem_ctx, user_shell);
+ if (nctx->etc_shells[i]) {
+ DEBUG(9, ("Using original shell '%s'\n", user_shell));
+ return talloc_strdup(mem_ctx, user_shell);
+ }
}
- for (i=0; nctx->allowed_shells[i]; i++) {
- if (strcmp(nctx->allowed_shells[i], user_shell) == 0) {
- DEBUG(5, ("The shell '%s' is allowed but does not exist. "
- "Using fallback\n", user_shell));
- return talloc_strdup(mem_ctx, nctx->shell_fallback);
+ if (nctx->allowed_shells) {
+ for (i=0; nctx->allowed_shells[i]; i++) {
+ if (strcmp(nctx->allowed_shells[i], user_shell) == 0) {
+ DEBUG(5, ("The shell '%s' is allowed but does not exist. "
+ "Using fallback\n", user_shell));
+ return talloc_strdup(mem_ctx, nctx->shell_fallback);
+ }
}
}