1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
# using setresgid() for safely dropping utmp group membership which were needed
# for makesocketpath() to create the user directory under /var/run/tmux which is
# only writeable for processes that have setgid utmp.
--- a/tmux.c
+++ b/tmux.c
@@ -246,6 +246,7 @@
size_t len;
int opt, flags, quiet = 0, cmdflags = 0;
short events;
+ u_int gid;
#if defined(DEBUG) && defined(__OpenBSD__)
malloc_options = (char *) "AFGJPX";
@@ -473,6 +474,12 @@
}
}
}
+ gid = getgid();
+ /* drop unnecessary privileges which were needed for makesocketpath()
+ * to create the user directory under /var/run/tmux which is only
+ * writeable for processes that have setgid utmp. */
+ if (setresgid(gid, gid, gid) != 0)
+ exit(1);
if (label != NULL)
xfree(label);
|