Winbind fails to build on Solaris 2.6/7
Albert Chin
samba-technical at mlists.thewrittenword.com
Mon Jan 2 15:37:29 GMT 2006
On Mon, Jan 02, 2006 at 09:23:39AM -0600, Albert Chin wrote:
> Seems nsswitch/winbind_nss_solaris.c in 3.0.21 assumes IPV6 which
> Solaris 2.6/7 do not have:
>
> [compile error snipped ...]
How about the attached patch?
--
albert chin (china at thewrittenword.com)
-------------- next part --------------
Index: source/nsswitch/winbind_nss_solaris.c
===================================================================
--- source/nsswitch/winbind_nss_solaris.c.orig 2005-12-02 13:21:45.000000000 -0600
+++ source/nsswitch/winbind_nss_solaris.c 2006-01-02 09:35:41.100616000 -0600
@@ -358,7 +358,9 @@
int addrcount = 0;
int len = 0;
struct in_addr *addrp;
+#ifdef AF_INET6
struct in6_addr *addrp6;
+#endif
int i;
/* response is tab separated list of ip addresses with hostname
@@ -390,6 +392,7 @@
addrp -= addrcount;
he->h_addr_list = (char **)ROUND_DOWN(addrp, sizeof (char*));
he->h_addr_list -= addrcount+1;
+#ifdef AF_INET6
} else {
he->h_length = sizeof(struct in6_addr);
addrp6 = (struct in6_addr *)ROUND_DOWN(buffer + buflen,
@@ -397,6 +400,7 @@
addrp6 -= addrcount;
he->h_addr_list = (char **)ROUND_DOWN(addrp6, sizeof (char*));
he->h_addr_list -= addrcount+1;
+#endif
}
/* buffer too small?! */
@@ -417,6 +421,7 @@
argp->erange = 1;
return NSS_STR_PARSE_ERANGE;
}
+#ifdef AF_INET6
} else {
he->h_addr_list[i] = (char *)&addrp6[i];
if (strchr(data, ':') != 0) {
@@ -432,6 +437,7 @@
}
IN6_INADDR_TO_V4MAPPED(&in4, &addrp6[i]);
}
+#endif
}
data = p+1;
}
@@ -473,6 +479,7 @@
ZERO_STRUCT(response);
ZERO_STRUCT(request);
+#ifdef AF_INET6
/* I assume there that AI_ADDRCONFIG cases are handled in nss
frontend code, at least it seems done so in solaris...
@@ -490,6 +497,9 @@
/* I'm not that sure if this is correct, but... */
af = AF_INET6;
#endif
+#else
+ af = AF_INET;
+#endif
strncpy(request.data.winsreq, argp->key.name, strlen(argp->key.name)) ;
@@ -536,6 +546,7 @@
ZERO_STRUCT(response);
ZERO_STRUCT(request);
+#ifdef AF_INET6
/* winbindd currently does not resolve IPv6 */
if(argp->key.hostaddr.type == AF_INET6) {
argp->h_errno = NO_DATA;
@@ -544,6 +555,10 @@
p = inet_ntop(argp->key.hostaddr.type, argp->key.hostaddr.addr,
request.data.winsreq, INET6_ADDRSTRLEN);
+#else
+ p = inet_ntop(argp->key.hostaddr.type, argp->key.hostaddr.addr,
+ request.data.winsreq, 16);
+#endif
ret = winbindd_request_response(WINBINDD_WINS_BYIP, &request, &response);
More information about the samba-technical
mailing list