]> git.pld-linux.org Git - packages/djbdns.git/blame - djbdns-1.05-multiip.diff
- fix weird suid permissions on dirs (why?)
[packages/djbdns.git] / djbdns-1.05-multiip.diff
CommitLineData
2fb91b69 1diff -ur djbdns-1.05/Makefile djbdns-1.05-multiip/Makefile
2--- djbdns-1.05/Makefile Sun Feb 11 21:11:45 2001
3+++ djbdns-1.05-multiip/Makefile Thu Feb 15 14:49:06 2001
4@@ -626,9 +626,9 @@
5 ./compile parsetype.c
6
7 pickdns: \
8-load pickdns.o server.o response.o droproot.o qlog.o prot.o dns.a \
9+load pickdns.o server.o iopause.o response.o droproot.o qlog.o prot.o dns.a \
10 env.a libtai.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib
11- ./load pickdns server.o response.o droproot.o qlog.o \
12+ ./load pickdns server.o iopause.o response.o droproot.o qlog.o \
13 prot.o dns.a env.a libtai.a cdb.a alloc.a buffer.a unix.a \
14 byte.a `cat socket.lib`
15
16@@ -704,9 +704,9 @@
17 ./compile random-ip.c
18
19 rbldns: \
20-load rbldns.o server.o response.o dd.o droproot.o qlog.o prot.o dns.a \
21+load rbldns.o server.o iopause.o response.o dd.o droproot.o qlog.o prot.o dns.a \
22 env.a libtai.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib
23- ./load rbldns server.o response.o dd.o droproot.o qlog.o \
24+ ./load rbldns server.o iopause.o response.o dd.o droproot.o qlog.o \
25 prot.o dns.a env.a libtai.a cdb.a alloc.a buffer.a unix.a \
26 byte.a `cat socket.lib`
27
28@@ -774,7 +774,7 @@
29 compile server.c byte.h case.h env.h buffer.h strerr.h ip4.h uint16.h \
30 ndelay.h socket.h uint16.h droproot.h qlog.h uint16.h response.h \
31 uint32.h dns.h stralloc.h gen_alloc.h iopause.h taia.h tai.h uint64.h \
32-taia.h
33+taia.h iopause.h alloc.h
34 ./compile server.c
35
36 setup: \
37@@ -979,10 +979,10 @@
38 ./compile timeoutwrite.c
39
40 tinydns: \
41-load tinydns.o server.o droproot.o tdlookup.o response.o qlog.o \
42+load tinydns.o server.o iopause.o droproot.o tdlookup.o response.o qlog.o \
43 prot.o dns.a libtai.a env.a cdb.a alloc.a buffer.a unix.a byte.a \
44 socket.lib
45- ./load tinydns server.o droproot.o tdlookup.o response.o \
46+ ./load tinydns server.o iopause.o droproot.o tdlookup.o response.o \
47 qlog.o prot.o dns.a libtai.a env.a cdb.a alloc.a buffer.a \
48 unix.a byte.a `cat socket.lib`
49
50@@ -1084,10 +1084,10 @@
51 ./compile utime.c
52
53 walldns: \
54-load walldns.o server.o response.o droproot.o qlog.o prot.o dd.o \
55+load walldns.o server.o iopause.o response.o droproot.o qlog.o prot.o dd.o \
56 dns.a env.a cdb.a alloc.a buffer.a unix.a byte.a socket.lib
57- ./load walldns server.o response.o droproot.o qlog.o \
58- prot.o dd.o dns.a env.a cdb.a alloc.a buffer.a unix.a \
59+ ./load walldns server.o iopause.o response.o droproot.o qlog.o \
60+ prot.o dd.o dns.a libtai.a env.a cdb.a alloc.a buffer.a unix.a \
61 byte.a `cat socket.lib`
62
63 walldns-conf: \
64diff -ur djbdns-1.05/server.c djbdns-1.05-multiip/server.c
65--- djbdns-1.05/server.c Sun Feb 11 21:11:45 2001
66+++ djbdns-1.05-multiip/server.c Thu Feb 15 16:30:33 2001
67@@ -11,6 +11,8 @@
68 #include "qlog.h"
69 #include "response.h"
70 #include "dns.h"
71+#include "alloc.h"
72+#include "iopause.h"
73
74 extern char *fatal;
75 extern char *starting;
76@@ -25,6 +27,11 @@
77
78 static char *q;
79
80+void nomem()
81+{
82+ strerr_die2x(111,fatal,"out of memory");
83+}
84+
85 static int doit(void)
86 {
87 unsigned int pos;
88@@ -82,35 +89,74 @@
89 int main()
90 {
91 char *x;
92- int udp53;
93+ int *udp53;
94+ unsigned int off;
95+ unsigned int cnt;
96+ iopause_fd *iop;
97
98 x = env_get("IP");
99 if (!x)
100 strerr_die2x(111,fatal,"$IP not set");
101- if (!ip4_scan(x,ip))
102- strerr_die3x(111,fatal,"unable to parse IP address ",x);
103-
104- udp53 = socket_udp();
105- if (udp53 == -1)
106- strerr_die2sys(111,fatal,"unable to create UDP socket: ");
107- if (socket_bind4_reuse(udp53,ip,53) == -1)
108- strerr_die2sys(111,fatal,"unable to bind UDP socket: ");
109+ off=0;
110+ cnt=0;
111+ while (x[off]) {
112+ unsigned int l;
113+ char dummy[4];
114+ l=ip4_scan(x+off,dummy);
115+ if (!l)
116+ strerr_die3x(111,fatal,"unable to parse IP address ",x+off);
117+ cnt++;
118+ if (!x[off+l]) break;
119+ if ((x[off+l]!=',') && (x[off+l]!='/'))
120+ strerr_die3x(111,fatal,"unable to parse IP address ",x+off);
121+ off+=l+1;
122+ }
123+ udp53=(int *) alloc(sizeof(int) *cnt);
124+ if (!udp53) nomem();
125+ iop=(iopause_fd *) alloc(sizeof(*iop) * cnt);
126+ if (!iop) nomem();
127+
128+ off=0;
129+ cnt=0;
130+ while (x[off]) {
131+ unsigned int l;
132+ l=ip4_scan(x+off,ip);
133+ udp53[cnt] = socket_udp();
134+ if (udp53[cnt] == -1)
135+ strerr_die2sys(111,fatal,"unable to create UDP socket: ");
136+ if (socket_bind4_reuse(udp53[cnt],ip,53) == -1)
137+ strerr_die2sys(111,fatal,"unable to bind UDP socket: ");
138+ ndelay_off(udp53[cnt]);
139+ socket_tryreservein(udp53[cnt],65536);
140+ iop[cnt].fd=udp53[cnt];
141+ iop[cnt].events=IOPAUSE_READ;
142+ cnt++;
143+ if (!x[off+l]) break;
144+ off+=l+1;
145+ }
146
147 droproot(fatal);
148
149 initialize();
150-
151- ndelay_off(udp53);
152- socket_tryreservein(udp53,65536);
153
154 buffer_putsflush(buffer_2,starting);
155-
156+
157 for (;;) {
158- len = socket_recv4(udp53,buf,sizeof buf,ip,&port);
159- if (len < 0) continue;
160- if (!doit()) continue;
161- if (response_len > 512) response_tc();
162- socket_send4(udp53,response,response_len,ip,port);
163- /* may block for buffer space; if it fails, too bad */
164+ struct taia stamp;
165+ struct taia deadline;
166+ unsigned int i;
167+ taia_now(&stamp);
168+ taia_uint(&deadline,300);
169+ taia_add(&deadline,&deadline,&stamp);
170+ iopause(iop,cnt,&deadline,&stamp);
171+ for (i=0;i<cnt;i++)
172+ if (iop[i].revents) {
173+ len = socket_recv4(udp53[i],buf,sizeof buf,ip,&port);
174+ if (len < 0) continue;
175+ if (!doit()) continue;
176+ if (response_len > 512) response_tc();
177+ socket_send4(udp53[i],response,response_len,ip,port);
178+ /* may block for buffer space; if it fails, too bad */
179+ }
180 }
181 }
This page took 0.044032 seconds and 4 git commands to generate.