summaryrefslogtreecommitdiffstats
path: root/usr.bin/calendar
diff options
context:
space:
mode:
authormpp <mpp@FreeBSD.org>1997-02-09 07:45:03 +0000
committermpp <mpp@FreeBSD.org>1997-02-09 07:45:03 +0000
commit60aa846017d4c72f8e25fbe322c4b77520802199 (patch)
tree8b1279230d967d3a3b30272a776d111e5154c4cb /usr.bin/calendar
parentf1090aa26113e20b2830528e76f7b80924fd9921 (diff)
downloadFreeBSD-src-60aa846017d4c72f8e25fbe322c4b77520802199.zip
FreeBSD-src-60aa846017d4c72f8e25fbe322c4b77520802199.tar.gz
Really fix calendar to drop all permissions when
run with "calendar -a". Also don't ignore the return values from the setuid/setgid calls. Thanks to bde for making me this about this.
Diffstat (limited to 'usr.bin/calendar')
-rw-r--r--usr.bin/calendar/io.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/usr.bin/calendar/io.c b/usr.bin/calendar/io.c
index 68b8895..ee04e93 100644
--- a/usr.bin/calendar/io.c
+++ b/usr.bin/calendar/io.c
@@ -223,6 +223,7 @@ char path[MAXPATHLEN + 1];
FILE *
opencal()
{
+ uid_t uid;
int fd, pdes[2];
struct stat sbuf;
@@ -256,8 +257,19 @@ opencal()
(void)close(pdes[1]);
}
(void)close(pdes[0]);
- (void)setuid(geteuid());
- (void)setgid(getegid());
+ uid = geteuid();
+ if (setuid(getuid()) < 0) {
+ fprintf(stderr, "calendar: first setuid failed\n");
+ _exit(1);
+ };
+ if (setgid(getegid()) < 0) {
+ fprintf(stderr, "calendar: setegid failed\n");
+ _exit(1);
+ }
+ if (setuid(uid) < 0) {
+ fprintf(stderr, "caelndar: setuid failed\n");
+ _exit(1);
+ }
execl(_PATH_CPP, "cpp", "-P", "-I.", _PATH_INCLUDE, NULL);
(void)fprintf(stderr,
"calendar: execl: %s: %s.\n", _PATH_CPP, strerror(errno));
@@ -283,6 +295,7 @@ void
closecal(fp)
FILE *fp;
{
+ uid_t uid;
struct stat sbuf;
int nread, pdes[2], status;
char buf[1024];
@@ -307,8 +320,19 @@ closecal(fp)
(void)close(pdes[0]);
}
(void)close(pdes[1]);
- (void)setuid(geteuid());
- (void)setegid(getegid());
+ uid = geteuid();
+ if (setuid(getuid()) < 0) {
+ fprintf(stderr, "calendar: setuid failed\n");
+ _exit(1);
+ };
+ if (setgid(getegid()) < 0) {
+ fprintf(stderr, "calendar: setegid failed\n");
+ _exit(1);
+ }
+ if (setuid(uid) < 0) {
+ fprintf(stderr, "caelndar: setuid failed\n");
+ _exit(1);
+ }
execl(_PATH_SENDMAIL, "sendmail", "-i", "-t", "-F",
"\"Reminder Service\"", "-f", "root", NULL);
(void)fprintf(stderr,
OpenPOWER on IntegriCloud