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;
}
Exemple #2
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);
}
Exemple #3
0
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;
}