{"kind": "hook", "major": "18", "item": {"slug": "openssl_tls_init_hook", "name": "openssl_tls_init_hook", "name_zh": "openssl_tls_init_hook", "category": "Authentication and connections", "summary": "Call init hook (usually to set password callback)", "aliases": [], "versions": {"13": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_13_STABLE", "label": "13", "major": "13", "channel": "historical", "revision": "05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/include/libpq/libpq-be.h#L293", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "79267bb3363037d70410e0f595211f4da3918ea92bdfe34ae9f7a015d1762cc0"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/libpq/be-secure-openssl.c#L50", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "4965fce722f893397fc7ffe3bb3814569dd7056b789246b0d3c975a30f5f3161"}, {"url": "https://github.com/postgres/postgres/blob/05f6c9ec2c475fae8fdd56ae40bd01afcf70d1f2/src/backend/libpq/be-secure-openssl.c#L129", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "4965fce722f893397fc7ffe3bb3814569dd7056b789246b0d3c975a30f5f3161"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:129"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:123\u2013137", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "14": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_14_STABLE", "label": "14", "major": "14", "channel": "stable", "revision": "fba35c7c28a567839faba867db0808564c0a66db"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/include/libpq/libpq-be.h#L311", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "7879d08ca8eaf5045b82e2b8236e1d77f38f6ad16bcd4bc8dc3d5ef6e92c8c09"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/libpq/be-secure-openssl.c#L50", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "e91f7cade802e2f5826d90336d8de1601341abbe1b9be6b75ead06ff437722ba"}, {"url": "https://github.com/postgres/postgres/blob/fba35c7c28a567839faba867db0808564c0a66db/src/backend/libpq/be-secure-openssl.c#L129", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "e91f7cade802e2f5826d90336d8de1601341abbe1b9be6b75ead06ff437722ba"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:129"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:123\u2013137", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "15": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_15_STABLE", "label": "15", "major": "15", "channel": "stable", "revision": "0351991b8e7c7b64382e2f30ce581a8f276590a6"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/include/libpq/libpq-be.h#L310", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "4c5ca3dc4b4b058af1d67a9a22a76171c4b4a13938b7ed00c418f53a81b7e4f9"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/libpq/be-secure-openssl.c#L57", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "e64233e571eb95cabc65b7e143358743668df4b8812ffaa3add3016edf5eab82"}, {"url": "https://github.com/postgres/postgres/blob/0351991b8e7c7b64382e2f30ce581a8f276590a6/src/backend/libpq/be-secure-openssl.c#L136", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "e64233e571eb95cabc65b7e143358743668df4b8812ffaa3add3016edf5eab82"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:136"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:130\u2013144", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "16": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_16_STABLE", "label": "16", "major": "16", "channel": "stable", "revision": "dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/include/libpq/libpq-be.h#L319", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "29b74059bb0439d8cef77b7cf6b61760084649fd1bb585c55ccd2d7b553b710b"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/libpq/be-secure-openssl.c#L57", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "aff351b26a88ac9a39920cee063b4b337cf1a898d7cd3f44c734c5ae2b7ca47a"}, {"url": "https://github.com/postgres/postgres/blob/dcc37b7099a9f3cf2c75167d8dc92e75f96bc1fa/src/backend/libpq/be-secure-openssl.c#L139", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "aff351b26a88ac9a39920cee063b4b337cf1a898d7cd3f44c734c5ae2b7ca47a"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:139"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:133\u2013147", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "17": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_17_STABLE", "label": "17", "major": "17", "channel": "stable", "revision": "163288afd32a448244c8df75b3c33181aadd7f20"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/include/libpq/libpq-be.h#L326", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "efa84547718a4027a4f8d786fc3dae0b090feda9f489b18b61b4ebae4e8e1fb4"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/libpq/be-secure-openssl.c#L57", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "f4cc17235758b4a81811c34b916858c0e69344992f308e285573fa4e912bfe7c"}, {"url": "https://github.com/postgres/postgres/blob/163288afd32a448244c8df75b3c33181aadd7f20/src/backend/libpq/be-secure-openssl.c#L145", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "f4cc17235758b4a81811c34b916858c0e69344992f308e285573fa4e912bfe7c"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:145"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:139\u2013153", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "18": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/libpq/libpq-be.h#L335", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "1588b2cfe9ea1f737055880b8d09667feb59d918ab16dfeb855b0eae996596db"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/libpq/be-secure-openssl.c#L57", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "68195987503c2b0c32048559352fa8e7e7265cdd047777941eb8fefae98fb4f7"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/libpq/be-secure-openssl.c#L132", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "68195987503c2b0c32048559352fa8e7e7265cdd047777941eb8fefae98fb4f7"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:132"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:126\u2013140", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "19": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_19_BETA4", "label": "19 Beta 4", "major": "19", "channel": "preview", "revision": "b73d13c32c834a2c8e1c60cb92f79530376cedf1"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/include/libpq/libpq-be.h#L335", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "545d2f582f009763d2a5c31618e54d4bfd40018d5ee4f5f41716f897ab43c1d6"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/libpq/be-secure-openssl.c#L78", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "c189b9b2ae40c72866e4da45ec09a6273ba4f3921be4fb6d3e3a94382d6203c7"}, {"url": "https://github.com/postgres/postgres/blob/b73d13c32c834a2c8e1c60cb92f79530376cedf1/src/backend/libpq/be-secure-openssl.c#L634", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "c189b9b2ae40c72866e4da45ec09a6273ba4f3921be4fb6d3e3a94382d6203c7"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:634"]}, {"code": "\t * TLS context used so it cannot function properly; we warn if one has\n\t * been installed.\n\t *\n\t * If SNI is enabled, we set password callback based what was configured.\n\t */\n\tif (!ssl_sni)\n\t\t(*openssl_tls_init_hook) (ctx, isServerStart);\n\telse\n\t{\n\t\tif (openssl_tls_init_hook != default_openssl_tls_init && !init_warned)\n\t\t{\n\t\t\tereport(WARNING,\n\t\t\t\t\terrcode(ERRCODE_CONFIG_FILE_ERROR),\n\t\t\t\t\terrmsg(\"SNI is enabled; installed TLS init hook will be ignored\"),\n\t\t\t/*- translator: first %s is a GUC, second %s contains a filename */", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:628\u2013642", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["openssl_tls_init_hook: core extension hook declared in src/include/libpq/libpq-be.h. The exact interface and call sites are recorded below."]}, "20": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "master", "label": "20 devel", "major": "20", "channel": "devel", "revision": "2c10c2ce4d7bcd57543a49ab402af02a39724e0a"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/include/libpq/libpq-be.h#L335", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "545d2f582f009763d2a5c31618e54d4bfd40018d5ee4f5f41716f897ab43c1d6"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/libpq/be-secure-openssl.c#L78", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "7fed824adeabf2abd3773c13ef5eaa8c76b09123efbd318b7c592f1319245584"}, {"url": "https://github.com/postgres/postgres/blob/2c10c2ce4d7bcd57543a49ab402af02a39724e0a/src/backend/libpq/be-secure-openssl.c#L644", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "7fed824adeabf2abd3773c13ef5eaa8c76b09123efbd318b7c592f1319245584"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:644"]}, {"code": "\t * TLS context used so it cannot function properly; we warn if one has\n\t * been installed.\n\t *\n\t * If SNI is enabled, we set password callback based what was configured.\n\t */\n\tif (!ssl_sni)\n\t\t(*openssl_tls_init_hook) (ctx, isServerStart);\n\telse\n\t{\n\t\tif (openssl_tls_init_hook != default_openssl_tls_init && !*hasWarned)\n\t\t{\n\t\t\tereport(WARNING,\n\t\t\t\t\terrcode(ERRCODE_CONFIG_FILE_ERROR),\n\t\t\t\t\terrmsg(\"SNI is enabled; installed TLS init hook will be ignored\"),\n\t\t\t/*- translator: first %s is a GUC, second %s contains a filename */", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:638\u2013652", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["openssl_tls_init_hook: core extension hook declared in src/include/libpq/libpq-be.h. The exact interface and call sites are recorded below."]}}, "content_hash": "61b2e6517ab7c91122da207af487a933a710cef5d167514d87702a65fec3500f", "imported_at": "2026-09-27T09:57:58.830"}, "snapshot": {"facts": [{"label": "Interface type", "value": "openssl_tls_init_hook_typ"}, {"label": "Header", "value": "src/include/libpq/libpq-be.h"}, {"label": "Subsystem", "value": "Authentication and connections"}, {"label": "Initial value", "value": "default_openssl_tls_init"}], "related": [], "release": {"ref": "REL_18_STABLE", "label": "18", "major": "18", "channel": "stable", "revision": "753057e340da8f22e57c9a409ea7a235fd6a46bd"}, "sources": [{"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/include/libpq/libpq-be.h#L335", "path": "src/include/libpq/libpq-be.h", "label": "Interface declaration", "sha256": "1588b2cfe9ea1f737055880b8d09667feb59d918ab16dfeb855b0eae996596db"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/libpq/be-secure-openssl.c#L57", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Core definition", "sha256": "68195987503c2b0c32048559352fa8e7e7265cdd047777941eb8fefae98fb4f7"}, {"url": "https://github.com/postgres/postgres/blob/753057e340da8f22e57c9a409ea7a235fd6a46bd/src/backend/libpq/be-secure-openssl.c#L132", "path": "src/backend/libpq/be-secure-openssl.c", "label": "Call sites", "sha256": "68195987503c2b0c32048559352fa8e7e7265cdd047777941eb8fefae98fb4f7"}], "sections": [{"title": "Call sites", "paragraphs": ["src/backend/libpq/be-secure-openssl.c:132"]}, {"code": "\t */\n\tSSL_CTX_set_mode(context, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);\n\n\t/*\n\t * Call init hook (usually to set password callback)\n\t */\n\t(*openssl_tls_init_hook) (context, isServerStart);\n\n\t/* used by the callback */\n\tssl_is_server_start = isServerStart;\n\n\t/*\n\t * Load and verify server's certificate and private key\n\t */\n\tif (SSL_CTX_use_certificate_chain_file(context, ssl_cert_file) != 1)", "title": "Core call context: src/backend/libpq/be-secure-openssl.c:126\u2013140", "paragraphs": []}], "signature": "typedef void (*openssl_tls_init_hook_typ) (SSL_CTX *context, bool isServerStart);\nextern PGDLLIMPORT openssl_tls_init_hook_typ openssl_tls_init_hook;", "description": ["Call init hook (usually to set password callback)"]}, "comparison": {"left": "17", "right": "18", "status": "unchanged", "diff": ""}}