On (12/12/14 15:25), Pavel Reichl wrote: > >On 12/12/2014 03:02 PM, Lukas Slebodnik wrote: >>On (12/12/14 14:25), Pavel Reichl wrote: >>>On 12/11/2014 06:35 PM, Michal Židek wrote: >>>>I think that smaller nesting levels are better. >>>> >>>>In general I would do >>>> >>>>if (ret == SPECIFIC_CODE) { >>>> specific_error_handle_block >>>>} else (ret != EOK) { >>>> general_error_handle_block >>>>} >>>> >>>>If there are many specific error codes that need to be addressed, >>>>use switch, but 1-2 else-ifs are ok to me. >>>> >>>>This pattern can be used if common_to_all_erros_action exists (and is >>>>something more than just goto done): >>>> >>>>if (ret != EOK) { >>>> if (ret == SPECIFIC_CODE) { >>>> specific_error_handle_block >>>> } >>>> common_to_all_errors_action; >>>>} >>>> >>>>So I would slightly prefer Lukas's solution over Pavel's. >>>> >>>>In this particullar case I would do: >>>>if (ret == ENOENT) { >>>> .... >>>>} else if (ret != EOK) { >>>> .... >>>>} >>>> >>>>Michal >>>> >>>OK, thank you both for opinions and for comments. >>> >>>Please see updated patch. >>> >>>Thanks! >>Two questions/comments are inline. >> >>>From 94eade7b3c0c0729f5d4a322061c7c9688bd8130 Mon Sep 17 00:00:00 2001 >>>From: Pavel Reichl <prei...@redhat.com> >>>Date: Tue, 9 Dec 2014 11:01:13 +0000 >>>Subject: [PATCH 2/2] SYSDB: sysdb_search_object_by_sid returns ENOENT >>> >>>sysdb_search_object_by_sid returns ENOENT if no results are found. >>> >>>Part od solution for: >>>https://fedorahosted.org/sssd/ticket/1991 >>> >>>Fixes: >>>https://fedorahosted.org/sssd/ticket/2520 >>>--- >>>src/db/sysdb.h | 2 +- >>>src/db/sysdb_ops.c | 68 >>>++++++------------------------------------ >>>src/responder/nss/nsssrv_cmd.c | 27 ++++++++--------- >>>src/responder/pac/pacsrv_cmd.c | 29 ++++++++++-------- >>>src/tests/sysdb-tests.c | 5 +--- >>>5 files changed, 40 insertions(+), 91 deletions(-) >>>errno_t sysdb_search_object_by_uuid(TALLOC_CTX *mem_ctx, >>>diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c >>>index >>>ea58920bc3611c84958e8d0aca0e122d90c68e5c..3c5d450714fb3f7655cd32aeef900b4f5e9782c7 >>> 100644 >>>--- a/src/responder/nss/nsssrv_cmd.c >>>+++ b/src/responder/nss/nsssrv_cmd.c >>>@@ -4491,7 +4491,19 @@ static errno_t nss_cmd_getbysid_search(struct >>>nss_dom_ctx *dctx) >>> >>> ret = sysdb_search_object_by_sid(cmdctx, dom, cmdctx->secid, NULL, >>> &dctx->res); >>>- if (ret != EOK) { >>>+ if (ret == ENOENT) { >>>+ if (!dctx->check_provider) { >>>+ DEBUG(SSSDBG_OP_FAILURE, "No results for getbysid call.\n"); >>>+ >>>+ /* set negative cache only if not result of cache check */ >>>+ ret = sss_ncache_set_sid(nctx->ncache, false, cmdctx->secid); >>>+ if (ret != EOK) { >>>+ DEBUG(SSSDBG_MINOR_FAILURE, >>>+ "Cannot set negative cache for %s\n", cmdctx->secid); >>>+ } >>>+ } >>>+ return ENOENT; >>You changed behaviour with this nesting if statements. >>ENOENT will be returned every time. Previously it was returned just in case of >>true condition (dctx->res->count == 0 && !dctx->check_provider) >>Could you explain such change? >Because otherwise 'res' is accessed in case of ENOENT which implies segfault >in nss_cmd_getbysid_send_reply() or even earlier in check_cache(), if I read >the code correctly. > Thank you for explanation.
But it does not change the fact that you change the behaviour with this refactoring patch. Please do such change in separate patch. LS _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/sssd-devel