moved getdomainname into start of nfsd
acquire machine's domain name at the start of nfsd and store in global memory, make is accessible for acl operations.
This commit is contained in:
parent
8e64984183
commit
4be25baaee
4 changed files with 126 additions and 126 deletions
|
|
@ -110,117 +110,6 @@ static int update_exchangeid_res(
|
|||
&exchangeid->server_owner);
|
||||
}
|
||||
|
||||
static void print_getaddrinfo(struct addrinfo *ptr)
|
||||
{
|
||||
char ipstringbuffer[46];
|
||||
DWORD ipbufferlength = 46;
|
||||
|
||||
dprintf(1, "getaddrinfo response flags: 0x%x\n", ptr->ai_flags);
|
||||
switch (ptr->ai_family) {
|
||||
case AF_UNSPEC: dprintf(1, "Family: Unspecified\n"); break;
|
||||
case AF_INET:
|
||||
dprintf(1, "Family: AF_INET IPv4 address %s\n",
|
||||
inet_ntoa(((struct sockaddr_in *)ptr->ai_addr)->sin_addr));
|
||||
break;
|
||||
case AF_INET6:
|
||||
if (WSAAddressToString((LPSOCKADDR)ptr->ai_addr, (DWORD)ptr->ai_addrlen,
|
||||
NULL, ipstringbuffer, &ipbufferlength))
|
||||
dprintf(1, "WSAAddressToString failed with %u\n", WSAGetLastError());
|
||||
else
|
||||
dprintf(1, "Family: AF_INET6 IPv6 address %s\n", ipstringbuffer);
|
||||
break;
|
||||
case AF_NETBIOS: dprintf(1, "AF_NETBIOS (NetBIOS)\n"); break;
|
||||
default: dprintf(1, "Other %ld\n", ptr->ai_family); break;
|
||||
}
|
||||
dprintf(1, "Canonical name: %s\n", ptr->ai_canonname);
|
||||
}
|
||||
|
||||
static int getdomainname(char *domain)
|
||||
{
|
||||
int status = 0;
|
||||
PFIXED_INFO net_info = NULL;
|
||||
DWORD size = 0;
|
||||
BOOLEAN flag = FALSE;
|
||||
|
||||
status = GetNetworkParams(net_info, &size);
|
||||
if (status != ERROR_BUFFER_OVERFLOW) {
|
||||
eprintf("getdomainname: GetNetworkParams returned %d\n", status);
|
||||
goto out;
|
||||
}
|
||||
net_info = calloc(1, size);
|
||||
if (net_info == NULL) {
|
||||
status = GetLastError();
|
||||
goto out;
|
||||
}
|
||||
status = GetNetworkParams(net_info, &size);
|
||||
if (status) {
|
||||
eprintf("getdomainname: GetNetworkParams returned %d\n", status);
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
if (net_info->DomainName[0] == '\0') {
|
||||
struct addrinfo *result = NULL, *ptr = NULL, hints = { 0 };
|
||||
char hostname[NI_MAXHOST], servInfo[NI_MAXSERV];
|
||||
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_protocol = IPPROTO_TCP;
|
||||
|
||||
status = getaddrinfo(net_info->HostName, NULL, &hints, &result);
|
||||
if (status) {
|
||||
status = WSAGetLastError();
|
||||
eprintf("getdomainname: getaddrinfo failed with %d\n", status);
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
for (ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
|
||||
print_getaddrinfo(ptr);
|
||||
|
||||
switch (ptr->ai_family) {
|
||||
case AF_INET6:
|
||||
case AF_INET:
|
||||
status = getnameinfo((struct sockaddr *)ptr->ai_addr,
|
||||
(socklen_t)ptr->ai_addrlen, hostname, NI_MAXHOST,
|
||||
servInfo, NI_MAXSERV, NI_NAMEREQD);
|
||||
if (status)
|
||||
dprintf(1, "getnameinfo failed %d\n", WSAGetLastError());
|
||||
else {
|
||||
size_t i, len = strlen(hostname);
|
||||
char *p = hostname;
|
||||
dprintf(1, "getdomainname: hostname %s %d\n", hostname, len);
|
||||
for(i = 0; i < len; i++)
|
||||
if (p[i] == '.')
|
||||
break;
|
||||
if (i == len)
|
||||
break;
|
||||
flag = TRUE;
|
||||
memcpy(domain, &hostname[i+1], len-i);
|
||||
dprintf(1, "getdomainname: domainname %s %d\n", domain, strlen(domain));
|
||||
goto out_loop;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
out_loop:
|
||||
if (!flag) {
|
||||
status = ERROR_INTERNAL_ERROR;
|
||||
eprintf("getdomainname: unable to get a domain name. "
|
||||
"Set this machine's domain name:\n"
|
||||
"System > ComputerName > Change > More > mydomain\n");
|
||||
}
|
||||
freeaddrinfo(result);
|
||||
} else {
|
||||
dprintf(1, "domain name is %s\n", net_info->DomainName);
|
||||
memcpy(domain, net_info->DomainName, strlen(net_info->DomainName));
|
||||
domain[strlen(net_info->DomainName)] = '\0';
|
||||
}
|
||||
out_free:
|
||||
free(net_info);
|
||||
out:
|
||||
return status;
|
||||
}
|
||||
|
||||
int nfs41_client_create(
|
||||
IN nfs41_rpc_clnt *rpc,
|
||||
IN const client_owner4 *owner,
|
||||
|
|
@ -237,12 +126,6 @@ int nfs41_client_create(
|
|||
goto out_err_rpc;
|
||||
}
|
||||
|
||||
status = getdomainname(client->domain_name);
|
||||
if (status) {
|
||||
free(client);
|
||||
goto out_err_rpc;
|
||||
}
|
||||
|
||||
memcpy(&client->owner, owner, sizeof(client_owner4));
|
||||
client->rpc = rpc;
|
||||
client->is_data = is_data;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue