misc/155765: [patch]`buildworld' does not honors WITHOUT_JAIL

Arnaud Lacombe lacombar at gmail.com
Mon Mar 21 23:00:02 UTC 2011


>Number:         155765
>Category:       misc
>Synopsis:       [patch]`buildworld' does not honors WITHOUT_JAIL
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Mar 21 23:00:01 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Arnaud Lacombe
>Release:        9-current
>Organization:
n/a
>Environment:
>Description:
When building world with WITHOUT_JAIL defined in make.conf, libjail remains built. This is due to a hard dependency in ifconfig(8) toward libjail.
>How-To-Repeat:
# make -DWITHOUT_JAIL buildworld
>Fix:
see attached patch, only build tested so far.

Patch attached with submission follows:

>From dde1bcab63ba56a0202fee0b2dc4bd115aa192a3 Mon Sep 17 00:00:00 2001
From: Arnaud Lacombe <lacombar at gmail.com>
Date: Fri, 18 Mar 2011 17:34:23 -0400
Subject: [PATCH] Honors WITHOUT_JAIL

This patch fixes buildworld when libjail is not included in the build, as it
should be if WITHOUT_JAIL defined.

Compile-tested, not runtime check done.

Signed-off-by: Arnaud Lacombe <lacombar at gmail.com>

---
 lib/Makefile             |    6 +++-
 sbin/ifconfig/Makefile   |   10 ++++-
 sbin/ifconfig/ifconfig.c |   31 ----------------
 sbin/ifconfig/vnet.c     |   91 ++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 104 insertions(+), 34 deletions(-)
 create mode 100644 sbin/ifconfig/vnet.c

diff --git a/lib/Makefile b/lib/Makefile
index 4fef1bb..9d88880 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -77,7 +77,7 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	${_librpcsec_gss} \
 	libipsec \
 	${_libipx} \
-	libjail \
+	${_libjail} \
 	libkiconv \
 	liblzma \
 	libmagic \
@@ -165,6 +165,10 @@ _libiconv_modules=	libiconv_modules
 _libipx=	libipx
 .endif
 
+.if ${MK_JAIL} != "no"
+_libjail=	libjail
+.endif
+
 .if ${MK_LIBTHR} != "no"
 _libthr=	libthr
 .endif
diff --git a/sbin/ifconfig/Makefile b/sbin/ifconfig/Makefile
index 77491f2..5ff9208 100644
--- a/sbin/ifconfig/Makefile
+++ b/sbin/ifconfig/Makefile
@@ -28,8 +28,14 @@ SRCS+=	ifgre.c			# GRE keys etc
 SRCS+=	ifgif.c			# GIF reversed header workaround
 
 SRCS+=	ifieee80211.c regdomain.c # SIOC[GS]IEEE80211 support
-DPADD+=	${LIBBSDXML} ${LIBJAIL} ${LIBSBUF}
-LDADD+=	-lbsdxml -ljail -lsbuf
+DPADD+=	${LIBBSDXML} ${LIBSBUF}
+LDADD+=	-lbsdxml -lsbuf
+
+.if ${MK_JAIL} != "no"
+SRCS+= vnet.c
+DPADD+=	${LIBJAIL}
+LDADD+=	-ljail
+.endif
 
 SRCS+=	ifcarp.c		# SIOC[GS]VH support
 SRCS+=	ifgroup.c		# ...
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index 7c5d351..00c8d9f 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -66,7 +66,6 @@ static const char rcsid[] =
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
-#include <jail.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -664,34 +663,6 @@ deletetunnel(const char *vname, int param, int s, const struct afswtch *afp)
 }
 
 static void
