Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120510130654.363e32f2@newbook>
Date: Thu, 10 May 2012 13:06:54 -0700
From: Isaac Dunham <idunham@...abit.com>
To: musl@...ts.openwall.com
Subject: compatability: dnsmasq--missing headers, capset

Hello, 
I heard (on the Puppy Linux forums) that dnsmasq
(http://www.thekelleys.org.uk/dnsmasq/) doesn't build with musl, so I
checked.
dnsmasq defines _GNU_SOURCE.
1. Needs netinet/in_systm.h
Attached is one based on the version he provided.
2. Needs 
#define _PATH_LOG "/dev/log"
This should be defined (at least for _GNU_SOURCE) when including
syslog.h (glibc has it elsewhere but errors if it is directly included)
Attached is a patch that will define it at the proper time (I also
moved vsyslog out of the SYSLOG_NAMES guard, since glibc doesn't
require that, and added _BSD_SOURCE because I was changing exactly
that area anyhow)
3. After fixing the above, I get:
musl-gcc  -o dnsmasq cache.o rfc1035.o util.o option.o
forward.o network.o dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o
bpf.o helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o dhcp-common.o
outpacket.o radv.o slaac.o 
util.o: In function `sockaddr_isequal':
util.c:(.text+0x8cd): undefined reference to `IN6_ARE_ADDR_EQUAL'
network.o: In function `iface_check': 
network.c:(.text+0xfc9): undefined reference to `IN6_ARE_ADDR_EQUAL'
dnsmasq.o: In function `main': 
dnsmasq.c:(.text+0x1285): undefined reference to `capget'
dnsmasq.c:(.text+0x15d6): undefined reference to `capset'
dnsmasq.c:(.text+0x1666): undefined reference to `capset' 
slaac.o: In function `slaac_ping_reply': 
slaac.c:(.text+0x109): undefined reference to `IN6_ARE_ADDR_EQUAL'
slaac.o: In function `slaac_add_addrs': 
slaac.c:(.text+0x4a3): undefined reference to `IN6_ARE_ADDR_EQUAL'
collect2: ld returned 1 exit status 
make[1]: *** [dnsmasq] Error 1
make[1]: Leaving directory `/home/ibid/misc/src/musl/dnsmasq/src' 
make: *** [all] Error 2

So dnsmasq needs capset & capget (which provide support for Linux
capabilities).
IN6_ARE_ADDR_EQUAL is a long macro from netinet/in.h in glibc.

Reportedly it works if you patch them out, but that's an approach I'd
avoid if at all possible because of the security implications.

Isaac Dunham
View attachment "in_systm.h" of type "text/x-chdr" (164 bytes)

View attachment "syslog.diff" of type "text/x-patch" (777 bytes)

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.