--- chkconfig-1.3.25/chkconfig.c.orig 2005-12-22 20:50:17 +0000 +++ chkconfig-1.3.25/chkconfig.c 2005-12-22 20:51:29 +0000 @@ -14,6 +14,7 @@ #define _(String) gettext((String)) #define progname program_invocation_short_name +#define CONFIG_FILE "/etc/chkconfig.allow" #include "leveldb.h" #include "xmalloc.h" @@ -219,6 +220,29 @@ static void frobDependencies(struct serv frobOneDependencies(s, servs, numservs, 1); } +static int disallowed_add(char *name){ + if (getenv ("RPM_INSTALL_NAME") && getenv ("DURING_INSTALL")){ + char buffer[BUFSIZ]; + FILE *config = fopen(CONFIG_FILE,"r"); + + if (!config) return 0; + + while (fgets (buffer, sizeof(buffer), config)) + { + size_t len = strlen(buffer); + if ((len>2) && (buffer[len-1]=='\n')) + buffer[len-1] = '\0'; + if (!strcmp (name, buffer)){ + fclose (config); + return 0; + } + } + fclose (config); + return 1; + } + return 0; +} + static int addService(char * name) { int i, rc; struct service s; @@ -415,6 +439,8 @@ int setService(char * name, int where, i (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6); } + if (disallowed_add (name)) return 0; + if ((rc = readServiceInfo(name, &s, 0))) { readServiceError(rc, name); return 1;