Re: tzset(3): update man page to reality

2022-10-03 Thread Sebastian Benoit
Todd C. Miller(mill...@openbsd.org) on 2022.10.03 13:32:22 -0600:
> On Mon, 03 Oct 2022 13:27:05 -0600, "Todd C. Miller" wrote:
> 
> > We did not document tzname, timezone or daylight and the rules
> > regarding pathnames was not entirely clear.

reads ok to me

> > I think it is worth mentioning that unless your program calls
> > chroot(2), you probably don't need to call tzset(3).

good idea

> > Opinions?
> 
> Now including examples of the pathname format.

ok benno@

>  - todd
> 
> Index: lib/libc/time/tzset.3
> ===
> RCS file: /cvs/src/lib/libc/time/tzset.3,v
> retrieving revision 1.25
> diff -u -p -u -r1.25 tzset.3
> --- lib/libc/time/tzset.3 23 Sep 2022 17:29:22 -  1.25
> +++ lib/libc/time/tzset.3 3 Oct 2022 19:32:05 -
> @@ -8,62 +8,103 @@
>  .Nd initialize time conversion information
>  .Sh SYNOPSIS
>  .In time.h
> +.Vt extern char *tzname[2];
> +.Vt extern long  timezone;
> +.Vt extern long  daylight;
>  .Ft void
>  .Fn tzset "void"
>  .Ft void
>  .Fn tzsetwall "void"
>  .Sh DESCRIPTION
> +The
>  .Fn tzset
> -uses the value of the environment variable
> +function uses the value of the environment variable
>  .Ev TZ
> -to set time conversion information used by
> +to set the time conversion information used by
>  .Xr localtime 3 .
> -If
> -.Ev TZ
> -does not appear in the environment,
> -or if the calling process has changed its user or group ID,
> -the best available approximation to local wall clock time, as specified
> -by the
> -.Xr tzfile 5
> -format file
> -.Pa /etc/localtime ,
> -is used by
> +It also sets the following external variables:
> +.Bl -tag -width "tzname[2]"
> +.It Vt tzname[2]
> +the designations for standard and daylight saving time, see the description 
> of
> +.Ar std No and Ar dst
> +below
> +.It Vt timezone
> +the number of seconds West of UTC
> +.It Vt daylight
> +0 if the time zone has never observed daylight saving time, otherwise
> +non-zero
> +.El
> +.Pp
> +Most programs do not need to call
> +.Fn tzset
> +directly, it will be called automatically as needed by the functions
> +described in
>  .Xr localtime 3 .
> +Privileged processes that use
> +.Xr chroot 2
> +may wish to call
> +.Fn tzset
> +to initialize the time conversion information before changing to
> +a restricted root directory that does not include time conversion
> +data files.
>  .Pp
>  If
>  .Ev TZ
> -appears in the environment but its value is a null string,
> -Coordinated Universal Time (UTC) is used (without leap second
> -correction).
> +does not appear in the environment, or if the calling process has
> +changed its user or group ID, the system time zone file,
> +.Pa /etc/localtime ,
> +is used.
>  .Pp
>  If
>  .Ev TZ
> -appears in the environment and its value begins with a colon,
> -it is used as the pathname of a file
> -from which to read the time conversion information.
> +appears in the environment it may be one of two formats:
> +.Bl -bullet
> +.It
> +the pathname of a
> +.Xr tzfile 5
> +format file from which to read the time conversion information,
> +optionally prefixed with a colon
> +.Pq Ql \&: ,
> +such as
> +.Dq :America/Denver
> +or
> +.Dq Europe/Berlin .
> +.It
> +a string that directly specifies the time conversion information
> +(see below) which may not begin with a colon
> +.Pq Ql \&:
> +.El
>  .Pp
>  If
>  .Ev TZ
>  appears in the environment and its value does not begin with a colon,
>  it is first used as the
> -pathname of a file from which to read the time conversion information,
> +pathname of a
> +.Xr tzfile 5
> +format file from which to read the time conversion information,
>  and, if that file cannot be read, is used directly as a specification of
>  the time conversion information.
> +A value beginning with a colon
> +.Pq Ql \&:
> +is always treated as a pathname.
> +.Pp
> +If
> +.Ev TZ
> +it set to the empty string, Coordinated Universal Time (UTC) is
> +used (without leap second correction).
>  .Pp
>  When
>  .Ev TZ
> -is used as a pathname, it must be relative to the system time
> +is used as a pathname, it must either be a path relative to the system time
>  conversion information directory,
> -.Pa /usr/share/zoneinfo .
> -If
> -.Ev TZ
> -begins with a
> -.Ql /
> -or contains
> +.Pa /usr/share/zoneinfo
> +or an absolute path that begins with
> +.Pa /usr/share/zoneinfo/ .
> +Other absolute paths, or paths that contain
>  .Ql \&../ ,
> -it is ignored and the system local time zone file,
> +will be ignored and the system local time zone file,
>  .Pa /etc/localtime ,
> -is used instead.
> +will be used instead.
>  The file must be in the format specified in
>  .Xr tzfile 5 .
>  .Pp
> @@ -74,7 +115,7 @@ it must have the following syntax (witho
>  .Ar std
>  and
>  .Ar offset ) :
> -.Bd -ragged -offset indent
> +.Bd -offset indent
>  .Ar std
>  .Sm off
>  .Ar offset
> @@ -88,23 +129,23 @@ Where:
>  .It Ar std No and Ar dst
>  Three or more bytes that are the designation for the standard
> 

