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); } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2218294/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android外掛化原理解析——Hook機制之Binder HookAndroidHook
- Android 外掛化原理解析——Hook機制之AMS&PMSAndroidHook
- 如何使用外掛化機制優雅的封裝你的請求hook封裝Hook
- PostgreSQL外掛SQL
- webpack外掛機制之TapableWeb
- 探尋 webpack 外掛機制Web
- 全新的android外掛機制 - DroidPluginAndroidPlugin
- webpack-外掛機制雜記Web
- PostgreSQL外掛彙總SQL
- Libco Hook 機制淺析Hook
- SOFATracer 外掛埋點機制詳解
- MyBatis(八):MyBatis外掛機制詳解MyBatis
- 以pytorch的forward hook為例探究hook機制PyTorchForwardHook
- 精盡MyBatis原始碼分析 - 外掛機制MyBatis原始碼
- PostgreSQL VFD機制SQL
- VSCode For Web 深入淺出 -- 外掛載入機制VSCodeWeb
- Activity外掛化原理第二種方案:Hook IActivityManagerHook
- Activity外掛化原理第一種方案:Hook InstrumentationHook
- jQuery的事件機制,事件物件介紹,外掛機制,多庫共存,each()jQuery事件物件
- window版postgresql安裝orafce外掛SQL
- Postgresql Contrib模組外掛總結SQL
- Taro cli流程和外掛化機制實現原理
- 從UglifyJSPlugin強制開啟css壓縮探究webpack外掛執行機制JSPluginCSSWeb
- 「前端」從UglifyJSPlugin強制開啟css壓縮探究webpack外掛執行機制前端JSPluginCSSWeb
- citusdata支援的一些postgresql的外掛SQL
- Laravel-Plugin 基於 Laravel 的外掛機制解決方案LaravelPlugin
- PostgreSQL MVCC快照機制淺析SQLMVC
- chrome擴充-chrome外掛-強制copyChrome
- 如何透過模組/外掛機制,靈活組織Laravel工程Laravel
- 如何通過模組/外掛機制,靈活組織Laravel工程Laravel
- 一種優雅的Golang的庫外掛註冊載入機制Golang
- [Android]用架構師角度看外掛化(2)-Replugin 唯一hook點Android架構PluginHook
- 【JS 逆向百例】Fiddler 外掛 Hook 實戰,某創幫登入逆向JSHook
- webpack 原始碼探索之外掛機制Web原始碼
- 【JS 逆向百例】瀏覽器外掛 Hook 實戰,亞航加密引數分析JS瀏覽器Hook加密
- PostgreSQL 併發控制機制(4):RR隔離級別,MySQL vs PostgreSQLMySql
- PostgreSQL一站式外掛推薦 -- pg_enterprise_viewsSQLView
- vscode vetur外掛取消元件屬性強制換行VSCode元件