Ejemplo n.º 1
0
static PRStatus resolve_config_var(const VirtualServer* vs, const char* name, NSString& buffer, int depth, const char** ancestors)
{
    for (int i = 0; i < depth; i++) {
        if (!strcmp(ancestors[i], name)) {
            NsprError::setErrorf(PR_INVALID_ARGUMENT_ERROR, XP_GetAdminStr(DBT_varLoopFromXToY), ancestors[depth - 1], name);
            return PR_FAILURE;
        }
    }

    const char* value = vs_lookup_config_var(vs, name);
    if (!value) {
        NsprError::setErrorf(PR_INVALID_ARGUMENT_ERROR, XP_GetAdminStr(DBT_undefinedVarX), name);
        return PR_FAILURE;
    }

    if (depth >= MAX_RESOLVE_DEPTH) {
        NsprError::setErrorf(PR_INVALID_ARGUMENT_ERROR, XP_GetAdminStr(DBT_maxVarDepthX), MAX_RESOLVE_DEPTH);
        return PR_FAILURE;
    }

    ancestors[depth] = name;

    depth++;

    return string_substitute(vs, value, buffer, depth, ancestors);
}
Ejemplo n.º 2
0
NSAPI_PUBLIC char* vs_substitute_vars(const VirtualServer* vs, const char* string)
{
    if (!vs || !string)
        return NULL;

    NSString buffer;
    const char* ancestors[MAX_RESOLVE_DEPTH];
    if (string_substitute(vs, string, buffer, 0, ancestors) == PR_FAILURE)
        return NULL;

    return STRDUP(buffer);
}
Ejemplo n.º 3
0
const char *
mfn_subst(MFUNARGS)
{
    return string_substitute(argv[0], argv[1], argv[2], buf, BUFFER_LEN);
}