summaryrefslogtreecommitdiff
path: root/usr/src/cmd/svc
diff options
context:
space:
mode:
authorJohn Levon <john.levon@joyent.com>2020-05-26 13:57:13 +0000
committerJohn Levon <john.levon@joyent.com>2020-05-26 13:57:13 +0000
commit5b2acc0949194447bba6e45a0fa44d0b5f42f208 (patch)
tree7ea9eb87bc68fee386dd39035ce715e87a0e673c /usr/src/cmd/svc
parent8ca018083101bf1cb175869679bc123187fb1bab (diff)
parent2a1277d3064386cd5c4e372301007aa330bf1d5e (diff)
downloadillumos-joyent-gcc9.tar.gz
mergegcc9
Diffstat (limited to 'usr/src/cmd/svc')
-rw-r--r--usr/src/cmd/svc/svccfg/svccfg_xml.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/usr/src/cmd/svc/svccfg/svccfg_xml.c b/usr/src/cmd/svc/svccfg/svccfg_xml.c
index 13c7a90d12..c0810de2ab 100644
--- a/usr/src/cmd/svc/svccfg/svccfg_xml.c
+++ b/usr/src/cmd/svc/svccfg/svccfg_xml.c
@@ -23,7 +23,7 @@
*/
/*
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
- * Copyright 2019 Joyent, Inc.
+ * Copyright 2020 Joyent, Inc.
*/
@@ -3404,6 +3404,28 @@ out:
}
/*
+ * Validate the svc:/-prefixed FMRI generated from the service name.
+ */
+static void
+validate_service_name(const entity_t *s)
+{
+ char *fmri;
+ int ftype;
+ const char *finst;
+
+ if ((fmri = uu_strdup(s->sc_fmri)) == NULL)
+ uu_die(gettext("couldn't allocate memory"));
+
+ if (scf_parse_fmri(fmri, &ftype, NULL, NULL, &finst, NULL, NULL) != 0 ||
+ finst != NULL || ftype != SCF_FMRI_TYPE_SVC) {
+ uu_die(gettext("invalid value \"%s\": should be a bare "
+ "service name\n"), s->sc_name);
+ }
+
+ uu_free(fmri);
+}
+
+/*
* Translate a service element into an internal instance/property tree, added
* to bundle.
*
@@ -3427,6 +3449,8 @@ lxml_get_service(bundle_t *bundle, xmlNodePtr svc, svccfg_op_t op)
s = internal_service_new((char *)xmlGetProp(svc,
(xmlChar *)name_attr));
+ validate_service_name(s);
+
version = xmlGetProp(svc, (xmlChar *)version_attr);
s->sc_u.sc_service.sc_service_version = atol((const char *)version);
xmlFree(version);