/** * getopt_long wrapper */ int command_getopt(char **arg) { int op; while (TRUE) { op = getopt_long(argc, argv, command_optstring, command_opts, NULL); switch (op) { case '+': if (!options->from(options, optarg, &argc, &argv, optind)) { /* a error value */ return 255; } continue; case 'v': dbg_default_set_level(atoi(optarg)); continue; default: *arg = optarg; return op; } } }
/** * Test initialization, initializes libstrongswan for the next run */ static bool pre_test(test_runner_init_t init, char *cfg) { level_t level = LEVEL_SILENT; char *verbosity; library_init(cfg, "test-runner"); /* use non-blocking RNG to generate keys fast */ lib->settings->set_default_str(lib->settings, "libstrongswan.plugins.random.random", lib->settings->get_str(lib->settings, "libstrongswan.plugins.random.urandom", "/dev/urandom")); /* same for the gcrypt plugin */ lib->settings->set_default_str(lib->settings, "libstrongswan.plugins.gcrypt.quick_random", "yes"); if (lib->leak_detective) { /* disable leak reports during testing */ lib->leak_detective->set_report_cb(lib->leak_detective, NULL, NULL, NULL); } if (init && !init(TRUE)) { library_deinit(); return FALSE; } verbosity = getenv("TESTS_VERBOSITY"); if (verbosity) { level = atoi(verbosity); } dbg_default_set_level(level); return TRUE; }
/** * Library initialization and operation parsing */ int main(int argc, char *argv[]) { atexit(cleanup); if (!library_init(NULL, "swanctl")) { exit(SS_RC_LIBSTRONGSWAN_INTEGRITY); } if (lib->integrity && !lib->integrity->check_file(lib->integrity, "swanctl", argv[0])) { fprintf(stderr, "integrity check of swanctl failed\n"); exit(SS_RC_DAEMON_INTEGRITY); } if (!lib->plugins->load(lib->plugins, lib->settings->get_str(lib->settings, "swanctl.load", PLUGINS))) { exit(SS_RC_INITIALIZATION_FAILED); } dbg_default_set_level(0); lib->processor->set_threads(lib->processor, 4); dbg_default_set_level(1); return command_dispatch(argc, argv); }
int main(int argc, char *argv[]) { test_vector_t test; ctx.in = stdin; ctx.out = stdout; library_init(NULL, "aes-test"); atexit(library_deinit); while (true) { struct option long_opts[] = { {"help", no_argument, NULL, 'h' }, {"debug", required_argument, NULL, 'd' }, {"mode", required_argument, NULL, 'm' }, {"mct", no_argument, NULL, 't' }, {"decrypt", no_argument, NULL, 'x' }, {"in", required_argument, NULL, 'i' }, {"out", required_argument, NULL, 'o' }, {0,0,0,0 }, }; switch (getopt_long(argc, argv, "hd:m:txi:o:", long_opts, NULL)) { case EOF: break; case 'h': usage(stdout, argv[0]); return 0; case 'd': dbg_default_set_level(atoi(optarg)); continue; case 'm': if (strcaseeq(optarg, "GCM")) { ctx.use_gcm = TRUE; } else if (!strcaseeq(optarg, "CBC")) { usage(stderr, argv[0]); return 1; } continue; case 't': ctx.use_mct = TRUE; continue; case 'x': ctx.decrypt = TRUE; continue; case 'i': ctx.in = fopen(optarg, "r"); if (!ctx.in) { fprintf(stderr, "failed to open '%s': %s\n", optarg, strerror(errno)); usage(stderr, argv[0]); return 1; } continue; case 'o': ctx.out = fopen(optarg, "w"); if (!ctx.out) { fprintf(stderr, "failed to open '%s': %s\n", optarg, strerror(errno)); usage(stderr, argv[0]); return 1; } continue; default: usage(stderr, argv[0]); return 1; } break; } /* TODO: maybe make plugins configurable */ lib->plugins->load(lib->plugins, PLUGINS); lib->plugins->status(lib->plugins, LEVEL_CTRL); while (get_next_test_vector(&test)) { if (verify_test_vector(&test)) { if (do_test(&test)) { print_result(&test); } } else { DBG1(DBG_APP, "test vector with missing data encountered"); } fprintf(ctx.out, "\n"); test_vector_free(&test); } if (ctx.in != stdin) { fclose(ctx.in); } if (ctx.out != stdout) { fclose(ctx.out); } return 0; }