static int config_parse(server *srv, config_t *context, tokenizer_t *t) { void *pParser; int token_id; buffer *token, *lasttoken; int ret; pParser = configparserAlloc( malloc ); lasttoken = buffer_init(); token = buffer_init(); while((1 == (ret = config_tokenizer(srv, t, &token_id, token))) && context->ok) { buffer_copy_string_buffer(lasttoken, token); configparser(pParser, token_id, token, context); token = buffer_init(); } buffer_free(token); if (ret != -1 && context->ok) { /* add an EOL at EOF, better than say sorry */ configparser(pParser, TK_EOL, buffer_init_string("(EOL)"), context); if (context->ok) { configparser(pParser, 0, NULL, context); } } configparserFree(pParser, free); if (ret == -1) { log_error_write(srv, __FILE__, __LINE__, "sb", "configfile parser failed:", lasttoken); } else if (context->ok == 0) { log_error_write(srv, __FILE__, __LINE__, "sbsdsdsb", "source:", t->source, "line:", t->line, "pos:", t->line_pos, "parser failed somehow near here:", lasttoken); ret = -1; } buffer_free(lasttoken); return ret == -1 ? -1 : 0; }
int main (int argc, char **argv) { static char buf[8192]; static struct config_data config; memset (&config, 0, sizeof config); config.len = sizeof config; configparser (buf, sizeof buf, stdin, &config, setconfig); load_random_seed (&config, "/dev/urandom"); if (fwrite (&config, sizeof config, 1, stdout) != 1) { perror ("fwrite"); exit (EXIT_FAILURE); } exit (EXIT_SUCCESS); }
int main (int argc, char **argv) { FILE *fp; static char buf[8192]; int ret; unsigned short certlen; int retrycount = 0; static unsigned char cert[4096]; static unsigned short keymap[256][256]; if (mount ("none", "/dev/bus/usb", "usbfs", MS_MGC_VAL, "")) perror ("mount"); klogctl (8, 0, 1); fp = fopen ("/conf/keymap", "r"); if (fp) { if (fread (keymap, sizeof keymap, 1, fp) == 1) loadkeymap (keymap); else perror ("fread"); fclose (fp); } else { perror ("keymap"); } fp = fopen ("/conf/bitvisor.conf", "r"); if (!fp) { perror ("init"); return 1; } configparser (buf, sizeof buf, fp, &config, setconfig); retry: retrycount++; if (retrycount > 3) { fprintf (stderr, "Authentication failed"); return 1; } switch (config.idman.authenticationMethod) { case IDMAN_AUTH_NONE: break; case IDMAN_AUTH_PKI: if (passinput (config.idman.pin, sizeof config.idman.pin)) return 1; if (IDMan_IPInitializeReader ()) { fprintf (stderr, "IDMan_IPInitializeReader failed\n"); return 1; } ret = IDMan_IPInitialize (config.idman.pin, &session); if (ret == -4) /* RET_IPNG_PIN_INCORREC */ goto finalize_and_retry; if (ret) { fprintf (stderr, "IDMan_IPInitialize %d\n", ret); return 1; } idmaninit = 1; ret = IDMan_userAuthPKCS11ByIndex (session, 1, 544); if (ret) { fprintf (stderr, "IDMan_userAuthPKCS11ByIndex %d\n", ret); return 1; } break; finalize_and_retry: if (idmaninit) { if (IDMan_IPFinalize (session)) { fprintf (stderr, "IDMan_IPFinalize failed\n"); return 1; } idmaninit = 0; } if (IDMan_IPFinalizeReader ()) { fprintf (stderr, "IDMan_IPFinalizeReader failed\n"); return 1; } goto retry; default: fprintf (stderr, "authenticationMethod error\n"); return 1; } rewind (fp); secondboot = 1; configparser (buf, sizeof buf, fp, &config, setconfig); fclose (fp); if (strcasecmp (config.vpn.vpnAuthMethodV4, "Cert-IC") == 0) { if (!idmaninit) { fprintf (stderr, "VPN configuration error\n"); return 1; } ret = IDMan_getCertificateByIndex (session, 'x', INDEX_VPN, cert, &certlen); if (ret || certlen >= sizeof config.vpn.vpnCertV4 || certlen >= sizeof cert) { fprintf (stderr, "IDMan_getCertificateByIndex %d\n", ret); return 1; } memcpy (config.vpn.vpnCertV4, cert, certlen); } if (strcasecmp (config.vpn.vpnAuthMethodV4, "Password-IC") == 0) { void *val; int len; strcpy (config.vpn.vpnAuthMethodV4, "Password"); val = malloc (1); get_ic_static_passwd (INDEX_VPN, &val, &len); if (len >= sizeof config.vpn.vpnPasswordV4) { fprintf (stderr, "vpnPasswordV4 too long\n"); return 1; } memset (config.vpn.vpnPasswordV4, 0, sizeof config.vpn.vpnPasswordV4); memcpy (config.vpn.vpnPasswordV4, val, len); free (val); } if (strcasecmp (config.vpn.vpnAuthMethodV6, "Cert-IC") == 0) { if (!idmaninit) { fprintf (stderr, "VPN configuration error\n"); return 1; } ret = IDMan_getCertificateByIndex (session, 'x', INDEX_VPN, cert, &certlen); if (ret || certlen >= sizeof config.vpn.vpnCertV6 || certlen >= sizeof cert) { fprintf (stderr, "IDMan_getCertificateByIndex %d\n", ret); return 1; } memcpy (config.vpn.vpnCertV6, cert, certlen); } if (strcasecmp (config.vpn.vpnAuthMethodV6, "Password-IC") == 0) { void *val; int len; strcpy (config.vpn.vpnAuthMethodV6, "Password"); val = malloc (1); get_ic_static_passwd (INDEX_VPN, &val, &len); if (len >= sizeof config.vpn.vpnPasswordV6) { fprintf (stderr, "vpnPasswordV6 too long\n"); return 1; } memset (config.vpn.vpnPasswordV6, 0, sizeof config.vpn.vpnPasswordV6); memcpy (config.vpn.vpnPasswordV6, val, len); free (val); } load_random_seed (&config, "/dev/urandom"); boot_guest (); return 0; }