diff -urN chkconfig-1.3.37.org/chkconfig.c chkconfig-1.3.37/chkconfig.c --- chkconfig-1.3.37.org/chkconfig.c 2007-11-08 22:28:34.000000000 +0100 +++ chkconfig-1.3.37/chkconfig.c 2008-04-24 09:27:21.427392171 +0200 @@ -27,6 +27,7 @@ #include static char *progname; +extern int addItem; #define _(String) gettext((String)) @@ -243,12 +244,10 @@ frobDependencies(&s); else for (i = 0; i < 7; i++) { - if (!isConfigured(name, i, NULL, NULL)) { if ((1 << i) & s.levels) doSetService(s, i, 1); else doSetService(s, i, 0); - } } return 0; @@ -558,7 +557,7 @@ } int main(int argc, char ** argv) { - int listItem = 0, addItem = 0, delItem = 0, overrideItem = 0; + int listItem = 0, delItem = 0, overrideItem = 0; int rc, i, x; int LSB = 0; char * levels = NULL; diff -urN chkconfig-1.3.37.org/leveldb.c chkconfig-1.3.37/leveldb.c --- chkconfig-1.3.37.org/leveldb.c 2007-08-03 19:57:56.000000000 +0200 +++ chkconfig-1.3.37/leveldb.c 2008-04-24 09:27:34.124665839 +0200 @@ -26,6 +26,10 @@ #include #include #include +#include +#include + +int addItem = 0; /* Changes 1998-09-22 - Arnaldo Carvalho de Melo @@ -563,6 +567,25 @@ serv.provides[1] = NULL; } + if (addItem) { + DIR *dir; + struct dirent *dirent; + int i; + + strcpy(levelbuf,"/etc/rc.d/rc0.d"); + for(i=0;i<7;i++,levelbuf[12]++) { + dir=opendir(levelbuf); + if (!dir) return 1; + while ((dirent=readdir(dir))) { + if (strlen(dirent->d_name)<4) continue; + if (strcmp(dirent->d_name+3,name)) continue; + if (*dirent->d_name=='K') serv.levels &= ~(1<d_name=='S') serv.levels |= 1<