>From 2bc6154ba18266fe834cb7dac28d68b2babf918f Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Mon, 14 Jul 2014 15:52:15 +0200 Subject: [PATCH 3/3] DO NOT PUSH ME - just for easier review --- src/sss_client/nss_mc_common.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/sss_client/nss_mc_common.c b/src/sss_client/nss_mc_common.c index cd1ac42da66a2546cb8dec1e8e79088883a870a1..9cdc0343d3168dd341c74746f55b657c345de3ae 100644 --- a/src/sss_client/nss_mc_common.c +++ b/src/sss_client/nss_mc_common.c @@ -73,12 +73,14 @@ errno_t sss_nss_check_header(struct sss_cli_mc_ctx *ctx) } if (count == 0) { /* couldn't successfully read header we have to give up */ + fprintf(stderr, "couldn't successfully read header we must give up\n"); return EIO; } if (h.major_vno != SSS_MC_MAJOR_VNO || h.minor_vno != SSS_MC_MINOR_VNO || h.status == SSS_MC_HEADER_RECYCLED) { + fprintf(stderr, "header versions do not match or header is recycled\n"); return EINVAL; } @@ -95,6 +97,7 @@ errno_t sss_nss_check_header(struct sss_cli_mc_ctx *ctx) ctx->hash_table != MC_PTR_ADD(ctx->mmap_base, h.hash_table) || ctx->dt_size != h.dt_size || ctx->ht_size != h.ht_size) { + fprintf(stderr, "seed or table size do not match\n"); return EINVAL; } } @@ -109,32 +112,41 @@ static errno_t sss_nss_mc_init_ctx(const char *name, char *file = NULL; int ret; + fprintf(stderr, "before nss lock\n"); sss_nss_lock(); + fprintf(stderr, "after nss lock\n"); /* check if ctx is initialised by previous thread. */ if (ctx->initialized) { + fprintf(stderr, "already initialised\n"); ret = sss_nss_check_header(ctx); + if (ret) + fprintf(stderr, "sss_nss_check_header beg:%s\n", strerror(ret)); goto done; } ret = asprintf(&file, "%s/%s", SSS_NSS_MCACHE_DIR, name); if (ret == -1) { ret = ENOMEM; + perror("asprintf\n"); goto done; } ctx->fd = sss_open_cloexec(file, O_RDONLY, &ret); if (ctx->fd == -1) { + perror("sss_open_cloexec"); goto done; } ret = fstat(ctx->fd, &fdstat); if (ret == -1) { ret = EIO; + perror("stat"); goto done; } if (fdstat.st_size < MC_HEADER_SIZE) { ret = ENOMEM; + fprintf(stderr, "fdstat.st_size < MC_HEADER_SIZE\n"); goto done; } ctx->mmap_size = fdstat.st_size; @@ -143,15 +155,18 @@ static errno_t sss_nss_mc_init_ctx(const char *name, PROT_READ, MAP_SHARED, ctx->fd, 0); if (ctx->mmap_base == MAP_FAILED) { ret = ENOMEM; + perror("mmap"); goto done; } ret = sss_nss_check_header(ctx); if (ret != 0) { + fprintf(stderr, "sss_nss_check_header end:%s\n", strerror(ret)); goto done; } ctx->initialized = true; + fprintf(stderr, "init.done\n"); ret = 0; @@ -159,14 +174,17 @@ done: if (ret) { if ((ctx->mmap_base != NULL) && (ctx->mmap_size != 0)) { munmap(ctx->mmap_base, ctx->mmap_size); + fprintf(stderr, "calling munmap\n"); } if (ctx->fd != -1) { close(ctx->fd); + fprintf(stderr, "calling close\n"); } memset(ctx, 0, sizeof(struct sss_cli_mc_ctx)); } free(file); sss_nss_unlock(); + fprintf(stderr, "after nss unlock\n"); return ret; } @@ -183,6 +201,8 @@ errno_t sss_nss_mc_get_ctx(const char *name, struct sss_cli_mc_ctx *ctx) if (ctx->initialized) { ret = sss_nss_check_header(ctx); + if (ret) + fprintf(stderr, "sss_nss_check_header:%s\n", strerror(ret)); goto done; } @@ -192,9 +212,11 @@ done: if (ret) { if ((ctx->mmap_base != NULL) && (ctx->mmap_size != 0)) { munmap(ctx->mmap_base, ctx->mmap_size); + fprintf(stderr, "calling munmap 2\n"); } if (ctx->fd != -1) { close(ctx->fd); + fprintf(stderr, "calling munmap 2\n"); } memset(ctx, 0, sizeof(struct sss_cli_mc_ctx)); } -- 1.9.3