summaryrefslogtreecommitdiff
blob: 7fdca73f1caf409fa1aa4c5f71e38de9818ea3e8 (plain)
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
27
28
29
30
31
32
33
34
/*
 * https://bugs.gentoo.org/599706
 *
 */

#include "headers.h"

int main(int argc, char *argv[])
{
	if (argc < 3)
		return -2;

	uid_t uid = atoi(argv[1]);
	gid_t gid = atoi(argv[2]);
	/* The sandbox catches this:
	 *
	 *   int fd = open(argv[3], O_RDWR);
	 *
	 * And it /should/ catch this:
	 *
	 *    int fd = open(argv[3], O_RDONLY);
	 *
	 * ...but the latter only works when /proc/self/fd/%i
	 * is available.
	 */
#ifdef SANDBOX_PROC_SELF_FD
	int fd = open(argv[3], O_RDONLY);
#else
	int fd = open(argv[3], O_RDWR);
#endif
	int fchown_result = fchown(fd, uid, gid);
	close(fd);
	return fchown_result;
}