Пример #1
0
/* mark some registers as being duplicated across banks */
static void
register_map (int num_words, char **word)
{
    memRange *r;
    int pcount;

    if (num_words < 3)
    {
        fprintf (stderr, "WARNING: not enough values in %s regmap directive\n",
                 DEVICE_FILE_NAME);
        return;
    } // if

    for (pcount = 2; pcount < num_words; pcount++)
    {
        r = Safe_calloc (1, sizeof (memRange));

        r->start_address = parse_config_value (word[pcount]);
        r->end_address = parse_config_value (word[pcount]);
        r->alias = parse_config_value (word[1]);
        r->bank = (r->start_address >> 7) & 3;
        // add memRange to device entry for future lookup (sharebanks)
        r->next = rangeRAM;
        rangeRAM = r;
    } // for
}
Пример #2
0
/* define ram areas - may be duplicated across banks */
static void
ram_map (int num_words, char **word)
{
    memRange *r;

    if (num_words < 4)
    {
        fprintf (stderr, "WARNING: not enough values in %s memmap directive\n",
                 DEVICE_FILE_NAME);
        return;
    } // if

    r = Safe_calloc (1, sizeof (memRange));
    //fprintf (stderr, "%s: %s %s %s\n", __FUNCTION__, word[1], word[2], word[3]);

    r->start_address = parse_config_value (word[1]);
    r->end_address = parse_config_value (word[2]);
    r->alias = parse_config_value (word[3]);
    r->bank = (r->start_address >> 7) & 3;

    // add memRange to device entry for future lookup (sharebanks)
    r->next = rangeRAM;
    rangeRAM = r;
}
Пример #3
0
am_config_t *am_get_config_file(unsigned long instance_id, const char *filename) {
    static const char *thisfunc = "am_get_config_file():";
    am_config_t *conf = NULL;
    FILE *file = NULL;
    char *line = NULL;
    size_t len = 0;
    ssize_t read;

    conf = calloc(1, sizeof (am_config_t));
    if (conf == NULL) {
        AM_LOG_ERROR(instance_id, "%s memory allocation error", thisfunc);
        return NULL;
    }
    conf->instance_id = instance_id;

    file = fopen(filename, "r");
    if (file == NULL) {
        AM_LOG_ERROR(instance_id,
                "%s can't open file %s (error: %d)", thisfunc,
                filename, errno);
        free(conf);
        return NULL;
    }

    while ((read = get_line(&line, &len, file)) != -1) {
        trim(line, '\n');
        trim(line, '\r');
        trim(line, ' ');
        if (line == NULL || line[0] == '\0' || line[0] == '#') continue;

        /* bootstrap options */

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOCAL, CONF_NUMBER, NULL, &conf->local, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_POSTDATA_PRESERVE_DIR, CONF_STRING, NULL, &conf->pdp_dir, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NAMING_URL, CONF_STRING_LIST, &conf->naming_url_sz, &conf->naming_url, AM_SPACE_CHAR);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_REALM, CONF_STRING, NULL, &conf->realm, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_USER, CONF_STRING, NULL, &conf->user, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PASSWORD, CONF_STRING, NULL, &conf->pass, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_KEY, CONF_STRING, NULL, &conf->key, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_DEBUG_OPT, CONF_NUMBER, NULL, &conf->debug, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_DEBUG_FILE, CONF_STRING, NULL, &conf->debug_file, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_DEBUG_LEVEL, CONF_DEBUG_LEVEL, NULL, &conf->debug_level, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AUDIT_FILE, CONF_STRING, NULL, &conf->audit_file, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AUDIT_OPT, CONF_NUMBER, NULL, &conf->audit, NULL);

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CERT_KEY_FILE, CONF_STRING, NULL, &conf->cert_key_file, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CERT_KEY_PASSWORD, CONF_STRING, NULL, &conf->cert_key_pass, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CERT_FILE, CONF_STRING, NULL, &conf->cert_file, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CA_FILE, CONF_STRING, NULL, &conf->cert_ca_file, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CIPHERS, CONF_STRING, NULL, &conf->ciphers, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_TRUST_CERT, CONF_NUMBER, NULL, &conf->cert_trust, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_TLS_OPT, CONF_STRING, NULL, &conf->tls_opts, NULL);

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NET_TIMEOUT, CONF_NUMBER, NULL, &conf->net_timeout, NULL);

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_URL_VALIDATE_LEVEL, CONF_NUMBER, NULL, &conf->valid_level, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_URL_VALIDATE_PING_INTERVAL, CONF_NUMBER, NULL, &conf->valid_ping, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_URL_VALIDATE_PING_MISS, CONF_NUMBER, NULL, &conf->valid_ping_miss, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_URL_VALIDATE_PING_OK, CONF_NUMBER, NULL, &conf->valid_ping_ok, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_URL_VALIDATE_DEFAULT_SET, CONF_NUMBER_LIST, &conf->valid_default_url_sz, &conf->valid_default_url, AM_COMMA_CHAR);

        /*
         * com.forgerock.agents.config.hostmap format:
         *  server1.domain.name|192.168.1.1,server2.domain.name|192.168.1.2
         */
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_HOST_MAP, CONF_STRING_LIST, &conf->hostmap_sz, &conf->hostmap, AM_COMMA_CHAR);

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_RETRY_MAX, CONF_NUMBER, NULL, &conf->retry_max, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_RETRY_WAIT, CONF_NUMBER, NULL, &conf->retry_wait, NULL);

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOTIF_ENABLE, CONF_NUMBER, NULL, &conf->notif_enable, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOTIF_URL, CONF_STRING, NULL, &conf->notif_url, NULL);

        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LB_ENABLE, CONF_NUMBER, NULL, &conf->lb_enable, NULL);
        parse_config_value(instance_id, line, AM_AGENTS_CONFIG_KEEPALIVE_DISABLE, CONF_NUMBER, NULL, &conf->keepalive_disable, NULL);

        if (conf->local) { /* do read other options in case configuration is local */

            /* other options */

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AGENT_URI, CONF_STRING, NULL, &conf->agenturi, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_COOKIE_NAME, CONF_STRING, NULL, &conf->cookie_name, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGIN_URL_MAP, CONF_STRING_MAP, &conf->login_url_sz, &conf->login_url, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_COOKIE_SECURE, CONF_NUMBER, NULL, &conf->cookie_secure, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CMP_CASE_IGNORE, CONF_NUMBER, NULL, &conf->url_eval_case_ignore, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_POLICY_CACHE_VALID, CONF_NUMBER, NULL, &conf->policy_cache_valid, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_TOKEN_CACHE_VALID, CONF_NUMBER, NULL, &conf->token_cache_valid, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_UID_PARAM, CONF_STRING, NULL, &conf->userid_param, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_UID_PARAM_TYPE, CONF_STRING, NULL, &conf->userid_param_type, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_PROFILE_MODE, CONF_ATTR_MODE, NULL, &conf->profile_attr_fetch, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_PROFILE_MAP, CONF_STRING_MAP, &conf->profile_attr_map_sz, &conf->profile_attr_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_SESSION_MODE, CONF_ATTR_MODE, NULL, &conf->session_attr_fetch, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_SESSION_MAP, CONF_STRING_MAP, &conf->session_attr_map_sz, &conf->session_attr_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_RESPONSE_MODE, CONF_ATTR_MODE, NULL, &conf->response_attr_fetch, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_RESPONSE_MAP, CONF_STRING_MAP, &conf->response_attr_map_sz, &conf->response_attr_map, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_SSO_ONLY, CONF_NUMBER, NULL, &conf->sso_only, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ACCESS_DENIED_URL, CONF_STRING, NULL, &conf->access_denied_url, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_FQDN_CHECK_ENABLE, CONF_NUMBER, NULL, &conf->fqdn_check_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_FQDN_DEFAULT, CONF_STRING, NULL, &conf->fqdn_default, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_FQDN_MAP, CONF_STRING_MAP, &conf->fqdn_map_sz, &conf->fqdn_map, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_COOKIE_RESET_ENABLE, CONF_NUMBER, NULL, &conf->cookie_reset_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_COOKIE_RESET_MAP, CONF_STRING_MAP, &conf->cookie_reset_map_sz, &conf->cookie_reset_map, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOT_ENFORCED_URL, CONF_STRING_MAP, &conf->not_enforced_map_sz, &conf->not_enforced_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOT_ENFORCED_INVERT, CONF_NUMBER, NULL, &conf->not_enforced_invert, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOT_ENFORCED_ATTR, CONF_NUMBER, NULL, &conf->not_enforced_fetch_attr, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOT_ENFORCED_IP, CONF_STRING_MAP, &conf->not_enforced_ip_map_sz, &conf->not_enforced_ip_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_EXT_NOT_ENFORCED_URL, CONF_STRING_MAP, &conf->not_enforced_ext_map_sz, &conf->not_enforced_ext_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_NOT_ENFORCED_REGEX_ENABLE, CONF_NUMBER, NULL, &conf->not_enforced_regex_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_EXT_NOT_ENFORCED_REGEX_ENABLE, CONF_NUMBER, NULL, &conf->not_enforced_ext_regex_enable, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_ENABLE, CONF_NUMBER, NULL, &conf->pdp_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_VALID, CONF_NUMBER, NULL, &conf->pdp_cache_valid, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_COOKIE, CONF_STRING, NULL, &conf->pdp_lb_cookie, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_STICKYMODE, CONF_STRING, NULL, &conf->pdp_sess_mode, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_STICKYVALUE, CONF_STRING, NULL, &conf->pdp_sess_value, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_URI_PREFIX, CONF_STRING, NULL, &conf->pdp_uri_prefix, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CLIENT_IP_VALIDATE, CONF_NUMBER, NULL, &conf->client_ip_validate, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_COOKIE_PREFIX, CONF_STRING, NULL, &conf->cookie_prefix, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ATTR_COOKIE_MAX_AGE, CONF_NUMBER, NULL, &conf->cookie_maxage, NULL);


            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CDSSO_ENABLE, CONF_NUMBER, NULL, &conf->cdsso_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CDSSO_LOGIN, CONF_STRING_MAP, &conf->cdsso_login_map_sz, &conf->cdsso_login_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CDSSO_DOMAIN, CONF_STRING_MAP, &conf->cdsso_cookie_domain_map_sz, &conf->cdsso_cookie_domain_map, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGOUT_URL, CONF_STRING_MAP, &conf->openam_logout_map_sz, &conf->openam_logout_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_APP_LOGOUT_URL, CONF_STRING_MAP, &conf->logout_map_sz, &conf->logout_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGOUT_REDIRECT_URL, CONF_STRING, NULL, &conf->logout_redirect_url, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGOUT_COOKIE_RESET, CONF_STRING_MAP, &conf->logout_cookie_reset_map_sz, &conf->logout_cookie_reset_map, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGOUT_REGEX_ENABLE, CONF_NUMBER, NULL, &conf->logout_regex_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGOUT_URL_REGEX, CONF_STRING, NULL, &conf->logout_url_regex, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_LOGOUT_REDIRECT_DISABLE, CONF_NUMBER, NULL, &conf->logout_redirect_disable, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_POLICY_SCOPE, CONF_NUMBER, NULL, &conf->policy_scope_subtree, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_RESOLVE_CLIENT_HOST, CONF_NUMBER, NULL, &conf->resolve_client_host, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_POLICY_ENCODE_SPECIAL_CHAR, CONF_NUMBER, NULL, &conf->policy_eval_encode_chars, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_COOKIE_ENCODE_SPECIAL_CHAR, CONF_NUMBER, NULL, &conf->cookie_encode_chars, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_OVERRIDE_PROTO, CONF_NUMBER, NULL, &conf->override_protocol, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_OVERRIDE_HOST, CONF_NUMBER, NULL, &conf->override_host, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_OVERRIDE_PORT, CONF_NUMBER, NULL, &conf->override_port, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_OVERRIDE_NOTIFICATION_URL, CONF_NUMBER, NULL, &conf->override_notif_url, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_VALID, CONF_NUMBER, NULL, &conf->config_valid, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PASSWORD_REPLAY_KEY, CONF_STRING, NULL, &conf->password_replay_key, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_POLICY_CLOCK_SKEW, CONF_NUMBER, NULL, &conf->policy_clock_skew, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_GOTO_PARAM_NAME, CONF_STRING, NULL, &conf->url_redirect_param, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CACHE_CONTROL_ENABLE, CONF_NUMBER, NULL, &conf->cache_control_enable, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_USE_REDIRECT_ADVICE, CONF_NUMBER, NULL, &conf->use_redirect_for_advice, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CLIENT_IP_HEADER, CONF_STRING, NULL, &conf->client_ip_header, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CLIENT_HOSTNAME_HEADER, CONF_STRING, NULL, &conf->client_hostname_header, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_INVALID_URL, CONF_STRING, NULL, &conf->url_check_regex, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_CONDITIONAL_LOGIN_URL, CONF_STRING_MAP, &conf->cond_login_url_sz, &conf->cond_login_url, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_COOKIE_HTTP_ONLY, CONF_NUMBER, NULL, &conf->cookie_http_only, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_MULTI_VALUE_SEPARATOR, CONF_STRING, NULL, &conf->multi_attr_separator, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_IIS_LOGON_USER, CONF_NUMBER, NULL, &conf->logon_user_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_IIS_PASSWORD_HEADER, CONF_NUMBER, NULL, &conf->password_header_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_PDP_JS_REPOST, CONF_NUMBER, NULL, &conf->pdp_js_repost, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_JSON_URL, CONF_STRING_MAP, &conf->json_url_map_sz, &conf->json_url_map, NULL);

            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AUDIT_LEVEL, CONF_AUDIT_LEVEL, NULL, &conf->audit_level, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AUDIT_REMOTE_INTERVAL, CONF_NUMBER, NULL, &conf->audit_remote_interval, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AUDIT_REMOTE_FILE, CONF_STRING, NULL, &conf->audit_file_remote, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_AUDIT_DISPOSITION, CONF_STRING, NULL, &conf->audit_file_disposition, NULL);
        
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ANONYMOUS_USER_ENABLE, CONF_NUMBER, NULL, &conf->anon_remote_user_enable, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_ANONYMOUS_USER_ID, CONF_STRING, NULL, &conf->unauthenticated_user, NULL);
        
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_IGNORE_PATHINFO, CONF_NUMBER, NULL, &conf->path_info_ignore, NULL);
            parse_config_value(instance_id, line, AM_AGENTS_CONFIG_IGNORE_PATHINFO_NOT_ENFORCED, CONF_NUMBER, NULL, &conf->path_info_ignore_not_enforced, NULL);
        }
    }

    conf->ts = time(NULL);

    fclose(file);
    am_free(line);

    decrypt_agent_passwords(conf);
    update_agent_configuration_ttl(conf);
    update_agent_configuration_audit(conf);
    update_agent_configuration_normalise_map_urls(conf);
    update_agent_configuration_reorder_map_values(conf);
    
    return conf;
}
Пример #4
0
/* read the file with all the pic14 definitions and pick out the definition
 * for a processor if specified. if pic_name is NULL reads everything */
