Hi,

I'm working on a SQL parser for a module, mod_ndb.

The parser works fine in Apache 1.3 -- in httpd.conf I have stuff like this:

<Location /ndb/table1>
  DefaultType text/plain
  SELECT a,b,c from table1
   WHERE blah blah blah;
</LOCATION>

"SELECT" is treated like a container config, with the ";" as the end- container. I use ap_cfg_getc() to read the whole query into a buffer (up to the ";") and then pass it to a real recursive-descent parser. The SQL query applies to a particular location, so it belongs in ACCESS_CONF.

But in apache 2, I can't win. If I don't set EXEC_ON_READ, ap_cfg_getc() segfaults because cmd->config_file is null. If I *do* set the cmd->req_override = ACCESS_CONF | EXEC_ON_READ, then ap_cfg_getc() works, but things segfault later because the directory config context, which I need, contains some garbage.

I'll take any solution I can get to let me process the buffer. But it seems that EXEC_ON_READ has an intended purpose -- for directives like "IfModule" and "ErrorLog" that really need to be processed on the first config pass. And clearly, I do not need this, so by this definition I should not set EXEC_ON_READ. But then EXEC_ON_READ also has taken on an "idiomatic" purpose simply because you *must* set it in order to get access to ap_cfg_getline(), ap_cfg_getc(), etc. And that seems like a bug.

JD

Reply via email to