/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugin-runner.c

  • Committer: Teddy Hogeborn
  • Date: 2009-02-09 19:26:19 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090209192619-7rse82x9pypq4ihk
* plugin-runner.c: Comment change.

* plugins.d/mandos-client.c: Comment changes.
  (quit_now): New global flag.
  (handle_sigterm): Only call avahi_simple_poll_quit once.
  (main): Also handle SIGINT and SIGHUP.

Show diffs side-by-side

added added

removed removed

Lines of Context:
62
62
#include <signal.h>             /* struct sigaction, sigemptyset(),
63
63
                                   sigaddset(), sigaction(),
64
64
                                   sigprocmask(), SIG_BLOCK, SIGCHLD,
65
 
                                   SIG_UNBLOCK, kill() */
 
65
                                   SIG_UNBLOCK, kill(), sig_atomic_t
 
66
                                */
66
67
#include <errno.h>              /* errno, EBADF */
67
68
#include <inttypes.h>           /* intmax_t, SCNdMAX, PRIdMAX,  */
68
69
 
382
383
    switch(key){
383
384
    case 'g':                   /* --global-options */
384
385
      if(arg != NULL){
385
 
        char *p;
386
 
        while((p = strsep(&arg, ",")) != NULL){
387
 
          if(p[0] == '\0'){
 
386
        char *plugin_option;
 
387
        while((plugin_option = strsep(&arg, ",")) != NULL){
 
388
          if(plugin_option[0] == '\0'){
388
389
            continue;
389
390
          }
390
 
          if(not add_argument(getplugin(NULL), p)){
 
391
          if(not add_argument(getplugin(NULL), plugin_option)){
391
392
            perror("add_argument");
392
393
            return ARGP_ERR_UNKNOWN;
393
394
          }
404
405
      break;
405
406
    case 'o':                   /* --options-for */
406
407
      if(arg != NULL){
407
 
        char *p_name = strsep(&arg, ":");
408
 
        if(p_name[0] == '\0' or arg == NULL){
409
 
          break;
410
 
        }
411
 
        char *opt = strsep(&arg, ":");
412
 
        if(opt[0] == '\0' or opt == NULL){
413
 
          break;
414
 
        }
415
 
        char *p;
416
 
        while((p = strsep(&opt, ",")) != NULL){
417
 
          if(p[0] == '\0'){
418
 
            continue;
419
 
          }
420
 
          if(not add_argument(getplugin(p_name), p)){
 
408
        char *plugin_name = strsep(&arg, ":");
 
409
        if(plugin_name[0] == '\0'){
 
410
          break;
 
411
        }
 
412
        char *plugin_option;
 
413
        while((plugin_option = strsep(&arg, ",")) != NULL){
 
414
          if(not add_argument(getplugin(plugin_name), plugin_option)){
421
415
            perror("add_argument");
422
416
            return ARGP_ERR_UNKNOWN;
423
417
          }
664
658
  }
665
659
  
666
660
  /* Strip permissions down to nobody */
 
661
  setgid(gid);
 
662
  if(ret == -1){
 
663
    perror("setgid");
 
664
  }
667
665
  ret = setuid(uid);
668
666
  if(ret == -1){
669
667
    perror("setuid");
670
 
  }  
671
 
  setgid(gid);
672
 
  if(ret == -1){
673
 
    perror("setgid");
674
668
  }
675
669
  
676
670
  if(plugindir == NULL){
936
930
  
937
931
  closedir(dir);
938
932
  dir = NULL;
 
933
  free_plugin(getplugin(NULL));
939
934
  
940
935
  for(plugin *p = plugin_list; p != NULL; p = p->next){
941
936
    if(p->pid != 0){
969
964
 
970
965
          if(debug){
971
966
            if(WIFEXITED(proc->status)){
972
 
              fprintf(stderr, "Plugin %" PRIdMAX " exited with status"
973
 
                      " %d\n", (intmax_t) (proc->pid),
 
967
              fprintf(stderr, "Plugin %s [%" PRIdMAX "] exited with"
 
968
                      " status %d\n", proc->name,
 
969
                      (intmax_t) (proc->pid),
974
970
                      WEXITSTATUS(proc->status));
975
971
            } else if(WIFSIGNALED(proc->status)){
976
 
              fprintf(stderr, "Plugin %" PRIdMAX " killed by signal"
977
 
                      " %d\n", (intmax_t) (proc->pid),
 
972
              fprintf(stderr, "Plugin %s [%" PRIdMAX "] killed by"
 
973
                      " signal %d\n", proc->name,
 
974
                      (intmax_t) (proc->pid),
978
975
                      WTERMSIG(proc->status));
979
976
            } else if(WCOREDUMP(proc->status)){
980
 
              fprintf(stderr, "Plugin %" PRIdMAX " dumped core\n",
981
 
                      (intmax_t) (proc->pid));
 
977
              fprintf(stderr, "Plugin %s [%" PRIdMAX "] dumped"
 
978
                      " core\n", proc->name, (intmax_t) (proc->pid));
982
979
            }
983
980
          }
984
981