]> git.pld-linux.org Git - packages/djbdns.git/blob - djbdns-1.05-multiip.diff
- kosher Makefiles
[packages/djbdns.git] / djbdns-1.05-multiip.diff
1 diff -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: \
64 diff -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.050621 seconds and 3 git commands to generate.