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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
Index: src/chroot-sh.c
===================================================================
--- src/chroot-sh.c (revision 2358)
+++ src/chroot-sh.c (revision 2359)
@@ -142,7 +142,55 @@
return res!=-1 && S_ISREG(res) ? EXIT_SUCCESS : EXIT_FAILURE;
}
+static int
+execMkdir(int argc, char *argv[])
+{
+ int i = 1;
+ int res = EXIT_SUCCESS;
+
+ if (argc<2) {
+ WRITE_MSG(2, "No files specified for 'mkdir' operation; try '--help' for more information\n");
+ return wrapper_exit_code;
+ }
+ for (;i<argc; ++i) {
+ if (mkdir(argv[i], 0755)==-1) {
+ PERROR_Q(ENSC_WRAPPERS_PREFIX "mkdir", argv[i]);
+ res = EXIT_FAILURE;
+ }
+ }
+
+ return res;
+}
+
+static int
+execChmod(int argc, char *argv[])
+{
+ int i = 2;
+ int res = EXIT_SUCCESS;
+ unsigned long mode;
+
+ if (argc<3) {
+ WRITE_MSG(2, "No files specified for 'chmod' operation; try '--help' for more information\n");
+ return wrapper_exit_code;
+ }
+
+ if (!isNumberUnsigned(argv[1], &mode, 1)) {
+ WRITE_MSG(2, "Invalid mode: '");
+ WRITE_STR(2, argv[1]);
+ return EXIT_FAILURE;
+ }
+
+ for (;i<argc; ++i) {
+ if (chmod(argv[i], mode)==-1) {
+ PERROR_Q(ENSC_WRAPPERS_PREFIX "chmod", argv[i]);
+ res = EXIT_FAILURE;
+ }
+ }
+
+ return res;
+}
+
static struct Command {
char const *cmd;
int (*handler)(int argc, char *argv[]);
@@ -152,6 +200,8 @@
{ "truncate", execTruncate },
{ "testfile", execTestFile },
{ "rm", execRm },
+ { "mkdir", execMkdir },
+ { "chmod", execChmod },
{ 0,0 }
};
@@ -170,7 +220,10 @@
" append <file> ... appends stdin to <file> which is created when needed\n"
" truncate <file> ... clear <file> and fill it with stdin; the <file> is\n"
" created when needed\n"
- " rm <file>+ ... unlink the given files\n\n"
+ " rm <file>+ ... unlink the given files\n"
+ " mkdir <file>+ ... create the given directories\n"
+ " chmod <mode> <file>+\n"
+ " ... change access permissions of files\n\n"
"Please report bugs to " PACKAGE_BUGREPORT "\n");
exit(0);
}
Index: src/Makefile-files
===================================================================
--- src/Makefile-files (revision 2358)
+++ src/Makefile-files (revision 2359)
@@ -181,6 +181,7 @@
src_chain_echo_SOURCES = src/chain-echo.c
src_chroot_sh_SOURCES = src/chroot-sh.c
+src_chroot_sh_LDADD = $(LIBINTERNAL)
src_exec_cd_SOURCES = src/exec-cd.c
src_fakerunlevel_SOURCES = src/fakerunlevel.c
src_ifspec_SOURCES = src/ifspec.c
|