mirror of
https://github.com/owasp-modsecurity/ModSecurity.git
synced 2025-09-29 19:24:29 +03:00
Added missing functions to make non-Apache versions compile with Apache 2.4.
This commit is contained in:
@@ -212,6 +212,123 @@ AP_DECLARE(int) ap_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp)
|
||||
}
|
||||
}
|
||||
#else
|
||||
static apr_status_t ap_cfg_getline_core(char *buf, apr_size_t bufsize,
|
||||
ap_configfile_t *cfp)
|
||||
{
|
||||
apr_status_t rc;
|
||||
/* If a "get string" function is defined, use it */
|
||||
if (cfp->getstr != NULL) {
|
||||
char *cp;
|
||||
char *cbuf = buf;
|
||||
apr_size_t cbufsize = bufsize;
|
||||
|
||||
while (1) {
|
||||
++cfp->line_number;
|
||||
rc = cfp->getstr(cbuf, cbufsize, cfp->param);
|
||||
if (rc == APR_EOF) {
|
||||
if (cbuf != buf) {
|
||||
*cbuf = '\0';
|
||||
break;
|
||||
}
|
||||
else {
|
||||
return APR_EOF;
|
||||
}
|
||||
}
|
||||
if (rc != APR_SUCCESS) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* check for line continuation,
|
||||
* i.e. match [^\\]\\[\r]\n only
|
||||
*/
|
||||
cp = cbuf;
|
||||
cp += strlen(cp);
|
||||
if (cp > cbuf && cp[-1] == LF) {
|
||||
cp--;
|
||||
if (cp > cbuf && cp[-1] == CR)
|
||||
cp--;
|
||||
if (cp > cbuf && cp[-1] == '\\') {
|
||||
cp--;
|
||||
/*
|
||||
* line continuation requested -
|
||||
* then remove backslash and continue
|
||||
*/
|
||||
cbufsize -= (cp-cbuf);
|
||||
cbuf = cp;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (cp - buf >= bufsize - 1) {
|
||||
return APR_ENOSPC;
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* No "get string" function defined; read character by character */
|
||||
apr_size_t i = 0;
|
||||
|
||||
if (bufsize < 2) {
|
||||
/* too small, assume caller is crazy */
|
||||
return APR_EINVAL;
|
||||
}
|
||||
buf[0] = '\0';
|
||||
|
||||
while (1) {
|
||||
char c;
|
||||
rc = cfp->getch(&c, cfp->param);
|
||||
if (rc == APR_EOF) {
|
||||
if (i > 0)
|
||||
break;
|
||||
else
|
||||
return APR_EOF;
|
||||
}
|
||||
if (rc != APR_SUCCESS)
|
||||
return rc;
|
||||
if (c == LF) {
|
||||
++cfp->line_number;
|
||||
/* check for line continuation */
|
||||
if (i > 0 && buf[i-1] == '\\') {
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (i >= bufsize - 2) {
|
||||
return APR_ENOSPC;
|
||||
}
|
||||
buf[i] = c;
|
||||
++i;
|
||||
}
|
||||
buf[i] = '\0';
|
||||
}
|
||||
return APR_SUCCESS;
|
||||
}
|
||||
|
||||
static int cfg_trim_line(char *buf)
|
||||
{
|
||||
char *start, *end;
|
||||
/*
|
||||
* Leading and trailing white space is eliminated completely
|
||||
*/
|
||||
start = buf;
|
||||
while (apr_isspace(*start))
|
||||
++start;
|
||||
/* blast trailing whitespace */
|
||||
end = &start[strlen(start)];
|
||||
while (--end >= start && apr_isspace(*end))
|
||||
*end = '\0';
|
||||
/* Zap leading whitespace by shifting */
|
||||
if (start != buf)
|
||||
memmove(buf, start, end - start + 2);
|
||||
#ifdef DEBUG_CFG_LINES
|
||||
ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL, APLOGNO(00555) "Read config: '%s'", buf);
|
||||
#endif
|
||||
return end - start + 1;
|
||||
}
|
||||
|
||||
AP_DECLARE(apr_status_t) ap_cfg_getline(char *buf, apr_size_t bufsize,
|
||||
ap_configfile_t *cfp)
|
||||
{
|
||||
|
Reference in New Issue
Block a user