/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:
247
247
  return true;
248
248
}
249
249
 
250
 
char **add_to_argv(char **argv, int *argc, char *arg){
251
 
  if (argv == NULL){
252
 
    *argc = 1;
253
 
    argv = malloc(sizeof(char*) * 2);
254
 
    if(argv == NULL){
255
 
      return NULL;
256
 
    }
257
 
    argv[0] = NULL;     /* Will be set to argv[0] in main before
258
 
                           parsing */
259
 
    argv[1] = NULL;
260
 
  }
261
 
  *argc += 1;
262
 
  argv = realloc(argv, sizeof(char *)
263
 
                  * ((unsigned int) *argc + 1));
264
 
  if(argv == NULL){
265
 
    return NULL;
266
 
  }
267
 
  argv[*argc-1] = arg;
268
 
  argv[*argc] = NULL;
269
 
  return argv;
270
 
}
271
 
 
272
250
static void free_plugin_list(plugin *plugin_list){
273
251
  for(plugin *next; plugin_list != NULL; plugin_list = next){
274
252
    next = plugin_list->next;
480
458
    const char whitespace_delims[] = " \r\t\f\v\n";
481
459
    const char comment_delim[] = "#";
482
460
 
 
461
    custom_argc = 1;
 
462
    custom_argv = malloc(sizeof(char*) * 2);
 
463
    if(custom_argv == NULL){
 
464
      perror("malloc");
 
465
      exitstatus = EXIT_FAILURE;
 
466
      goto fallback;
 
467
    }
 
468
    custom_argv[0] = argv[0];
 
469
    custom_argv[1] = NULL;
 
470
    
483
471
    while(true){
484
472
      sret = getline(&org_line, &size, conffp);
485
473
      if(sret == -1){
493
481
          continue;
494
482
        }
495
483
        new_arg = strdup(p);
496
 
        custom_argv = add_to_argv(custom_argv, &custom_argc, new_arg);
497
 
        if (custom_argv == NULL){
498
 
          perror("add_to_argv");
 
484
 
 
485
        custom_argc += 1;
 
486
        custom_argv = realloc(custom_argv, sizeof(char *)
 
487
                              * ((unsigned int) custom_argc + 1));
 
488
        if(custom_argv == NULL){
 
489
          perror("realloc");
499
490
          exitstatus = EXIT_FAILURE;
 
491
          free(org_line);
500
492
          goto fallback;
501
493
        }
 
494
        custom_argv[custom_argc-1] = new_arg;
 
495
        custom_argv[custom_argc] = NULL;        
502
496
      }
503
497
    }
504
498
    free(org_line);
513
507
  }
514
508
 
515
509
  if(custom_argv != NULL){
516
 
    custom_argv[0] = argv[0];
517
 
    ret = argp_parse (&argp, custom_argc, custom_argv, 0, 0,
518
 
                      &plugin_list);
 
510
    ret = argp_parse (&argp, custom_argc, custom_argv, 0, 0, &plugin_list);
519
511
    if (ret == ARGP_ERR_UNKNOWN){
520
512
      fprintf(stderr, "Unknown error while parsing arguments\n");
521
513
      exitstatus = EXIT_FAILURE;
947
939
  }
948
940
 
949
941
  if(custom_argv != NULL){
950
 
    for(char **arg = custom_argv; *arg != NULL; arg++){
 
942
    for(char **arg = custom_argv+1; *arg != NULL; arg++){
951
943
      free(*arg);
952
944
    }
953
945
    free(custom_argv);