now warns if killed by signal
./
This commit is contained in:
35
visudo.c
35
visudo.c
@@ -180,7 +180,7 @@ int main(argc, argv)
|
|||||||
}
|
}
|
||||||
(void) fprintf(stderr, "%s: ", Argv[0]);
|
(void) fprintf(stderr, "%s: ", Argv[0]);
|
||||||
perror(stmp);
|
perror(stmp);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* install signal handler to clean up stmp */
|
/* install signal handler to clean up stmp */
|
||||||
@@ -190,7 +190,7 @@ int main(argc, argv)
|
|||||||
if (sudoers_fd < 0 && errno != ENOENT) {
|
if (sudoers_fd < 0 && errno != ENOENT) {
|
||||||
(void) fprintf(stderr, "%s: ", Argv[0]);
|
(void) fprintf(stderr, "%s: ", Argv[0]);
|
||||||
perror(sudoers);
|
perror(sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -201,7 +201,7 @@ int main(argc, argv)
|
|||||||
if (write(stmp_fd, buf, n) != n) {
|
if (write(stmp_fd, buf, n) != n) {
|
||||||
(void) fprintf(stderr, "%s: Write failed: ", Argv[0]);
|
(void) fprintf(stderr, "%s: Write failed: ", Argv[0]);
|
||||||
perror("");
|
perror("");
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) close(sudoers_fd);
|
(void) close(sudoers_fd);
|
||||||
@@ -230,7 +230,7 @@ int main(argc, argv)
|
|||||||
(void) fprintf(stderr,
|
(void) fprintf(stderr,
|
||||||
"%s: Can't stat temporary file (%s), %s unchanged.\n",
|
"%s: Can't stat temporary file (%s), %s unchanged.\n",
|
||||||
Argv[0], stmp, sudoers);
|
Argv[0], stmp, sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check for zero length file */
|
/* check for zero length file */
|
||||||
@@ -238,7 +238,7 @@ int main(argc, argv)
|
|||||||
(void) fprintf(stderr,
|
(void) fprintf(stderr,
|
||||||
"%s: Zero length temporary file (%s), %s unchanged.\n",
|
"%s: Zero length temporary file (%s), %s unchanged.\n",
|
||||||
Argv[0], stmp, sudoers);
|
Argv[0], stmp, sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -254,7 +254,7 @@ int main(argc, argv)
|
|||||||
(void) fprintf(stderr,
|
(void) fprintf(stderr,
|
||||||
"%s: Can't re-open temporary file (%s), %s unchanged.\n",
|
"%s: Can't re-open temporary file (%s), %s unchanged.\n",
|
||||||
Argv[0], stmp, sudoers);
|
Argv[0], stmp, sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* clean slate for each parse */
|
/* clean slate for each parse */
|
||||||
@@ -265,12 +265,12 @@ int main(argc, argv)
|
|||||||
(void) fprintf(stderr,
|
(void) fprintf(stderr,
|
||||||
"%s: Failed to parse temporary file (%s), %s unchanged.\n",
|
"%s: Failed to parse temporary file (%s), %s unchanged.\n",
|
||||||
Argv[0], stmp, sudoers);
|
Argv[0], stmp, sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(void) fprintf(stderr, "%s: Editor (%s) failed, %s unchanged.\n",
|
(void) fprintf(stderr, "%s: Editor (%s) failed, %s unchanged.\n",
|
||||||
Argv[0], Editor, sudoers);
|
Argv[0], Editor, sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -295,14 +295,14 @@ int main(argc, argv)
|
|||||||
"%s: Unable to set (uid, gid) of %s to (%d, %d): ",
|
"%s: Unable to set (uid, gid) of %s to (%d, %d): ",
|
||||||
Argv[0], stmp, SUDOERS_UID, SUDOERS_GID);
|
Argv[0], stmp, SUDOERS_UID, SUDOERS_GID);
|
||||||
perror("");
|
perror("");
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
if (chmod(stmp, SUDOERS_MODE)) {
|
if (chmod(stmp, SUDOERS_MODE)) {
|
||||||
(void) fprintf(stderr,
|
(void) fprintf(stderr,
|
||||||
"%s: Unable to change mode of %s to %o: ",
|
"%s: Unable to change mode of %s to %o: ",
|
||||||
Argv[0], stmp, SUDOERS_MODE);
|
Argv[0], stmp, SUDOERS_MODE);
|
||||||
perror("");
|
perror("");
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -326,7 +326,7 @@ int main(argc, argv)
|
|||||||
"%s: Cannot alocate memory, %s unchanged: ",
|
"%s: Cannot alocate memory, %s unchanged: ",
|
||||||
Argv[0], sudoers);
|
Argv[0], sudoers);
|
||||||
perror("");
|
perror("");
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build up command and execute it */
|
/* Build up command and execute it */
|
||||||
@@ -335,14 +335,14 @@ int main(argc, argv)
|
|||||||
(void) fprintf(stderr,
|
(void) fprintf(stderr,
|
||||||
"%s: Command failed: '%s', %s unchanged.\n",
|
"%s: Command failed: '%s', %s unchanged.\n",
|
||||||
Argv[0], tmpbuf, sudoers);
|
Argv[0], tmpbuf, sudoers);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
(void) free(tmpbuf);
|
(void) free(tmpbuf);
|
||||||
} else {
|
} else {
|
||||||
(void) fprintf(stderr, "%s: Error renaming %s, %s unchanged: ",
|
(void) fprintf(stderr, "%s: Error renaming %s, %s unchanged: ",
|
||||||
Argv[0], stmp, sudoers);
|
Argv[0], stmp, sudoers);
|
||||||
perror("");
|
perror("");
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
@@ -396,7 +396,7 @@ int netgr_matches(n, h, u)
|
|||||||
static void usage()
|
static void usage()
|
||||||
{
|
{
|
||||||
(void) fprintf(stderr, "usage: %s [-V]\n", Argv[0]);
|
(void) fprintf(stderr, "usage: %s [-V]\n", Argv[0]);
|
||||||
Exit(1);
|
Exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -406,12 +406,19 @@ static void usage()
|
|||||||
*
|
*
|
||||||
* Unlinks the sudoers temp file (if it exists) and exits.
|
* Unlinks the sudoers temp file (if it exists) and exits.
|
||||||
* Used in place of a normal exit() and as a signal handler.
|
* Used in place of a normal exit() and as a signal handler.
|
||||||
|
* A positive parameter is considered to be a signal and is reported.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RETSIGTYPE Exit(sig)
|
static RETSIGTYPE Exit(sig)
|
||||||
int sig;
|
int sig;
|
||||||
{
|
{
|
||||||
(void) unlink(stmp);
|
(void) unlink(stmp);
|
||||||
|
|
||||||
|
if (sig > 0)
|
||||||
|
(void) fprintf(stderr, "%s exiting, caught signal %d.\n", Argv[0], sig);
|
||||||
|
else
|
||||||
|
sig = -sig;
|
||||||
|
|
||||||
exit(sig);
|
exit(sig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user