Exemple #1
0
KRB5_LIB_FUNCTION krb5_error_code KRB5_LIB_CALL
krb5_set_config_files(krb5_context context, char **filenames)
{
    krb5_error_code ret;
    krb5_config_binding *tmp = NULL;
    while(filenames != NULL && *filenames != NULL && **filenames != '\0') {
	ret = krb5_config_parse_file_multi(context, *filenames, &tmp);
	if(ret != 0 && ret != ENOENT && ret != EACCES && ret != EPERM) {
	    krb5_config_file_free(context, tmp);
	    return ret;
	}
	filenames++;
    }
#if 0
    /* with this enabled and if there are no config files, Kerberos is
       considererd disabled */
    if(tmp == NULL)
	return ENXIO;
#endif

#ifdef _WIN32
    _krb5_load_config_from_registry(context, &tmp);
#endif

    krb5_config_file_free(context, context->cf);
    context->cf = tmp;
    ret = init_context_from_config_file(context);
    return ret;
}
Exemple #2
0
krb5_error_code
krb5_reload_config(krb5_context context,
                   unsigned flags,
                   krb5_boolean *reread)
{
    krb5_error_code ret;
    krb5_config_binding *tmp = NULL;
    unsigned i;

    /**
     * If function returns a failure, and reread is used, value of
     * reread is FALSE.
     */

    if (reread)
        *reread = FALSE;

    if (_krb5_need_to_reload(context) == FALSE)
        return 0;

    if (context->config_files == NULL)
        return 0;

    for (i = 0; context->config_files[i]; i++) {
        ret = krb5_config_parse_file_multi(context,
                                           context->config_files[i],
                                           &tmp);
        if (ret != 0 && ret != ENOENT && ret != EACCES && ret != EPERM && ret != KRB5_CONFIG_BADFORMAT) {
            krb5_config_file_free(context, tmp);
            return ret;
        }
    }

    if (reread)
        *reread = TRUE;

    krb5_config_file_free(context, context->cf);
    context->cf = tmp;

    return init_context_from_config_file(context);
}
Exemple #3
0
static void
check_escaped_strings(void)
{
    krb5_context context;
    krb5_config_section *c = NULL;
    krb5_error_code ret;
    int i;

    ret = krb5_init_context(&context);
    if (ret)
        errx(1, "krb5_init_context %d", ret);

    ret = krb5_config_parse_file(context, "test_config_strings.out", &c);
    if (ret)
        krb5_errx(context, 1, "krb5_config_parse_file()");

    for (i=0; i < sizeof(config_strings_tests)/sizeof(config_strings_tests[0]); i++) {
        char **ps;
        const char **s;
        const char **e;

        ps = krb5_config_get_strings(context, c, "escapes", config_strings_tests[i].name,
                                     NULL);
        if (ps == NULL)
            errx(1, "Failed to read string value %s", config_strings_tests[i].name);

        e = config_strings_tests[i].expected;

        for (s = (const char **)ps; *s && *e; s++, e++) {
            if (strcmp(*s, *e))
                errx(1,
                     "Unexpected configuration string at value [%s].\n"
                     "Actual=[%s]\n"
                     "Expected=[%s]\n",
                     config_strings_tests[i].name, *s, *e);
        }

        if (*s || *e)
            errx(1, "Configuation string list for value [%s] has incorrect length.",
		 config_strings_tests[i].name);

        krb5_config_free_strings(ps);
    }

    ret = krb5_config_file_free(context, c);
    if (ret)
        krb5_errx(context, 1, "krb5_config_file_free()");

    krb5_free_context(context);
}
Exemple #4
0
KRB5_LIB_FUNCTION void KRB5_LIB_CALL
krb5_free_context(krb5_context context)
{
    if (context->default_cc_name)
        free(context->default_cc_name);
    if (context->default_cc_name_env)
        free(context->default_cc_name_env);
    if (context->config_files)
        krb5_free_config_files(context->config_files);
    free(context->etypes);
    free(context->etypes_des);
    heim_release(context->default_realms);
    krb5_config_file_free (context, context->cf);
    free_error_table (context->et_list);
    free(rk_UNCONST(context->cc_ops));
    free(context->kt_types);
    krb5_clear_error_message(context);
    if (context->warn_dest != NULL)
        krb5_closelog(context, context->warn_dest);
    if (context->debug_dest != NULL)
        krb5_closelog(context, context->debug_dest);
    krb5_set_extra_addresses(context, NULL);
    krb5_set_ignore_addresses(context, NULL);
#ifndef HEIMDAL_SMALLER
    krb5_set_send_to_kdc_func(context, NULL, NULL);
#endif

#ifdef PKINIT
    if (context->hx509ctx)
        hx509_context_free(&context->hx509ctx);
#endif

    HEIMDAL_MUTEX_destroy(context->mutex);
    free(context->mutex);
    if (context->flags & KRB5_CTX_F_SOCKETS_INITIALIZED) {
        rk_SOCK_EXIT();
    }

    memset(context, 0, sizeof(*context));
    free(context);
}