Re: tzset(3): update man page to reality

2022-10-03 Thread Todd C . Miller
On Mon, 03 Oct 2022 13:27:05 -0600, "Todd C. Miller" wrote:

> We did not document tzname, timezone or daylight and the rules
> regarding pathnames was not entirely clear.
>
> I think it is worth mentioning that unless your program calls
> chroot(2), you probably don't need to call tzset(3).
>
> Opinions?

Now including examples of the pathname format.

 - todd

Index: lib/libc/time/tzset.3
===
RCS file: /cvs/src/lib/libc/time/tzset.3,v
retrieving revision 1.25
diff -u -p -u -r1.25 tzset.3
--- lib/libc/time/tzset.3   23 Sep 2022 17:29:22 -  1.25
+++ lib/libc/time/tzset.3   3 Oct 2022 19:32:05 -
@@ -8,62 +8,103 @@
 .Nd initialize time conversion information
 .Sh SYNOPSIS
 .In time.h
+.Vt extern char *tzname[2];
+.Vt extern long  timezone;
+.Vt extern long  daylight;
 .Ft void
 .Fn tzset "void"
 .Ft void
 .Fn tzsetwall "void"
 .Sh DESCRIPTION
+The
 .Fn tzset
-uses the value of the environment variable
+function uses the value of the environment variable
 .Ev TZ
-to set time conversion information used by
+to set the time conversion information used by
 .Xr localtime 3 .
-If
-.Ev TZ
-does not appear in the environment,
-or if the calling process has changed its user or group ID,
-the best available approximation to local wall clock time, as specified
-by the
-.Xr tzfile 5
-format file
-.Pa /etc/localtime ,
-is used by
+It also sets the following external variables:
+.Bl -tag -width "tzname[2]"
+.It Vt tzname[2]
+the designations for standard and daylight saving time, see the description of
+.Ar std No and Ar dst
+below
+.It Vt timezone
+the number of seconds West of UTC
+.It Vt daylight
+0 if the time zone has never observed daylight saving time, otherwise
+non-zero
+.El
+.Pp
+Most programs do not need to call
+.Fn tzset
+directly, it will be called automatically as needed by the functions
+described in
 .Xr localtime 3 .
+Privileged processes that use
+.Xr chroot 2
+may wish to call
+.Fn tzset
+to initialize the time conversion information before changing to
+a restricted root directory that does not include time conversion
+data files.
 .Pp
 If
 .Ev TZ
-appears in the environment but its value is a null string,
-Coordinated Universal Time (UTC) is used (without leap second
-correction).
+does not appear in the environment, or if the calling process has
+changed its user or group ID, the system time zone file,
+.Pa /etc/localtime ,
+is used.
 .Pp
 If
 .Ev TZ
