diff options
author | Nalin Dahyabhai <nalin@redhat.com> | 2014-08-18 17:40:41 -0400 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-08-22 16:31:10 +0200 |
commit | 5a4df83d769ace54f92513f0be78e753e0985a25 (patch) | |
tree | 9b26747528f1704efd665ccc4e068ba1d6da045e /src/sss_client | |
parent | f55d45b931ce6c01e005ae94a69e93abda0d2f1c (diff) | |
download | sssd-5a4df83d769ace54f92513f0be78e753e0985a25.tar.gz sssd-5a4df83d769ace54f92513f0be78e753e0985a25.tar.xz sssd-5a4df83d769ace54f92513f0be78e753e0985a25.zip |
sss_client: Fix "struct sss_cli_mc_ctx" reinitialize-on-errors
When we have difficulty setting up an sss_cli_mc_ctx structure, we try
to clean things up so that we'll be ready to try again the next time
we're called.
Part of that is closing the descriptor of the file if we've opened it
and using memset() to clear the structure.
Now that sss_nss_mc_get_ctx() does its work in two phases, and each one
may end up doing the cleanup, each needs to be careful to reset the
descriptor field so that the new value provided by memset() (0) isn't
mistakenly treated as a file which should be closed by the other.
Resolves:
https://fedorahosted.org/sssd/ticket/2409
Reviewed-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'src/sss_client')
-rw-r--r-- | src/sss_client/nss_mc_common.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/sss_client/nss_mc_common.c b/src/sss_client/nss_mc_common.c index cd1ac42da..6c9b35de2 100644 --- a/src/sss_client/nss_mc_common.c +++ b/src/sss_client/nss_mc_common.c @@ -164,6 +164,7 @@ done: close(ctx->fd); } memset(ctx, 0, sizeof(struct sss_cli_mc_ctx)); + ctx->fd = -1; } free(file); sss_nss_unlock(); @@ -197,6 +198,7 @@ done: close(ctx->fd); } memset(ctx, 0, sizeof(struct sss_cli_mc_ctx)); + ctx->fd = -1; } return ret; } |