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