initialization state may have been used to signal the relay agent
information options sub-option code for the 'END' of the option space.
+- Fixes to allow code to compile and run on Solaris 9.
+
Changes since 4.0.0b3
- The reverse dns name for PTR updates on IPv6 addresses has been fixed to
#endif /* USE_SOCKET_SEND || USE_SOCKET_FALLBACK */
+#ifdef DHCPv6
+/*
+ * Solaris 9 is missing the CMSG_LEN and CMSG_SPACE macros, so we will
+ * synthesize them (based on the BIND 9 technique).
+ */
+
+#ifndef CMSG_LEN
+static size_t CMSG_LEN(size_t len) {
+ size_t hdrlen;
+ /*
+ * Cast NULL so that any pointer arithmetic performed by CMSG_DATA
+ * is correct.
+ */
+ hdrlen = (size_t)CMSG_DATA(((struct cmsghdr *)NULL));
+ return hdrlen + len;
+}
+#endif /* !CMSG_LEN */
+
+#ifndef CMSG_SPACE
+static size_t CMSG_SPACE(size_t len) {
+ struct msghdr msg;
+ struct cmsghdr *cmsgp;
+
+ /*
+ * XXX: The buffer length is an ad-hoc value, but should be enough
+ * in a practical sense.
+ */
+ union {
+ struct cmsghdr cmsg_sizer;
+ u_int8_t pktinfo_sizer[sizeof(struct cmsghdr) + 1024];
+ } dummybuf;
+
+ memset(&msg, 0, sizeof(msg));
+ msg.msg_control = &dummybuf;
+ msg.msg_controllen = sizeof(dummybuf);
+
+ cmsgp = (struct cmsghdr *)&dummybuf;
+ cmsgp->cmsg_len = CMSG_LEN(len);
+
+ cmsgp = CMSG_NXTHDR(&msg, cmsgp);
+ if (cmsgp != NULL) {
+ return (char *)cmsgp - (char *)msg.msg_control;
+ } else {
+ return 0;
+ }
+}
+#endif /* !CMSG_SPACE */
+
+#endif /* DHCPv6 */
+
#ifdef DHCPv6
/*
* For both send_packet6() and receive_packet6() we need to use the
AC_MSG_CHECKING([for struct lifnum])
AC_TRY_COMPILE(
[ #include <sys/types.h>
+ #include <sys/socket.h>
#include <net/if.h>
],
[ struct lifnum a;
[AC_MSG_RESULT(no)])
# Look for optional headers.
-AC_CHECK_HEADERS(net/if_dl.h net/if6.h regex.h)
+AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
# find an MD5 library
AC_SEARCH_LIBS(MD5_Init, [crypto])
base = 8;
}
while ((c = *cp) != '\0') {
- if (isascii(c) && isdigit(c)) {
+ if (isascii(c) && isdigit((int)c)) {
val = (val * base) + (c - '0');
cp++;
continue;
}
- if (base == 16 && isascii(c) && isxdigit(c)) {
+ if (base == 16 && isascii(c) && isxdigit((int)c)) {
val = (val << 4) +
- (c + 10 - (islower(c) ? 'a' : 'A'));
+ (c + 10 - (islower((int)c) ? 'a' : 'A'));
cp++;
continue;
}
/*
* Check for trailing characters.
*/
- if (*cp && (!isascii(*cp) || !isspace(*cp)))
+ if (*cp && (!isascii(*cp) || !isspace((int)*cp)))
return (0);
/*
* Concoct the address according to