summaryrefslogtreecommitdiff
path: root/lib/tempfile.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tempfile.c')
-rw-r--r--lib/tempfile.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/tempfile.c b/lib/tempfile.c
index f4a291c1..5d8847c6 100644
--- a/lib/tempfile.c
+++ b/lib/tempfile.c
@@ -25,21 +25,32 @@
#endif /* HAVE_CONFIG_H */
#include <assert.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
+#include "attribute.h"
#include "xvasprintf.h"
#include "manconfig.h"
#include "tempfile.h"
+static bool ATTRIBUTE_PURE running_setid (void)
+{
+#ifdef HAVE_GETUID
+ return getuid () != geteuid () || getgid () != getegid ();
+#else /* !HAVE_GETUID */
+ return false;
+#endif /* HAVE_GETUID */
+}
+
static const char *path_search (void)
{
const char *dir = NULL;
- if (getuid () == geteuid () && getgid () == getegid ()) {
+ if (running_setid ()) {
dir = getenv ("TMPDIR");
if (!dir || !CAN_ACCESS (dir, W_OK))
dir = NULL;