/* * This is a wrapper for the system call getdomainname which returns a * ypclnt.h error code in the failure case. It also checks to see that * the domain name is non-null, knowing that the null string is going to * get rejected elsewhere in the NIS client package. */ int __rpc_get_default_domain(char **domain) { if ((*domain = get_default_domain()) != NULL) return (0); return (-1); }
int nfs4_get_default_domain(char *server, char *domain, size_t len) { char *d = get_default_domain(); if (strlen(d) + 1 > len) return -ERANGE; strcpy(domain, d); return 0; }
int nfs4_init_name_mapping(char *conffile) { int ret = -ENOENT; char *method; int dflt = 0; struct conf_list *nfs4_methods, *gss_methods; /* XXX: need to be able to reload configurations... */ if (nfs4_plugins) /* already succesfully initialized */ return 0; if (conffile) conf_path = conffile; else conf_path = PATH_IDMAPDCONF; conf_init(); default_domain = conf_get_str("General", "Domain"); if (default_domain == NULL) { dflt = 1; ret = domain_from_dns(&default_domain); if (ret) { IDMAP_LOG(1, ("libnfsidmap: Unable to determine " "the NFSv4 domain; Using '%s' as the NFSv4 domain " "which means UIDs will be mapped to the 'Nobody-User' " "user defined in %s\n", IDMAPD_DEFAULT_DOMAIN, PATH_IDMAPDCONF)); default_domain = IDMAPD_DEFAULT_DOMAIN; } } IDMAP_LOG(1, ("libnfsidmap: using%s domain: %s\n", (dflt ? " (default)" : ""), default_domain)); /* Get list of "local equivalent" realms. Meaning the list of realms * where [email protected] is considered the same user as [email protected] * If not specified, default to upper-case of local domain name */ local_realms = conf_get_list("General", "Local-Realms"); if (local_realms == NULL) { struct conf_list_node *node; local_realms = malloc(sizeof *local_realms); if (local_realms == NULL) return -ENOMEM; local_realms->cnt = 0; TAILQ_INIT(&local_realms->fields); node = calloc(1, sizeof *node); if (node == NULL) return -ENOMEM; node->field = strdup(get_default_domain()); if (node->field == NULL) return -ENOMEM; toupper_str(node->field); TAILQ_INSERT_TAIL(&local_realms->fields, node, link); local_realms->cnt++; } nfs4_methods = conf_get_list("Translation", "Method"); if (nfs4_methods) { IDMAP_LOG(1, ("libnfsidmap: processing 'Method' list\n")); if (load_plugins(nfs4_methods, &nfs4_plugins) == -1) return -ENOENT; } else { struct conf_list list; struct conf_list_node node; TAILQ_INIT(&list.fields); list.cnt = 1; node.field = "nsswitch"; TAILQ_INSERT_TAIL (&list.fields, &node, link); if (load_plugins(&list, &nfs4_plugins) == -1) return -ENOENT; } gss_methods = conf_get_list("Translation", "GSS-Methods"); if (gss_methods) { IDMAP_LOG(1, ("libnfsidmap: processing 'GSS-Methods' list\n")); if (load_plugins(gss_methods, &gss_plugins) == -1) goto out; } ret = 0; out: if (ret) { if (nfs4_plugins) unload_plugins(nfs4_plugins); if (gss_plugins) unload_plugins(gss_plugins); nfs4_plugins = gss_plugins = NULL; } return ret ? -ENOENT: 0; }