From owner-freebsd-bugs@FreeBSD.ORG Wed Aug 18 11:02:32 2010 Return-Path: Delivered-To: freebsd-bugs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9EB0C10656A3; Wed, 18 Aug 2010 11:02:32 +0000 (UTC) (envelope-from walter.pelissero@iesy.net) Received: from mail01.ish.de (mailout.ish.de [80.69.98.253]) by mx1.freebsd.org (Postfix) with ESMTP id 0CABB8FC14; Wed, 18 Aug 2010 11:02:31 +0000 (UTC) Received: from [95.222.206.96] (account walter.pelissero@iesy.net HELO zaphod.home.lan) by mail-fe-02.mail01.ish.de (CommuniGate Pro SMTP 5.2.18) with ESMTPSA id 374985389; Wed, 18 Aug 2010 13:02:30 +0200 Received: from zaphod.home.lan (localhost [127.0.0.1]) by zaphod.home.lan (8.14.4/8.14.4) with ESMTP id o7IB0sQt002054; Wed, 18 Aug 2010 13:00:54 +0200 (CEST) (envelope-from wcp@zaphod.home.lan) Received: (from wcp@localhost) by zaphod.home.lan (8.14.4/8.14.4/Submit) id o7IB0s7w002053; Wed, 18 Aug 2010 13:00:54 +0200 (CEST) (envelope-from wcp) From: walter@pelissero.de (Walter C. Pelissero) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <19563.48486.849565.653968@zaphod.home.lan> Date: Wed, 18 Aug 2010 13:00:54 +0200 To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org In-Reply-To: <201008181020.o7IAK8k2011554@freefall.freebsd.org> References: <201008181015.o7IAFUdF002639@zaphod.home.lan> <201008181020.o7IAK8k2011554@freefall.freebsd.org> X-Mailer: VM 8.1.1 under 23.2.1 (i386-portbld-freebsd8.1) X-Attribution: WP X-For-Spammers: blacklistme@pelissero.de X-MArch-Archive-ID: 129434 X-MArch-Processing-Time: 0.41s Cc: Subject: Re: kern/149762: volume labels with rogue characters X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: walter@pelissero.de List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 18 Aug 2010 11:02:32 -0000 The patch submitted just before contained a bug. Please disregard and consider the following instead: *** g_label.c 22 Jun 2010 08:17:20 -0000 1.24.2.4 --- g_label.c 18 Aug 2010 10:56:09 -0000 *************** *** 136,141 **** --- 136,161 ---- return (1); } + static int sanitation_level = 1; + SYSCTL_INT(_kern_geom_label, OID_AUTO, sanitation, CTLFLAG_RW, + &sanitation_level, 0, + "Correction applied to labels: 0 = replace '/'s only, 1 = '/' + whitespace and ctrls, 2 = '/' + anything but ASCII printables"); + + static void + sanitise_name (char *name) + { + char *p; + + for (p = name; *p; ++p) { + if (*p == '/') + *p = '#'; + else if (sanitation_level > 0 && *p <= ' ') + *p = '_'; + else if (sanitation_level > 1 && *p > '~') + *p = '#'; + } + } + static struct g_geom * g_label_create(struct gctl_req *req, struct g_class *mp, struct g_provider *pp, const char *label, const char *dir, off_t mediasize) *************** *** 156,161 **** --- 176,182 ---- gp = NULL; cp = NULL; snprintf(name, sizeof(name), "%s/%s", dir, label); + sanitise_name(name + strlen(dir) + 1); LIST_FOREACH(gp, &mp->geom, geom) { pp2 = LIST_FIRST(&gp->provider); if (pp2 == NULL) -- walter pelissero http://www.pelissero.de