git: 9front

Download patch

ref: 206862fbf11c8163d90dea86f3dcf79f19831a0e
parent: 2314d1b8e3386856f7e71855415e8aa4e3c16e73
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Fri Jun 14 15:20:06 EDT 2013

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.

--- a/sys/src/cmd/ndb/cs.c
+++ b/sys/src/cmd/ndb/cs.c
@@ -87,6 +87,7 @@
 long	active;		/* number of active slaves */
 char	*dbfile;
 Ndb	*db, *netdb;
+char	*csuser;
 
 void	rversion(Job*);
 void	rflush(Job*);
@@ -266,6 +267,7 @@
 	netinit(0);
 
 	if(!justsetname){
+		csuser = estrdup(getuser());
 		mountinit(servefile, mntpt);
 		io();
 	}
@@ -779,6 +781,9 @@
 	}
 	job->request.data[cnt] = 0;
 
+	if(strcmp(mf->user, "none") == 0 || strcmp(mf->user, csuser) != 0)
+		goto query;	/* skip special commands if not owner */
+
 	/*
 	 *  toggle debugging
 	 */
@@ -825,6 +830,7 @@
 		goto send;
 	}
 
+query:
 	if(mf->ref){
 		err = "query already in progress";
 		goto send;
--- a/sys/src/cmd/ndb/dns.c
+++ b/sys/src/cmd/ndb/dns.c
@@ -77,6 +77,7 @@
 
 char	*logfile = "dns";	/* or "dns.test" */
 char	*dbfile;
+char	*dnsuser;
 char	mntpt[Maxpath];
 
 int	addforwtarg(char *);
@@ -198,6 +199,7 @@
 	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 @@
 	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 @@
 	if (send)
 		goto send;
 
+query:
 	/*
 	 *  kill previous reply
 	 */
--