--- a/chkconfig.c 2015-12-01 18:23:52.047031136 +0000 +++ b/chkconfig.c 2015-12-07 22:46:52.421553233 +0000 @@ -29,6 +29,7 @@ #include <unistd.h> static char *progname; +static char ignorePriorities; #define _(String) gettext((String)) @@ -148,7 +149,7 @@ } static inline int laterThan(int i, int j) { - if (i <= j) { + if (!ignorePriorities && i <= j) { i = j+1; if (i > 99) i = 99; @@ -157,7 +158,7 @@ } static inline int earlierThan(int i, int j) { - if (i >= j) { + if (!ignorePriorities && i >= j) { i = j -1; if (i < 0) i = 0; @@ -695,6 +696,7 @@ bindtextdomain("chkconfig","/usr/share/locale"); textdomain("chkconfig"); + ignorePriorities = checkIgnorePriorities(); optCon = poptGetContext("chkconfig", argc, argv, optionsTable, 0); poptReadDefaultConfig(optCon, 1); --- a/leveldb.c 2015-12-07 19:48:15.052238953 +0000 +++ b/leveldb.c 2015-12-07 22:43:25.500120097 +0000 @@ -448,15 +448,22 @@ return deps; } +char checkIgnorePriorities() { + int fd = open(IGNORE_PRIORITIES_FLAG, O_RDONLY); + char ret = fd < 0 ? 0 : 1; + close(fd); + return ret; +} int parseServiceInfo(int fd, char * name, struct service * service, int honorHide, int partialOk) { struct stat sb; char * bufstart, * bufstop, * start, * end, * next, *tmpbufstart; + char ignorePriorities = checkIgnorePriorities(); struct service serv = { name: NULL, levels: -1, - kPriority: 100, - sPriority: -1, + kPriority: (ignorePriorities ? 50 : 100), + sPriority: (ignorePriorities ? 50 : -1), currentLevels: 0, desc: NULL, startDeps: NULL, @@ -526,7 +533,7 @@ } } - if (!strncmp(start, "chkconfig:", 10)) { + if (!ignorePriorities && !strncmp(start, "chkconfig:", 10)) { int spri, kpri; start += 10; --- a/leveldb.h 2015-12-07 21:01:24.418808908 +0000 +++ b/leveldb.h 2015-12-07 22:49:34.131868047 +0000 @@ -34,6 +34,10 @@ #define SYSTEMD_LOCAL_SERVICE_PATH "/etc/systemd/system" #endif +#ifndef IGNORE_PRIORITIES_FLAG +#define IGNORE_PRIORITIES_FLAG "/etc/init.d/ignore_priorities" +#endif + struct dep { char *name; int handled; @@ -61,6 +65,7 @@ int readServiceInfo(char * name, int type, struct service * service, int honorHide); int readServices(struct service **services); int readServiceDifferences(char * name, int type, struct service * service, struct service * service_overrides, int honorHide); +char checkIgnorePriorities(); int parseServiceInfo(int fd, char * name, struct service * service, int honorHide, int partialOk); int currentRunlevel(void); int isOn(char * name, int where);