-appears in the environment and its value begins with a colon,
-it is used as the pathname of a file
-from which to read the time conversion information.
+appears in the environment it may be one of two formats:
+.Bl -bullet
+.It
+the pathname of a
+.Xr tzfile 5
+format file from which to read the time conversion information,
+optionally prefixed with a colon
+.Pq Ql \&: ,
+such as
+.Dq :America/Denver
+or
+.Dq Europe/Berlin .
+.It
+a string that directly specifies the time conversion information
+(see below) which may not begin with a colon
+.Pq Ql \&:
+.El
 .Pp
 If
 .Ev TZ
 appears in the environment and its value does not begin with a colon,
 it is first used as the
-pathname of a file from which to read the time conversion information,
+pathname of a
+.Xr tzfile 5
+format file from which to read the time conversion information,
 and, if that file cannot be read, is used directly as a specification of
 the time conversion information.
+A value beginning with a colon
+.Pq Ql \&:
+is always treated as a pathname.
+.Pp
+If
+.Ev TZ
+it set to the empty string, Coordinated Universal Time (UTC) is
+used (without leap second correction).
 .Pp
 When
 .Ev TZ
-is used as a pathname, it must be relative to the system time
+is used as a pathname, it must either be a path relative to the system time
 conversion information directory,
-.Pa /usr/share/zoneinfo .
-If
-.Ev TZ
-begins with a
-.Ql /
-or contains
+.Pa /usr/share/zoneinfo
+or an absolute path that begins with
+.Pa /usr/share/zoneinfo/ .
+Other absolute paths, or paths that contain
 .Ql \&../ ,
-it is ignored and the system local time zone file,
+will be ignored and the system local time zone file,
 .Pa /etc/localtime ,
-is used instead.
+will be used instead.
 The file must be in the format specified in
 .Xr tzfile 5 .
 .Pp
@@ -74,7 +115,7 @@ it must have the following syntax (witho
 .Ar std
 and
 .Ar offset ) :
-.Bd -ragged -offset indent
+.Bd -offset indent
 .Ar std
 .Sm off
 .Ar offset
@@ -88,23 +129,23 @@ Where:
 .It Ar std No and Ar dst
 Three or more bytes that are the designation for the standard
 .Pq Ar std
-or summer
+or the daylight saving
 .Pq Ar dst
 time zone.
 Only
 .Ar std
 is required; if
 .Ar dst
-is missing, then summer time does not apply in this locale.
+is missing, then daylight saving time does not apply in this locale.
 Upper and lowercase letters are explicitly allowed.
 Any characters except a leading colon
-.Pq Sq \&: ,
+.Pq Ql \&: ,
 digits, comma
-.Pq Sq \&, ,
+.Pq Ql \&, ,
 minus
-.Pq Sq \&- ,

tzset(3): update man page to reality

2022-10-03 Thread Todd C . Miller
We did not document tzname, timezone or daylight and the rules
regarding pathnames was not entirely clear.

I think it is worth mentioning that unless your program calls
chroot(2), you probably don't need to call tzset(3).

Opinions?

 - todd

Index: lib/libc/time/tzset.3
===
RCS file: /cvs/src/lib/libc/time/tzset.3,v
retrieving revision 1.25
diff -u -p -u -r1.25 tzset.3
--- lib/libc/time/tzset.3   23 Sep 2022 17:29:22 -  1.25
+++ lib/libc/time/tzset.3   3 Oct 2022 19:24:02 -
@@ -8,62 +8,99 @@
 .Nd initialize time conversion information
 .Sh SYNOPSIS
 .In time.h
+.Vt extern char *tzname[2];
+.Vt extern long  timezone;
+.Vt extern long  daylight;
 .Ft void
 .Fn tzset "void"
 .Ft void
 .Fn tzsetwall "void"
 .Sh DESCRIPTION
+The
 .Fn tzset
-uses the value of the environment variable
+function uses the value of the environment variable
 .Ev TZ
-to set time conversion information used by
+to set the time conversion information used by
 .Xr localtime 3 .
