summaryrefslogtreecommitdiff
path: root/sys/src/cmd/ndb/dns.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-06-14 19:20:06 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-06-14 19:20:06 +0200
commit2e0fac766c44301086d98910555ba351778cfb52 (patch)
tree13c20c8e9f2dd5f85b35b06c74b3ba6c6a71add5 /sys/src/cmd/ndb/dns.c
parent249915c3795858582dbf5b0f1e1533b50b90737d (diff)
ndb/cs, ndb/dns: ignore special commands from users different from the one we run the service owner
this prevents users like "none" from toggling special options in ndb/dns and ndb/cs.
Diffstat (limited to 'sys/src/cmd/ndb/dns.c')
-rw-r--r--sys/src/cmd/ndb/dns.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/src/cmd/ndb/dns.c b/sys/src/cmd/ndb/dns.c
index 8fc4f5167..32bae4040 100644
--- a/sys/src/cmd/ndb/dns.c
+++ b/sys/src/cmd/ndb/dns.c
@@ -77,6 +77,7 @@ char *zonerefreshprogram;
char *logfile = "dns"; /* or "dns.test" */
char *dbfile;
+char *dnsuser;
char mntpt[Maxpath];
int addforwtarg(char *);
@@ -198,6 +199,7 @@ main(int argc, char *argv[])
opendatabase();
now = time(nil); /* open time files before we fork */
nowns = nsec();
+ dnsuser = estrdup(getuser());
snprint(servefile, sizeof servefile, "#s/dns%s", ext);
dir = dirstat(servefile);
@@ -717,10 +719,14 @@ rwrite(Job *job, Mfile *mf, Request *req)
if(cnt > 0 && job->request.data[cnt-1] == '\n')
job->request.data[cnt-1] = 0;
+ if(strcmp(mf->user, "none") == 0 || strcmp(mf->user, dnsuser) != 0)
+ goto query; /* skip special commands if not owner */
+
/*
* special commands
*/
-// dnslog("rwrite got: %s", job->request.data);
+ if(debug)
+ dnslog("rwrite got: %s", job->request.data);
send = 1;
if(strcmp(job->request.data, "debug")==0)
debug ^= 1;
@@ -744,6 +750,7 @@ rwrite(Job *job, Mfile *mf, Request *req)
if (send)
goto send;
+query:
/*
* kill previous reply
*/