summaryrefslogtreecommitdiff
path: root/usr/src/lib/libscf/common/midlevel.c
diff options
context:
space:
mode:
authortn143363 <none@none>2007-05-04 14:10:43 -0700
committertn143363 <none@none>2007-05-04 14:10:43 -0700
commitfee38f6fd6a6fbebea04db28cf9e4d351fb48311 (patch)
tree3f6e8ee960f86678d955c8a8eb01550f965c7450 /usr/src/lib/libscf/common/midlevel.c
parenta58015d190b6b71c8046b81cc6ed79be65308539 (diff)
downloadillumos-joyent-fee38f6fd6a6fbebea04db28cf9e4d351fb48311.tar.gz
6537863 set_inst_enabled should always make sure general/enabled exists
Diffstat (limited to 'usr/src/lib/libscf/common/midlevel.c')
-rw-r--r--usr/src/lib/libscf/common/midlevel.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/usr/src/lib/libscf/common/midlevel.c b/usr/src/lib/libscf/common/midlevel.c
index a9cc196816..ec642baaa3 100644
--- a/usr/src/lib/libscf/common/midlevel.c
+++ b/usr/src/lib/libscf/common/midlevel.c
@@ -551,18 +551,34 @@ set_inst_enabled(const scf_instance_t *inst, uint8_t desired,
(ent = scf_entry_create(h)) == NULL)
goto out;
-get:
- if (scf_instance_get_pg(inst, pgname, gpg) == -1) {
+general_pg_get:
+ if (scf_instance_get_pg(inst, SCF_PG_GENERAL, gpg) == -1) {
if (scf_error() != SCF_ERROR_NOT_FOUND)
goto out;
- if (scf_instance_add_pg(inst, pgname, SCF_GROUP_FRAMEWORK,
- pgflags, gpg) == -1) {
+ if (scf_instance_add_pg(inst, SCF_PG_GENERAL,
+ SCF_GROUP_FRAMEWORK, SCF_PG_GENERAL_FLAGS, gpg) == -1) {
if (scf_error() != SCF_ERROR_EXISTS)
goto out;
- goto get;
+ goto general_pg_get;
}
}
+
+ if (strcmp(pgname, SCF_PG_GENERAL) != 0) {
+get:
+ if (scf_instance_get_pg(inst, pgname, gpg) == -1) {
+ if (scf_error() != SCF_ERROR_NOT_FOUND)
+ goto out;
+
+ if (scf_instance_add_pg(inst, pgname,
+ SCF_GROUP_FRAMEWORK, pgflags, gpg) == -1) {
+ if (scf_error() != SCF_ERROR_EXISTS)
+ goto out;
+ goto get;
+ }
+ }
+ }
+
if (scf_pg_get_property(gpg, SCF_PROPERTY_ENABLED, eprop) == -1) {
if (scf_error() != SCF_ERROR_NOT_FOUND)
goto out;