File

util-src/time.c @ 13843:87dd8639f08f 13.0

mod_invites_register: Stricter validation of registration events This fixes two problems: 1) Account invites that were created with a specific username were not in fact restricted to that username. 2) Password reset invites were not restricted to resetting passwords, but could be used to create an arbitrary new account if the client or registration frontend (e.g. mod_invites_register_web) doesn't handle/enforce the username. This new validation ensures that registrations and resets are always for the username specified in the invitation.
author Matthew Wild <mwild1@gmail.com>
date Thu, 10 Apr 2025 16:07:32 +0100
parent 12976:a187600ec7d6
line wrap: on
line source

#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
#endif

#include <time.h>
#include <lua.h>

static lua_Number tv2number(struct timespec *tv) {
	return tv->tv_sec + tv->tv_nsec * 1e-9;
}

static int lc_time_realtime(lua_State *L) {
	struct timespec t;
	clock_gettime(CLOCK_REALTIME, &t);
	lua_pushnumber(L, tv2number(&t));
	return 1;
}

static int lc_time_monotonic(lua_State *L) {
	struct timespec t;
	clock_gettime(CLOCK_MONOTONIC, &t);
	lua_pushnumber(L, tv2number(&t));
	return 1;
}

int luaopen_prosody_util_time(lua_State *L) {
	lua_createtable(L, 0, 2);
	{
		lua_pushcfunction(L, lc_time_realtime);
		lua_setfield(L, -2, "now");
		lua_pushcfunction(L, lc_time_monotonic);
		lua_setfield(L, -2, "monotonic");
	}
	return 1;
}
int luaopen_util_time(lua_State *L) {
	return luaopen_prosody_util_time(L);
}