summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/nis.c45
1 files changed, 35 insertions, 10 deletions
diff --git a/src/nis.c b/src/nis.c
index acebe7c..5dc1855 100644
--- a/src/nis.c
+++ b/src/nis.c
@@ -279,22 +279,47 @@ nis_master(struct plugin_state *state,
struct ypresp_master *reply_master)
{
struct ypreq_nokey req_nokey;
+ bool_t supported;
const char *master;
memset(&req_nokey, 0, sizeof(req_nokey));
memset(reply_master, 0, sizeof(*reply_master));
if (xdr_ypreq_nokey(request_xdrs, &req_nokey)) {
map_rdlock();
- reply_master->status = YP_TRUE;
- if (map_master_name(state, &master) != 0) {
- master = "localhost";
+ if (map_supports_domain(state, req_nokey.domain, &supported) &&
+ supported) {
+ if (map_supports_map(state,
+ req_nokey.domain, req_nokey.map,
+ &supported, NULL) &&
+ supported) {
+ reply_master->status = YP_TRUE;
+ if (map_master_name(state, &master) != 0) {
+ master = "localhost";
+ }
+ reply_master->master = (char *) master;
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "master(%s/%s) -> %s\n",
+ req_nokey.domain,
+ req_nokey.map,
+ reply_master->master);
+ } else {
+ reply_master->status = YP_NOMAP;
+ reply_master->master = NULL;
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "master(%s/%s) -> no-map\n",
+ req_nokey.domain,
+ req_nokey.map);
+ }
+ } else {
+ reply_master->status = YP_NODOM;
+ reply_master->master = NULL;
+ slapi_log_error(SLAPI_LOG_PLUGIN,
+ state->plugin_desc->spd_id,
+ "master(%s/%s) -> no-domain\n",
+ req_nokey.domain,
+ req_nokey.map);
}
- reply_master->master = (char *) master;
- slapi_log_error(SLAPI_LOG_PLUGIN,
- state->plugin_desc->spd_id,
- "master(%s/%s) -> %s\n",
- req_nokey.domain,
- req_nokey.map,
- reply_master->master);
(*reply_fn)(state, cdata, reply, reply_xdrs);
map_unlock();
} else {