Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Jan 2012 04:56:47 GMT
From:      Devin Teske <dteske@vicor.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/164039: [PATCH] tzsetup(8): Don't write /var/db/zoneinfo either when "-n" is passed or when install_zoneinfo_file returns failure
Message-ID:  <201201120456.q0C4ulMq067222@red.freebsd.org>
Resent-Message-ID: <201201120500.q0C50Qq1073903@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         164039
>Category:       bin
>Synopsis:       [PATCH] tzsetup(8): Don't write /var/db/zoneinfo either when "-n" is passed or when install_zoneinfo_file returns failure
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 12 05:00:26 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Devin Teske
>Release:        FreeBSD 9.0-RELEASE amd64
>Organization:
FIS Global, Inc.
>Environment:
FreeBSD scribe.vicor.com 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan 3 07:46:30 UTC 2010
root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
The "-n" flag is described in tzsetup(8) as "Do not create or copy files," so it seems like a bug that /var/db/zoneinfo is created without regard to this flag's presence.

Additionally, since SVN r198350 -- where install_zone_file() was split into install_zoneinfo_file()/install_zoneinfo() -- the /var/db/zoneinfo file is written without regard to whether the zoneinfo file was successfully installed or not.

The attached patch.txt makes it so that /var/db/zoneinfo is only written if (a) a zoneinfo file was successfully installed (install_zoneinfo_file returns success) and (b) the "-n" flag is not present.
>How-To-Repeat:
Exec as root: tzsetup some/foo
Notice that /var/db/zoneinfo contains "some/foo" despite given failure to install any zonefile by that name.

Similarly, exec as root: tzsetup -n America/Los_Angeles
Notice that /var/db/zoneinfo contains "America/Los_Angeles"
>Fix:
See attached patch.txt

Patch attached with submission follows:

--- usr.sbin/tzsetup/tzsetup.c.orig	Fri Dec  2 11:19:10 2011
+++ usr.sbin/tzsetup/tzsetup.c	Wed Jan 11 20:12:54 2012
@@ -801,9 +801,11 @@ install_zoneinfo(const char *zoneinfo)
 	rv = install_zoneinfo_file(path_zoneinfo_file);
 
 	/* Save knowledge for later */
-	if ((f = fopen(path_db, "w")) != NULL) {
-		fprintf(f, "%s\n", zoneinfo);
-		fclose(f);
+	if (reallydoit && (rv & DITEM_FAILURE) == 0) {
+		if (f = fopen(path_db, "w")) != NULL) {
+			fprintf(f, "%s\n", zoneinfo);
+			fclose(f);
+		}
 	}
 
 	return (rv);


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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201120456.q0C4ulMq067222>