-setifvnet(const char *jname, int dummy __unused, int s,
-    const struct afswtch *afp)
-{
-	struct ifreq my_ifr;
-
-	memcpy(&my_ifr, &ifr, sizeof(my_ifr));
-	my_ifr.ifr_jid = jail_getid(jname);
-	if (my_ifr.ifr_jid < 0)
-		errx(1, "%s", jail_errmsg);
-	if (ioctl(s, SIOCSIFVNET, &my_ifr) < 0)
-		err(1, "SIOCSIFVNET");
-}
-
-static void
-setifrvnet(const char *jname, int dummy __unused, int s,
-    const struct afswtch *afp)
-{
-	struct ifreq my_ifr;
-
-	memcpy(&my_ifr, &ifr, sizeof(my_ifr));
-	my_ifr.ifr_jid = jail_getid(jname);
-	if (my_ifr.ifr_jid < 0)
-		errx(1, "%s", jail_errmsg);
-	if (ioctl(s, SIOCSIFRVNET, &my_ifr) < 0)
-		err(1, "SIOCSIFRVNET(%d, %s)", my_ifr.ifr_jid, my_ifr.ifr_name);
-}
-
-static void
 setifnetmask(const char *addr, int dummy __unused, int s,
     const struct afswtch *afp)
 {
@@ -1133,8 +1104,6 @@ static struct cmd basic_cmds[] = {
 	DEF_CMD_ARG2("tunnel",			settunnel),
 	DEF_CMD("-tunnel", 0,			deletetunnel),
 	DEF_CMD("deletetunnel", 0,		deletetunnel),
-	DEF_CMD_ARG("vnet",			setifvnet),
-	DEF_CMD_ARG("-vnet",			setifrvnet),
 	DEF_CMD("link0",	IFF_LINK0,	setifflags),
 	DEF_CMD("-link0",	-IFF_LINK0,	setifflags),
 	DEF_CMD("link1",	IFF_LINK1,	setifflags),
diff --git a/sbin/ifconfig/vnet.c b/sbin/ifconfig/vnet.c
new file mode 100644
index 0000000..d386d14
--- /dev/null
+++ b/sbin/ifconfig/vnet.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 1983, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static const char rcsid[] =
+  "$FreeBSD$";
+#endif /* not lint */
+
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include <net/if.h>
+#include <net/if_var.h>
+
+#include <err.h>
+#include <string.h>
+#include <jail.h>
+
+#include "ifconfig.h"
+
+static void
+setifvnet(const char *jname, int dummy __unused, int s,
+    const struct afswtch *afp)
+{
+	struct ifreq my_ifr;
+
+	memcpy(&my_ifr, &ifr, sizeof(my_ifr));
+	my_ifr.ifr_jid = jail_getid(jname);
+	if (my_ifr.ifr_jid < 0)
+		errx(1, "%s", jail_errmsg);
+	if (ioctl(s, SIOCSIFVNET, &my_ifr) < 0)
+		err(1, "SIOCSIFVNET");
+}
+
+static void
+setifrvnet(const char *jname, int dummy __unused, int s,
+    const struct afswtch *afp)
+{
+	struct ifreq my_ifr;
+
+	memcpy(&my_ifr, &ifr, sizeof(my_ifr));
+	my_ifr.ifr_jid = jail_getid(jname);
+	if (my_ifr.ifr_jid < 0)
+		errx(1, "%s", jail_errmsg);
+	if (ioctl(s, SIOCSIFRVNET, &my_ifr) < 0)
+		err(1, "SIOCSIFRVNET(%d, %s)", my_ifr.ifr_jid, my_ifr.ifr_name);
+}
+
+static struct cmd vnet_cmds[] =
+{
+	DEF_CMD_ARG("vnet",	setifvnet),
+	DEF_CMD_ARG("-vnet",	setifrvnet),
+};
+
+static __constructor void
+vnet_ctor(void)
+{
+#define	N(a)	(sizeof(a) / sizeof(a[0]))
+	size_t i;
+
+	for (i = 0; i < N(vnet_cmds);  i++)
+		cmd_register(&vnet_cmds[i]);
+#undef N
+}
-- 
1.7.4.1.313.gd7c59.dirty



>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list