mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-07 02:10:27 +00:00
Update ParseForwarded to use strrchr
This commit is contained in:
parent
8cb44277b0
commit
4c75fa363d
3 changed files with 13 additions and 11 deletions
|
@ -38,17 +38,14 @@
|
|||
int ParseForwarded(const char *s, size_t n, uint32_t *ip, uint16_t *port) {
|
||||
int c, t;
|
||||
size_t i;
|
||||
char *r;
|
||||
uint32_t x;
|
||||
if (n == -1) n = s ? strlen(s) : 0;
|
||||
if (n) {
|
||||
t = x = 0;
|
||||
i = n;
|
||||
while (i > 0) {
|
||||
if (s[--i] & 255 == ',') {
|
||||
// skip optional space
|
||||
if (s[++i] & 255 == ' ') ++i;
|
||||
break; // i points to the start of the address
|
||||
}
|
||||
t = x = i = 0;
|
||||
if ((r = strrchr(s, ','))) {
|
||||
i = r - s;
|
||||
if ((s[++i] & 255) == ' ') ++i; // skip optional space
|
||||
}
|
||||
do {
|
||||
c = s[i++] & 255;
|
||||
|
|
|
@ -574,7 +574,8 @@ FUNCTIONS
|
|||
Returns client ip4 address and port, e.g. 0x01020304,31337 would
|
||||
represent 1.2.3.4:31337. This is the same as GetClientAddr except
|
||||
it will use the ip:port from the X-Forwarded-For header, only if
|
||||
IsPrivateIp or IsLoopbackIp return true.
|
||||
IsPrivateIp or IsLoopbackIp return true. When multiple addresses
|
||||
are present in the header, the last/right-most address is used.
|
||||
|
||||
GetClientAddr() → ip:uint32,port:uint16
|
||||
Returns client socket ip4 address and port, e.g. 0x01020304,31337
|
||||
|
|
|
@ -818,8 +818,12 @@ static inline void GetRemoteAddr(uint32_t *ip, uint16_t *port) {
|
|||
GetClientAddr(ip, port);
|
||||
if (HasHeader(kHttpXForwardedFor) &&
|
||||
(IsPrivateIp(*ip) || IsLoopbackIp(*ip))) {
|
||||
ParseForwarded(HeaderData(kHttpXForwardedFor),
|
||||
HeaderLength(kHttpXForwardedFor), ip, port);
|
||||
if (ParseForwarded(HeaderData(kHttpXForwardedFor),
|
||||
HeaderLength(kHttpXForwardedFor),
|
||||
ip, port) == -1)
|
||||
WARNF("invalid X-Forwarded-For value: %`'.*s",
|
||||
HeaderLength(kHttpXForwardedFor),
|
||||
HeaderData(kHttpXForwardedFor));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue