diff options
author | Ollivier Robert <roberto@FreeBSD.org> | 1996-09-14 09:00:52 +0000 |
---|---|---|
committer | Ollivier Robert <roberto@FreeBSD.org> | 1996-09-14 09:00:52 +0000 |
commit | 2280509ca1101b9a646538fb33b082e509c169bc (patch) | |
tree | c94853d320b1952aa24f0709d58b7b3128af669b /usr.bin/lock | |
parent | 2e82980a4c4abd88fa49dd988bbd5ac11edc685a (diff) | |
download | src-2280509ca1101b9a646538fb33b082e509c169bc.tar.gz src-2280509ca1101b9a646538fb33b082e509c169bc.zip |
Closes PR bin/1567
/usr/bin/lock can be used to lock a terminal much like xlock does
for your X-windows session. Problem is, /usr/bin/lock cannot lock
your terminal indefinately. Rather you must specify a timeout
value, after which, your terminal is unlocked and become unsecured.
I have added a ``-n'' no timeout option to /usr/bin/lock
Currently the only way to get this functionality is to use a huge
timeout value and hope it is long enought (in time). This method
also requires you to know the maxium number of minutes you are
allowed to specify.
Submitted by: David E. O'Brien <obrien@Nuxi.cs.ucdavis.edu>
Notes
Notes:
svn path=/head/; revision=18295
Diffstat (limited to 'usr.bin/lock')
-rw-r--r-- | usr.bin/lock/lock.1 | 3 | ||||
-rw-r--r-- | usr.bin/lock/lock.c | 38 |
2 files changed, 32 insertions, 9 deletions
diff --git a/usr.bin/lock/lock.1 b/usr.bin/lock/lock.1 index ad8575cdab08..fba54423232a 100644 --- a/usr.bin/lock/lock.1 +++ b/usr.bin/lock/lock.1 @@ -39,6 +39,7 @@ .Nd reserve a terminal .Sh SYNOPSIS .Nm lock +.Op Fl n .Op Fl p .Op Fl t Ar timeout .Sh DESCRIPTION @@ -53,6 +54,8 @@ with the appropriate permission. Options: .Pp .Bl -tag -width Fl +.It Fl n +Don't use a timeout value. Terminal will be locked forever. .It Fl p A password is not requested, instead the user's current login password is used. diff --git a/usr.bin/lock/lock.c b/usr.bin/lock/lock.c index 774ebc987111..c53cbd01af19 100644 --- a/usr.bin/lock/lock.c +++ b/usr.bin/lock/lock.c @@ -70,6 +70,7 @@ struct timeval timeout; struct timeval zerotime; struct sgttyb tty, ntty; long nexttime; /* keep the timeout time */ +int no_timeout; /* lock terminal forever */ /*ARGSUSED*/ main(argc, argv) @@ -90,7 +91,8 @@ main(argc, argv) sectimeout = TIMEOUT; mypw = NULL; usemine = 0; - while ((ch = getopt(argc, argv, "pt:")) != EOF) + no_timeout = 0; + while ((ch = getopt(argc, argv, "npt:")) != EOF) switch((char)ch) { case 't': if ((sectimeout = atoi(optarg)) <= 0) { @@ -108,10 +110,13 @@ main(argc, argv) } mypw = strdup(pw->pw_passwd); break; + case 'n': + no_timeout = 1; + break; case '?': default: (void)fprintf(stderr, - "usage: lock [-p] [-t timeout]\n"); + "usage: lock [-n] [-p] [-t timeout]\n"); exit(1); } timeout.tv_sec = sectimeout * 60; @@ -169,11 +174,17 @@ main(argc, argv) ntimer.it_interval = zerotime; ntimer.it_value = timeout; - setitimer(ITIMER_REAL, &ntimer, &otimer); + if (!no_timeout) + setitimer(ITIMER_REAL, &ntimer, &otimer); /* header info */ + if (no_timeout) { +(void)printf("lock: %s on %s. no timeout\ntime now is %.20s%s%s", + ttynam, hostname, ap, tzn, ap + 19); + } else { (void)printf("lock: %s on %s. timeout in %d minutes\ntime now is %.20s%s%s", ttynam, hostname, sectimeout, ap, tzn, ap + 19); + } for (;;) { (void)printf("Key: "); @@ -201,9 +212,16 @@ hi() { struct timeval timval; - if (!gettimeofday(&timval, (struct timezone *)NULL)) -(void)printf("lock: type in the unlock key. timeout in %ld:%ld minutes\n", - (nexttime - timval.tv_sec) / 60, (nexttime - timval.tv_sec) % 60); + if (!gettimeofday(&timval, (struct timezone *)NULL)) { + (void)printf("lock: type in the unlock key. "); + if (no_timeout) { + (void)putchar('\n'); + } else { + (void)printf("timeout in %ld:%ld minutes\n", + (nexttime - timval.tv_sec) / 60, + (nexttime - timval.tv_sec) % 60); + } + } } void @@ -217,7 +235,9 @@ quit() void bye() { - (void)ioctl(0, TIOCSETP, &tty); - (void)printf("lock: timeout\n"); - exit(1); + if (!no_timeout) { + (void)ioctl(0, TIOCSETP, &tty); + (void)printf("lock: timeout\n"); + exit(1); + } } |