-If
-.Ev TZ
-does not appear in the environment,
-or if the calling process has changed its user or group ID,
-the best available approximation to local wall clock time, as specified
-by the
-.Xr tzfile 5
-format file
-.Pa /etc/localtime ,
-is used by
+It also sets the following external variables:
+.Bl -tag -width "tzname[2]"
+.It Vt tzname[2]
+the designations for standard and daylight saving time, see the description of
+.Ar std No and Ar dst
+below
+.It Vt timezone
+the number of seconds West of UTC
+.It Vt daylight
+0 if the time zone has never observed daylight saving time, otherwise
+non-zero
+.El
+.Pp
+Most programs do not need to call
+.Fn tzset
+directly, it will be called automatically as needed by the functions
+described in
 .Xr localtime 3 .
+Privileged processes that use
+.Xr chroot 2
+may wish to call
+.Fn tzset
+to initialize the time conversion information before changing to
+a restricted root directory that does not include time conversion
+data files.
 .Pp
 If
 .Ev TZ
-appears in the environment but its value is a null string,
-Coordinated Universal Time (UTC) is used (without leap second
-correction).
+does not appear in the environment, or if the calling process has
+changed its user or group ID, the system time zone file,
+.Pa /etc/localtime ,
+is used.
 .Pp
 If
 .Ev TZ
-appears in the environment and its value begins with a colon,
-it is used as the pathname of a file
-from which to read the time conversion information.
+appears in the environment it may be one of two formats:
+.Bl -bullet
+.It
+the pathname of a
+.Xr tzfile 5
+format file from which to read the time conversion information,
+optionally prefixed with a colon
+.Pq Ql \&:
+.It
+a string containing the time conversion information (see below)
+which may not begin with a colon
+.Pq Ql \&:
+.El
 .Pp
 If
 .Ev TZ
 appears in the environment and its value does not begin with a colon,
 it is first used as the
-pathname of a file from which to read the time conversion information,
+pathname of a
+.Xr tzfile 5
+format file from which to read the time conversion information,
 and, if that file cannot be read, is used directly as a specification of
 the time conversion information.
+A value beginning with a colon
+.Pq Ql \&:
+is always treated as a pathname.
+.Pp
+If
+.Ev TZ
+it set to the empty string, Coordinated Universal Time (UTC) is
+used (without leap second correction).
 .Pp
 When
 .Ev TZ
-is used as a pathname, it must be relative to the system time
+is used as a pathname, it must either be a path relative to the system time
 conversion information directory,
-.Pa /usr/share/zoneinfo .
-If
-.Ev TZ
-begins with a
-.Ql /
-or contains
+.Pa /usr/share/zoneinfo
+or an absolute path that begins with
+.Pa /usr/share/zoneinfo/ .
+Other absolute paths, or paths that contain
 .Ql \&../ ,
-it is ignored and the system local time zone file,
+will be ignored and the system local time zone file,
 .Pa /etc/localtime ,
-is used instead.
+will be used instead.
 The file must be in the format specified in
 .Xr tzfile 5 .
 .Pp
@@ -74,7 +111,7 @@ it must have the following syntax (witho
 .Ar std
 and
 .Ar offset ) :
-.Bd -ragged -offset indent
+.Bd -offset indent
 .Ar std
 .Sm off
 .Ar offset
@@ -88,23 +125,23 @@ Where:
 .It Ar std No and Ar dst
 Three or more bytes that are the designation for the standard
 .Pq Ar std
-or summer
+or the daylight saving
 .Pq Ar dst
 time zone.
 Only
 .Ar std
 is required; if
 .Ar dst
-is missing, then summer time does not apply in this locale.
+is missing, then daylight saving time does not apply in this locale.
 Upper and lowercase letters are explicitly allowed.
 Any characters except a leading colon
-.Pq Sq \&: ,
+.Pq Ql \&: ,
 digits, comma
-.Pq Sq \&, ,
+.Pq Ql \&, ,
 minus
-.Pq Sq \&- ,
+.Pq Ql \&- ,
 plus
-.Pq Sq \&+ ,
+.Pq Ql \&+ ,
 and ASCII NUL are allowed.
 .It Ar offset
 Indicates the value one must add to the local time to arrive at
@@ -131,7 +168,7 @@ If no
 .Ar