-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile
161 lines (136 loc) · 5.54 KB
/
Makefile
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
TTDNSDVERSION= 0.7
DEBIANVERSION=$(TTDNSDVERSION)-1
GPGKEYID=E012B42D
EXEC = ttdnsd
CC = /usr/bin/gcc
CHROOT = /var/lib/ttdnsd
PIDFILE = $(DESTDIR)/$(CHROOT)/pid
CONF = ttdnsd.conf
TORTSOCKSCONF = tor-tsocks.conf
MANPAGE = ttdnsd.1
INITSCRIPT = ttdnsd.init
TSOCKSLIB = tsocks
TORSOCKSLIB = torsocks
# If the program ever grows, we'll enjoy this macro:
SRCFILES := $(wildcard *.c)
OBJFILES := $(patsubst %.c,%.o,$(wildcard *.c))
SUDO = sudo
# Build host specific additionals. Uncomment whatever matches your situation.
# For BSD's with pkgsrc:
#EXTRA_CFLAGS = -I /usr/pkg/include -L /usr/pkg/lib
# Hardening and warnings for building with gcc
GCCWARNINGS = -Wall -fno-strict-aliasing -W -Wfloat-equal -Wundef \
-Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes \
-Wwrite-strings -Wredundant-decls -Wchar-subscripts -Wcomment \
-Wformat=2 -Wwrite-strings -Wmissing-declarations -Wredundant-decls \
-Wnested-externs -Wbad-function-cast -Wswitch-enum -Winit-self \
-Wmissing-field-initializers -Wdeclaration-after-statement \
-Wold-style-definition -Waddress -Wmissing-noreturn -Wnormalized=id \
-Woverride-init -Wstrict-overflow=1 -Wextra -Warray-bounds \
-Wstack-protector -Wformat -Wformat-security -Wpointer-sign
GCCHARDENING=-D_FORTIFY_SOURCE=2 -fstack-protector-all -fwrapv -fPIE --param ssp-buffer-size=1
LDHARDENING=-pie -z relro -z now
CFLAGS=-g -O2 $(EXTRA_CFLAGS) $(GCCHARDENING) $(GCCWARNINGS) -Werror
LDFLAGS= $(LDHARDENING)
all: $(SRCFILES)
$(CC) $(CFLAGS) $(SRCFILES) -o $(EXEC)
# Don't forget to add '/usr/lib/torsocks/' to '/etc/ld.so.conf.d/torsocks.conf'
# also, you'll need to run `sudo ldconfig -v` when you've added the path
torsocks: $(SRCFILES)
$(CC) $(CFLAGS) $(SRCFILES) -o $(EXEC) -L/usr/lib/torsocks/$(TORSOCKSLIB) -L$(STAGING_DIR)/usr/lib
notsocks:
$(CC) $(CFLAGS) $(SRCFILES) -o $(EXEC) -L$(STAGING_DIR)/usr/lib
static: $(SRCFILES)
$(CC) $(CFLAGS) -static $(SRCFILES) -o $(EXEC) -L$(STAGING_DIR)/usr/lib/libtsocks.a
torsocks-static: $(SRCFILES)
$(CC) $(CFLAGS) -static $(SRCFILES) -o $(EXEC) -L$(STAGING_DIR)/usr/lib/torsocks/libtorsocks.a
clean:
rm -f $(OBJFILES) $(EXEC)
install: all
# strip $(EXEC)
test -d $(DESTDIR)$(CHROOT) || mkdir -p $(DESTDIR)$(CHROOT)
test -d $(DESTDIR)/etc/ || mkdir -p $(DESTDIR)/etc/
cp $(CONF) $(DESTDIR)/etc/$(CONF)
cp $(TORTSOCKSCONF) $(DESTDIR)$(CHROOT)/tsocks.conf
test -d $(DESTDIR)/usr/sbin/ || mkdir -p $(DESTDIR)/usr/sbin/
cp $(EXEC) $(DESTDIR)/usr/sbin/
test -d $(DESTDIR)/usr/share/man/man1/ || mkdir -p $(DESTDIR)/usr/share/man/man1/
cp $(MANPAGE) $(DESTDIR)/usr/share/man/man1/
test -d $(DESTDIR)/etc/init.d/ || mkdir -p $(DESTDIR)/etc/init.d/
cp $(INITSCRIPT) $(DESTDIR)/etc/init.d/ttdnsd
test -d $(DESTDIR)/usr/share/doc/ttdnsd || mkdir -p \
$(DESTDIR)/usr/share/doc/ttdnsd/
cp -r sample-configurations $(DESTDIR)/usr/share/doc/ttdnsd/
test -d $(DESTDIR)/etc/default/ || mkdir -p $(DESTDIR)/etc/default/
cp ttdnsd.defaults $(DESTDIR)/etc/default/ttdnsd
uninstall: all
rm $(DESTDIR)/usr/sbin/$(EXEC)
rm $(DESTDIR)/etc/$(CONF)
rm -ri $(DESTDIR)$(CHROOT)
rm $(DESTDIR)/usr/share/man/man1/$(MANPAGE)
rm $(DESTDIR)/etc/init.d/ttdnsd
rm -r $(DESTDIR)/$(DESTDIR)/usr/share/doc/ttdnsd
demo: install
echo "Killing ttdnsd"
-killall -9 ttdnsd
echo "Starting ttdnsd"
echo "Starting ttdnsd"
TSOCKS_CONF_FILE=tsocks.conf ttdnsd -b 127.0.0.1 -p 53 \
-P $(PIDFILE) -l
echo "Attempting to lookup MX record for torproject.org through ttdnsd"
dig @127.0.0.1 -t mx torproject.org
basic-dns-test: all
-$(SUDO) killall -9 ttdnsd
$(SUDO) sh -ec 'TSOCKS_CONF_FILE=tsocks.conf ./ttdnsd -l'
dig @127.0.0.1 -t mx torproject.org
deb-src:
dpkg-buildpackage -S -rfakeroot -us -uc -I.git -i.git
deb:
dpkg-buildpackage -rfakeroot -us -uc -I.git -i.git
deb-sign:
debsign ttdnsd_$(TTDNSDVERSION)*.changes
deb-clean:
-rm build
debian/rules clean
src-tar-gz: clean
cd .. && mv ttdnsd ttdnsd-$(TTDNSDVERSION) && \
tar --owner=nobody --group=nogroup --exclude=.gitignore \
--exclude=.git \
-cvzf ttdnsd-$(TTDNSDVERSION).tar.gz ttdnsd-$(TTDNSDVERSION) && mv \
ttdnsd-$(TTDNSDVERSION) ttdnsd
signed-src: src-tar-gz
gpg -u $(GPGKEYID) --use-agent -ab ../ttdnsd-$(TTDNSDVERSION).tar.gz
git-tag:
git tag -u $(GPGKEYID) ttdnsd-$(TTDNSDVERSION)
git push origin ttdnsd-$(TTDNSDVERSION)
full-release: version-bump src-tar-gz deb-src deb
echo "Hopefully we have a release!"
full-release-signed: version-bump src-tar-gz deb-src deb deb-sign signed-src
echo "Hopefully we have a signed release!"
# These all work; you've broken something if these fail
demo-dns-tests: demo
dig @127.0.0.1 -x 38.229.70.10
dig @127.0.0.1 -t A torproject.org
dig @127.0.0.1 -t SOA torproject.org
dig @127.0.0.1 -t NS torproject.org
dig @127.0.0.1 -t MX torproject.org
dig @127.0.0.1 -t CNAME svn.freehaven.net
dig @127.0.0.1 -t srv _xmpp-client._tcp.google.com
dig @127.0.0.1 -t aaaa www.kame.net
dig @127.0.0.1 -t RRSIG nic.se
stress-test:
dig @127.0.0.1 -x 38.229.70.10
dig @127.0.0.1 -t A torproject.org
dig @127.0.0.1 -t SOA torproject.org
dig @127.0.0.1 -t NS torproject.org
dig @127.0.0.1 -t MX torproject.org
dig @127.0.0.1 -t CNAME svn.freehaven.net
dig @127.0.0.1 -t srv _xmpp-client._tcp.google.com
dig @127.0.0.1 -t aaaa www.kame.net
dig @127.0.0.1 -t RRSIG nic.se
# This should update the version to match $(TTDNSDVERSION)
version-bump:
echo $(TTDNSDVERSION) > VERSION
perl -p -i -e "s/(#define TTDNSD_VERSION)(.*)/#define TTDNSD_VERSION \"$(TTDNSDVERSION)\"/" ttdnsd.h
perl -p -i -e "s/(PKG_VERSION:=)(.*)/PKG_VERSION:=$(TTDNSDVERSION)/" package/ttdnsd/Makefile
dch -v $(DEBIANVERSION) -D unstable -m "new upstream release"