我需要修改https://github.com/postgres/postgres/blob/REL9_5_13/contrib/passwordcheck/passwordcheck.c以便在设置密码之前检查密码。
我对C不是很在行。
所以我加了张支票:
if (validuntil_null)
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("password expiriration missing")));
它工作,它检查是否设置了到期日期。
现在我想检查这个到期日期是否合理,比如不超过3个月(使用“validuntil_time”),以及它是否与之前的设置不同。
知道吗?
提前谢谢。
最佳答案
我不熟悉PostgreSQL的内部结构或PostgreSQL的配置我的第一个方法是研究文档,以确定是否可以使用管理员权限设置最大密码过期时间。我猜你已经详细研究过了,觉得这是最好的选择。
基于此,我回顾了Postgres github存储库中的一些时间戳代码我还没有整理,但相信这是接近的我不清楚数据是什么,是否已经是TimeStampTz类型,或者是否需要以某种方式转换如果不回答这个问题,它可能无法正确编译如果这对你有用,请告诉我:
在文件顶部,将此添加到包含:
#include "utils/timestamp.h"
稍后,在放置当前代码的同一位置,将代码替换为:
if (validuntil_null) {
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("password expiriration missing")));
} else {
TimestampTz now = GetCurrentTimestamp();
const int ThreeMonthsInMiliSeconds = 90 * 24 * 3600 * 1000;
if(TimestampDifferenceExceeds(now, validuntil_time, ThreeMonthsInMiliSeconds) {
ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("password expiriration time is greater than 90 days")));
}
}
下面是timestamp.c中时间差函数的源代码:
/*
* TimestampDifferenceExceeds -- report whether the difference between two
* timestamps is >= a threshold (expressed in milliseconds)
*
* Both inputs must be ordinary finite timestamps (in current usage,
* they'll be results from GetCurrentTimestamp()).
*/
bool
TimestampDifferenceExceeds(TimestampTz start_time,
TimestampTz stop_time,
int msec)
{
TimestampTz diff = stop_time - start_time;
return (diff >= msec * INT64CONST(1000));
}
关于c - PostgreSQL passwordcheck.c修改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53060430/