From db78f4c750943fcd4b60bca5f3fdfd6cc5d3d4f8 Mon Sep 17 00:00:00 2001 From: Ondrej Kos Date: May 21 2013 14:40:12 +0000 Subject: Move nscd.c from tools to util Preparation for the following patch which will include the nscd.c in the monitor code due to newly introduced function for checking the nscd configuration file. --- diff --git a/Makefile.am b/Makefile.am index 94ad8c0..c668052 100644 --- a/Makefile.am +++ b/Makefile.am @@ -311,7 +311,7 @@ SSSD_TOOLS_OBJ = \ src/tools/tools_util.c \ src/tools/files.c \ src/tools/selinux.c \ - src/tools/nscd.c + src/util/nscd.c SSSD_LCL_TOOLS_OBJ = \ src/sss_client/common.c \ diff --git a/src/tools/nscd.c b/src/tools/nscd.c deleted file mode 100644 index b9f2ba8..0000000 --- a/src/tools/nscd.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - SSSD - - nscd.c - - Copyright (C) Jakub Hrozek 2010 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -#include -#include -#include - -#include "config.h" -#include "util/util.h" -#include "tools/tools_util.h" - -#ifndef NSCD_RELOAD_ARG -#define NSCD_RELOAD_ARG "-i" -#endif - -#if defined(NSCD_PATH) && defined(HAVE_NSCD) -int flush_nscd_cache(enum nscd_db flush_db) -{ - const char *service; - pid_t nscd_pid; - int ret, status; - - switch(flush_db) { - case NSCD_DB_PASSWD: - service = "passwd"; - break; - - case NSCD_DB_GROUP: - service = "group"; - break; - - default: - DEBUG(1, ("Unknown nscd database\n")); - ret = EINVAL; - goto done; - } - - nscd_pid = fork(); - switch (nscd_pid) { - case 0: - execl(NSCD_PATH, "nscd", NSCD_RELOAD_ARG, service, NULL); - /* if this returns it is an error */ - DEBUG(1, ("execl(3) failed: %d(%s)\n", errno, strerror(errno))); - exit(errno); - case -1: - DEBUG(1, ("fork failed\n")); - ret = EFAULT; - break; - default: - do { - errno = 0; - ret = waitpid(nscd_pid, &status, 0); - } while (ret == -1 && errno == EINTR); - if (ret > 0) { - if (WIFEXITED(status)) { - ret = WEXITSTATUS(status); - if (ret > 0) { - /* The flush fails if nscd is not running, so do not care - * about the return code */ - DEBUG(8, ("Error flushing cache, is nscd running?\n")); - } - } - } else { - DEBUG(5, ("Failed to wait for children %d\n", nscd_pid)); - ret = EIO; - } - } - -done: - return ret; -} - -#else /* defined(NSCD_PATH) && defined(HAVE_NSCD) */ -int flush_nscd_cache(enum nscd_db flush_db) -{ - return EOK; -} -#endif diff --git a/src/tools/tools_util.h b/src/tools/tools_util.h index 50f5a51..cc35475 100644 --- a/src/tools/tools_util.h +++ b/src/tools/tools_util.h @@ -120,14 +120,6 @@ int remove_tree(const char *root); int copy_tree(const char *src_root, const char *dst_root, mode_t mode_root, uid_t uid, gid_t gid); -/* from nscd.c */ -enum nscd_db { - NSCD_DB_PASSWD, - NSCD_DB_GROUP -}; - -int flush_nscd_cache(enum nscd_db flush_db); - /* from selinux.c */ int selinux_file_context(const char *dst_name); int reset_selinux_file_context(void); diff --git a/src/util/nscd.c b/src/util/nscd.c new file mode 100644 index 0000000..b9f2ba8 --- /dev/null +++ b/src/util/nscd.c @@ -0,0 +1,97 @@ +/* + SSSD + + nscd.c + + Copyright (C) Jakub Hrozek 2010 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include +#include +#include + +#include "config.h" +#include "util/util.h" +#include "tools/tools_util.h" + +#ifndef NSCD_RELOAD_ARG +#define NSCD_RELOAD_ARG "-i" +#endif + +#if defined(NSCD_PATH) && defined(HAVE_NSCD) +int flush_nscd_cache(enum nscd_db flush_db) +{ + const char *service; + pid_t nscd_pid; + int ret, status; + + switch(flush_db) { + case NSCD_DB_PASSWD: + service = "passwd"; + break; + + case NSCD_DB_GROUP: + service = "group"; + break; + + default: + DEBUG(1, ("Unknown nscd database\n")); + ret = EINVAL; + goto done; + } + + nscd_pid = fork(); + switch (nscd_pid) { + case 0: + execl(NSCD_PATH, "nscd", NSCD_RELOAD_ARG, service, NULL); + /* if this returns it is an error */ + DEBUG(1, ("execl(3) failed: %d(%s)\n", errno, strerror(errno))); + exit(errno); + case -1: + DEBUG(1, ("fork failed\n")); + ret = EFAULT; + break; + default: + do { + errno = 0; + ret = waitpid(nscd_pid, &status, 0); + } while (ret == -1 && errno == EINTR); + if (ret > 0) { + if (WIFEXITED(status)) { + ret = WEXITSTATUS(status); + if (ret > 0) { + /* The flush fails if nscd is not running, so do not care + * about the return code */ + DEBUG(8, ("Error flushing cache, is nscd running?\n")); + } + } + } else { + DEBUG(5, ("Failed to wait for children %d\n", nscd_pid)); + ret = EIO; + } + } + +done: + return ret; +} + +#else /* defined(NSCD_PATH) && defined(HAVE_NSCD) */ +int flush_nscd_cache(enum nscd_db flush_db) +{ + return EOK; +} +#endif diff --git a/src/util/util.h b/src/util/util.h index fa45fdf..5665303 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -491,6 +491,14 @@ bool string_in_list(const char *string, char **list, bool case_sensitive); */ void safezero(void *data, size_t size); +/* from nscd.c */ +enum nscd_db { + NSCD_DB_PASSWD, + NSCD_DB_GROUP +}; + +int flush_nscd_cache(enum nscd_db flush_db); + /* from sss_tc_utf8.c */ char * sss_tc_utf8_str_tolower(TALLOC_CTX *mem_ctx, const char *s);