diff options
Diffstat (limited to 'nslcd')
-rw-r--r-- | nslcd/attmap.c | 3 | ||||
-rw-r--r-- | nslcd/cfg.c | 1 | ||||
-rw-r--r-- | nslcd/cfg.h | 1 | ||||
-rw-r--r-- | nslcd/nscd.c | 24 |
4 files changed, 24 insertions, 5 deletions
diff --git a/nslcd/attmap.c b/nslcd/attmap.c index 2480096..08130fa 100644 --- a/nslcd/attmap.c +++ b/nslcd/attmap.c @@ -57,6 +57,7 @@ const char **base_get_var(enum ldap_map_selector map) case LM_RPC: return rpc_bases; case LM_SERVICES: return service_bases; case LM_SHADOW: return shadow_bases; + case LM_NFSIDMAP: case LM_NONE: default: return NULL; } @@ -90,6 +91,7 @@ int *scope_get_var(enum ldap_map_selector map) case LM_RPC: return &rpc_scope; case LM_SERVICES: return &service_scope; case LM_SHADOW: return &shadow_scope; + case LM_NFSIDMAP: case LM_NONE: default: return NULL; } @@ -123,6 +125,7 @@ const char **filter_get_var(enum ldap_map_selector map) case LM_RPC: return &rpc_filter; case LM_SERVICES: return &service_filter; case LM_SHADOW: return &shadow_filter; + case LM_NFSIDMAP: case LM_NONE: default: return NULL; } diff --git a/nslcd/cfg.c b/nslcd/cfg.c index 056b6e2..381ddec 100644 --- a/nslcd/cfg.c +++ b/nslcd/cfg.c @@ -527,6 +527,7 @@ static const char *print_map(enum ldap_map_selector map) case LM_RPC: return "rpc"; case LM_SERVICES: return "services"; case LM_SHADOW: return "shadow"; + case LM_NFSIDMAP: return "nfsidmap"; case LM_NONE: default: return "???"; } diff --git a/nslcd/cfg.h b/nslcd/cfg.h index bd53560..4ec31ff 100644 --- a/nslcd/cfg.h +++ b/nslcd/cfg.h @@ -67,6 +67,7 @@ enum ldap_map_selector { LM_RPC, LM_SERVICES, LM_SHADOW, + LM_NFSIDMAP, /* only used for cache invalidation */ LM_NONE }; diff --git a/nslcd/nscd.c b/nslcd/nscd.c index da58c2e..14a976c 100644 --- a/nslcd/nscd.c +++ b/nslcd/nscd.c @@ -55,6 +55,7 @@ static const char *map2name(enum ldap_map_selector map) case LM_RPC: return "rpc"; case LM_SERVICES: return "services"; case LM_SHADOW: return "shadow"; + case LM_NFSIDMAP: return "nfsidmap"; case LM_NONE: default: return NULL; } @@ -65,7 +66,7 @@ static void exec_invalidate(const char *db) { pid_t cpid; int i, status; - char *argv[] = { "nscd", "-i", NULL, NULL }; + char *argv[4]; #ifdef HAVE_EXECVPE char *newenviron[] = { NULL }; #endif @@ -82,12 +83,25 @@ static void exec_invalidate(const char *db) i = 32; for (; i >= 0; i--) close(i); + /* build command line */ + if (strcmp(db, "nfsidmap") == 0) + { + argv[0] = "nfsidmap"; + argv[1] = "-c"; + argv[2] = NULL; + } + else + { + argv[0] = "nscd"; + argv[1] = "-i"; + argv[2] = (char *)db; + argv[3] = NULL; + } /* execute command */ - argv[2] = (char *)db; #ifdef HAVE_EXECVPE - execvpe("nscd", argv, newenviron); + execvpe(argv[0], argv, newenviron); #else - execvp("nscd", argv); + execvp(argv[0], argv); #endif /* if we are here there has been an error */ /* we can't log since we don't have any useful file descriptors */ @@ -137,7 +151,7 @@ static void nscd_handle_requests(int fd) const char *db; log_log(LOG_DEBUG, "nscd_invalidator: starting"); /* set up environment */ - chdir("/"); + (void)chdir("/"); putenv("PATH=/usr/sbin:/usr/bin:/sbin:/bin"); /* handle incoming requests */ while (1) |