summaryrefslogtreecommitdiffstats
path: root/libexec/talkd
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1996-03-24 09:27:20 +0000
committerjkh <jkh@FreeBSD.org>1996-03-24 09:27:20 +0000
commit4a2e323e1bbc2c0595ddab06b1a6201952e592bb (patch)
tree311eca7b6f7193f9965050bf7389fef52058f550 /libexec/talkd
parent5c58b27edeb030e5fbf89a417731006d07ead969 (diff)
downloadFreeBSD-src-4a2e323e1bbc2c0595ddab06b1a6201952e592bb.zip
FreeBSD-src-4a2e323e1bbc2c0595ddab06b1a6201952e592bb.tar.gz
Here is a patch to talkd which makes it send the request to the tty with
the lowest idle time. Submitted by: loodvrij@gridpoint.com (Bruce J. Keeler)
Diffstat (limited to 'libexec/talkd')
-rw-r--r--libexec/talkd/process.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/libexec/talkd/process.c b/libexec/talkd/process.c
index a83492b..fce70c6 100644
--- a/libexec/talkd/process.c
+++ b/libexec/talkd/process.c
@@ -190,6 +190,7 @@ find_user(name, tty)
int status;
FILE *fd;
struct stat statb;
+ time_t best = 0;
char line[sizeof(ubuf.ut_line) + 1];
char ftty[sizeof(_PATH_DEV) - 1 + sizeof(line)];
@@ -204,17 +205,21 @@ find_user(name, tty)
if (SCMPN(ubuf.ut_name, name) == 0) {
strncpy(line, ubuf.ut_line, sizeof(ubuf.ut_line));
line[sizeof(ubuf.ut_line)] = '\0';
- if (*tty == '\0') {
- status = PERMISSION_DENIED;
+ if (*tty == '\0' || best != 0) {
+ if (best == 0)
+ status = PERMISSION_DENIED;
/* no particular tty was requested */
(void) strcpy(ftty + sizeof(_PATH_DEV) - 1,
line);
if (stat(ftty, &statb) == 0) {
if (!(statb.st_mode & 020))
continue;
- (void) strcpy(tty, line);
- status = SUCCESS;
- break;
+ if (statb.st_atime > best) {
+ best = statb.st_atime;
+ (void) strcpy(tty, line);
+ status = SUCCESS;
+ continue;
+ }
}
}
if (strcmp(line, tty) == 0) {
OpenPOWER on IntegriCloud