aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Ruppert <idl0r@gentoo.org>2012-01-25 23:18:08 +0100
committerWilliam Hubbs <williamh@gentoo.org>2012-01-26 14:42:18 -0600
commit7ea5c614d9c9e36c55f1da3d7fb894e83bbb56f3 (patch)
tree0ab8c0244ab458f2d6674e4b071c71ea62b92eda
parent5d441dd376ba0850f82d0927d798bbb60f70bda4 (diff)
Add -W/--writable function to checkpath
Checkpath -W will use access(3p) to determine whether or not a path is writable. This is more accurate than test(1p) because it also takes into account whether or not the filesystem is mounted read-only. Modified by William Hubbs to add the man page update.
-rw-r--r--man/runscript.85
-rw-r--r--src/rc/checkpath.c11
2 files changed, 14 insertions, 2 deletions
diff --git a/man/runscript.8 b/man/runscript.8
index 30fde94e..5901f475 100644
--- a/man/runscript.8
+++ b/man/runscript.8
@@ -315,6 +315,11 @@ Mark the service as inactive.
.Xc
Checks to see if the path exists, is of the right type, owned by the right
people and has the correct access modes. If not, then it corrects the path.
+.It Ic checkpath
+.Op Fl W , -writable
+.Ar path
+.Xc
+checks to see if the path is writable.
.It Ic yesno Ar value
If
.Ar value
diff --git a/src/rc/checkpath.c b/src/rc/checkpath.c
index b0914f3f..7ebbb64d 100644
--- a/src/rc/checkpath.c
+++ b/src/rc/checkpath.c
@@ -185,8 +185,8 @@ parse_owner(struct passwd **user, struct group **group, const char *owner)
}
#include "_usage.h"
-#define extraopts "path1 path2 ..."
-#define getoptstring "dDfFpm:o:" getoptstring_COMMON
+#define extraopts "path1 [path2] [...]"
+#define getoptstring "dDfFpm:o:W:" getoptstring_COMMON
static const struct option longopts[] = {
{ "directory", 0, NULL, 'd'},
{ "directory-truncate", 0, NULL, 'D'},
@@ -195,6 +195,7 @@ static const struct option longopts[] = {
{ "pipe", 0, NULL, 'p'},
{ "mode", 1, NULL, 'm'},
{ "owner", 1, NULL, 'o'},
+ { "writable", 1, NULL, 'W'},
longopts_COMMON
};
static const char * const longopts_help[] = {
@@ -205,6 +206,7 @@ static const char * const longopts_help[] = {
"Create a named pipe (FIFO) if not exists",
"Mode to check",
"Owner to check (user:group)",
+ "Check whether the path is writable or not",
longopts_help_COMMON
};
#include "_usage.c"
@@ -249,6 +251,11 @@ checkpath(int argc, char **argv)
eerrorx("%s: owner `%s' not found",
applet, optarg);
break;
+ case 'W':
+ if (argv[optind] != NULL)
+ ewarn("-W/--writable takes only one path, everything else will be ignored");
+ exit(!is_writable(optarg));
+ break;
case_RC_COMMON_GETOPT
}