Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nslcd
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd')
-rw-r--r--nslcd/attmap.c3
-rw-r--r--nslcd/cfg.c1
-rw-r--r--nslcd/cfg.h1
-rw-r--r--nslcd/nscd.c24
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)