/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-07 04:50:39 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090207045039-xkr6b80vtqwqrq8l
* Makefile (install-client-nokey): Move "initramfs-tools-script" from
                                   "/scripts/local-top/mandos" to
                                   "/scripts/init-premount/mandos".
  (uninstall-client): - '' -
* debian/mandos-client.dirs: - '' -
* initramfs-tools-script (PREREQ): Added "udev".

Show diffs side-by-side

added added

removed removed

Lines of Context:
90
90
  size_t buffer_length;
91
91
  bool eof;
92
92
  volatile sig_atomic_t completed;
93
 
  volatile int status;
 
93
  int status;
94
94
  struct plugin *next;
95
95
} plugin;
96
96
 
223
223
/* Mark processes as completed when they exit, and save their exit
224
224
   status. */
225
225
static void handle_sigchld(__attribute__((unused)) int sig){
 
226
  int old_errno = errno;
226
227
  while(true){
227
228
    plugin *proc = plugin_list;
228
229
    int status;
250
251
    proc->status = status;
251
252
    proc->completed = 1;
252
253
  }
 
254
  errno = old_errno;
253
255
}
254
256
 
255
257
/* Prints out a password to stdout */
662
664
  }
663
665
  
664
666
  /* Strip permissions down to nobody */
 
667
  setgid(gid);
 
668
  if(ret == -1){
 
669
    perror("setgid");
 
670
  }
665
671
  ret = setuid(uid);
666
672
  if(ret == -1){
667
673
    perror("setuid");
668
 
  }  
669
 
  setgid(gid);
670
 
  if(ret == -1){
671
 
    perror("setgid");
672
674
  }
673
675
  
674
676
  if(plugindir == NULL){
959
961
       from one of them */
960
962
    for(plugin *proc = plugin_list; proc != NULL;){
961
963
      /* Is this process completely done? */
962
 
      if(proc->eof and proc->completed){
 
964
      if(proc->completed and proc->eof){
963
965
        /* Only accept the plugin output if it exited cleanly */
964
966
        if(not WIFEXITED(proc->status)
965
967
           or WEXITSTATUS(proc->status) != 0){
967
969
 
968
970
          if(debug){
969
971
            if(WIFEXITED(proc->status)){
970
 
              fprintf(stderr, "Plugin %" PRIdMAX " exited with status"
971
 
                      " %d\n", (intmax_t) (proc->pid),
 
972
              fprintf(stderr, "Plugin %s [%" PRIdMAX "] exited with"
 
973
                      " status %d\n", proc->name,
 
974
                      (intmax_t) (proc->pid),
972
975
                      WEXITSTATUS(proc->status));
973
976
            } else if(WIFSIGNALED(proc->status)){
974
 
              fprintf(stderr, "Plugin %" PRIdMAX " killed by signal"
975
 
                      " %d\n", (intmax_t) (proc->pid),
 
977
              fprintf(stderr, "Plugin %s [%" PRIdMAX "] killed by"
 
978
                      " signal %d\n", proc->name,
 
979
                      (intmax_t) (proc->pid),
976
980
                      WTERMSIG(proc->status));
977
981
            } else if(WCOREDUMP(proc->status)){
978
 
              fprintf(stderr, "Plugin %" PRIdMAX " dumped core\n",
979
 
                      (intmax_t) (proc->pid));
 
982
              fprintf(stderr, "Plugin %s [%" PRIdMAX "] dumped"
 
983
                      " core\n", proc->name, (intmax_t) (proc->pid));
980
984
            }
981
985
          }
982
986