summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2015-04-07 10:53:12 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-04-07 14:44:51 +0200
commitd51bc5f43fffa516446ef62c2b860be9fa939c9d (patch)
treeecd87f878355376ff8208c3bd7133152cd3e3b75
parent41f13bb048dbc4241dcfc024cdc3ec535510ba6b (diff)
downloadsssd-d51bc5f43fffa516446ef62c2b860be9fa939c9d.tar.gz
sssd-d51bc5f43fffa516446ef62c2b860be9fa939c9d.tar.xz
sssd-d51bc5f43fffa516446ef62c2b860be9fa939c9d.zip
CLIENT: Clear errno with enabled sss-default-nss-plugin
Although errno was cleared in function sss_nss_make_request some sss glic functions set errno with value of output argument errnop. Reproducer: * sssd compiled with enabled option sss-default-nss-plugin * sss is the last value in group (/etc/nsswitch.conf) * sssd-client is installed but sssd is stopped. C-program: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <grp.h> int main(int argc, char *argv[]) { struct group *p_group; setgrent(); while (1) { errno = 0; /* initialize for getgrent() */ p_group = getgrent(); if (p_group == NULL) { if (errno == 0) { break; /* end of groups */ } else { perror("getgrent"); printf("getgrent error %d \n", errno); endgrent(); exit(-2); } } printf("getgrent() OK group(%d) = %s \n", p_group->gr_gid, p_group->gr_name); } exit(0); } Resolves: https://fedorahosted.org/sssd/ticket/2619 Reviewed-by: Pavel Reichl <preichl@redhat.com>
-rw-r--r--src/sss_client/common.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/sss_client/common.c b/src/sss_client/common.c
index 1b0fb1223..383572bad 100644
--- a/src/sss_client/common.c
+++ b/src/sss_client/common.c
@@ -725,6 +725,7 @@ enum nss_status sss_nss_make_request(enum sss_cli_command cmd,
ret = sss_cli_check_socket(errnop, SSS_NSS_SOCKET_NAME);
if (ret != SSS_STATUS_SUCCESS) {
#ifdef NONSTANDARD_SSS_NSS_BEHAVIOUR
+ *errnop = 0;
errno = 0;
return NSS_STATUS_NOTFOUND;
#else
@@ -741,6 +742,7 @@ enum nss_status sss_nss_make_request(enum sss_cli_command cmd,
case SSS_STATUS_UNAVAIL:
default:
#ifdef NONSTANDARD_SSS_NSS_BEHAVIOUR
+ *errnop = 0;
errno = 0;
return NSS_STATUS_NOTFOUND;
#else