svn commit: r223188 - projects/jailconf/usr.sbin/jail

Jamie Gritton jamie at FreeBSD.org
Fri Jun 17 16:06:14 UTC 2011


Author: jamie
Date: Fri Jun 17 16:06:13 2011
New Revision: 223188
URL: http://svn.freebsd.org/changeset/base/223188

Log:
  Change cfstrings from an STAILQ into a TAILQ to allow commands to be
   traversed in reverse order.

Modified:
  projects/jailconf/usr.sbin/jail/command.c
  projects/jailconf/usr.sbin/jail/config.c
  projects/jailconf/usr.sbin/jail/jail.c
  projects/jailconf/usr.sbin/jail/jailp.h
  projects/jailconf/usr.sbin/jail/jailparse.y
  projects/jailconf/usr.sbin/jail/state.c

Modified: projects/jailconf/usr.sbin/jail/command.c
==============================================================================
--- projects/jailconf/usr.sbin/jail/command.c	Fri Jun 17 16:03:00 2011	(r223187)
+++ projects/jailconf/usr.sbin/jail/command.c	Fri Jun 17 16:06:13 2011	(r223188)
@@ -111,7 +111,7 @@ run_command(struct cfjail *j, enum intpa
 			if (j->intparams[comparam] == NULL)
 				return 0;
 			j->comstring =
-			    STAILQ_FIRST(&j->intparams[comparam]->val);
+			    TAILQ_FIRST(&j->intparams[comparam]->val);
 		}
 		j->comparam = comparam;
 	} else
@@ -125,7 +125,7 @@ run_command(struct cfjail *j, enum intpa
 		return 1;
 	}
 	j->comstring =
-	    comstring == COMSTRING_DUMMY ? NULL : STAILQ_NEXT(comstring, tq);
+	    comstring == COMSTRING_DUMMY ? NULL : TAILQ_NEXT(comstring, tq);
 	if (comstring != COMSTRING_DUMMY && comstring->len == 0)
 		goto next_comstring;
 	/*
@@ -294,11 +294,11 @@ run_command(struct cfjail *j, enum intpa
 		if (j->name != NULL)
 			goto default_command;
 		argc = 0;
-		STAILQ_FOREACH(s, &j->intparams[IP_COMMAND]->val, tq)
+		TAILQ_FOREACH(s, &j->intparams[IP_COMMAND]->val, tq)
 			argc++;
 		argv = alloca((argc + 1) * sizeof(char *));
 		argc = 0;
-		STAILQ_FOREACH(s, &j->intparams[IP_COMMAND]->val, tq)
+		TAILQ_FOREACH(s, &j->intparams[IP_COMMAND]->val, tq)
 			argv[argc++] = s->s;
 		argv[argc] = NULL;
 		j->comstring = NULL;

Modified: projects/jailconf/usr.sbin/jail/config.c
==============================================================================
--- projects/jailconf/usr.sbin/jail/config.c	Fri Jun 17 16:03:00 2011	(r223187)
+++ projects/jailconf/usr.sbin/jail/config.c	Fri Jun 17 16:06:13 2011	(r223188)
@@ -178,7 +178,7 @@ load_config(void)
 		TAILQ_FOREACH(p, &j->params, tq) {
 		    p->gen = ++pgen;
 		find_vars:
-		    STAILQ_FOREACH(s, &p->val, tq) {
+		    TAILQ_FOREACH(s, &p->val, tq) {
 			varoff = 0;
 			while ((v = STAILQ_FIRST(&s->vars))) {
 				TAILQ_FOREACH(vp, &j->params, tq)
@@ -202,7 +202,7 @@ load_config(void)
 					    v->name);
 					goto bad_var;
 				}
-				STAILQ_FOREACH(vs, &vp->val, tq)
+				TAILQ_FOREACH(vs, &vp->val, tq)
 					if (!STAILQ_EMPTY(&vs->vars)) {
 						vp->gen = pgen;
 						TAILQ_REMOVE(&j->params, vp,
@@ -211,8 +211,8 @@ load_config(void)
 						p = vp;
 						goto find_vars;
 					}
-				vs = STAILQ_FIRST(&vp->val);
-				if (STAILQ_NEXT(vs, tq) != NULL &&
+				vs = TAILQ_FIRST(&vp->val);
+				if (TAILQ_NEXT(vs, tq) != NULL &&
 				    (s->s[0] != '\0' ||
 				     STAILQ_NEXT(v, tq))) {
 					jail_warnx(j, "%s: array cannot be "
@@ -227,12 +227,12 @@ load_config(void)
 				memcpy(s->s + v->pos + varoff, vs->s, vs->len);
 				varoff += vs->len;
 				s->len += vs->len;
-				while ((vs = STAILQ_NEXT(vs, tq))) {
+				while ((vs = TAILQ_NEXT(vs, tq))) {
 					ns = emalloc(sizeof(struct cfstring));
 					ns->s = estrdup(vs->s);
 					ns->len = vs->len;
 					STAILQ_INIT(&ns->vars);
-					STAILQ_INSERT_AFTER(&p->val, s, ns, tq);
+					TAILQ_INSERT_AFTER(&p->val, s, ns, tq);
 					s = ns;
 				}
 			free_var:
@@ -298,7 +298,7 @@ add_param(struct cfjail *j, const struct
 		if (j == NULL)
 			j = add_jail();
 	}
-	STAILQ_INIT(&nss);
+	TAILQ_INIT(&nss);
 	if (p != NULL) {
 		name = p->name;
 		flags = p->flags;
@@ -306,7 +306,7 @@ add_param(struct cfjail *j, const struct
 		 * Make a copy of the parameter's string list,
 		 * which may be freed if it's overridden later.
 		 */
