]> git.pld-linux.org Git - packages/chkconfig.git/blob - chkconfig-noxinet.patch
- removed TODO, it baheves fine here, --add doesn't re-eanble services
[packages/chkconfig.git] / chkconfig-noxinet.patch
1 diff -ur chkconfig-1.3.58/chkconfig.8 chkconfig-1.3.58-noxinet/chkconfig.8
2 --- chkconfig-1.3.58/chkconfig.8        2012-02-10 20:37:38.000000000 +0100
3 +++ chkconfig-1.3.58-noxinet/chkconfig.8        2012-12-17 15:22:31.472800234 +0100
4 @@ -63,16 +63,6 @@
5  an already-started service, and will not re-stop a service that is
6  not running.
7  
8 -\fBchkconfig\fR also can manage xinetd scripts via the means
9 -of xinetd.d configuration files. Note that only the
10 -\fBon\fR, \fBoff\fR, and \fB-\-list\fR commands are supported
11 -for xinetd.d services.
12 -
13 -\fBchkconfig\fR supports a \fB-\-type\fR argument to limit actions to only
14 -a specific type of services, in the case where services of either type may
15 -share a name. Possible values for \fItype\fR are \fIsysv\fR
16 -and \fIxinetd\fR.
17 -
18  .SH OPTIONS
19  .TP
20  \fB-\-level \fIlevels\fR
21 diff -ur chkconfig-1.3.58/chkconfig.c chkconfig-1.3.58-noxinet/chkconfig.c
22 --- chkconfig-1.3.58/chkconfig.c        2012-12-17 15:22:52.589660844 +0100
23 +++ chkconfig-1.3.58-noxinet/chkconfig.c        2012-12-17 15:17:47.586865799 +0100
24 @@ -95,7 +95,6 @@
25         readServiceError(rc, name);
26         return 1;
27      }
28 -    if (s.type == TYPE_XINETD) return 0;
29  
30      checkRoot();
31  
32 @@ -285,7 +284,6 @@
33         return 1;
34      }
35  
36 -    if (s.type == TYPE_XINETD) return 0;
37      checkRoot();
38  
39      if (s.isLSB) {
40 @@ -324,8 +322,6 @@
41         return 0;
42      }
43  
44 -    if (s.type == TYPE_XINETD) return 0;
45 -
46      checkRoot();
47  
48      if ((s.levels == o.levels) &&
49 @@ -403,10 +399,6 @@
50      }
51  
52      printf("%-15s", s.name);
53 -    if (s.type == TYPE_XINETD) {
54 -           printf("\t%s\n", s.levels ? _("on") : _("off"));
55 -           return 0;
56 -    }
57  
58      for (i = 0; i < 7; i++) {
59         printf("\t%d:%s", i, isOn(s.name, i) ? _("on") : _("off"));
60 @@ -436,29 +428,10 @@
61  }
62  
63  
64 -static int isXinetdEnabled() {
65 -       struct service s;
66 -
67 -       if (readServiceInfo("xinetd", TYPE_INIT_D, &s, 0)) {
68 -               return 0;
69 -       }
70 -       if (s.currentLevels)
71 -               return 1;
72 -       return 0;
73 -}
74 -
75  static int serviceNameCmp(const void * a, const void * b) {
76    return strcmp(* (char **)a, * (char **)b);
77  }
78  
79 -static int xinetdNameCmp(const void * a, const void * b) {
80 -    const struct service * first = a;
81 -    const struct service * second = b;
82 -
83 -    return strcmp(first->name, second->name);
84 -}
85 -
86 -
87  static int listService(char * item, int type) {
88      DIR * dir;
89      struct dirent * ent;
90 @@ -484,54 +457,6 @@
91             }
92          }
93      }
94 -
95 -    if (isXinetdEnabled() && type & TYPE_XINETD) {
96 -           struct service *s, *t;
97 -
98 -           printf("\n");
99 -           printf(_("xinetd based services:\n"));
100 -           if (!(dir = opendir(XINETDDIR))) {
101 -                   fprintf(stderr, _("failed to open directory %s: %s\n"),
102 -                           XINETDDIR, strerror(err));
103 -                   return 1;
104 -           }
105 -           numServices = 0;
106 -           numServicesAlloced = 10;
107 -           s = malloc(sizeof (*s) * numServicesAlloced);
108 -
109 -           while ((ent = readdir(dir))) {
110 -                   const char *dn;
111 -
112 -                   /* Skip any file starting with a . */
113 -                   if (ent->d_name[0] == '.')  continue;
114 -
115 -                   /* Skip files with known bad extensions */
116 -                   if ((dn = strrchr(ent->d_name, '.')) != NULL &&
117 -                       (!strcmp(dn, ".rpmsave") || !strcmp(dn, ".rpmnew") || !strcmp(dn, ".rpmorig") || !strcmp(dn, ".swp")))
118 -                     continue;
119 -
120 -                   dn = ent->d_name + strlen(ent->d_name) - 1;
121 -                   if (*dn == '~' || *dn == ',')
122 -                     continue;
123 -
124 -                   if (numServices == numServicesAlloced) {
125 -                           numServicesAlloced += 10;
126 -                           s = realloc(s, numServicesAlloced * sizeof (*s));
127 -                   }
128 -                   if (readXinetdServiceInfo(ent->d_name, s + numServices) != -1)
129 -                           numServices ++;
130 -           }
131 -
132 -           qsort(s, numServices, sizeof(*s), xinetdNameCmp);
133 -           t = s;
134 -           for (i = 0; i < numServices; i++, s++) {
135 -                   char *tmp = malloc(strlen(s->name) + 5);
136 -                   sprintf(tmp,"%s:",s->name);
137 -                   printf("\t%-15s\t%s\n", tmp,  s->levels ? _("on") : _("off"));
138 -           }
139 -           closedir(dir);
140 -           free(t);
141 -    }
142      return 0;
143  }
144  
145 @@ -592,11 +517,6 @@
146              reloadSystemd();
147  
148              return rc;
149 -    } else if (s.type == TYPE_XINETD) {
150 -           if (setXinetdService(s, state)) {
151 -                   return 1;
152 -           }
153 -           system("/etc/init.d/xinetd reload >/dev/null 2>&1");
154      }
155  
156      return 0;
157 @@ -604,9 +524,6 @@
158  
159  void forwardSystemd(const char *name, int type, const char *verb) {
160  
161 -    if (type == TYPE_XINETD)
162 -        return;
163 -
164      if (!systemdIsInit())
165         return;
166  
167 @@ -683,12 +600,10 @@
168      if (help) usage();
169  
170      if (typeString) {
171 -       if (!strcmp(typeString, "xinetd"))
172 -           type = TYPE_XINETD;
173 -       else if (!strcmp(typeString, "sysv"))
174 +       if (!strcmp(typeString, "sysv"))
175             type = TYPE_INIT_D;
176         else {
177 -           fprintf(stderr, _("--type must be 'sysv' or 'xinetd'\n"));
178 +           fprintf(stderr, _("--type must be 'sysv'\n"));
179             exit(1);
180         }
181      }
182 @@ -789,16 +704,9 @@
183             rc = readServiceInfo(name, type, &s, 0);
184             if (rc)
185                return 1;
186 -           if (s.type == TYPE_XINETD) {
187 -              if (isOn("xinetd",level))
188 -                      return !s.levels;
189 -              else
190 -                      return 1;
191 -           } else {
192                 if (level == -1)
193                     level = currentRunlevel();
194                return s.currentLevels & (1 << level) ? 0 : 1;
195 -           }
196         } else if (!strcmp(state, "on")) {
197             if (!noRedirectItem) {
198                 forwardSystemd(name, type, "enable");
199 diff -ur chkconfig-1.3.58/leveldb.c chkconfig-1.3.58-noxinet/leveldb.c
200 --- chkconfig-1.3.58/leveldb.c  2012-12-17 15:22:52.589660844 +0100
201 +++ chkconfig-1.3.58-noxinet/leveldb.c  2012-12-17 15:20:13.621535628 +0100
202 @@ -154,107 +154,6 @@
203         return 0;
204  }
205  
206 -int readXinetdServiceInfo(char *name, struct service * service) {
207 -       char * filename;
208 -       int fd;
209 -       struct service serv = {
210 -                       name: NULL,
211 -                       levels: -1,
212 -                       kPriority: 100,
213 -                       sPriority: -1,
214 -                       desc: NULL,
215 -                       startDeps: NULL,
216 -                       stopDeps: NULL,
217 -                       softStartDeps: NULL,
218 -                       softStopDeps: NULL,
219 -                       provides: NULL,
220 -                       type: TYPE_XINETD,
221 -                       isLSB: 0,
222 -                       enabled: -1
223 -       };
224 -       struct stat sb;
225 -       char * buf = NULL, *ptr;
226 -       char * eng_desc = NULL, *start;
227 -
228 -       asprintf(&filename, XINETDDIR "/%s", name);
229 -
230 -       if ((fd = open(filename, O_RDONLY)) < 0) goto out_err;
231 -       fstat(fd,&sb);
232 -       if (! S_ISREG(sb.st_mode)) goto out_err;
233 -       buf = malloc(sb.st_size+1);
234 -       if (read(fd,buf,sb.st_size)!=sb.st_size) goto out_err;
235 -       close(fd);
236 -        serv.name = strdup(name);
237 -       buf[sb.st_size] = '\0';
238 -       start = buf;
239 -       while (buf) {
240 -               ptr = strchr(buf,'\n');
241 -               if (*buf == '#') {
242 -                       buf++;
243 -                       while (isspace(*buf) && buf < ptr) buf++;
244 -                       if (!strncmp(buf,"default:", 9)) {
245 -                               buf+=8;
246 -                               while(isspace(*buf)) buf++;
247 -                               if (!strncmp(buf+9,"on",2)) {
248 -                                       serv.enabled = 1;
249 -                               } else {
250 -                                       serv.enabled = 0;
251 -                               }
252 -                       } else if (!strncmp(buf,"description:",12)) {
253 -                               buf+=11;
254 -                               if (readDescription(buf,start+sb.st_size,
255 -                                                   &serv.desc,&eng_desc)) {
256 -                                       if (serv.desc) free(serv.desc);
257 -                               }
258 -                               if (!serv.desc) {
259 -                                       if (eng_desc)
260 -                                         serv.desc = eng_desc;
261 -                                        else
262 -                                          serv.desc = strdup(name);
263 -                               } else if (eng_desc)
264 -                                         free (eng_desc);
265 -                       }
266 -                       if (ptr) {
267 -                               *ptr = '\0';
268 -                               ptr++;
269 -                       }
270 -                       buf = ptr;
271 -                       continue;
272 -               }
273 -               while (isspace(*buf) && buf < ptr) buf++;
274 -               if (!strncmp(buf,"disable", 7)) {
275 -                       buf = strstr(buf,"=");
276 -                       if (buf)
277 -                         do {
278 -                                 buf++;
279 -                         } while(isspace(*buf));
280 -
281 -                       if (buf && strncmp(buf,"yes",3)) {
282 -                               serv.levels = parseLevels("0123456",0);
283 -                               if (serv.enabled == -1)
284 -                                 serv.enabled = 1;
285 -                       } else {
286 -                               serv.levels = 0;
287 -                               if (serv.enabled == -1)
288 -                                 serv.enabled = 0;
289 -                       }
290 -               }
291 -               if (ptr) {
292 -                       *ptr = '\0';
293 -                       ptr++;
294 -               }
295 -               buf = ptr;
296 -       }
297 -       *service = serv;
298 -       return 0;
299 -out_err:
300 -        if (fd >= 0)
301 -            close(fd);
302 -        free(buf);
303 -        free(filename);
304 -        return -1;
305 -}
306 -
307  int readServices(struct service **services) {
308         DIR * dir;
309         struct dirent * ent;
310 @@ -304,12 +203,14 @@
311      int parseret;
312  
313      if (!(type & TYPE_INIT_D))
314 -       goto try_xinetd;
315 +       return -1;
316  
317      asprintf(&filename, RUNLEVELS "/init.d/%s", name);
318  
319 -    if ((fd = open(filename, O_RDONLY)) < 0)
320 -       goto try_xinetd;
321 +    if ((fd = open(filename, O_RDONLY)) < 0) {
322 +       free(filename);
323 +       return -1;
324 +    }
325  
326      free(filename);
327      parseret = parseServiceInfo(fd, name, &serv, honorHide, 0);
328 @@ -338,12 +239,6 @@
329      free(filename);
330      *service = serv;
331      return 0;
332 -
333 -try_xinetd:
334 -    free(filename);
335 -    if (!(type & TYPE_XINETD))
336 -       return -1;
337 -    return readXinetdServiceInfo(name,service);
338  }
339  
340  int readServiceDifferences(char * name, int type, struct service * service, struct service * service_overrides, int honorHide) {
341 @@ -353,12 +248,13 @@
342      int parseret;
343  
344      if (!(type & TYPE_INIT_D))
345 -       goto try_xinetd;
346 +       return -1;
347  
348      asprintf(&filename, RUNLEVELS "/init.d/%s", name);
349  
350      if ((fd = open(filename, O_RDONLY)) < 0) {
351 -       goto try_xinetd;
352 +        free(filename);
353 +       return -1;
354      }
355  
356      free(filename);
357 @@ -382,12 +278,6 @@
358      *service = serv;
359      *service_overrides = serv_overrides;
360      return 0;
361 -
362 -try_xinetd:
363 -    free(filename);
364 -    if (!(type & TYPE_XINETD))
365 -       return -1;
366 -    return readXinetdServiceInfo(name,service);
367  }
368  
369  static struct dep *parseDeps(char *pos, char *end) {
370 @@ -760,60 +650,6 @@
371      return ret;
372  }
373  
374 -int setXinetdService(struct service s, int on) {
375 -       int oldfd, newfd;
376 -       char oldfname[100], newfname[100];
377 -       char tmpstr[50];
378 -       char *buf, *ptr, *tmp;
379 -       struct stat sb;
380 -
381 -       if (on == -1) {
382 -               on = s.enabled ? 1 : 0;
383 -       }
384 -       snprintf(oldfname,100,"%s/%s",XINETDDIR,s.name);
385 -       if ( (oldfd = open(oldfname,O_RDONLY)) == -1 ) {
386 -               return -1;
387 -       }
388 -       fstat(oldfd,&sb);
389 -       buf = malloc(sb.st_size+1);
390 -       if (read(oldfd,buf,sb.st_size)!=sb.st_size) {
391 -               close(oldfd);
392 -               free(buf);
393 -               return -1;
394 -       }
395 -       close(oldfd);
396 -       buf[sb.st_size] = '\0';
397 -       snprintf(newfname,100,"%s/%s.XXXXXX",XINETDDIR,s.name);
398 -       newfd = mkstemp(newfname);
399 -       if (newfd == -1) {
400 -               free(buf);
401 -               return -1;
402 -       }
403 -       while (buf) {
404 -               tmp = buf;
405 -               ptr = strchr(buf,'\n');
406 -               if (ptr) {
407 -                       *ptr = '\0';
408 -                       ptr++;
409 -               }
410 -               while (isspace(*buf)) buf++;
411 -               if (strncmp(buf,"disable", 7) && strlen(buf)) {
412 -                       write(newfd,tmp,strlen(tmp));
413 -                       write(newfd,"\n",1);
414 -                       if (buf[0] == '{') {
415 -                               snprintf(tmpstr,50,"\tdisable\t= %s", on ? "no" : "yes");
416 -                               write(newfd,tmpstr,strlen(tmpstr));
417 -                               write(newfd,"\n",1);
418 -                       }
419 -               }
420 -               buf = ptr;
421 -       }
422 -       close(newfd);
423 -       chmod(newfname,0644);
424 -       unlink(oldfname);
425 -       return(rename(newfname,oldfname));
426 -}
427 -
428  int doSetService(struct service s, int level, int on) {
429      int priority = on ? s.sPriority : s.kPriority;
430      char linkname[200];
431 diff -ur chkconfig-1.3.58/leveldb.h chkconfig-1.3.58-noxinet/leveldb.h
432 --- chkconfig-1.3.58/leveldb.h  2012-12-17 15:22:52.592994208 +0100
433 +++ chkconfig-1.3.58-noxinet/leveldb.h  2012-12-17 15:20:38.435096400 +0100
434 @@ -17,13 +17,11 @@
435  #define H_LEVELDB
436  
437  #define RUNLEVELS "/etc"
438 -#define XINETDDIR "/etc/xinetd.d"
439  
440  #include <glob.h>
441  
442  #define TYPE_INIT_D    0x1
443 -#define TYPE_XINETD    0x2
444 -#define TYPE_ANY       (TYPE_INIT_D | TYPE_XINETD)
445 +#define TYPE_ANY       (TYPE_INIT_D)
446  
447  #ifndef SYSTEMD_SERVICE_PATH
448  #define SYSTEMD_SERVICE_PATH "/lib/systemd/system"
449 @@ -63,8 +61,6 @@
450  int whatLevels(char * name);
451  int doSetService(struct service s, int level, int on);
452  int findServiceEntries(char * name, int level, glob_t * globresptr);
453 -int readXinetdServiceInfo(char *name, struct service *service);
454 -int setXinetdService(struct service s, int on);
455  int systemdIsInit();
456  int systemdActive();
457  int isOverriddenBySystemd(const char *service);
458 diff -ur chkconfig-1.3.58/ntsysv.c chkconfig-1.3.58-noxinet/ntsysv.c
459 --- chkconfig-1.3.58/ntsysv.c   2012-02-10 20:37:38.000000000 +0100
460 +++ chkconfig-1.3.58-noxinet/ntsysv.c   2012-12-17 15:21:53.479118101 +0100
461 @@ -61,15 +61,9 @@
462      states = alloca(sizeof(*states) * numServices);
463  
464      for (i = 0; i < numServices; i++) {
465 -       if (services[i].type == TYPE_XINETD) {
466 -               checkboxes[i] = newtCheckbox(-1, i, services[i].name,
467 -                                    services[i].levels ? '*' : ' ', NULL,
468 -                                    states + i);
469 -       } else {
470                 checkboxes[i] = newtCheckbox(-1, i, services[i].name,
471                                              (services[i].currentLevels & levels) ? '*' : ' ', NULL,
472                                              states + i);
473 -       }
474         newtFormAddComponent(subform, checkboxes[i]);
475      }
476  
477 @@ -126,15 +120,9 @@
478      if (!update) return 1;
479  
480      for (i = 0; i < numServices; i++) {
481 -      if (services[i].type == TYPE_XINETD) {
482 -        if ((services[i].enabled && states[i] != '*') ||
483 -           (!services[i].enabled && states[i] == '*'))
484 -             setXinetdService(services[i], states[i] == '*');
485 -      } else {
486               for (j = 0; j < 7; j++) {
487                       if (levels & (1 << j))
488                         doSetService(services[i], j, states[i] == '*');
489               }
490 -      }
491      }
492  
493 @@ -213,49 +201,6 @@
494      }
495  
496      closedir(dir);
497 -
498 -    if (!stat("/usr/sbin/xinetd",&sb)) {
499 -    if (!(dir = opendir(XINETDDIR))) {
500 -       fprintf(stderr, "failed to open " XINETDDIR ": %s\n",
501 -               strerror(errno));
502 -        return 2;
503 -    }
504 -
505 -    while ((ent = readdir(dir))) {
506 -       if (strchr(ent->d_name, '~') || strchr(ent->d_name, ',') ||
507 -           strchr(ent->d_name, '.')) continue;
508 -
509 -       sprintf(fn, "%s/%s", XINETDDIR, ent->d_name);
510 -       if (stat(fn, &sb))
511 -       {
512 -               err = errno;
513 -               continue;
514 -       }
515 -       if (!S_ISREG(sb.st_mode)) continue;
516 -
517 -       if (numServices == numServicesAlloced) {
518 -           numServicesAlloced += 10;
519 -           services = realloc(services,
520 -                               numServicesAlloced * sizeof(*services));
521 -       }
522 -
523 -       rc = readXinetdServiceInfo(ent->d_name, services + numServices);
524 -
525 -       if (rc == -1) {
526 -           fprintf(stderr, _("error reading info for service %s: %s\n"),
527 -                       ent->d_name, strerror(errno));
528 -           closedir(dir);
529 -           return 2;
530 -       } else if (!rc)
531 -           numServices++;
532 -    }
533 -
534 -    if (err) {
535 -       fprintf(stderr, _("error reading from directory %s: %s\n"),
536 -               XINETDDIR, strerror(err));
537 -        return 1;
538 -    }
539 -    }
540  
541      qsort(services, numServices, sizeof(*services), serviceNameCmp);
542  
This page took 0.140014 seconds and 3 git commands to generate.