diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-03-31 05:22:42 +0300 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-03-31 05:22:42 +0300 |
| commit | 0ea4bc726cfb233f5781af2ed91eb785c8f1f9a5 (patch) | |
| tree | 93649430b30f8f69dc3b8faf65a44688a3b86e6c /src/Limiter | |
| parent | f38fe3c42ec01efe37820b0c00dd79a66c80c0de (diff) | |
| download | omnisearch-0ea4bc726cfb233f5781af2ed91eb785c8f1f9a5.tar.gz | |
fix: make check for X-Forwarded-For case insensitive in RateLimit.c
Diffstat (limited to 'src/Limiter')
| -rw-r--r-- | src/Limiter/RateLimit.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/Limiter/RateLimit.c b/src/Limiter/RateLimit.c index 3c6bbff..d6a59c9 100644 --- a/src/Limiter/RateLimit.c +++ b/src/Limiter/RateLimit.c @@ -31,6 +31,23 @@ static int is_blank_char(char c) { return c == ' ' || c == '\t' || c == '\r' || c == '\n'; } +static const char *str_case_str(const char *haystack, const char *needle) { + size_t nlen = strlen(needle); + for (; *haystack; haystack++) { + if (tolower((unsigned char)*haystack) == tolower((unsigned char)*needle)) { + size_t i; + for (i = 1; i < nlen; i++) { + if (tolower((unsigned char)haystack[i]) != + tolower((unsigned char)needle[i])) + break; + } + if (i == nlen) + return haystack; + } + } + return NULL; +} + static void trim_copy(char *dest, size_t dest_size, const char *src, size_t src_len) { while (src_len > 0 && is_blank_char(*src)) { @@ -53,7 +70,7 @@ static void trim_copy(char *dest, size_t dest_size, const char *src, } static void get_client_key(char *client_key, size_t client_key_size) { - const char *header = strstr(current_request_buffer, "X-Forwarded-For:"); + const char *header = str_case_str(current_request_buffer, "x-forwarded-for:"); if (!header) return; |
