Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 408509
Collapse All | Expand All

(-)a/src/various/drop_permissions.cc (-6 / +13 lines)
Lines 11-16 Link Here
11
#include <eixrc/eixrc.h>
11
#include <eixrc/eixrc.h>
12
12
13
#include <string>
13
#include <string>
14
#include <iostream>
14
15
15
#include <unistd.h>
16
#include <unistd.h>
16
#include <sys/types.h>
17
#include <sys/types.h>
Lines 27-33 drop_permissions(EixRc &eix) Link Here
27
	bool set_gid(true);
28
	bool set_gid(true);
28
	gid_t gid;
29
	gid_t gid;
29
	const string &group(eix["EIX_GROUP"]);
30
	const string &group(eix["EIX_GROUP"]);
31
cout << "\nEIX_GROUP: " << group << "\n";
30
	if(group.empty() || (get_uid_of(group.c_str(), &gid) == 0)) {
32
	if(group.empty() || (get_uid_of(group.c_str(), &gid) == 0)) {
33
cout << "Group is bad\n";
31
		gid_t i(eix.getInteger("EIX_GID"));
34
		gid_t i(eix.getInteger("EIX_GID"));
32
		if(i > 0) {
35
		if(i > 0) {
33
			gid = i;
36
			gid = i;
Lines 38-56 drop_permissions(EixRc &eix) Link Here
38
	}
41
	}
39
	if(set_gid) {
42
	if(set_gid) {
40
#ifdef HAVE_SETGID
43
#ifdef HAVE_SETGID
41
		setgid(gid);
44
cout << "setgid(" << gid << "): " << setgid(gid) << "\n";
42
#endif
45
#endif
43
#ifdef HAVE_SETEGID
46
#ifdef HAVE_SETEGID
44
		setegid(gid);
47
cout << "setegid(" << gid << "): " << setegid(gid) << "\n";
45
#endif
48
#endif
46
#ifdef HAVE_SETGROUPS
49
#ifdef HAVE_SETGROUPS
47
		setgroups(1, &gid);
50
cout << "setgroups(1, &" << gid << "): " << setgroups(1, &gid) << "\n";
48
#endif
51
#endif
49
	}
52
	}
50
	bool set_uid(true);
53
	bool set_uid(true);
51
	uid_t uid;
54
	uid_t uid;
52
	const string &user(eix["EIX_USER"]);
55
	const string &user(eix["EIX_USER"]);
56
cout << "EIX_USER: " << user << "\n";
53
	if(user.empty() || !get_uid_of(user.c_str(), &uid)) {
57
	if(user.empty() || !get_uid_of(user.c_str(), &uid)) {
58
cout << "User is bad\n";
54
		uid_t i(eix.getInteger("EIX_UID"));
59
		uid_t i(eix.getInteger("EIX_UID"));
55
		if(i > 0) {
60
		if(i > 0) {
56
			uid = i;
61
			uid = i;
Lines 62-78 drop_permissions(EixRc &eix) Link Here
62
#ifdef HAVE_INITGROUPS
67
#ifdef HAVE_INITGROUPS
63
	else {
68
	else {
64
		if(set_gid) {
69
		if(set_gid) {
65
			initgroups(user.c_str(), gid);
70
cout << "initgroups(" << user.c_str() << ", " << gid << "): " <<
71
		initgroups(user.c_str(), gid) << "\n";
66
		}
72
		}
67
	}
73
	}
68
#endif
74
#endif
69
	if(set_uid) {
75
	if(set_uid) {
70
#ifdef HAVE_SETUID
76
#ifdef HAVE_SETUID
71
		setuid(uid);
77
cout << "setuid(" << uid << "): " << setuid(uid) << "\n";
72
#endif
78
#endif
73
#ifdef HAVE_SETEUID
79
#ifdef HAVE_SETEUID
74
		seteuid(uid);
80
cout << "seteuid(" << uid << "): " << seteuid(uid) << "\n";
75
#endif
81
#endif
76
	}
82
	}
83
cout << endl;
77
}
84
}
78
85

Return to bug 408509