diff -ur chkconfig-1.3.58/chkconfig.8 chkconfig-1.3.58-noxinet/chkconfig.8 --- chkconfig-1.3.58/chkconfig.8 2012-02-10 20:37:38.000000000 +0100 +++ chkconfig-1.3.58-noxinet/chkconfig.8 2012-12-17 15:22:31.472800234 +0100 @@ -63,16 +63,6 @@ an already-started service, and will not re-stop a service that is not running. -\fBchkconfig\fR also can manage xinetd scripts via the means -of xinetd.d configuration files. Note that only the -\fBon\fR, \fBoff\fR, and \fB-\-list\fR commands are supported -for xinetd.d services. - -\fBchkconfig\fR supports a \fB-\-type\fR argument to limit actions to only -a specific type of services, in the case where services of either type may -share a name. Possible values for \fItype\fR are \fIsysv\fR -and \fIxinetd\fR. - .SH OPTIONS .TP \fB-\-level \fIlevels\fR diff -ur chkconfig-1.3.58/chkconfig.c chkconfig-1.3.58-noxinet/chkconfig.c --- chkconfig-1.3.58/chkconfig.c 2012-12-17 15:22:52.589660844 +0100 +++ chkconfig-1.3.58-noxinet/chkconfig.c 2012-12-17 15:17:47.586865799 +0100 @@ -95,7 +95,6 @@ readServiceError(rc, name); return 1; } - if (s.type == TYPE_XINETD) return 0; checkRoot(); @@ -285,7 +284,6 @@ return 1; } - if (s.type == TYPE_XINETD) return 0; checkRoot(); if (s.isLSB) { @@ -324,8 +322,6 @@ return 0; } - if (s.type == TYPE_XINETD) return 0; - checkRoot(); if ((s.levels == o.levels) && @@ -403,10 +399,6 @@ } printf("%-15s", s.name); - if (s.type == TYPE_XINETD) { - printf("\t%s\n", s.levels ? _("on") : _("off")); - return 0; - } for (i = 0; i < 7; i++) { printf("\t%d:%s", i, isOn(s.name, i) ? _("on") : _("off")); @@ -436,29 +428,10 @@ } -static int isXinetdEnabled() { - struct service s; - - if (readServiceInfo("xinetd", TYPE_INIT_D, &s, 0)) { - return 0; - } - if (s.currentLevels) - return 1; - return 0; -} - static int serviceNameCmp(const void * a, const void * b) { return strcmp(* (char **)a, * (char **)b); } -static int xinetdNameCmp(const void * a, const void * b) { - const struct service * first = a; - const struct service * second = b; - - return strcmp(first->name, second->name); -} - - static int listService(char * item, int type) { DIR * dir; struct dirent * ent; @@ -484,54 +457,6 @@ } } } - - if (isXinetdEnabled() && type & TYPE_XINETD) { - struct service *s, *t; - - printf("\n"); - printf(_("xinetd based services:\n")); - if (!(dir = opendir(XINETDDIR))) { - fprintf(stderr, _("failed to open directory %s: %s\n"), - XINETDDIR, strerror(err)); - return 1; - } - numServices = 0; - numServicesAlloced = 10; - s = malloc(sizeof (*s) * numServicesAlloced); - - while ((ent = readdir(dir))) { - const char *dn; - - /* Skip any file starting with a . */ - if (ent->d_name[0] == '.') continue; - - /* Skip files with known bad extensions */ - if ((dn = strrchr(ent->d_name, '.')) != NULL && - (!strcmp(dn, ".rpmsave") || !strcmp(dn, ".rpmnew") || !strcmp(dn, ".rpmorig") || !strcmp(dn, ".swp"))) - continue; - - dn = ent->d_name + strlen(ent->d_name) - 1; - if (*dn == '~' || *dn == ',') - continue; - - if (numServices == numServicesAlloced) { - numServicesAlloced += 10; - s = realloc(s, numServicesAlloced * sizeof (*s)); - } - if (readXinetdServiceInfo(ent->d_name, s + numServices) != -1) - numServices ++; - } - - qsort(s, numServices, sizeof(*s), xinetdNameCmp); - t = s; - for (i = 0; i < numServices; i++, s++) { - char *tmp = malloc(strlen(s->name) + 5); - sprintf(tmp,"%s:",s->name); - printf("\t%-15s\t%s\n", tmp, s->levels ? _("on") : _("off")); - } - closedir(dir); - free(t); - } return 0; } @@ -592,11 +517,6 @@ reloadSystemd(); return rc; - } else if (s.type == TYPE_XINETD) { - if (setXinetdService(s, state)) { - return 1; - } - system("/etc/init.d/xinetd reload >/dev/null 2>&1"); } return 0; @@ -604,9 +524,6 @@ void forwardSystemd(const char *name, int type, const char *verb) { - if (type == TYPE_XINETD) - return; - if (!systemdIsInit()) return; @@ -683,12 +600,10 @@ if (help) usage(); if (typeString) { - if (!strcmp(typeString, "xinetd")) - type = TYPE_XINETD; - else if (!strcmp(typeString, "sysv")) + if (!strcmp(typeString, "sysv")) type = TYPE_INIT_D; else { - fprintf(stderr, _("--type must be 'sysv' or 'xinetd'\n")); + fprintf(stderr, _("--type must be 'sysv'\n")); exit(1); } } @@ -789,16 +704,9 @@ rc = readServiceInfo(name, type, &s, 0); if (rc) return 1; - if (s.type == TYPE_XINETD) { - if (isOn("xinetd",level)) - return !s.levels; - else - return 1; - } else { if (level == -1) level = currentRunlevel(); return s.currentLevels & (1 << level) ? 0 : 1; - } } else if (!strcmp(state, "on")) { if (!noRedirectItem) { forwardSystemd(name, type, "enable"); diff -ur chkconfig-1.3.58/leveldb.c chkconfig-1.3.58-noxinet/leveldb.c --- chkconfig-1.3.58/leveldb.c 2012-12-17 15:22:52.589660844 +0100 +++ chkconfig-1.3.58-noxinet/leveldb.c 2012-12-17 15:20:13.621535628 +0100 @@ -154,107 +154,6 @@ return 0; } -int readXinetdServiceInfo(char *name, struct service * service) { - char * filename; - int fd; - struct service serv = { - name: NULL, - levels: -1, - kPriority: 100, - sPriority: -1, - desc: NULL, - startDeps: NULL, - stopDeps: NULL, - softStartDeps: NULL, - softStopDeps: NULL, - provides: NULL, - type: TYPE_XINETD, - isLSB: 0, - enabled: -1 - }; - struct stat sb; - char * buf = NULL, *ptr; - char * eng_desc = NULL, *start; - - asprintf(&filename, XINETDDIR "/%s", name); - - if ((fd = open(filename, O_RDONLY)) < 0) goto out_err; - fstat(fd,&sb); - if (! S_ISREG(sb.st_mode)) goto out_err; - buf = malloc(sb.st_size+1); - if (read(fd,buf,sb.st_size)!=sb.st_size) goto out_err; - close(fd); - serv.name = strdup(name); - buf[sb.st_size] = '\0'; - start = buf; - while (buf) { - ptr = strchr(buf,'\n'); - if (*buf == '#') { - buf++; - while (isspace(*buf) && buf < ptr) buf++; - if (!strncmp(buf,"default:", 9)) { - buf+=8; - while(isspace(*buf)) buf++; - if (!strncmp(buf+9,"on",2)) { - serv.enabled = 1; - } else { - serv.enabled = 0; - } - } else if (!strncmp(buf,"description:",12)) { - buf+=11; - if (readDescription(buf,start+sb.st_size, - &serv.desc,&eng_desc)) { - if (serv.desc) free(serv.desc); - } - if (!serv.desc) { - if (eng_desc) - serv.desc = eng_desc; - else - serv.desc = strdup(name); - } else if (eng_desc) - free (eng_desc); - } - if (ptr) { - *ptr = '\0'; - ptr++; - } - buf = ptr; - continue; - } - while (isspace(*buf) && buf < ptr) buf++; - if (!strncmp(buf,"disable", 7)) { - buf = strstr(buf,"="); - if (buf) - do { - buf++; - } while(isspace(*buf)); - - if (buf && strncmp(buf,"yes",3)) { - serv.levels = parseLevels("0123456",0); - if (serv.enabled == -1) - serv.enabled = 1; - } else { - serv.levels = 0; - if (serv.enabled == -1) - serv.enabled = 0; - } - } - if (ptr) { - *ptr = '\0'; - ptr++; - } - buf = ptr; - } - *service = serv; - return 0; -out_err: - if (fd >= 0) - close(fd); - free(buf); - free(filename); - return -1; -} - int readServices(struct service **services) { DIR * dir; struct dirent * ent; @@ -304,12 +203,14 @@ int parseret; if (!(type & TYPE_INIT_D)) - goto try_xinetd; + return -1; asprintf(&filename, RUNLEVELS "/init.d/%s", name); - if ((fd = open(filename, O_RDONLY)) < 0) - goto try_xinetd; + if ((fd = open(filename, O_RDONLY)) < 0) { + free(filename); + return -1; + } free(filename); parseret = parseServiceInfo(fd, name, &serv, honorHide, 0); @@ -338,12 +239,6 @@ free(filename); *service = serv; return 0; - -try_xinetd: - free(filename); - if (!(type & TYPE_XINETD)) - return -1; - return readXinetdServiceInfo(name,service); } int readServiceDifferences(char * name, int type, struct service * service, struct service * service_overrides, int honorHide) { @@ -353,12 +248,13 @@ int parseret; if (!(type & TYPE_INIT_D)) - goto try_xinetd; + return -1; asprintf(&filename, RUNLEVELS "/init.d/%s", name); if ((fd = open(filename, O_RDONLY)) < 0) { - goto try_xinetd; + free(filename); + return -1; } free(filename); @@ -382,12 +278,6 @@ *service = serv; *service_overrides = serv_overrides; return 0; - -try_xinetd: - free(filename); - if (!(type & TYPE_XINETD)) - return -1; - return readXinetdServiceInfo(name,service); } static struct dep *parseDeps(char *pos, char *end) { @@ -760,60 +650,6 @@ return ret; } -int setXinetdService(struct service s, int on) { - int oldfd, newfd; - char oldfname[100], newfname[100]; - char tmpstr[50]; - char *buf, *ptr, *tmp; - struct stat sb; - - if (on == -1) { - on = s.enabled ? 1 : 0; - } - snprintf(oldfname,100,"%s/%s",XINETDDIR,s.name); - if ( (oldfd = open(oldfname,O_RDONLY)) == -1 ) { - return -1; - } - fstat(oldfd,&sb); - buf = malloc(sb.st_size+1); - if (read(oldfd,buf,sb.st_size)!=sb.st_size) { - close(oldfd); - free(buf); - return -1; - } - close(oldfd); - buf[sb.st_size] = '\0'; - snprintf(newfname,100,"%s/%s.XXXXXX",XINETDDIR,s.name); - newfd = mkstemp(newfname); - if (newfd == -1) { - free(buf); - return -1; - } - while (buf) { - tmp = buf; - ptr = strchr(buf,'\n'); - if (ptr) { - *ptr = '\0'; - ptr++; - } - while (isspace(*buf)) buf++; - if (strncmp(buf,"disable", 7) && strlen(buf)) { - write(newfd,tmp,strlen(tmp)); - write(newfd,"\n",1); - if (buf[0] == '{') { - snprintf(tmpstr,50,"\tdisable\t= %s", on ? "no" : "yes"); - write(newfd,tmpstr,strlen(tmpstr)); - write(newfd,"\n",1); - } - } - buf = ptr; - } - close(newfd); - chmod(newfname,0644); - unlink(oldfname); - return(rename(newfname,oldfname)); -} - int doSetService(struct service s, int level, int on) { int priority = on ? s.sPriority : s.kPriority; char linkname[200]; diff -ur chkconfig-1.3.58/leveldb.h chkconfig-1.3.58-noxinet/leveldb.h --- chkconfig-1.3.58/leveldb.h 2012-12-17 15:22:52.592994208 +0100 +++ chkconfig-1.3.58-noxinet/leveldb.h 2012-12-17 15:20:38.435096400 +0100 @@ -17,13 +17,11 @@ #define H_LEVELDB #define RUNLEVELS "/etc" -#define XINETDDIR "/etc/xinetd.d" #include #define TYPE_INIT_D 0x1 -#define TYPE_XINETD 0x2 -#define TYPE_ANY (TYPE_INIT_D | TYPE_XINETD) +#define TYPE_ANY (TYPE_INIT_D) #ifndef SYSTEMD_SERVICE_PATH #define SYSTEMD_SERVICE_PATH "/lib/systemd/system" @@ -63,8 +61,6 @@ int whatLevels(char * name); int doSetService(struct service s, int level, int on); int findServiceEntries(char * name, int level, glob_t * globresptr); -int readXinetdServiceInfo(char *name, struct service *service); -int setXinetdService(struct service s, int on); int systemdIsInit(); int systemdActive(); int isOverriddenBySystemd(const char *service); diff -ur chkconfig-1.3.58/ntsysv.c chkconfig-1.3.58-noxinet/ntsysv.c --- chkconfig-1.3.58/ntsysv.c 2012-02-10 20:37:38.000000000 +0100 +++ chkconfig-1.3.58-noxinet/ntsysv.c 2012-12-17 15:21:53.479118101 +0100 @@ -61,15 +61,9 @@ states = alloca(sizeof(*states) * numServices); for (i = 0; i < numServices; i++) { - if (services[i].type == TYPE_XINETD) { - checkboxes[i] = newtCheckbox(-1, i, services[i].name, - services[i].levels ? '*' : ' ', NULL, - states + i); - } else { checkboxes[i] = newtCheckbox(-1, i, services[i].name, (services[i].currentLevels & levels) ? '*' : ' ', NULL, states + i); - } newtFormAddComponent(subform, checkboxes[i]); } @@ -126,15 +120,9 @@ if (!update) return 1; for (i = 0; i < numServices; i++) { - if (services[i].type == TYPE_XINETD) { - if ((services[i].enabled && states[i] != '*') || - (!services[i].enabled && states[i] == '*')) - setXinetdService(services[i], states[i] == '*'); - } else { for (j = 0; j < 7; j++) { if (levels & (1 << j)) doSetService(services[i], j, states[i] == '*'); } - } } @@ -213,49 +201,6 @@ } closedir(dir); - - if (!stat("/usr/sbin/xinetd",&sb)) { - if (!(dir = opendir(XINETDDIR))) { - fprintf(stderr, "failed to open " XINETDDIR ": %s\n", - strerror(errno)); - return 2; - } - - while ((ent = readdir(dir))) { - if (strchr(ent->d_name, '~') || strchr(ent->d_name, ',') || - strchr(ent->d_name, '.')) continue; - - sprintf(fn, "%s/%s", XINETDDIR, ent->d_name); - if (stat(fn, &sb)) - { - err = errno; - continue; - } - if (!S_ISREG(sb.st_mode)) continue; - - if (numServices == numServicesAlloced) { - numServicesAlloced += 10; - services = realloc(services, - numServicesAlloced * sizeof(*services)); - } - - rc = readXinetdServiceInfo(ent->d_name, services + numServices); - - if (rc == -1) { - fprintf(stderr, _("error reading info for service %s: %s\n"), - ent->d_name, strerror(errno)); - closedir(dir); - return 2; - } else if (!rc) - numServices++; - } - - if (err) { - fprintf(stderr, _("error reading from directory %s: %s\n"), - XINETDDIR, strerror(err)); - return 1; - } - } qsort(services, numServices, sizeof(*services), serviceNameCmp);