@@ -19,6 +19,7 @@ SMARTDNS_BIN=/opt/usr/sbin/smartdns
19
19
SMARTDNS_CONF=/opt/etc/smartdns/smartdns.conf
20
20
DNSMASQ_CONF=" /etc/dnsmasq.conf /var/etc/dnsmasq.conf /etc/storage/dnsmasq/dnsmasq.conf"
21
21
SMARTDNS_PID=/run/smartdns.pid
22
+ SMARTDNS_CHECK_PID=/tmp/smartdns_delay_check.pid
22
23
if [ ! -d " /run" ]; then
23
24
SMARTDNS_PID=/var/run/smartdns.pid
24
25
fi
@@ -31,6 +32,8 @@ SMARTDNS_OPT=/opt/etc/smartdns/smartdns-opt.conf
31
32
# 2: replace
32
33
SMARTDNS_WORKMODE=" 1"
33
34
35
+ SMARTDNS_INIT_SCRIPT=" $0 "
36
+
34
37
if [ -f " $SMARTDNS_OPT " ]; then
35
38
. " $SMARTDNS_OPT "
36
39
fi
@@ -102,13 +105,26 @@ get_dnsmasq_cmd()
102
105
fi
103
106
}
104
107
105
- restart_dnsmasq ()
108
+ get_dnsmasq_cmdline ()
106
109
{
110
+
107
111
local CMD=" "
112
+ local loop=0
113
+
114
+ while [ $loop -lt 3 ]; do
115
+ get_dnsmasq_cmd
116
+ if [ ! -z " $CMD " ]; then
117
+ break ;
118
+ fi
119
+
120
+ $SMARTDNS_INIT_SCRIPT stop
121
+ sleep 1
122
+ loop=$(( loop+ 1 ))
123
+ done
108
124
109
- get_dnsmasq_cmd
110
125
if [ -z " $CMD " ]; then
111
126
echo " cannot find dnsmasq"
127
+ service restart_dnsmasq 2> /dev/null
112
128
return 1
113
129
fi
114
130
@@ -121,7 +137,7 @@ restart_dnsmasq()
121
137
PID2=" $( echo " $CMD " | awk ' NR==2{print $1}' ) "
122
138
PID2_PPID=" $( grep ' PPid:' /proc/$PID2 /status | awk ' {print $2}' 2> /dev/null) "
123
139
if [ " $PID2_PPID " != " $PID1 " ]; then
124
- kill -9 " $PID2 "
140
+ kill -9 " $PID2 " 2> /dev/null
125
141
fi
126
142
PID=$PID1
127
143
else
@@ -134,13 +150,29 @@ restart_dnsmasq()
134
150
return 1
135
151
fi
136
152
137
- kill -9 " $PID "
138
-
139
- # get dnsmasq command
140
153
CMD=" $( echo " $CMD " | head -n 1) "
141
154
DNSMASQ_CMD=" $( echo " $CMD " | awk ' {for(i=5; i<=NF;i++)printf $i " "}' ) "
142
155
156
+ return 0
157
+ }
158
+
159
+ restart_dnsmasq ()
160
+ {
161
+ if [ -z " $DNSMASQ_CMD " ]; then
162
+ get_dnsmasq_cmdline
163
+ if [ $? -ne 0 ]; then
164
+ echo " cannot find dnsmasq"
165
+ return 1
166
+ fi
167
+ fi
168
+
169
+ if [ ! -z " $PID " ]; then
170
+ kill -9 " $PID "
171
+ fi
172
+
143
173
$DNSMASQ_CMD
174
+
175
+ return $?
144
176
}
145
177
146
178
add_dhcp_options6 ()
@@ -213,7 +245,7 @@ set_dnsmasq_conf()
213
245
fi
214
246
}
215
247
216
- set_dnsmasq ()
248
+ do_set_dnsmasq ()
217
249
{
218
250
local RESTART_DNSMASQ=0
219
251
@@ -231,6 +263,82 @@ set_dnsmasq()
231
263
fi
232
264
}
233
265
266
+ kill_dnsmasq_delay_check_pid ()
267
+ {
268
+ if [ ! -e " $SMARTDNS_CHECK_PID " ]; then
269
+ return
270
+ fi
271
+
272
+ PID=" $( cat $SMARTDNS_CHECK_PID ) "
273
+ if [ -d " /proc/$PID " ]; then
274
+ kill -9 $PID
275
+ fi
276
+ rm -f $SMARTDNS_CHECK_PID
277
+ }
278
+
279
+ dnsmasq_delay_check ()
280
+ {
281
+ sleep 8
282
+ rm -f $SMARTDNS_CHECK_PID
283
+ get_dnsmasq_cmdline
284
+ if [ -z " $DNSMASQ_CMD " ] ; then
285
+ $SMARTDNS_INIT_SCRIPT restart
286
+ return
287
+ fi
288
+
289
+ do_set_dnsmasq
290
+ pid=" $( cat $SMARTDNS_PID | head -n 1 2> /dev/null) "
291
+ if [ -z " $pid " ]; then
292
+ do_clear_dnsmasq
293
+ $SMARTDNS_INIT_SCRIPT start > /dev/null 2>&1 &
294
+ elif [ ! -d " /proc/$pid " ]; then
295
+ do_clear_dnsmasq
296
+ $SMARTDNS_INIT_SCRIPT start > /dev/null 2>&1 &
297
+ fi
298
+ exit 0
299
+ }
300
+
301
+ begin_dnsmasq_delay_check ()
302
+ {
303
+ DNSMASQ_CMD=" "
304
+ kill_dnsmasq_delay_check_pid
305
+ get_dnsmasq_cmdline
306
+ dnsmasq_delay_check > /dev/null 2>&1 &
307
+ PID=$!
308
+ echo $PID > $SMARTDNS_CHECK_PID
309
+ }
310
+
311
+ set_dnsmasq ()
312
+ {
313
+ get_dnsmasq_cmdline
314
+ do_set_dnsmasq
315
+ begin_dnsmasq_delay_check
316
+ }
317
+
318
+ set_jffs_dnsmasq ()
319
+ {
320
+ local RESTART_DNSMASQ=0
321
+
322
+ if [ " $( nvram get jffs2_scripts) " -ne 1 ]; then
323
+ nvram set jffs2_scripts=" 1"
324
+ nvram commit
325
+ fi
326
+
327
+ touch /jffs/configs/dnsmasq.conf.add
328
+
329
+ if [ -e " /jffs/configs/dnsmasq.conf.add" ]; then
330
+ set_dnsmasq_conf " /jffs/configs/dnsmasq.conf.add"
331
+ fi
332
+
333
+ if [ -e " /jffs/configs/dnsmasq.conf" ]; then
334
+ set_dnsmasq_conf " /jffs/configs/dnsmasq.conf"
335
+ fi
336
+
337
+ if [ $RESTART_DNSMASQ -ne 0 ]; then
338
+ restart_dnsmasq
339
+ fi
340
+ }
341
+
234
342
clear_dnsmasq_conf ()
235
343
{
236
344
local LOCAL_SERVER_IP=" "
@@ -246,7 +354,7 @@ clear_dnsmasq_conf()
246
354
fi
247
355
}
248
356
249
- clear_dnsmasq ()
357
+ do_clear_dnsmasq ()
250
358
{
251
359
local RESTART_DNSMASQ=0
252
360
@@ -259,6 +367,33 @@ clear_dnsmasq()
259
367
clear_dnsmasq_conf " $conf "
260
368
done
261
369
370
+ if [ $RESTART_DNSMASQ -ne 0 ]; then
371
+ if [ $? -eq 0 ]; then
372
+ return
373
+ fi
374
+
375
+ restart_dnsmasq
376
+ fi
377
+ }
378
+
379
+ clear_dnsmasq ()
380
+ {
381
+ kill_dnsmasq_delay_check_pid
382
+ do_clear_dnsmasq
383
+ }
384
+
385
+ clear_jffs_dnsmasq ()
386
+ {
387
+ local RESTART_DNSMASQ=0
388
+
389
+ if [ -e " /jffs/configs/dnsmasq.conf.add" ]; then
390
+ clear_dnsmasq_conf " /jffs/configs/dnsmasq.conf.add"
391
+ fi
392
+
393
+ if [ -e " /jffs/configs/dnsmasq.conf" ]; then
394
+ clear_dnsmasq_conf " /jffs/configs/dnsmasq.conf"
395
+ fi
396
+
262
397
if [ $RESTART_DNSMASQ -ne 0 ]; then
263
398
restart_dnsmasq
264
399
fi
@@ -269,14 +404,16 @@ set_smartdns_port()
269
404
if [ " $SMARTDNS_WORKMODE " = " 0" ]; then
270
405
return 0
271
406
elif [ " $SMARTDNS_WORKMODE " = " 1" ]; then
272
- sed -i " s/^\(bind .*\):53\( .*\)\?$/\1:$SMARTDNS_PORT \2 /g" $SMARTDNS_CONF
273
- sed -i " s/^\(bind-tcp .*\):53\( .*\)\?$/\1:$SMARTDNS_PORT \2 /g" $SMARTDNS_CONF
407
+ sed -i " s/^\(bind .*\):53\(@[^ ]*\)\?\( .*\)\?$/\1:$SMARTDNS_PORT \2 \3 /g" $SMARTDNS_CONF
408
+ sed -i " s/^\(bind-tcp .*\):53\(@[^ ]*\)\?\( .*\)\?$/\1:$SMARTDNS_PORT \2 \3 /g" $SMARTDNS_CONF
274
409
elif [ " $SMARTDNS_WORKMODE " = " 2" ]; then
275
- sed -i " s/^\(bind .*\):$SMARTDNS_PORT \( .*\)\?$/\1:53 \2/g" $SMARTDNS_CONF
276
- sed -i " s/^\(bind-tcp .*\):$SMARTDNS_PORT \( .*\)\?$/\1:53 \2/g" $SMARTDNS_CONF
410
+ sed -i " s/^\(bind .*\):$SMARTDNS_PORT \(@[^ ]*\)\?\( .*\)\?$/\1:53\2 \3/g" $SMARTDNS_CONF
411
+ sed -i " s/^\(bind-tcp .*\):$SMARTDNS_PORT \(@[^ ]*\)\?\( .*\)\?$/\1:53\2 \3/g" $SMARTDNS_CONF
412
+ elif [ " $SMARTDNS_WORKMODE " = " 3" ]; then
413
+ return 0
277
414
else
278
415
return 1
279
- fi
416
+ fi
280
417
281
418
return 0
282
419
}
@@ -291,6 +428,9 @@ set_rule()
291
428
elif [ " $SMARTDNS_WORKMODE " = " 2" ]; then
292
429
set_dnsmasq
293
430
return $?
431
+ elif [ " $SMARTDNS_WORKMODE " = " 3" ]; then
432
+ set_jffs_dnsmasq
433
+ return $?
294
434
else
295
435
return 1
296
436
fi
@@ -306,6 +446,9 @@ clear_rule()
306
446
elif [ " $SMARTDNS_WORKMODE " = " 2" ]; then
307
447
clear_dnsmasq
308
448
return $?
449
+ elif [ " $SMARTDNS_WORKMODE " = " 3" ]; then
450
+ clear_jffs_dnsmasq
451
+ return $?
309
452
else
310
453
return 1
311
454
fi
@@ -391,7 +534,7 @@ case "$1" in
391
534
break
392
535
fi
393
536
394
- stat=" $( cat /proc/${pid} /stat | awk ' {print $3}' 2> /dev/null) "
537
+ stat=" $( cat /proc/${pid} /stat 2> /dev/null | awk ' {print $3}' 2> /dev/null) "
395
538
if [ " $stat " = " Z" ]; then
396
539
$SLEEP $SLEEPTIME
397
540
break
0 commit comments