static PIC_device *
find_device (char *pic_name)
{
    FILE *pic_file;
    char pic_buf[PIC14_STRING_LEN];
    int found_processor = FALSE;
    int done = FALSE;
    char **processor_name;
    int num_processor_names = 0;
    int pic_maxram = 0;
    int pic_bankmsk = 0;
    int pic_confsiz = 0;
    int pic_program = 0;
    int pic_data = 0;
    int pic_eeprom = 0;
    int pic_io = 0;
    char *simple_pic_name;
    char *dir;
    char filename[512];
    int len = 512;
    char **pic_word;
    int num_pic_words;
    int wcount;

    pic_word = Safe_calloc (sizeof (char *), SPLIT_WORDS_MAX);
    processor_name = Safe_calloc (sizeof (char *), SPLIT_WORDS_MAX);

    /* allow abbreviations of the form "f877" - convert to "16f877" */
    simple_pic_name = sanitise_processor_name (pic_name);
    num_of_supported_PICS = 0;

    /* open the piclist file */
    /* first scan all include directories */
    pic_file = NULL;
    //fprintf (stderr, "%s: searching %s\n", __FUNCTION__, DEVICE_FILE_NAME);
    for (dir = setFirstItem (userIncDirsSet);
            !pic_file && dir;
            dir = setNextItem (userIncDirsSet))
    {
        //fprintf (stderr, "searching1 %s\n", dir);
        SNPRINTF (&filename[0], len, "%s%s", dir,
                  DIR_SEPARATOR_STRING DEVICE_FILE_NAME);
        pic_file = fopen (filename, "rt");
        if (pic_file) break;
    } // for

    for (dir = setFirstItem (includeDirsSet);
            !pic_file && dir;
            dir = setNextItem (includeDirsSet))
    {
        //fprintf (stderr, "searching2 %s\n", dir);
        SNPRINTF (&filename[0], len, "%s%s", dir,
                  DIR_SEPARATOR_STRING DEVICE_FILE_NAME);
        pic_file = fopen (filename, "rt");
        if (pic_file) break;
    } // for

    for (dir = setFirstItem (libDirsSet);
            !pic_file && dir;
            dir = setNextItem (libDirsSet))
    {
        //fprintf (stderr, "searching3 %s\n", dir);
        SNPRINTF (&filename[0], len, "%s%s", dir,
                  DIR_SEPARATOR_STRING DEVICE_FILE_NAME);
        pic_file = fopen (filename, "rt");
        if (pic_file) break;
    } // for

    for (dir = setFirstItem (libPathsSet);
            !pic_file && dir;
            dir = setNextItem (libPathsSet))
    {
        //fprintf (stderr, "searching4 %s\n", dir);
        SNPRINTF (&filename[0], len, "%s%s", dir,
                  DIR_SEPARATOR_STRING DEVICE_FILE_NAME);
        pic_file = fopen (filename, "rt");
        if (pic_file) break;
    } // for

    if (!pic_file)
    {
        SNPRINTF (&filename[0], len, "%s",
                  DATADIR LIB_DIR_SUFFIX
                  DIR_SEPARATOR_STRING "pic"
                  DIR_SEPARATOR_STRING DEVICE_FILE_NAME);
        pic_file = fopen (filename, "rt");
    } // if

    if (pic_file == NULL)
    {
        fprintf (stderr, "can't find %s\n", DEVICE_FILE_NAME);
        return NULL;
    } // if

    if (options.verbose)
        printf ("Using devices from %s.\n", filename);

    /* read line by line */
    pic_buf[sizeof (pic_buf)-1] = '\0';
    while (fgets (pic_buf, sizeof (pic_buf)-1, pic_file) != NULL && !done)
    {
        /* strip comments */
        {
            char *comment = strchr (pic_buf, '#');
            if (comment)
                *comment = 0;
        }

        /* split into fields */
        num_pic_words = split_words (pic_word, pic_buf);

        /* ignore comment / empty lines */
        if (num_pic_words > 0)
        {

            if (STRCASECMP (pic_word[0], "processor") == 0)
            {
                if (pic_name == NULL)
                {
                    int dcount;

                    /* this is the mode where we read all the processors in - store the names for now */
                    if (num_processor_names > 0)
                    {
                        /* store away all the previous processor definitions */
                        for (dcount = 1; dcount < num_processor_names; dcount++)
                        {
                            create_pic (processor_name[dcount], pic_maxram,
                                        pic_bankmsk, pic_confsiz, pic_program,
                                        pic_data, pic_eeprom, pic_io);
                        } // for
                    } // if

                    /* copy processor names */
                    num_processor_names = num_pic_words;
                    for (dcount = 1; dcount < num_processor_names; dcount++)
                    {
                        processor_name[dcount] = pic_word[dcount];
                        pic_word[dcount] = NULL;
                    } // for
                } // if
                else
                {
                    /* if we've just completed reading a processor definition stop now */
                    if (found_processor)
                        done = TRUE;
                    else
                    {
                        /* check if this processor name is a match */
                        for (wcount = 1; wcount < num_pic_words; wcount++)
                        {
                            /* skip uninteresting prefixes */
                            char *found_name = sanitise_processor_name (pic_word[wcount]);

                            if (STRCASECMP (found_name, simple_pic_name) == 0)
                                found_processor = TRUE;
                        } // for
                    } // if
                } // if
            } // if
            else
            {
                if (found_processor || pic_name == NULL)
                {
                    /* only parse a processor section if we've found the one we want */
                    if (STRCASECMP (pic_word[0], "maxram") == 0 && num_pic_words > 1)
                    {
                        pic_maxram = parse_config_value (pic_word[1]);
                        setMaxRAM (pic_maxram);
                    } // if

                    else if (STRCASECMP (pic_word[0], "bankmsk") == 0 && num_pic_words > 1)
                        pic_bankmsk = parse_config_value (pic_word[1]);

                    else if (STRCASECMP (pic_word[0], "confsiz") == 0 && num_pic_words > 1)
                        pic_confsiz = parse_config_value (pic_word[1]);

                    else if (STRCASECMP (pic_word[0], "program") == 0 && num_pic_words > 1)
                        pic_program = parse_config_value (pic_word[1]);

                    else if (STRCASECMP (pic_word[0], "data") == 0 && num_pic_words > 1)
                        pic_data = parse_config_value (pic_word[1]);

                    else if (STRCASECMP (pic_word[0], "eeprom") == 0 && num_pic_words > 1)
                        pic_eeprom = parse_config_value (pic_word[1]);

                    else if (STRCASECMP (pic_word[0], "io") == 0 && num_pic_words > 1)
                        pic_io = parse_config_value (pic_word[1]);

                    else if (STRCASECMP (pic_word[0], "regmap") == 0 && num_pic_words > 2)
                    {
                        if (found_processor)
                            register_map (num_pic_words, pic_word);
                    } // if

                    else if (STRCASECMP (pic_word[0], "memmap") == 0 && num_pic_words > 2)
                    {
                        if (found_processor)
                            ram_map (num_pic_words, pic_word);
                    } // if

                    else
                    {
                        fprintf (stderr, "WARNING: %s: bad syntax `%s'\n",
                                 DEVICE_FILE_NAME, pic_word[0]);
                    } // if
                } // if
            } // if
        } // if
    } // while

    fclose (pic_file);

    split_words (pic_word, NULL);
    free (pic_word);

    /* if we're in read-the-lot mode then create the final processor definition */
    if (pic_name == NULL)
    {
        if (num_processor_names > 0)
        {
            /* store away all the previous processor definitions */
            int dcount;

            for (dcount = 1; dcount < num_processor_names; dcount++)
            {
                create_pic (processor_name[dcount], pic_maxram, pic_bankmsk,
                            pic_confsiz, pic_program, pic_data, pic_eeprom,
                            pic_io);
            } // for
        } // if
    } // if
    else
    {
        /* in search mode */
        if (found_processor)
        {
            split_words (processor_name, NULL);
            free (processor_name);

            /* create a new pic entry */
            return create_pic (pic_name, pic_maxram, pic_bankmsk,
                               pic_confsiz, pic_program, pic_data,
                               pic_eeprom, pic_io);
        } // if
    } // if

    split_words (processor_name, NULL);
    free (processor_name);

    return NULL;
}
Пример #5
0
static void end_element(void * userData, const char * name) {
    char *v, *t, k[AM_URI_SIZE];
    am_xml_parser_ctx_t *ctx = (am_xml_parser_ctx_t *) userData;
    char *val = ctx->data;
    int len = ctx->data_sz;

    ctx->setting_value = 0;
    if (!ISVALID(ctx->data)) return;

    /* bootstrap options */

    parse_config_value(ctx, AM_AGENTS_CONFIG_LOCAL, CONF_NUMBER, NULL, &ctx->conf->local, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_POSTDATA_PRESERVE_DIR, CONF_STRING, NULL, &ctx->conf->pdp_dir, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NAMING_URL, CONF_STRING_LIST, &ctx->conf->naming_url_sz, &ctx->conf->naming_url, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_REALM, CONF_STRING, NULL, &ctx->conf->realm, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_USER, CONF_STRING, NULL, &ctx->conf->user, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PASSWORD, CONF_STRING, NULL, &ctx->conf->pass, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_KEY, CONF_STRING, NULL, &ctx->conf->key, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_DEBUG_FILE, CONF_STRING, NULL, &ctx->conf->debug_file, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_DEBUG_LEVEL, CONF_DEBUG_LEVEL, NULL, &ctx->conf->debug_level, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_DEBUG_OPT, CONF_NUMBER, NULL, &ctx->conf->debug, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_AUDIT_FILE, CONF_STRING, NULL, &ctx->conf->audit_file, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_AUDIT_LEVEL, CONF_AUDIT_LEVEL, NULL, &ctx->conf->audit_level, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_AUDIT_OPT, CONF_NUMBER, NULL, &ctx->conf->audit, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_CERT_KEY_FILE, CONF_STRING, NULL, &ctx->conf->cert_key_file, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CERT_KEY_PASSWORD, CONF_STRING, NULL, &ctx->conf->cert_key_pass, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CERT_FILE, CONF_STRING, NULL, &ctx->conf->cert_file, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CA_FILE, CONF_STRING, NULL, &ctx->conf->cert_ca_file, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CIPHERS, CONF_STRING, NULL, &ctx->conf->ciphers, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_TRUST_CERT, CONF_NUMBER, NULL, &ctx->conf->cert_trust, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_TLS_OPT, CONF_STRING, NULL, &ctx->conf->tls_opts, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_NET_TIMEOUT, CONF_NUMBER, NULL, &ctx->conf->net_timeout, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_URL_VALIDATE_LEVEL, CONF_NUMBER, NULL, &ctx->conf->valid_level, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_URL_VALIDATE_PING_INTERVAL, CONF_NUMBER, NULL, &ctx->conf->valid_ping, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_URL_VALIDATE_PING_MISS, CONF_NUMBER, NULL, &ctx->conf->valid_ping_miss, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_URL_VALIDATE_PING_OK, CONF_NUMBER, NULL, &ctx->conf->valid_ping_ok, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_URL_VALIDATE_DEFAULT_SET, CONF_NUMBER_LIST, &ctx->conf->valid_default_url_sz, &ctx->conf->valid_default_url, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_HOST_MAP, CONF_STRING_LIST, &ctx->conf->hostmap_sz, &ctx->conf->hostmap, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_RETRY_MAX, CONF_NUMBER, NULL, &ctx->conf->retry_max, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_RETRY_WAIT, CONF_NUMBER, NULL, &ctx->conf->retry_wait, val, len);
    
    parse_config_value(ctx, AM_AGENTS_CONFIG_LB_ENABLE, CONF_NUMBER, NULL, &ctx->conf->lb_enable, val, len);

    /* other options */

    if (strcmp(ctx->current_name, "com.sun.identity.agents.config.freeformproperties") != 0) {
        parse_other_options(ctx, val, len);
        am_free(ctx->data);
        ctx->data = NULL;
        ctx->data_sz = 0;
        return;
    }

    /* handler for old freeformproperties */
    v = strndup(val, len);
    if (v == NULL) {
        am_free(ctx->data);
        ctx->data = NULL;
        ctx->data_sz = 0;
        ctx->status = AM_ENOMEM;
        return;
    }
    /* make up parser's current_name to handle freeformproperties:
     * instead of a property key being supplied as an <attribute name="...">,
     * it is sent as a part of <value> element, for example:
     * <value>com.forgerock.agents.conditional.login.url[0]=signin.example.com|http...</value>
     */
    memset(&k[0], 0, sizeof (k));
    if ((t = strchr(v, '[')) != NULL) {
        memcpy(k, v, t - v);
    } else if ((t = strchr(v, '=')) != NULL) {
        memcpy(k, v, t - v);
        trim(k, ' ');
        t++; /* move past the '=' */
    }
    if (ISVALID(k) && t != NULL) {
        am_xml_parser_ctx_t f;
        size_t l = strlen(t);
        f.conf = ctx->conf;
        f.setting_value = ctx->setting_value;
        f.rgx = ctx->rgx;
        f.parser = ctx->parser;
        f.log_enable = ctx->log_enable;
        memcpy(f.current_name, k, sizeof (k));
        parse_other_options(&f, t, (int) l);
    }
    free(v);
    am_free(ctx->data);
    ctx->data = NULL;
    ctx->data_sz = 0;
}
Пример #6
0
static void parse_other_options(am_xml_parser_ctx_t *ctx, const char *val, int len) {
    parse_config_value(ctx, AM_AGENTS_CONFIG_AGENT_URI, CONF_STRING, NULL, &ctx->conf->agenturi, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_COOKIE_NAME, CONF_STRING, NULL, &ctx->conf->cookie_name, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGIN_URL_MAP, CONF_STRING_MAP, &ctx->conf->login_url_sz, &ctx->conf->login_url, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_COOKIE_SECURE, CONF_NUMBER, NULL, &ctx->conf->cookie_secure, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NOTIF_ENABLE, CONF_NUMBER, NULL, &ctx->conf->notif_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NOTIF_URL, CONF_STRING, NULL, &ctx->conf->notif_url, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CMP_CASE_IGNORE, CONF_NUMBER, NULL, &ctx->conf->url_eval_case_ignore, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_POLICY_CACHE_VALID, CONF_NUMBER, NULL, &ctx->conf->policy_cache_valid, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_TOKEN_CACHE_VALID, CONF_NUMBER, NULL, &ctx->conf->token_cache_valid, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_UID_PARAM, CONF_STRING, NULL, &ctx->conf->userid_param, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_UID_PARAM_TYPE, CONF_STRING, NULL, &ctx->conf->userid_param_type, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_PROFILE_MODE, CONF_ATTR_MODE, NULL, &ctx->conf->profile_attr_fetch, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_PROFILE_MAP, CONF_STRING_MAP, &ctx->conf->profile_attr_map_sz, &ctx->conf->profile_attr_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_SESSION_MODE, CONF_ATTR_MODE, NULL, &ctx->conf->session_attr_fetch, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_SESSION_MAP, CONF_STRING_MAP, &ctx->conf->session_attr_map_sz, &ctx->conf->session_attr_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_RESPONSE_MODE, CONF_ATTR_MODE, NULL, &ctx->conf->response_attr_fetch, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_RESPONSE_MAP, CONF_STRING_MAP, &ctx->conf->response_attr_map_sz, &ctx->conf->response_attr_map, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_SSO_ONLY, CONF_NUMBER, NULL, &ctx->conf->sso_only, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ACCESS_DENIED_URL, CONF_STRING, NULL, &ctx->conf->access_denied_url, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_FQDN_CHECK_ENABLE, CONF_NUMBER, NULL, &ctx->conf->fqdn_check_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_FQDN_DEFAULT, CONF_STRING, NULL, &ctx->conf->fqdn_default, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_FQDN_MAP, CONF_STRING_MAP, &ctx->conf->fqdn_map_sz, &ctx->conf->fqdn_map, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_COOKIE_RESET_ENABLE, CONF_NUMBER, NULL, &ctx->conf->cookie_reset_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_COOKIE_RESET_MAP, CONF_STRING_MAP, &ctx->conf->cookie_reset_map_sz, &ctx->conf->cookie_reset_map, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_NOT_ENFORCED_URL, CONF_STRING_MAP, &ctx->conf->not_enforced_map_sz, &ctx->conf->not_enforced_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NOT_ENFORCED_INVERT, CONF_NUMBER, NULL, &ctx->conf->not_enforced_invert, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NOT_ENFORCED_ATTR, CONF_NUMBER, NULL, &ctx->conf->not_enforced_fetch_attr, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NOT_ENFORCED_IP, CONF_STRING_MAP, &ctx->conf->not_enforced_ip_map_sz, &ctx->conf->not_enforced_ip_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_EXT_NOT_ENFORCED_URL, CONF_STRING_MAP, &ctx->conf->not_enforced_ext_map_sz, &ctx->conf->not_enforced_ext_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_NOT_ENFORCED_REGEX_ENABLE, CONF_NUMBER, NULL, &ctx->conf->not_enforced_regex_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_EXT_NOT_ENFORCED_REGEX_ENABLE, CONF_NUMBER, NULL, &ctx->conf->not_enforced_ext_regex_enable, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_ENABLE, CONF_NUMBER, NULL, &ctx->conf->pdp_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_VALID, CONF_NUMBER, NULL, &ctx->conf->pdp_cache_valid, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_COOKIE, CONF_STRING, NULL, &ctx->conf->pdp_lb_cookie, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_STICKYMODE, CONF_STRING, NULL, &ctx->conf->pdp_sess_mode, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_STICKYVALUE, CONF_STRING, NULL, &ctx->conf->pdp_sess_value, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_URI_PREFIX, CONF_STRING, NULL, &ctx->conf->pdp_uri_prefix, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_CLIENT_IP_VALIDATE, CONF_NUMBER, NULL, &ctx->conf->client_ip_validate, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_COOKIE_PREFIX, CONF_STRING, NULL, &ctx->conf->cookie_prefix, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_ATTR_COOKIE_MAX_AGE, CONF_NUMBER, NULL, &ctx->conf->cookie_maxage, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_CDSSO_ENABLE, CONF_NUMBER, NULL, &ctx->conf->cdsso_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CDSSO_LOGIN, CONF_STRING_MAP, &ctx->conf->cdsso_login_map_sz, &ctx->conf->cdsso_login_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CDSSO_DOMAIN, CONF_STRING_MAP, &ctx->conf->cdsso_cookie_domain_map_sz, &ctx->conf->cdsso_cookie_domain_map, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGOUT_URL, CONF_STRING_MAP, &ctx->conf->openam_logout_map_sz, &ctx->conf->openam_logout_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_APP_LOGOUT_URL, CONF_STRING_MAP, &ctx->conf->logout_map_sz, &ctx->conf->logout_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGOUT_REDIRECT_URL, CONF_STRING, NULL, &ctx->conf->logout_redirect_url, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGOUT_COOKIE_RESET, CONF_STRING_MAP, &ctx->conf->logout_cookie_reset_map_sz, &ctx->conf->logout_cookie_reset_map, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGOUT_REGEX_ENABLE, CONF_NUMBER, NULL, &ctx->conf->logout_regex_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGOUT_URL_REGEX, CONF_STRING, NULL, &ctx->conf->logout_url_regex, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_LOGOUT_REDIRECT_DISABLE, CONF_NUMBER, NULL, &ctx->conf->logout_redirect_disable, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_POLICY_SCOPE, CONF_NUMBER, NULL, &ctx->conf->policy_scope_subtree, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_RESOLVE_CLIENT_HOST, CONF_NUMBER, NULL, &ctx->conf->resolve_client_host, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_POLICY_ENCODE_SPECIAL_CHAR, CONF_NUMBER, NULL, &ctx->conf->policy_eval_encode_chars, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_COOKIE_ENCODE_SPECIAL_CHAR, CONF_NUMBER, NULL, &ctx->conf->cookie_encode_chars, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_OVERRIDE_PROTO, CONF_NUMBER, NULL, &ctx->conf->override_protocol, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_OVERRIDE_HOST, CONF_NUMBER, NULL, &ctx->conf->override_host, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_OVERRIDE_PORT, CONF_NUMBER, NULL, &ctx->conf->override_port, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_OVERRIDE_NOTIFICATION_URL, CONF_NUMBER, NULL, &ctx->conf->override_notif_url, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_VALID, CONF_NUMBER, NULL, &ctx->conf->config_valid, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_PASSWORD_REPLAY_KEY, CONF_STRING, NULL, &ctx->conf->password_replay_key, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_POLICY_CLOCK_SKEW, CONF_NUMBER, NULL, &ctx->conf->policy_clock_skew, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_GOTO_PARAM_NAME, CONF_STRING, NULL, &ctx->conf->url_redirect_param, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_CACHE_CONTROL_ENABLE, CONF_NUMBER, NULL, &ctx->conf->cache_control_enable, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_USE_REDIRECT_ADVICE, CONF_NUMBER, NULL, &ctx->conf->use_redirect_for_advice, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_CLIENT_IP_HEADER, CONF_STRING, NULL, &ctx->conf->client_ip_header, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_CLIENT_HOSTNAME_HEADER, CONF_STRING, NULL, &ctx->conf->client_hostname_header, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_INVALID_URL, CONF_STRING, NULL, &ctx->conf->url_check_regex, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_CONDITIONAL_LOGIN_URL, CONF_STRING_MAP, &ctx->conf->cond_login_url_sz, &ctx->conf->cond_login_url, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_COOKIE_HTTP_ONLY, CONF_NUMBER, NULL, &ctx->conf->cookie_http_only, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_MULTI_VALUE_SEPARATOR, CONF_STRING, NULL, &ctx->conf->multi_attr_separator, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_IIS_LOGON_USER, CONF_NUMBER, NULL, &ctx->conf->logon_user_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_IIS_PASSWORD_HEADER, CONF_NUMBER, NULL, &ctx->conf->password_header_enable, val, len);
    parse_config_value(ctx, AM_AGENTS_CONFIG_PDP_JS_REPOST, CONF_NUMBER, NULL, &ctx->conf->pdp_js_repost, val, len);

    parse_config_value(ctx, AM_AGENTS_CONFIG_JSON_URL, CONF_STRING_MAP, &ctx->conf->json_url_map_sz, &ctx->conf->json_url_map, val, len);
}