PostgreSQL插件hook机制
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,internal_load_library postgresql-> PG_init = (PG_init_t) pg_dlsym(file_scanner->handle, "_PG_init
千家信息网最后更新 2025年01月24日PostgreSQL插件hook机制
internal_load_library postgresql-> PG_init = (PG_init_t) pg_dlsym(file_scanner->handle, "_PG_init"); if (PG_init) (*PG_init) ();internal_unload_library(const char *libname)-> PG_fini = (PG_fini_t) pg_dlsym(file_scanner->handle, "_PG_fini"); if (PG_fini) (*PG_fini) ();以ClientAuthentication_hook_type为例auth.h://声明插件使用的函数extern void ClientAuthentication(Port *port);/* Hook for plugins to get control in ClientAuthentication() */typedef void (*ClientAuthentication_hook_type) (Port *, int);extern PGDLLIMPORT ClientAuthentication_hook_type ClientAuthentication_hook;auth.c://全局变量初始化为NULL,在_PG_init函数中进行初始化赋值,如果该插件加载,则ClientAuthentication_hook为ClientAuthentication_hook_type ClientAuthentication_hook = NULL;//如果ClientAuthentication_hook被赋值则执行植入的代码InitPostgres->PerformAuthentication->ClientAuthentication-> if (ClientAuthentication_hook) (*ClientAuthentication_hook) (port, status);auth_delay.c:static ClientAuthentication_hook_type original_client_auth_hook = NULL;/* * Module Load Callback */void _PG_init(void){ /* Define custom GUC variables */ DefineCustomIntVariable("auth_delay.milliseconds", "Milliseconds to delay before reporting authentication failure", NULL, &auth_delay_milliseconds, 0, 0, INT_MAX / 1000, PGC_SIGHUP, GUC_UNIT_MS, NULL, NULL, NULL); /* Install Hooks */ original_client_auth_hook = ClientAuthentication_hook; ClientAuthentication_hook = auth_delay_checks;}/*如果卸载则调用该函数,实际上是将ClientAuthentication_hook赋回原值*/void_PG_fini(void){ ClientAuthentication_hook=original_client_auth_hook;}/**/static void auth_delay_checks(Port *port, int status){ if (original_client_auth_hook) original_client_auth_hook(port, status); if (status != STATUS_OK){ pg_usleep(1000L * auth_delay_milliseconds); }}
函数
插件
代码
全局
原值
变量
实际
实际上
机制
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
联想linux网络服务器
网络安全问题会带来人
数据库交互速度
军用软件开发企业
数据库建设时
网络安全游戏俱乐部
网络安全意识不强的整改成效
游戏软件开发专业简介
徐东服务器托管
网络安全招聘恩施
软件开发招标资格要求
网络数据库资源有哪些PPT
征途 服务器查询
湖南网络技术学院什么时候开学
山西三盛网络技术有限公司
服务器变化是革命还是改良
荣耀终端应届硕士软件开发薪资
网络安全主要危害
数据库概论王珊下载
企业管理软件开发哪家收费合理
非关系型数据库软件
CT三维投影软件开发公司
服务器电源1个和2个有什么区别
网络安全工程大盗
网络技术市盈率是多少
怎么样能把软件开发干一辈子
实况球员数据库巴乔
html数据库有什么需要
甲骨文数据库无法启动
数据库默认值空和null对比