[CFR] Specify the lock(1) timeout unit
Robert Watson
rwatson at FreeBSD.org
Thu Oct 21 13:38:27 PDT 2004
On Thu, 21 Oct 2004, Peter Pentchev wrote:
> Here's a little patch that teaches lock(1) about timeouts specified in
> seconds, hours, or days in addition to the minutes it currently assumes.
> I could commit this in a week if there are no objections.
I think the normal convention here (see also shutdown(8), etc) is to have
the unit be specified as part of the time specification rather than as a
separate argument. I.e., lock -t 5m rather than lock -t 5 -u m. If we
don't already have it, maybe we need humanize and dehumanize functions for
time as well as disk storage?
Robert N M Watson FreeBSD Core Team, TrustedBSD Projects
robert at fledge.watson.org Principal Research Scientist, McAfee Research
>
> G'luck,
> Peter
>
> Index: src/usr.bin/lock/lock.1
> ===================================================================
> RCS file: /home/ncvs/src/usr.bin/lock/lock.1,v
> retrieving revision 1.11
> diff -u -r1.11 lock.1
> --- src/usr.bin/lock/lock.1 2 Jul 2004 22:22:27 -0000 1.11
> +++ src/usr.bin/lock/lock.1 21 Oct 2004 10:39:13 -0000
> @@ -42,6 +42,7 @@
> .Nm
> .Op Fl npv
> .Op Fl t Ar timeout
> +.Op Fl u Ar unit
> .Sh DESCRIPTION
> The
> .Nm
> @@ -63,7 +64,22 @@
> .It Fl t Ar timeout
> The time limit (default 15 minutes) is changed to
> .Ar timeout
> -minutes.
> +minutes, or units specified by the
> +.Fl u
> +option.
> +.It Fl u Ar unit
> +Specify the time measurement unit for the time limit.
> +The
> +.Ar unit
> +argument may be one of
> +.Sq s
> +for seconds,
> +.Sq m
> +for minutes (the default),
> +.Sq h
> +for hours, or
> +.Sq d
> +for days.
> .It Fl v
> Disable switching virtual terminals while this terminal is locked.
> This option is implemented in a way similar to the
> Index: src/usr.bin/lock/lock.c
> ===================================================================
> RCS file: /home/ncvs/src/usr.bin/lock/lock.c,v
> retrieving revision 1.18
> diff -u -r1.18 lock.c
> --- src/usr.bin/lock/lock.c 22 Jan 2004 04:24:15 -0000 1.18
> +++ src/usr.bin/lock/lock.c 21 Oct 2004 11:07:36 -0000
> @@ -85,6 +85,20 @@
> long nexttime; /* keep the timeout time */
> int no_timeout; /* lock terminal forever */
> int vtyunlock; /* Unlock flag and code. */
> +const char *timeout_str = "minute";
> +int timeout_mul = 60;
> +
> +struct timeout_spec {
> + char spec;
> + int mul;
> + const char *str;
> +} timeout_spec[] = {
> + {'s', 1, "second"},
> + {'m', 60, "minute"},
> + {'h', 3600, "hour"},
> + {'d', 86400, "day"},
> + {'\0', 0, NULL},
> +};
>
> /*ARGSUSED*/
> int
> @@ -98,20 +112,31 @@
> int ch, failures, sectimeout, usemine, vtylock;
> char *ap, *mypw, *ttynam, *tzn;
> char hostname[MAXHOSTNAMELEN], s[BUFSIZ], s1[BUFSIZ];
> + struct timeout_spec *ts;
>
> openlog("lock", LOG_ODELAY, LOG_AUTH);
>
> sectimeout = TIMEOUT;
> + timeout_mul = 60;
> mypw = NULL;
> usemine = 0;
> no_timeout = 0;
> vtylock = 0;
> - while ((ch = getopt(argc, argv, "npt:v")) != -1)
> + while ((ch = getopt(argc, argv, "npt:u:v")) != -1)
> switch((char)ch) {
> case 't':
> if ((sectimeout = atoi(optarg)) <= 0)
> errx(1, "illegal timeout value");
> break;
> + case 'u':
> + for (ts = timeout_spec; ts->spec != '\0'; ts++)
> + if (ts->spec == optarg[0])
> + break;
> + if (ts->spec == '\0')
> + errx(1, "illegal timeout unit specifier");
> + timeout_mul = ts->mul;
> + timeout_str = ts->str;
> + break;
> case 'p':
> usemine = 1;
> if (!(pw = getpwuid(getuid())))
> @@ -128,7 +153,7 @@
> default:
> usage();
> }
> - timeout.tv_sec = sectimeout * 60;
> + timeout.tv_sec = sectimeout * timeout_mul;
>
> setuid(getuid()); /* discard privs */
>
> @@ -139,7 +164,7 @@
> errx(1, "not a terminal?");
> if (gettimeofday(&timval, (struct timezone *)NULL))
> err(1, "gettimeofday");
> - nexttime = timval.tv_sec + (sectimeout * 60);
> + nexttime = timval.tv_sec + (sectimeout * timeout_mul);
> timval_sec = timval.tv_sec;
> timp = localtime(&timval_sec);
> ap = asctime(timp);
> @@ -200,8 +225,8 @@
> if (no_timeout)
> (void)printf(" no timeout.");
> else
> - (void)printf(" timeout in %d minute%s.", sectimeout,
> - sectimeout != 1 ? "s" : "");
> + (void)printf(" timeout in %d %s%s.", sectimeout,
> + timeout_str, sectimeout != 1 ? "s" : "");
> if (vtylock)
> (void)printf(" vty locked.");
> (void)printf("\ntime now is %.20s%s%s", ap, tzn, ap + 19);
> @@ -243,7 +268,7 @@
> static void
> usage(void)
> {
> - (void)fprintf(stderr, "usage: lock [-npv] [-t timeout]\n");
> + (void)fprintf(stderr, "usage: lock [-npv] [-t timeout] [-u unit]\n");
> exit(1);
> }
>
>
> --
> Peter Pentchev roam at ringlet.net roam at cnsys.bg roam at FreeBSD.org
> PGP key: http://people.FreeBSD.org/~roam/roam.key.asc
> Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553
> If I were you, who would be reading this sentence?
>
More information about the freebsd-hackers
mailing list