From 8f38891b604f4b55cfab5bacca2abfbc01f8b740 Mon Sep 17 00:00:00 2001 From: Olivier Blin <blino@mandriva.org> Date: Wed, 24 Jun 2015 09:59:50 +0100 Subject: [PATCH 907/907] chkconfig: Fix priority when adding a LSB service required by another LSB service (mdv#22019) --- chkconfig.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/chkconfig.c b/chkconfig.c index c3e9919..5015a69 100644 --- a/chkconfig.c +++ b/chkconfig.c @@ -244,7 +244,8 @@ static int frobOneDependencies(struct service *s, struct service *servs, int num } } - if (target || ((s0 != s->sPriority) || (k0 != s->kPriority))) { + int resolved = (s0 != s->sPriority) || (k0 != s->kPriority); + if (target || resolved) { for (i = 0; i < 7; i++) { int priority; char type; @@ -261,7 +262,7 @@ static int frobOneDependencies(struct service *s, struct service *servs, int num doSetService(*s, i, ((1 << i) & s->levels)); } } - return 1; /* Resolved something */ + return resolved; /* Resolved something */ } return 0; /* Didn't resolve anything */ } @@ -273,6 +274,7 @@ static int frobDependencies(struct service *s) { struct service *servs = NULL; int numservs = 0; int nResolved = 0; + int target = -1; int i; numservs = readServices(&servs); @@ -290,9 +292,11 @@ static int frobDependencies(struct service *s) { nResolved = 0; for (i = 0; i < numservs; i++) { + if (!strcmp((servs + i)->name, s->name)) + target = i; if ((servs + i)->isLSB) nResolved += - frobOneDependencies(servs + i, servs, numservs, 0, 0); + frobOneDependencies(servs + i, servs, numservs, target == i, 0); } } while (nResolved); -- 2.3.2