/* * match version against a regular expression */ static int match_version(apr_pool_t *pool, char *version_string, const char **error) { regex_t *compiled; const char *to_match; int rc; compiled = ap_pregcomp(pool, version_string, REG_EXTENDED); if (!compiled) { *error = "Unable to compile regular expression"; return 0; } *error = NULL; to_match = apr_psprintf(pool, "%d.%d.%d%s", httpd_version.major, httpd_version.minor, httpd_version.patch, httpd_version.add_string); rc = !ap_regexec(compiled, to_match, 0, NULL, 0); ap_pregfree(pool, compiled); return rc; }
extern apr_status_t check_regular_expression(request_rec *r, char *haystack, char *needle) { ap_regex_t *regexp = (ap_regex_t *)NULL; ap_regmatch_t regmatch[AP_MAX_REG_MATCH]; // Validation Check if (haystack == (char *)NULL) { return DECLINED; } if (needle == (char *)NULL) { return DECLINED; } if (strlen(haystack) > 0) { regexp = (ap_regex_t *)ap_pregcomp(r->pool, (const char *)haystack, REG_EXTENDED|REG_ICASE); if (regexp != (ap_regex_t *)NULL && ap_regexec(regexp, (const char*)needle, regexp->re_nsub + 1, regmatch, 0) == 0) { ap_pregfree(r->pool, regexp); return APR_SUCCESS; } ap_pregfree(r->pool, regexp); } return DECLINED; }
static apr_status_t parse_request_uri(request_rec *r, char **uri, char **size) { int nmatch = 10; ap_regmatch_t match[nmatch]; ap_regex_t *reg; reg = ap_pregcomp(r->pool, "^/(original|large|medium|small)/(.*)$", AP_REG_EXTENDED); if (ap_regexec(reg, r->unparsed_uri, nmatch, match, 0) == 0) { *size = ap_pregsub(r->pool, "$1", r->unparsed_uri, nmatch, match); *uri = ap_pregsub(r->pool, "$2", r->unparsed_uri, nmatch, match); ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, "Parse URI: %s, %s", *size, *uri); ap_pregfree(r->pool, reg); return APR_SUCCESS; } else { return APR_EGENERAL; } }