-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathat.cpp
More file actions
62 lines (54 loc) · 1.77 KB
/
Copy pathat.cpp
File metadata and controls
62 lines (54 loc) · 1.77 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "hook.hpp"
#include "fd_mgmt.hpp"
#include <sys/types.h>
#include <fcntl.h>
PRELOAD_LIBC_FUNC(
fmkdirat,
PROTO(3, int, fmkdirat, int, dirfd, const char *, pathname, mode_t, mode),
FAILURE(_return < 0),
WRAPPER(ACTION_ACCESS(dirfd), ACTION_NULL)
)
PRELOAD_LIBC_FUNC(
mknodat,
PROTO(4, int, mknodat, int, dirfd, const char *, pathname, mode_t, mode, dev_t, dev),
FAILURE(_return < 0),
WRAPPER(ACTION_ACCESS(dirfd), ACTION_NULL)
)
PRELOAD_LIBC_FUNC(
fchownat,
PROTO(5, int, fchownat, int, dirfd, const char *, pathname, uid_t, owner, gid_t, group, int, flags),
FAILURE(_return < 0),
WRAPPER(ACTION_ACCESS(dirfd), ACTION_NULL)
)
PRELOAD_LIBC_FUNC(
futimesat,
PROTO(3, int, futimesat, int, dirfd, const char *, pathname, const struct timeval *, times),
FAILURE(_return < 0),
WRAPPER(ACTION_ACCESS(dirfd), ACTION_NULL)
)
PRELOAD_LIBC_FUNC(
unlinkat,
PROTO(3, int, unlinkat, int, dirfd, const char *, pathname, int, flags),
FAILURE(_return < 0),
WRAPPER(ACTION_IF(pathname[0] != '/' && dirfd != AT_FDCWD, ACTION_ACCESS(dirfd)), ACTION_NULL)
)
PRELOAD_LIBC_FUNC(
renameat,
PROTO(4, int, renameat, int, olddirfd, const char *, oldpath, int, newdirfd, const char *, newpath),
FAILURE(_return < 0),
WRAPPER(ACTION_COMP(
ACTION_IF(oldpath[0] != '/' && olddirfd != AT_FDCWD, ACTION_ACCESS(olddirfd)),
ACTION_IF(newpath[0] != '/' && newdirfd != AT_FDCWD, ACTION_ACCESS(newdirfd))
),
ACTION_NULL)
)
PRELOAD_LIBC_FUNC(
linkat,
PROTO(5, int, linkat, int, olddirfd, const char *, oldpath, int, newdirfd, const char *, newpath, int, flags),
FAILURE(_return < 0),
WRAPPER(ACTION_COMP(
ACTION_IF(oldpath[0] != '/' && olddirfd != AT_FDCWD, ACTION_ACCESS(olddirfd)),
ACTION_IF(newpath[0] != '/' && newdirfd != AT_FDCWD, ACTION_ACCESS(newdirfd))
),
ACTION_NULL)
)