On Fri, Dec 5, 2014 at 11:01 AM, Jan Kaluža <jkal...@redhat.com> wrote:
> On 12/05/2014 02:26 PM, Eric Covener wrote:
>>
>> On Thu, Nov 27, 2014 at 8:46 AM,  <jkal...@apache.org> wrote:
>>>
>>> * ap_exr: Add replace(string, from, to) function.
>>
>>
>> Is it possible to evaluate this from ap_expr_str_exec()?
>
>
> Hm, it worked for me like this:
>
> Require expr replace(%{REQUEST_METHOD},  "E", "O") == "GOT"

I think this uses ap_expr_exec / aka boolean result:

static authz_status expr_check_authorization(request_rec *r,
                                             const char *require_line,
                                             const void *parsed_require_line)
{
    const char *err = NULL;
    const struct require_expr_info *info = parsed_require_line;
    int rc = ap_expr_exec(r, info->expr, &err);

    if (rc < 0) {
        ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02320)
                      "Error evaluating expression in 'Require expr': %s",
                      err);
        return AUTHZ_GENERAL_ERROR;
    }
    else if (rc == 0) {
        if (info->want_user)
            return AUTHZ_DENIED_NO_USER;
        else
            return AUTHZ_DENIED;
    }
    else {
        return AUTHZ_GRANTED;
    }
}

>
> This internally uses ap_expr_str_exec().
>
>> I am stuck on trying to get it to work. I think we cannot get to
>> multi-valued
>> functions from  the %{func:arg} syntax used when starting at string.
>
>
> I think I'm lost here. Checking for ap_expr documentation, I don't see this
> syntax. Can you describe this more. I'm sorry, but was checking ap_expr for
> first time while doing this patch, so there might be things I overlooked.

I think it is the first function of its kind so it may not be easy.

When you actually want a string as the net result of an expression,
you start at "string" in ap_expr doc.

string      ::= stringpart
              | string stringpart

stringpart  ::= cstring
              | variable
              | rebackref

variable    ::= "%{" varname "}"
              | "%{" funcname ":" funcargs "}"

Full disclosure -- I don't understand this stuff so well, but I have
been learning on the job trying to make a dent in documenting some
different flavors of expressions in at least <if> and header set Foo
expr= so there is a starting point.

Reply via email to