Add ability to only beep when mail arrives.

comsat:
        only send two bell charecters if S_IXGRP is set and S_IXUSR is not.

biff:
        add new option 'b' to set S_IXGRP.

PR:             10931
Submitted by:   Andrew J. Korty <ajk@purdue.edu>
Approved by:    sheldonh (mentor)
MFC after:      1 month
This commit is contained in:
Johan Karlsson 2002-07-09 02:16:49 +00:00
parent 894429f29b
commit 7da9dccb66
4 changed files with 49 additions and 16 deletions

View File

@ -76,6 +76,13 @@ or
.Dq Subject
lines are not included in the displayed message.
.Pp
If the
.Em user
specified is logged in to the system and the associated terminal has
the group execute bit turned on (by a
.Dq Li biff b ) ,
two bell characters (ASCII \\007) are printed on the user's terminal.
.Pp
If mailbox-name omitted, standard mailbox assumed.
.Sh FILES
.Bl -tag -width /var/mail/user -compact

View File

@ -211,7 +211,7 @@ notify(struct utmp *utp, char file[], off_t offset, int folder)
syslog(LOG_AUTH | LOG_NOTICE, "'/' in \"%s\"", tty);
return;
}
if (stat(tty, &stb) || !(stb.st_mode & S_IEXEC)) {
if (stat(tty, &stb) || !(stb.st_mode & (S_IXUSR | S_IXGRP))) {
dsyslog(LOG_DEBUG, "%s: wrong mode on %s", utp->ut_name, tty);
return;
}
@ -228,11 +228,25 @@ notify(struct utmp *utp, char file[], off_t offset, int folder)
cr = ((tio.c_oflag & (OPOST|ONLCR)) == (OPOST|ONLCR)) ? "\n" : "\n\r";
(void)strncpy(name, utp->ut_name, sizeof(utp->ut_name));
name[sizeof(name) - 1] = '\0';
(void)fprintf(tp, "%s\007New mail for %s@%.*s\007 has arrived%s%s%s:%s----%s",
cr, name, (int)sizeof(hostname), hostname,
folder ? cr : "", folder ? "to " : "", folder ? file : "",
cr, cr);
jkfprintf(tp, name, file, offset);
switch (stb.st_mode & (S_IXUSR | S_IXGRP)) {
case S_IXUSR:
case (S_IXUSR | S_IXGRP):
(void)fprintf(tp,
"%s\007New mail for %s@%.*s\007 has arrived%s%s%s:%s----%s",
cr, name, (int)sizeof(hostname), hostname,
folder ? cr : "", folder ? "to " : "", folder ? file : "",
cr, cr);
jkfprintf(tp, name, file, offset);
break;
case S_IXGRP:
(void)fprintf(tp, "\007");
(void)fflush(tp);
(void)sleep(1);
(void)fprintf(tp, "\007");
break;
default:
break;
}
(void)fclose(tp);
_exit(0);
}

View File

@ -40,7 +40,7 @@
.Nd "be notified if mail arrives and who it is from"
.Sh SYNOPSIS
.Nm
.Op Cm n | y
.Op Cm n | y | b
.Sh DESCRIPTION
The
.Nm
@ -52,11 +52,13 @@ The following options are available:
.It Cm n
Disable notification.
.It Cm y
Enable notification.
Enable header notification.
.It Cm b
Enable bell notification.
.El
.Pp
When mail notification is enabled, the header and first few lines of
the message will be printed on your screen whenever mail arrives.
When header notification is enabled, the header and first few lines of
the message will be printed on your terminal whenever mail arrives.
A
.Dq Li biff y
command is often included in the file
@ -65,6 +67,9 @@ or
.Pa \&.profile
to be executed at each login.
.Pp
When bell notification is enabled, only two bell characters (ASCII \\007)
will be printed on your terminal whenever mail arrives.
.Pp
The
.Nm
utility operates asynchronously.

View File

@ -81,28 +81,35 @@ main(argc, argv)
err(2, "stat");
if (*argv == NULL) {
(void)printf("is %s\n", sb.st_mode & S_IXUSR ? "y" : "n");
return(sb.st_mode & S_IXUSR ? 0 : 1);
(void)printf("is %s%s\n",
sb.st_mode & S_IXUSR ? "y" :
sb.st_mode & S_IXGRP ? "b" : "n");
return(sb.st_mode & (S_IXUSR | S_IXGRP) ? 0 : 1);
}
switch(argv[0][0]) {
case 'n':
if (chmod(name, sb.st_mode & ~S_IXUSR) < 0)
if (chmod(name, sb.st_mode & ~(S_IXUSR | S_IXGRP)) < 0)
err(2, "%s", name);
break;
case 'y':
if (chmod(name, sb.st_mode | S_IXUSR) < 0)
if (chmod(name, (sb.st_mode & ~(S_IXUSR | S_IXGRP)) | S_IXUSR) < 0)
err(2, "%s", name);
break;
case 'b':
if (chmod(name, (sb.st_mode & ~(S_IXUSR | S_IXGRP)) | S_IXGRP) < 0)
err(2, "%s", name);
break;
default:
usage();
}
return(sb.st_mode & S_IXUSR ? 0 : 1);
return(sb.st_mode & (S_IXUSR | S_IXGRP) ? 0 : 1);
}
static void
usage()
{
(void)fprintf(stderr, "usage: biff [y | n]\n");
(void)fprintf(stderr, "usage: biff [n | y | b]\n");
exit(2);
}