--- chkconfig-1.3.30/chkconfig.c.targreq 2007-01-20 17:58:28.000000000 +0100 +++ chkconfig-1.3.30/chkconfig.c 2007-01-20 17:55:59.000000000 +0100 @@ -266,7 +266,8 @@ } } - 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++) { if (isConfigured(s->name, i)) { int on = isOn(s->name, i); @@ -277,7 +278,7 @@ doSetService(*s, i, ((1<<i) & s->levels)); } } - return 1; /* Resolved something */ + return resolved; /* Resolved something */ } return 0; /* Didn't resolve anything */ } @@ -313,7 +314,6 @@ continue; } if (!S_ISREG(sb.st_mode)) continue; - if (!strcmp(ent->d_name, s->name)) continue; servs = realloc(servs, (numservs+1) * sizeof(struct service)); if (!readServiceInfo(ent->d_name, servs + numservs, 0)) numservs++; @@ -325,13 +325,12 @@ int i; for (i = 0; i < numservs ; i++) { - if ((servs+i)->isLSB) - nResolved += frobOneDependencies(servs+i, servs, numservs, 0); + if ((servs+i)->isLSB) { + int target = !strcmp((servs+i)->name, s->name); + nResolved += frobOneDependencies(servs+i, servs, numservs, target); + } } } while (nResolved); - - /* Resolve our target */ - frobOneDependencies(s, servs, numservs, 1); } static int addService(char * name) {