summaryrefslogtreecommitdiff
blob: e84f2a08c6deb90b5bf8e3a7d3187c14f1839c54 (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
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