Software /
code /
prosody
Annotate
util-src/time.c @ 13126:d043834f15d2
mod_http: Use RFC 7239 Forwarded header to find original client IP
Prefer over X-Forwarded-* since it has an actual specification.
Main practical difference is that Forwarded may carry more properties
than only the IP address since it is a structured header.
Since we parse it into an array, it is easier to do the logical thing
and iterate backwards trough proxies until an untrusted one is
encountered. Compare the handling of X-Forwarded-For.
The 'secure' field now accounts for the full chain of proxies, which
must be secure all the way to be considered secure.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 03 Jun 2023 17:10:04 +0200 |
parent | 12976:a187600ec7d6 |
rev | line source |
---|---|
9164
35807f02bdc7
util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents:
9163
diff
changeset
|
1 #ifndef _POSIX_C_SOURCE |
9680
a374905e99ff
util.time: Bump POSIX_C_SOURCE to ensure visibility of CLOCK_MONOTONIC on FreeBSD (fixes #1253)
Matthew Wild <mwild1@gmail.com>
parents:
9164
diff
changeset
|
2 #define _POSIX_C_SOURCE 200809L |
9164
35807f02bdc7
util.time: Allow for already set constant
Kim Alvefur <zash@zash.se>
parents:
9163
diff
changeset
|
3 #endif |
9162 | 4 |
5 #include <time.h> | |
6 #include <lua.h> | |
7 | |
10480
94cacf9fd0ae
util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9680
diff
changeset
|
8 static lua_Number tv2number(struct timespec *tv) { |
9162 | 9 return tv->tv_sec + tv->tv_nsec * 1e-9; |
10 } | |
11 | |
10480
94cacf9fd0ae
util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9680
diff
changeset
|
12 static int lc_time_realtime(lua_State *L) { |
9162 | 13 struct timespec t; |
14 clock_gettime(CLOCK_REALTIME, &t); | |
15 lua_pushnumber(L, tv2number(&t)); | |
16 return 1; | |
17 } | |
18 | |
10480
94cacf9fd0ae
util.*.c: Add static qualifiers everywhere
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9680
diff
changeset
|
19 static int lc_time_monotonic(lua_State *L) { |
9163 | 20 struct timespec t; |
21 clock_gettime(CLOCK_MONOTONIC, &t); | |
22 lua_pushnumber(L, tv2number(&t)); | |
23 return 1; | |
24 } | |
25 | |
12976
a187600ec7d6
util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents:
10480
diff
changeset
|
26 int luaopen_prosody_util_time(lua_State *L) { |
9162 | 27 lua_createtable(L, 0, 2); |
28 { | |
29 lua_pushcfunction(L, lc_time_realtime); | |
30 lua_setfield(L, -2, "now"); | |
9163 | 31 lua_pushcfunction(L, lc_time_monotonic); |
32 lua_setfield(L, -2, "monotonic"); | |
9162 | 33 } |
34 return 1; | |
35 } | |
12976
a187600ec7d6
util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents:
10480
diff
changeset
|
36 int luaopen_util_time(lua_State *L) { |
a187600ec7d6
util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents:
10480
diff
changeset
|
37 return luaopen_prosody_util_time(L); |
a187600ec7d6
util: Add compat for prosody module name change to C sources
Kim Alvefur <zash@zash.se>
parents:
10480
diff
changeset
|
38 } |