|
|
5755ea4 |
--- kismet-2007-01-R1b/kismet_server.cc.setgroups 2007-01-06 09:08:59.000000000 +0100
|
|
|
5755ea4 |
+++ kismet-2007-01-R1b/kismet_server.cc 2007-02-03 23:33:12.000000000 +0100
|
|
|
5755ea4 |
@@ -28,6 +28,7 @@
|
|
|
5755ea4 |
#include <stdlib.h>
|
|
|
5755ea4 |
#include <signal.h>
|
|
|
5755ea4 |
#include <pwd.h>
|
|
|
5755ea4 |
+#include <grp.h>
|
|
|
5755ea4 |
#include <string>
|
|
|
5755ea4 |
#include <vector>
|
|
|
5755ea4 |
|
|
|
5755ea4 |
@@ -2506,6 +2507,11 @@
|
|
|
5755ea4 |
exit(1);
|
|
|
5755ea4 |
}
|
|
|
5755ea4 |
|
|
|
5755ea4 |
+ if (setgroups(0,0) < 0) {
|
|
|
5755ea4 |
+ fprintf(stderr, "FATAL: setgroups() failed: %m.\n");
|
|
|
5755ea4 |
+ exit(1);
|
|
|
5755ea4 |
+ }
|
|
|
5755ea4 |
+
|
|
|
5755ea4 |
if (setuid(suid_id) < 0) {
|
|
|
5755ea4 |
fprintf(stderr, "FATAL: setuid() to %s (%d) failed.\n", suid_user, suid_id);
|
|
|
5755ea4 |
exit(1);
|
|
|
5755ea4 |
--- kismet-2007-01-R1b/kismet_drone.cc.setgroups 2006-04-13 00:42:59.000000000 +0200
|
|
|
5755ea4 |
+++ kismet-2007-01-R1b/kismet_drone.cc 2007-02-03 23:35:45.000000000 +0100
|
|
|
5755ea4 |
@@ -26,6 +26,7 @@
|
|
|
5755ea4 |
#include <stdlib.h>
|
|
|
5755ea4 |
#include <signal.h>
|
|
|
5755ea4 |
#include <pwd.h>
|
|
|
5755ea4 |
+#include <grp.h>
|
|
|
5755ea4 |
#include <string>
|
|
|
5755ea4 |
#include <vector>
|
|
|
5755ea4 |
|
|
|
5755ea4 |
@@ -298,6 +299,7 @@
|
|
|
5755ea4 |
struct passwd *pwordent;
|
|
|
5755ea4 |
const char *suid_user;
|
|
|
5755ea4 |
uid_t suid_id, real_uid;
|
|
|
5755ea4 |
+ gid_t suid_gid;
|
|
|
5755ea4 |
|
|
|
5755ea4 |
real_uid = getuid();
|
|
|
5755ea4 |
|
|
|
5755ea4 |
@@ -308,7 +310,8 @@
|
|
|
5755ea4 |
fprintf(stderr, " Make sure you have a valid user set for 'suiduser' in your config.\n");
|
|
|
5755ea4 |
exit(1);
|
|
|
5755ea4 |
} else {
|
|
|
5755ea4 |
- suid_id = pwordent->pw_uid;
|
|
|
5755ea4 |
+ suid_id = pwordent->pw_uid;
|
|
|
5755ea4 |
+ suid_gid = pwordent->pw_gid;
|
|
|
5755ea4 |
|
|
|
5755ea4 |
if (suid_id == 0) {
|
|
|
5755ea4 |
// If we're suiding to root...
|
|
|
5755ea4 |
@@ -516,6 +519,16 @@
|
|
|
5755ea4 |
// logfiles as root if we can avoid it. Once we've dropped, we'll investigate our
|
|
|
5755ea4 |
// sources again and open any defered
|
|
|
5755ea4 |
#ifdef HAVE_SUID
|
|
|
5755ea4 |
+ if (setgid(suid_gid) < 0) {
|
|
|
5755ea4 |
+ fprintf(stderr, "FATAL: setgid() to %d failed: %m\n", suid_gid);
|
|
|
5755ea4 |
+ exit(1);
|
|
|
5755ea4 |
+ }
|
|
|
5755ea4 |
+
|
|
|
5755ea4 |
+ if (setgroups(0,0) < 0) {
|
|
|
5755ea4 |
+ fprintf(stderr, "FATAL: setgroups() failed: %m\n");
|
|
|
5755ea4 |
+ exit(1);
|
|
|
5755ea4 |
+ }
|
|
|
5755ea4 |
+
|
|
|
5755ea4 |
if (setuid(suid_id) < 0) {
|
|
|
5755ea4 |
fprintf(stderr, "FATAL: setuid() to %s (%d) failed.\n", suid_user, suid_id);
|
|
|
5755ea4 |
exit(1);
|