aboutsummaryrefslogtreecommitdiffstats
path: root/sink.c
diff options
context:
space:
mode:
Diffstat (limited to 'sink.c')
-rw-r--r--sink.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sink.c b/sink.c
index ca2dc657..4e160206 100644
--- a/sink.c
+++ b/sink.c
@@ -937,6 +937,9 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg,
#ifdef HAVE_SIGACTION
struct sigaction sa_new;
#endif /* HAVE_SIGACTION */
+#ifdef HAVE_SETEUID
+ uid_t orig_uid;
+#endif /* HAVE_SETEUID */
struct idlist *idp;
int length = 0, fromlen = 0, nameslen = 0;
char *names = NULL, *before, *after, *from = NULL;
@@ -1062,6 +1065,7 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg,
* MDA creates properly. (The seteuid call is available
* under all BSDs and Linux)
*/
+ orig_uid = getuid();
seteuid(ctl->uid);
#endif /* HAVE_SETEUID */
@@ -1071,7 +1075,7 @@ static int open_mda_sink(struct query *ctl, struct msgblk *msg,
#ifdef HAVE_SETEUID
/* this will fail quietly if we didn't start as root */
- seteuid(0);
+ seteuid(orig_uid);
#endif /* HAVE_SETEUID */
if (!sinkfp)