[systemd-devel] [PATCH/resend] systemctl: check the argument to -t for invalid values

Zbigniew Jędrzejewski-Szmek zbyszek at in.waw.pl
Wed Jun 6 03:07:20 PDT 2012


Systemctl accepted anything as the argument for -t, and simply said '0
units found'. It is better to catch this user error early.
---
A small thing thing I noticed today.

 src/systemctl/systemctl.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 66f4113..d353071 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -4325,6 +4325,19 @@ static int runlevel_help(void) {
         return 0;
 }
 +static int arg_type_ok(const char *type) {
+
+        static const char *types[] = {"service", "socket", "device",
"mount",
+                                      "swap", "automount", "target",
"path",
+                                      "timer", "snapshot"};
+        unsigned i;
+
+        for (i=0; i<ELEMENTSOF(types); i++)
+                if (!strcmp(type, types[i]))
+                        return true;
+        return false;
+}
+
 static int systemctl_parse_argv(int argc, char *argv[]) {
          enum {
@@ -4408,6 +4421,10 @@ static int systemctl_parse_argv(int argc, char
*argv[]) {
                         return 0;
                  case 't':
+                        if (!arg_type_ok(optarg)) {
+                                log_error("Invalid unit type '%s'",
optarg);
+                                return -EINVAL;
+                        }
                         arg_type = optarg;
                         break;
 -- 1.7.10.2.667.gf1138e2


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Attached Message Part
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20120606/994c7697/attachment.asc>


More information about the systemd-devel mailing list