Hi,

Jan Stary wrote on Mon, Feb 10, 2020 at 01:13:58PM +0100:

> Why does cron(8) and crontab(1) need to setlocale()?

I looked through the *.c files in /usr/src/usr.sbin/cron/
and found the following locale-dependent functions:

atrun.c:      isalpha(3), isupper(3)
cron.c:       strtod(3)
do_command.c: isalnum(3), isprint(3), stravis(3)
entry.c:      isalpha(3), isdigit(3)
env.c:        isspace(3)

Neither strftime(3) nor strptime(3) appear to be used, which would
be common traps in this respect, in particular in programs doing
something with dates and times.

Either way, on OpenBSD, none of these functions actually depend on
the locale.

Even if there were something locale-dependent in cron(8), and even
if we consider somebody using these program in a portable way on a
non-OpenBSD system, i believe a daemon started as root should not be
locale-dependent, so i'd like to commit the patch to cron.c in any
case.

While crontab.c does not seem quite as important, i see no possible
harm in cleaning this up, so i'd like to commit that one, too.

OK?
  Ingo


> Index: cron.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/cron/cron.c,v
> retrieving revision 1.77
> diff -u -p -r1.77 cron.c
> --- cron.c    23 Oct 2017 15:15:22 -0000      1.77
> +++ cron.c    10 Feb 2020 12:12:13 -0000
> @@ -28,7 +28,6 @@
>  #include <err.h>
>  #include <errno.h>
>  #include <grp.h>
> -#include <locale.h>
>  #include <poll.h>
>  #include <signal.h>
>  #include <stdio.h>
> @@ -83,8 +82,6 @@ main(int argc, char *argv[])
>       struct sigaction sact;
>       sigset_t blocked, omask;
>       struct group *grp;
> -
> -     setlocale(LC_ALL, "");
>  
>       setvbuf(stdout, NULL, _IOLBF, 0);
>       setvbuf(stderr, NULL, _IOLBF, 0);
> Index: crontab.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/cron/crontab.c,v
> retrieving revision 1.93
> diff -u -p -r1.93 crontab.c
> --- crontab.c 28 Jun 2019 13:32:47 -0000      1.93
> +++ crontab.c 10 Feb 2020 12:12:13 -0000
> @@ -26,7 +26,6 @@
>  #include <err.h>
>  #include <errno.h>
>  #include <limits.h>
> -#include <locale.h>
>  #include <pwd.h>
>  #include <signal.h>
>  #include <stdio.h>
> @@ -92,7 +91,6 @@ main(int argc, char *argv[])
>       user_gid = getgid();
>       crontab_gid = getegid();
>  
> -     setlocale(LC_ALL, "");
>       openlog(__progname, LOG_PID, LOG_CRON);
>  
>       setvbuf(stderr, NULL, _IOLBF, 0);
> 

Reply via email to