summaryrefslogtreecommitdiff
blob: 67ce6e471960c9461401667858271315c1d72c5e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

EAPI=5

inherit systemd user

DESCRIPTION="Proxy DNS server with permanent caching"
HOMEPAGE="http://members.home.nl/p.a.rombouts/pdnsd/"
SRC_URI="http://members.home.nl/p.a.rombouts/pdnsd/releases/${P}-par.tar.gz"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="alpha amd64 arm ia64 ppc ~s390 sparc x86"
IUSE="debug ipv6 isdn +urandom test"

RDEPEND=""
DEPEND="test? ( net-dns/bind-tools )"

pkg_setup() {
	enewgroup pdnsd
	enewuser pdnsd -1 -1 /var/lib/pdnsd pdnsd
}

src_configure() {
	local myconf=""
	use debug && myconf="${myconf} --with-debug=3"
	use urandom && myconf="${myconf} --with-random-device=/dev/urandom"

	econf \
		--disable-dependency-tracking \
		--sysconfdir=/etc/pdnsd \
		--with-cachedir=/var/cache/pdnsd \
		--with-default-id=pdnsd \
		$(use_enable ipv6) $(use_enable ipv6 ipv6-startup) \
		$(use_enable isdn) \
		${myconf}
}

src_install() {
	emake DESTDIR="${D}" install

	dodoc AUTHORS ChangeLog* NEWS README THANKS TODO README.par
	docinto contrib ; dodoc contrib/{README,dhcp2pdnsd,pdnsd_dhcp.pl}
	docinto html ; dohtml doc/html/*
	docinto txt ; dodoc doc/txt/*
	newdoc doc/pdnsd.conf pdnsd.conf.sample

	newinitd "${FILESDIR}/pdnsd.rc8" pdnsd
	newinitd "${FILESDIR}/pdnsd.online.2" pdnsd-online
	systemd_newtmpfilesd "${FILESDIR}/pdnsd.tmpfiles" pdnsd.conf
	systemd_dounit "${FILESDIR}/pdnsd.service"

	mkdir "${T}"/confd || die

	cat - > "${T}"/confd/pdnsd-online <<EOF
# Make sure to change the rc_need variable to the service for the
# interface that connects you to the dns servers.
#
# For instance if you use a PPP connection on ppp0 to connect, set
#   rc_need="net.ppp0"

rc_need="net.lo"
EOF

	# Don't try to do the smart thing and add the --help output here:
	# it will cause the file to be etc-updated if the help text
	# changes and fails when cross-compiling.
	cat - > "${T}"/confd/pdnsd <<EOF
# Command line options, check pdnsd --help for a list of valid
# parameters. Note that most of the options that can be given at
# command-line are also available as configuration parameters in
# /etc/pdnsd/pdnsd.conf
PDNSDCONFIG=""
EOF

	doconfd "${T}"/confd/*

	# gentoo resolvconf support
	exeinto /etc/resolvconf/update.d
	newexe "${FILESDIR}/pdnsd.resolvconf-r1" pdnsd
}

src_test() {
	fail_kill() {
		kill -9 $(<"${T}"/pid)
		die "$1"
	}

	mkdir "${T}/pdnsd" || die
	echo -n -e "pd12\0\0\0\0" > "${T}/pdnsd/pdnsd.cache"
	IPS=$(grep ^nameserver /etc/resolv.conf | sed -e 's/nameserver \(.*\)/\tip=\1;/g' | xargs)
	sed -e "s/\tip=/${IPS}/" -e "s:cache_dir=:cache_dir=${T}/pdnsd:" "${FILESDIR}/pdnsd.conf.test" \
		> "${T}/pdnsd.conf.test"
	src/pdnsd -c "${T}/pdnsd.conf.test" -g -s -d -p "${T}/pid" || die "couldn't start daemon"
	sleep 3

	find "${T}" -ls
	[ -s "${T}/pid" ] || die "empty or no pid file created"
	[ -S "${T}/pdnsd/pdnsd.status" ] || fail_kill "no socket created"
	src/pdnsd-ctl/pdnsd-ctl -c "${T}/pdnsd" server all up || fail_kill "failed to start the daemon"
	src/pdnsd-ctl/pdnsd-ctl -c "${T}/pdnsd" status || fail_kill "failed to communicate with the daemon"
	sleep 3

	dig @127.0.0.1 -p 33455 localhost > "${T}"/dig.output 2>&1
	cat "${T}"/dig.output || die
	fgrep -q "status: NOERROR" "${T}"/dig.output || fail_kill "www.gentoo.org lookup failed"

	kill $(<"${T}/pid") || fail_kill "failed to terminate daemon"
}

pkg_postinst() {
	elog
	elog "Add pdnsd to your default runlevel - rc-update add pdnsd default"
	elog ""
	elog "Add pdnsd-online to your online runlevel."
	elog "The online interface will be listed in /etc/conf.d/pdnsd-online"
	elog ""
	elog "Sample config file in /etc/pdnsd/pdnsd.conf.sample"

	# The tmpfiles.d configuration does not come into effect before the
	# next reboot so create the cachedir now.
	local cachedir="/var/cache/pdnsd"
	if [[ ! -d ${cachedir} ]] ; then
		mkdir ${cachedir} || eerror "Failed to create cache"
	fi
	chown pdnsd:pdnsd ${cachedir} \
		|| eerror "Failed to set ownership for cachedir"
	chmod 0750 ${cachedir} \
		|| eerror "Failed to set permissions for cachedir"
}