-		STAILQ_FOREACH(s, &p->val, tq) {
+		TAILQ_FOREACH(s, &p->val, tq) {
 			ns = emalloc(sizeof(struct cfstring));
 			ns->s = estrdup(s->s);
 			ns->len = s->len;
@@ -317,7 +317,7 @@ add_param(struct cfjail *j, const struct
 				nv->pos = v->pos;
 				STAILQ_INSERT_TAIL(&ns->vars, nv, tq);
 			}
-			STAILQ_INSERT_TAIL(&nss, ns, tq);
+			TAILQ_INSERT_TAIL(&nss, ns, tq);
 		}
 	} else {
 		flags = PF_APPEND;
@@ -338,7 +338,7 @@ add_param(struct cfjail *j, const struct
 			ns->s = estrdup(value);
 			ns->len = strlen(value);
 			STAILQ_INIT(&ns->vars);
-			STAILQ_INSERT_TAIL(&nss, ns, tq);
+			TAILQ_INSERT_TAIL(&nss, ns, tq);
 		}
 	}
 
@@ -355,16 +355,16 @@ add_param(struct cfjail *j, const struct
 			free(dp->name);
 			dp->name = estrdup(name);
 		}
-		if (!(flags & PF_APPEND) || STAILQ_EMPTY(&nss))
+		if (!(flags & PF_APPEND) || TAILQ_EMPTY(&nss))
 			free_param_strings(dp);
