/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

  • Committer: Teddy Hogeborn
  • Date: 2008-08-25 01:16:38 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080825011638-zgqej2cafhne05ay
* mandos-keygen: Strip 24-bit checksum of Radix-64 from output to make
                 output strictly base64.

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
 
250
272
static void free_plugin_list(plugin *plugin_list){
251
273
  for(plugin *next; plugin_list != NULL; plugin_list = next){
252
274
    next = plugin_list->next;
458
480
    const char whitespace_delims[] = " \r\t\f\v\n";
459
481
    const char comment_delim[] = "#";
460
482
 
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
 
    
471
483
    while(true){
472
484
      sret = getline(&org_line, &size, conffp);
473
485
      if(sret == -1){
481
493
          continue;
482
494
        }
483
495
        new_arg = strdup(p);
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");
 
496
        custom_argv = add_to_argv(custom_argv, &custom_argc, new_arg);
 
497
        if (custom_argv == NULL){
 
498
          perror("add_to_argv");
490
499
          exitstatus = EXIT_FAILURE;
491
 
          free(org_line);
492
500
          goto fallback;
493
501
        }
494
 
        custom_argv[custom_argc-1] = new_arg;
495
 
        custom_argv[custom_argc] = NULL;        
496
502
      }
497
503
    }
498
504
    free(org_line);
507
513
  }
508
514
 
509
515
  if(custom_argv != NULL){
510
 
    ret = argp_parse (&argp, custom_argc, custom_argv, 0, 0, &plugin_list);
 
516
    custom_argv[0] = argv[0];
 
517
    ret = argp_parse (&argp, custom_argc, custom_argv, 0, 0,
 
518
                      &plugin_list);
511
519
    if (ret == ARGP_ERR_UNKNOWN){
512
520
      fprintf(stderr, "Unknown error while parsing arguments\n");
513
521
      exitstatus = EXIT_FAILURE;
939
947
  }
940
948
 
941
949
  if(custom_argv != NULL){
942
 
    for(char **arg = custom_argv+1; *arg != NULL; arg++){
 
950
    for(char **arg = custom_argv; *arg != NULL; arg++){
943
951
      free(*arg);
944
952
    }
945
953
    free(custom_argv);