+ gid_t egid; /* Retain tty privs for notification */
int notify = 0; /* notify operator flag */
int blockswritten = 0; /* number of blocks written on current tape */
int tapeno = 0; /* current tape number */
*************** main(argc, argv)
*** 118,123 ****
--- 119,128 ----
spcl.c_date = 0;
(void)time((time_t *)&spcl.c_date);
+
+ /* Save setgid bit for use later */
+ egid = getegid();
+ setegid(getgid());
/*
* Query the operator; This previously-fascist piece of code
*************** broadcast(message)
*** 225,236 ****
--- 226,241 ----
if (!notify || gp == NULL)
return;
+ /* Restore 'tty' privs for the child's use only. */
+ setegid(egid);
switch (pid = fork()) {
case -1:
+ setegid(getgid());
return;
case 0:
break;
default:
+ setegid(getgid());
while (wait(&s) != pid)
continue;
return;