-		STAILQ_CONCAT(&dp->val, &nss);
+		TAILQ_CONCAT(&dp->val, &nss, tq);
 		dp->flags |= flags;
 	} else {
 		/* Not found - add it. */
 		np = emalloc(sizeof(struct cfparam));
 		np->name = estrdup(name);
-		STAILQ_INIT(&np->val);
-		STAILQ_CONCAT(&np->val, &nss);
+		TAILQ_INIT(&np->val);
+		TAILQ_CONCAT(&np->val, &nss, tq);
 		np->flags = flags;
 		np->gen = 0;
 		TAILQ_INSERT_TAIL(&j->params, np, tq);
@@ -393,9 +393,9 @@ bool_param(const struct cfparam *p)
 		return 0;
 	cs = strrchr(p->name, '.');
 	return !strncmp(cs ? cs + 1 : p->name, "no", 2) ^
-	    (STAILQ_EMPTY(&p->val) ||
-	     !strcasecmp(STAILQ_LAST(&p->val, cfstring, tq)->s, "true") ||
-	     (strtol(STAILQ_LAST(&p->val, cfstring, tq)->s, NULL, 10)));
+	    (TAILQ_EMPTY(&p->val) ||
+	     !strcasecmp(TAILQ_LAST(&p->val, cfstrings)->s, "true") ||
+	     (strtol(TAILQ_LAST(&p->val, cfstrings)->s, NULL, 10)));
 }
 
 /*
@@ -404,9 +404,9 @@ bool_param(const struct cfparam *p)
 int
 int_param(const struct cfparam *p, int *ip)
 {
-	if (p == NULL || STAILQ_EMPTY(&p->val))
+	if (p == NULL || TAILQ_EMPTY(&p->val))
 		return 0;
-	*ip = strtol(STAILQ_LAST(&p->val, cfstring, tq)->s, NULL, 10);
+	*ip = strtol(TAILQ_LAST(&p->val, cfstrings)->s, NULL, 10);
 	return 1;
 }
 
@@ -416,8 +416,8 @@ int_param(const struct cfparam *p, int *
 const char *
 string_param(const struct cfparam *p)
 {
-	return (p && !STAILQ_EMPTY(&p->val)
-	    ? STAILQ_LAST(&p->val, cfstring, tq)->s : NULL);
+	return (p && !TAILQ_EMPTY(&p->val)
+	    ? TAILQ_LAST(&p->val, cfstrings)->s : NULL);
 }
 
 /*
@@ -448,9 +448,8 @@ check_intparams(struct cfjail *j)
 	error = 0;
 	/* Check format of boolan and integer values. */
 	TAILQ_FOREACH(p, &j->params, tq) {
-		if (!STAILQ_EMPTY(&p->val) &&
-		    (p->flags & (PF_BOOL | PF_INT))) {
-			val = STAILQ_LAST(&p->val, cfstring, tq)->s;
+		if (!TAILQ_EMPTY(&p->val) && (p->flags & (PF_BOOL | PF_INT))) {
+			val = TAILQ_LAST(&p->val, cfstrings)->s;
 			if (p->flags & PF_BOOL) {
 				if (strcasecmp(val, "false") &&
 				    strcasecmp(val, "true") &&
@@ -565,7 +564,7 @@ check_intparams(struct cfjail *j)
 	{
 		if (j->intparams[KP_IP4_ADDR + isip6] == NULL)
 			continue;
-		STAILQ_FOREACH(s, &j->intparams[KP_IP4_ADDR + isip6]->val, tq) {
+		TAILQ_FOREACH(s, &j->intparams[KP_IP4_ADDR + isip6]->val, tq) {
 			cs = strchr(s->s, '|');
 			if (cs || defif)
 				add_param(j, NULL, IP__IP4_IFADDR + isip6,
@@ -610,7 +609,7 @@ check_intparams(struct cfjail *j)
 	 * parameter.
 	 */
 	if (j->intparams[IP_MOUNT_FSTAB] != NULL) {
-		STAILQ_FOREACH(s, &j->intparams[IP_MOUNT_FSTAB]->val, tq) {
+		TAILQ_FOREACH(s, &j->intparams[IP_MOUNT_FSTAB]->val, tq) {
 			if (s->len == 0)
 				continue;
 			f = fopen(s->s, "r");
@@ -668,28 +667,28 @@ import_params(struct cfjail *j)
 			jail_warnx(j, "%s", jail_errmsg);
 			continue;
 		}
-		if (STAILQ_EMPTY(&p->val))
+		if (TAILQ_EMPTY(&p->val))
 			value = NULL;
 		else if (!jp->jp_elemlen ||
-			 !STAILQ_NEXT(STAILQ_FIRST(&p->val), tq)) {
+			 !TAILQ_NEXT(TAILQ_FIRST(&p->val), tq)) {
 			/*
 			 * Scalar parameters silently discard multiple (array)
 			 * values, keeping only the last value added.  This
 			 * lets values added from the command line append to
 			 * arrays wthout pre-checking the type.
 			 */
-			value = STAILQ_LAST(&p->val, cfstring, tq)->s;
+			value = TAILQ_LAST(&p->val, cfstrings)->s;
 		} else {
 			/*
 			 * Convert arrays into comma-separated strings, which
 			 * jailparam_import will then convert back into arrays.
 			 */
 			vallen = 0;
-			STAILQ_FOREACH(s, &p->val, tq)
+			TAILQ_FOREACH(s, &p->val, tq)
 				vallen += s->len + 1;
 			value = alloca(vallen);
 			cs = value;
-			STAILQ_FOREACH_SAFE(s, &p->val, tq, ts) {
+			TAILQ_FOREACH_SAFE(s, &p->val, tq, ts) {
 				strcpy(cs, s->s);
 				if (ts != NULL) {
 					cs += s->len + 1;
@@ -796,14 +795,14 @@ free_param_strings(struct cfparam *p)
 	struct cfstring *s;
 	struct cfvar *v;
 
-	while ((s = STAILQ_FIRST(&p->val))) {
+	while ((s = TAILQ_FIRST(&p->val))) {
 		free(s->s);
 		while ((v = STAILQ_FIRST(&s->vars))) {
 			free(v->name);
 			STAILQ_REMOVE_HEAD(&s->vars, tq);
 			free(v);
 		}
-		STAILQ_REMOVE_HEAD(&p->val, tq);
+		TAILQ_REMOVE(&p->val, s, tq);
 		free(s);
 	}
 }

Modified: projects/jailconf/usr.sbin/jail/jail.c
==============================================================================
--- projects/jailconf/usr.sbin/jail/jail.c	Fri Jun 17 16:03:00 2011	(r223187)
+++ projects/jailconf/usr.sbin/jail/jail.c	Fri Jun 17 16:06:13 2011	(r223188)
@@ -963,9 +963,9 @@ print_jail(FILE *fp, struct cfjail *j, i
 		print_param(fp, j->intparams[KP_IP4_ADDR], ',', 0);
 #ifdef INET6
 		if (j->intparams[KP_IP6_ADDR] &&
-		    !STAILQ_EMPTY(&j->intparams[KP_IP6_ADDR]->val)) {
+		    !TAILQ_EMPTY(&j->intparams[KP_IP6_ADDR]->val)) {
 			if (j->intparams[KP_IP4_ADDR] &&
-			    !STAILQ_EMPTY(&j->intparams[KP_IP4_ADDR]->val))
+			    !TAILQ_EMPTY(&j->intparams[KP_IP4_ADDR]->val))
 				putc(',', fp);
 			print_param(fp, j->intparams[KP_IP6_ADDR], ',', 0);
 		}
@@ -993,11 +993,11 @@ print_param(FILE *fp, const struct cfpar
 
 	if (doname)
 		fputs(p->name, fp);
-	if (p == NULL || STAILQ_EMPTY(&p->val))
+	if (p == NULL || TAILQ_EMPTY(&p->val))
 		return;
 	if (doname)
 		putc('=', fp);
-	STAILQ_FOREACH_SAFE(s, &p->val, tq, ts) {
+	TAILQ_FOREACH_SAFE(s, &p->val, tq, ts) {
 		quoted_print(fp, s->s);
 		if (ts != NULL)
 			putc(sep, fp);

Modified: projects/jailconf/usr.sbin/jail/jailp.h
==============================================================================
--- projects/jailconf/usr.sbin/jail/jailp.h	Fri Jun 17 16:03:00 2011	(r223187)
+++ projects/jailconf/usr.sbin/jail/jailp.h	Fri Jun 17 16:06:13 2011	(r223188)
@@ -131,10 +131,10 @@ struct cfvar {
 	size_t			pos;
 };
 
-STAILQ_HEAD(cfstrings, cfstring);
+TAILQ_HEAD(cfstrings, cfstring);
 
 struct cfstring {
-	STAILQ_ENTRY(cfstring)	tq;
+	TAILQ_ENTRY(cfstring)	tq;
 	char			*s;
 	size_t			len;
 	struct cfvars		vars;

Modified: projects/jailconf/usr.sbin/jail/jailparse.y
==============================================================================
--- projects/jailconf/usr.sbin/jail/jailparse.y	Fri Jun 17 16:03:00 2011	(r223187)
+++ projects/jailconf/usr.sbin/jail/jailparse.y	Fri Jun 17 16:06:13 2011	(r223188)
@@ -112,20 +112,20 @@ param	: name
 	| name '=' value
 	{
 		$$ = $1;
-		STAILQ_CONCAT(&$$->val, $3);
+		TAILQ_CONCAT(&$$->val, $3, tq);
 		free($3);
 	}
 	| name PLEQ value
 	{
 		$$ = $1;
-		STAILQ_CONCAT(&$$->val, $3);
+		TAILQ_CONCAT(&$$->val, $3, tq);
 		$$->flags |= PF_APPEND;
 		free($3);
 	}
 	| name value
 	{
 		$$ = $1;
-		STAILQ_CONCAT(&$$->val, $2);
+		TAILQ_CONCAT(&$$->val, $2, tq);
 		free($2);
 	}
 	| error
@@ -141,14 +141,14 @@ name	: STR
 	{
 		$$ = emalloc(sizeof(struct cfparam));
 		$$->name = $1;
-		STAILQ_INIT(&$$->val);
+		TAILQ_INIT(&$$->val);
 		$$->flags = 0;
 	}
 	| VAR
 	{
 		$$ = emalloc(sizeof(struct cfparam));
 		$$->name = $1;
-		STAILQ_INIT(&$$->val);
+		TAILQ_INIT(&$$->val);
 		$$->flags = PF_VAR;
 	}
 	;
@@ -156,13 +156,13 @@ name	: STR
 value	: string
 	{
 		$$ = emalloc(sizeof(struct cfstrings));
-		STAILQ_INIT($$);
-		STAILQ_INSERT_TAIL($$, $1, tq);
+		TAILQ_INIT($$);
+		TAILQ_INSERT_TAIL($$, $1, tq);
 	}
 	| value ',' string
 	{
 		$$ = $1;
-		STAILQ_INSERT_TAIL($$, $3, tq);
+		TAILQ_INSERT_TAIL($$, $3, tq);
 	}
 	;
 

Modified: projects/jailconf/usr.sbin/jail/state.c
==============================================================================
--- projects/jailconf/usr.sbin/jail/state.c	Fri Jun 17 16:03:00 2011	(r223187)
+++ projects/jailconf/usr.sbin/jail/state.c	Fri Jun 17 16:06:13 2011	(r223188)
@@ -69,7 +69,7 @@ dep_setup(int docf)
 		 */
 		if ((j = TAILQ_FIRST(&cfjails)) &&
 		    (p = j->intparams[IP_DEPEND])) {
-			STAILQ_FOREACH(s, &p->val, tq) {
+			TAILQ_FOREACH(s, &p->val, tq) {
 				if (running_jid(s->s, 0) < 0) {
 					warnx("depends on nonexistent jail "
 					    "\"%s\"", s->s);
@@ -97,7 +97,7 @@ dep_setup(int docf)
 		if (j->flags & JF_FAILED)
 			continue;
 		if ((p = j->intparams[IP_DEPEND])) {
-			STAILQ_FOREACH(s, &p->val, tq) {
+			TAILQ_FOREACH(s, &p->val, tq) {
 				dj = find_jail(s->s);
 				if (dj != NULL) {
 					deps++;


More information about the svn-src-projects mailing list