postgresql密码加强-passwordcheck源码修改三种以上字符

目录

  • 1.使用方式
  • 2.效果
  • 3.源码修改
    • 1.参考pg_cron的源码在配置文件内增加一个参数
    • 2.修改源码配置校验数字

因数据库入网检测须修改密码级别,在源有的passwordcheck插件上进行二次修改

1.使用方式

  • 替换目录 ../postgresql-11.4/contrib/passwordcheck 下的 passwordcheck.c
  • 编译安装 make && make install
  • postgresql配置文件内修改 (postgresql.conf)
  • shared_preload_libraries = ‘passwordcheck‘
  • passwordcheck.level = ‘true‘

2.效果

当密码长度足够,不符合规则的时候,无法新建用户

3.源码修改

https://github.com/Luckyness/passwordcheck

1.参考pg_cron的源码在配置文件内增加一个参数

/* 引入扩展 */
#include "utils/guc.h"
……
……
/*
* 配置文件内passwordcheck.level='true' 为需要特殊字符
* passwordcheck.level='false' 为只需要英文和数字
*/
static  bool passwordcheck_level =  false;
……
……
void
_PG_init(void)
{
    /* 定义密码级别参数 */
    DefineCustomBoolVariable(
        "passwordcheck.level",
        gettext_noop("passwordcheck_level true: Password must contain leter, number, special characters;false : Password must contain leter, special characters"),
        NULL,
        &passwordcheck_level,
        false,
        PGC_POSTMASTER,
        GUC_SUPERUSER_ONLY,
        NULL, NULL, NULL);

    /* activate password checks when the module is loaded */
    check_password_hook = check_password;
}

2.修改源码配置校验数字

        if(passwordcheck_level)
        {
            /* check if the password contains both letters and number and specialchar */
            pwd_has_number =  false;
            pwd_has_special =  false;
            pwd_has_letter =  false;
            for (i =  0; i < pwdlen; i++)
            {
                if (isalpha((unsigned  char) password[i]))
                    pwd_has_letter =  true;
                else  if (isdigit((unsigned  char) password[i]))
                    pwd_has_number =  true;
                else
                    pwd_has_special =  true;
            }
            if (!pwd_has_number ||  !pwd_has_letter ||  !pwd_has_special)
                ereport(ERROR,
                        (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
                        errmsg("password must contain both letters and number and specialchar")));
        }
        else
        {
            /* check if the password contains both letters and non-letters */
            pwd_has_letter =  false;
            pwd_has_number =  false;
            for (i =  0; i < pwdlen; i++)
            {
                if (isalpha((unsigned  char) password[i]))
                    pwd_has_letter =  true;
                else
                    pwd_has_number =  true;
            }
            if (!pwd_has_letter ||  !pwd_has_number)
                ereport(ERROR,
                        (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
                        errmsg("password must contain both letters and nonletters")));
        }

原文地址:https://www.cnblogs.com/Luckyness/p/11996834.html

时间: 2024-10-13 08:23:25

postgresql密码加强-passwordcheck源码修改三种以上字符的相关文章

执行LS源码的三种方法

方法一:使用 eval() eval()函数常用来计算表达式,将表达式转换成一个变量名或者对象名,然后使用它访问变量或者对象. LS中的数据都是以字符串的形式存储.当获取到字符串 data时(json数据转换成的字符串), storage = eval("("+data+")");//这样得到的数据就是json串. 备注:在json转换成本地存储的时候,需要将json串转换一下:JSON.stringify(data),这样得到的就是json串.. 方法二:使用ne

python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改

python的paramiko源码修改了一下,写了个操作命令的日志审计,但是记录的日志中也将backspace删除键记录成^H这个了,于是改了一下代码,用字符串的特性. 字符串具有列表的特性 >>> a="hello world" >>> a[:-1] 'hello worl' 转义符 转义字符 \(在行尾时) 续行符 \\ 反斜杠符号 \' 单引号 \" 双引号 \a 响铃 \b 退格(Backspace) \e 转义 \000 空 \n

redis源码修改之zincrby,hincrby命令

在项目中大量使用zincrby命令,原因就是要统计日志中某个指标的计数值,且需要按顺序返回topn. 正常来说,一个指标调用一次zincrby(zincrby default:type 1 typeA) 就可以正常工作. 实际情况是由于日志生成的太快,redis cpu利用率经常100%,而且还丢数据. 是否可以一次性增加多次指标的累计值,比如zincrby default:type 1 typeA 1 typeB 1 typeC ...,这样将多次通信压缩到一次通信中,肯定能提高处理能力. 无

baksmali和smali源码分析(三)

baksmali 的源码分析 在baksmali进行源码分析之前,需要读者掌握一条主线,因为本身笔者只是由于项目需要用到这套源码,在工作之余的时间里面来进行学习也没有时间和精力熟读源码的每个文件每个方法,但是依据这条主线,至少能够猜出并且猜对baksmali里面的源码的文件大概的作用是什么,这样在修改问题和移植的时候才能做到游刃有余. 这条主线是,baksmali其实只是利用了dexlib2提供的接口,将dex文件读入到一块内存中,这块内存或者说数据结构开辟的大小是跟输入的dex文件相关的,而这

带密码登录的密码保险箱应用源码

带密码登录的密码保险箱应用源码,本项目是一个基于安卓的密码管理项目源码,主要涉及的还是SQLite的使用,功能很简单,就是密码的增删改查,还有列表显示,源码没有分层,代码质量也一般,应该是新手或者学生作品,第一次登录的默认密码是admin,可以修改成想要的密码,项目编译版本2.3.3默认编码GBK源码有注释. <ignore_js_op> 运行截图 <ignore_js_op> security <ignore_js_op> 关键字搜索输入框 <ignore_js

[源码]一键获取windows系统登陆密码vc6版源码

[源码]一键获取windows系统登陆密码vc6版源码支持:XP/2000/2003/WIN7/2008等 此版本编译出来的程序体积较小几十KB... 而vs版则1点几M,体积整整大了2-30倍对某些奇葩环境...1点几M可能要分几十次传过去 总是在关键的时候,发现自己以前弄过的东西突然不见了然后百度好不容易找到了一份..还是发到博客来 收藏需要修改输出TXT的或免杀啥的...上自己博客找源码 #include <windows.h>#include <stdio.h> // //

Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮

前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP)/动态显示和隐藏NavigationBar 在某些特殊定制的版本中要求完全去掉导航栏,那么当用户点进一些系统自带的应用界面如设置.联系人等,就没法退出了,虽然可以在actionBar中添加back按钮,但总不能每一个app都去添加吧.所以灵机一动我们就给系统添加一个全屏可拖拽的浮窗按钮,点击的时候处理返回键的逻辑.它大概长这样(审美可能丑了点,你们可以自由发挥) 图1

Nouveau源码分析(三):NVIDIA设备初始化之nouveau_drm_probe

Nouveau源码分析(三) 向DRM注册了Nouveau驱动之后,内核中的PCI模块就会扫描所有没有对应驱动的设备,然后和nouveau_drm_pci_table对照. 对于匹配的设备,PCI模块就调用对应的probe函数,也就是nouveau_drm_probe. // /drivers/gpu/drm/nouveau/nouveau_drm.c 281 static int nouveau_drm_probe(struct pci_dev *pdev, 282 const struct

[Android]Fragment源码分析(三) 事务

Fragment管理中,不得不谈到的就是它的事务管理,它的事务管理写的非常的出彩.我们先引入一个简单常用的Fragment事务管理代码片段: FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction(); ft.add(R.id.fragmentContainer, fragment, "tag"); ft.addToBackStack("<span style="fo