Re: SASL 2.1.27 pre-release 1

Ken Murchison via Cyrus-sasl <[email protected]>
Newsgroups gmane.comp.security.cyrus.sasl
Organization Carnegie Mellon University
Message-ID <[email protected]>
Rather than stealing a bunch of per-platform #ifdefs from Apple, I'm 
wondering if this simple typecast would work.  This would essentially be 
doing the same thing that happens on those platforms that use a union 
inside struct in6_addr.

diff --git a/plugins/plugin_common.c b/plugins/plugin_common.c
index f2b26bd..1d633ee 100644
--- a/plugins/plugin_common.c
+++ b/plugins/plugin_common.c
@@ -94,7 +94,7 @@ static void sockaddr_unmapped(
      if (!IN6_IS_ADDR_V4MAPPED((&sin6->sin6_addr)))
      return;
      sin4 = (struct sockaddr_in *)sa;
-    addr = *(uint32_t *)&sin6->sin6_addr.s6_addr32[3];
+    addr = *(uint32_t *)&sin6->sin6_addr.s6_addr[12];
      port = sin6->sin6_port;
      memset(sin4, 0, sizeof(struct sockaddr_in));
      sin4->sin_addr.s_addr = addr;



On 11/25/2016 04:21 PM, Julien ÉLIE via Cyrus-sasl wrote:
> Hi Ken,
>
>> Can you try this patch for OSX:
>>
>> diff --git a/plugins/plugin_common.c b/plugins/plugin_common.c
>> index f2b26bd..1211fea 100644
>> --- a/plugins/plugin_common.c
>> +++ b/plugins/plugin_common.c
>> @@ -88,6 +88,10 @@ static void sockaddr_unmapped(
>>      uint32_t addr;
>>      int port;
>>
>> +#if defined(__FreeBSD__) && !defined(s6_addr32)
>> +#define s6_addr32 __u6_addr.__u6_addr32
>> +#endif
>> +
>>      if (sa->sa_family != AF_INET6)
>>      return;
>>      sin6 = (struct sockaddr_in6 *)sa;
>
> It works with "defined(__APPLE__)" instead of "defined(__FreeBSD__)".
>
> Yet, I found out there probably a better patch to integrate into Cyrus 
> SASL:
>   http://trillian.mit.edu/~jc/src/gs/cups/libs/cups/http.h
>
> /*
>  * Oh, the wonderful world of IPv6 compatibility.  Apparently some
>  * implementations expose the (more logical) 32-bit address parts
>  * to everyone, while others only expose it to kernel code...  To
>  * make supporting IPv6 even easier, each vendor chose different
>  * core structure and union names, so the same defines or code
>  * can't be used on all platforms.
>  *
>  * The following will likely need tweaking on new platforms that
>  * support IPv6 - the "s6_addr32" define maps to the 32-bit integer
>  * array in the in6_addr union, which is named differently on various
>  * platforms.
>  */
>
> #if defined(AF_INET6) && !defined(s6_addr32)
> #  if defined(__sun)
> #    define s6_addr32    _S6_un._S6_u32
> #  elif defined(__FreeBSD__) || defined(__NetBSD__) || 
> defined(__OpenBSD__) || defined(__APPLE__)
> #    define s6_addr32    __u6_addr.__u6_addr32
> #  elif defined(__osf__)
> #    define s6_addr32    s6_un.sa6_laddr
> #  elif defined(WIN32)
> /*
>  * Windows only defines byte and 16-bit word members of the union and
>  * requires special casing of all raw address code...
>  */
> #    define s6_addr32    error_need_win32_specific_code
> #  endif /* __sun */
> #endif /* AF_INET6 && !s6_addr32 */
>
>
>
>
>
>
>
> Yet, I now obtain the following error:
>
> /bin/sh ../libtool  --tag=CC   --mode=link gcc  -Wall -W -g -O2 -o 
> libobj.la    -lresolv -lresolv
> libtool: link: ar cru .libs/libobj.a
> ar: no archive members specified
> usage:  ar -d [-TLsv] archive file ...
>     ar -m [-TLsv] archive file ...
>     ar -m [-abiTLsv] position archive file ...
>     ar -p [-TLsv] archive [file ...]
>     ar -q [-cTLsv] archive file ...
>     ar -r [-cuTLsv] archive file ...
>     ar -r [-abciuTLsv] position archive file ...
>     ar -t [-TLsv] archive [file ...]
>     ar -x [-ouTLsv] archive [file ...]
> make[3]: *** [libobj.la] Error 1
>
>
> Maybe caused by "noinst_LTLIBRARIES" not properly defined?
>

-- 
Kenneth Murchison
Principal Systems Software Engineer
Carnegie Mellon University
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.