/mandos/release

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

« back to all changes in this revision

Viewing changes to plugin-runner.c

merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
105
105
  if (new_plugin == NULL){
106
106
    return NULL;
107
107
  }
108
 
  char *copy_name = NULL;
109
 
  if(name != NULL){
110
 
    copy_name = strdup(name);
111
 
    if(copy_name == NULL){
112
 
      return NULL;
113
 
    }
 
108
  char *copy_name = strdup(name);
 
109
  if(copy_name == NULL){
 
110
    return NULL;
114
111
  }
115
112
  
116
113
  *new_plugin = (plugin) { .name = copy_name,
121
118
  
122
119
  new_plugin->argv = malloc(sizeof(char *) * 2);
123
120
  if (new_plugin->argv == NULL){
124
 
    free(copy_name);
125
121
    free(new_plugin);
126
122
    return NULL;
127
123
  }
130
126
 
131
127
  new_plugin->environ = malloc(sizeof(char *));
132
128
  if(new_plugin->environ == NULL){
133
 
    free(copy_name);
134
129
    free(new_plugin->argv);
135
130
    free(new_plugin);
136
131
    return NULL;
252
247
    return NULL;
253
248
  }
254
249
  argv[*argc-1] = arg;
255
 
  argv[*argc] = NULL;
 
250
  argv[*argc] = NULL;   
256
251
  return argv;
257
252
}
258
253
 
259
254
static void free_plugin_list(plugin *plugin_list){
260
 
  for(plugin *next; plugin_list != NULL; plugin_list = next){
 
255
  for(plugin *next = plugin_list; plugin_list != NULL; plugin_list = next){
261
256
    next = plugin_list->next;
 
257
    free(plugin_list->name);
262
258
    for(char **arg = plugin_list->argv; *arg != NULL; arg++){
263
259
      free(*arg);
264
 
    }
 
260
    }    
265
261
    free(plugin_list->argv);
266
262
    for(char **env = plugin_list->environ; *env != NULL; env++){
267
263
      free(*env);
268
264
    }
269
265
    free(plugin_list->environ);
270
266
    free(plugin_list);
271
 
  }
 
267
  }  
272
268
}
273
269
 
274
270
int main(int argc, char *argv[]){
302
298
  ret = sigaction(SIGCHLD, &sigchld_action, &old_sigchld_action);
303
299
  if(ret == -1){
304
300
    perror("sigaction");
305
 
    exitstatus = EXIT_FAILURE;
 
301
    exitstatus = EXIT_FAILURE;    
306
302
    goto fallback;
307
303
  }
308
304
  
684
680
      }
685
681
    }
686
682
    
687
 
    int pipefd[2];
 
683
    int pipefd[2]; 
688
684
    ret = pipe(pipefd);
689
685
    if (ret == -1){
690
686
      perror("pipe");
791
787
  }
792
788
  
793
789
  free_plugin_list(plugin_list);
794
 
  plugin_list = NULL;
795
790
  
796
791
  closedir(dir);
797
792
  dir = NULL;