autofs-5.1.6 - sss introduce calculate_retry_count() function From: Ian Kent Add a function calculate_retry_count() to consolidate the calculation of the retry count into a single location. Signed-off-by: Ian Kent --- CHANGELOG | 1 + modules/lookup_sss.c | 62 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 7cdaa3d7..2d8bd5a4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -30,6 +30,7 @@ xx/xx/2020 autofs-5.1.7 - improve sss setautomntent() error handling. - refactor sss getautomntent(). - improve sss getautomntent() error handling. +- sss introduce calculate_retry_count() function. 07/10/2019 autofs-5.1.6 - support strictexpire mount option. diff --git a/modules/lookup_sss.c b/modules/lookup_sss.c index 2029650b..1f7eceaf 100644 --- a/modules/lookup_sss.c +++ b/modules/lookup_sss.c @@ -249,14 +249,9 @@ static unsigned int proto_version(struct lookup_context *ctxt) return proto_version; } -static int setautomntent_wait(unsigned int logopt, - struct lookup_context *ctxt, void **sss_ctxt) +static unsigned int calculate_retry_count(struct lookup_context *ctxt) { - unsigned int retries; - unsigned int retry = 0; - int ret = 0; - - *sss_ctxt = NULL; + int retries; retries = defaults_get_sss_master_map_wait(); @@ -264,14 +259,37 @@ static int setautomntent_wait(unsigned int logopt, * configuration give it a sensible value since we * want to wait for a host that's down in case it * comes back up. + * + * Use the sss_master_map_wait configuration option + * for the time to wait when reading a dependednt map + * or performing a key lookup too. */ if (retries <= 0) { /* Protocol version 0 cant't tell us about - * a host being down, return not found. + * a host being down, return 0 for retries. */ if (proto_version(ctxt) == 0) - return ENOENT; - retries = 10; + retries = 0; + else + retries = 10; + } + return retries; +} + +static int setautomntent_wait(unsigned int logopt, + struct lookup_context *ctxt, void **sss_ctxt) +{ + unsigned int retries; + unsigned int retry = 0; + int ret = 0; + + *sss_ctxt = NULL; + + retries = calculate_retry_count(ctxt); + if (retries == 0) { + if (proto_version(ctxt) == 0) + return EINVAL; + return ENOENT; } warn(logopt, @@ -345,6 +363,9 @@ static int setautomntent(unsigned int logopt, } if (ret == ETIMEDOUT) goto error; + /* sss proto version 0 and sss timeout not set */ + if (ret == EINVAL) + goto free; if (ret == ENOENT) { err = NSS_STATUS_NOTFOUND; goto free; @@ -385,21 +406,11 @@ static int getautomntent_wait(unsigned int logopt, unsigned int retry = 0; int ret = 0; - retries = defaults_get_sss_master_map_wait(); - - /* Use the sss_master_map_wait configuration option - * for the time to wait when reading a map too. If - * it isn't set in the antofs configuration give it - * a sensible value since we want to wait for a host - * that's down in case it comes back up. - */ - if (retries <= 0) { - /* Protocol version 0 cant't tell us about - * a host being down, return not found. - */ + retries = calculate_retry_count(ctxt); + if (retries == 0) { if (proto_version(ctxt) == 0) - return ENOENT; - retries = 10; + return EINVAL; + return ENOENT; } warn(logopt, @@ -483,7 +494,8 @@ static int getautomntent(unsigned int logopt, } if (ret == ETIMEDOUT) goto error; - if (ret == ENOENT) { + /* sss proto version 0 and sss timeout not set => EINVAL */ + if (ret == ENOENT || ret == EINVAL) { err = NSS_STATUS_NOTFOUND; if (count) err = NSS_STATUS_SUCCESS;