You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<
8000
script type="application/json" data-target="react-app.embeddedData">{"payload":{"commit":{"oid":"a54b658ce77b6705eb1f997b416c2e820a77946c","url":"/postgres/postgres/commit/a54b658ce77b6705eb1f997b416c2e820a77946c","authoredDate":"2022-11-24T13:51:34.000+09:00","committedDate":"2022-11-24T13:51:34.000+09:00","shortMessage":null,"shortMessageMarkdown":"\u003cdiv\u003eAdd support for file inclusions in HBA and ident configuration files\u003c/div\u003e","shortMessageMarkdownLink":null,"bodyMessageHtml":"pg_hba.conf and pg_ident.conf gain support for three record keywords:\n- \"include\", to include a file.\n- \"include_if_exists\", to include a file, ignoring it if missing.\n- \"include_dir\", to include a directory of files. These are classified\nby name (C locale, mostly) and need to be prefixed by \".conf\", hence\nfollowing the same rules as GUCs.\n\nThis commit relies on the refactoring pieces done in \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/postgres/postgres/commit/efc981627a723d91e86865fb363d793282e473d1/hovercard\" href=\"https://github.com/postgres/postgres/commit/efc981627a723d91e86865fb363d793282e473d1\"\u003e\u003ctt\u003eefc9816\u003c/tt\u003e\u003c/a\u003e, \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/postgres/postgres/commit/ad6c52846f13e4e86daa247c1369ed85558830e7/hovercard\" href=\"https://github.com/postgres/postgres/commit/ad6c52846f13e4e86daa247c1369ed85558830e7\"\u003e\u003ctt\u003ead6c528\u003c/tt\u003e\u003c/a\u003e,\n\u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/postgres/postgres/commit/783e8c69cbcd2b7d6fce1f0c5b568b1c8b686d54/hovercard\" href=\"https://github.com/postgres/postgres/commit/783e8c69cbcd2b7d6fce1f0c5b568b1c8b686d54\"\u003e\u003ctt\u003e783e8c6\u003c/tt\u003e\u003c/a\u003e and \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/postgres/postgres/commit/1b73d0b1c3934f703d68031957d37c2a9765e798/hovercard\" href=\"https://github.com/postgres/postgres/commit/1b73d0b1c3934f703d68031957d37c2a9765e798\"\u003e\u003ctt\u003e1b73d0b\u003c/tt\u003e\u003c/a\u003e, adding a small wrapper to build a list of\nTokenizedAuthLines (tokenize_include_file), and the code is shaped to\noffer some symmetry with what is done for GUCs with the same options.\n\npg_hba_file_rules and pg_ident_file_mappings gain a new field called\nfile_name, to track from which file a record is located, taking\nadvantage of the addition of rule_number in \u003ca class=\"commit-link\" data-hovercard-type=\"commit\" data-hovercard-url=\"https://github.com/postgres/postgres/commit/c591300a8f54d9711157d9a8866f022a257ec4ee/hovercard\" href=\"https://github.com/postgres/postgres/commit/c591300a8f54d9711157d9a8866f022a257ec4ee\"\u003e\u003ctt\u003ec591300\u003c/tt\u003e\u003c/a\u003e to offer an\norganized view of the HBA or ident records loaded.\n\nBump catalog version.\n\nAuthor: Julien Rouhaud\nReviewed-by: Michael Paquier\nDiscussion: \u003ca href=\"https://postgr.es/m/20220223045959.35ipdsvbxcstrhya@jrouhaud\" rel=\"nofollow\"\u003ehttps://postgr.es/m/20220223045959.35ipdsvbxcstrhya@jrouhaud\u003c/a\u003e","authors":[{"login":"michaelpq","displayName":"Michael Paquier","avatarUrl":"https://avatars.githubusercontent.com/u/985332?v=4","path":"/michaelpq","isGitHub":false}],"committerAttribution":false,"committer":{"login":"michaelpq","displayName":"Michael Paquier","avatarUrl":"https://avatars.githubusercontent.com/u/985332?v=4","path":"/michaelpq","isGitHub":false},"parents":["d09dbeb9bde6b9faabd30e887eff4493331d6424"],"globalRelayId":"C_kwDOAA4m0toAKGE1NGI2NThjZTc3YjY3MDVlYjFmOTk3YjQxNmMyZTgyMGE3Nzk0NmM","sha1":"d09dbeb9bde6b9faabd30e887eff4493331d6424","sha2":"a54b658ce77b6705eb1f997b416c2e820a77946c"},"currentUser":null,"repo":{"id":927442,"defaultBranch":"master","name":"postgres","ownerLogin":"postgres","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2010-09-21T11:35:45.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/177543?v=4","public":true,"private":false,"isOrgOwned":true},"diffEntryData":[{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":88,"text":"@@ -89,8 +89,8 @@","html":"@@ -89,8 +89,8 @@","displayNoNewLineWarning":false,"position":0,"left":88,"right":88},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":89,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":1,"left":89,"right":89},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":90,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":2,"left":90,"right":90},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":91,"text":" \u003cpara\u003e","html":" \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":3,"left":91,"right":91},{"stylingDirective":null,"type":"DELETION","blobLineNumber":92,"text":"- Each record specifies a connection type, a client IP address range","html":"- Each record specifies a connection type, a client IP address\u003cspan class=\"x x-first x-last\"\u003e range\u003c/span\u003e","displayNoNewLineWarning":false,"position":4,"left":92,"right":91},{"stylingDirective":null,"type":"DELETION","blobLineNumber":93,"text":"- (if relevant for the connection type), a database name, a user name,","html":"- (if relevant for the connection type), a database name, a user name,","displayNoNewLineWarning":false,"position":5,"left":93,"right":91},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":92,"text":"+ Each authentication record specifies a connection type, a client IP address","html":"+ Each \u003cspan class=\"x x-first x-last\"\u003eauthentication \u003c/span\u003erecord specifies a connection type, a client IP address","displayNoNewLineWarning":false,"position":6,"left":93,"right":92},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":93,"text":"+ range (if relevant for the connection type), a database name, a user name,","html":"+ \u003cspan class=\"x x-first x-last\"\u003erange \u003c/span\u003e(if relevant for the connection type), a database name, a user name,","displayNoNewLineWarning":false,"position":7,"left":93,"right":93},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":94,"text":" and the authentication method to be used for connections matching","html":" and the authentication method to be used for connections matching","displayNoNewLineWarning":false,"position":8,"left":94,"right":94},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":95,"text":" these parameters. The first record with a matching connection type,","html":" these parameters. The first record with a matching connection type,","displayNoNewLineWarning":false,"position":9,"left":95,"right":95},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":96,"text":" client address, requested database, and user name is used to perform","html":" client address, requested database, and user name is used to perform","displayNoNewLineWarning":false,"position":10,"left":96,"right":96},{"stylingDirective":null,"type":"HUNK","blobLineNumber":99,"text":"@@ -100,20 +100,38 @@","html":"@@ -100,20 +100,38 @@","displayNoNewLineWarning":false,"position":11,"left":99,"right":99},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":100,"text":" access is denied.","html":" access is denied.","displayNoNewLineWarning":false,"position":12,"left":100,"right":100},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":101,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":13,"left":101,"right":101},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":102,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":14,"left":102,"right":102},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":103,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":15,"left":102,"right":103},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":104,"text":"+ Each record can be an include directive or an authentication record.","html":"+ Each record can be an include directive or an authentication record.","displayNoNewLineWarning":false,"position":16,"left":102,"right":104},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":105,"text":"+ Include directives specify files that can be included, that contain","html":"+ Include directives specify files that can be included, that contain","displayNoNewLineWarning":false,"position":17,"left":102,"right":105},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":106,"text":"+ additional records. The records will be inserted in place of the","html":"+ additional records. The records will be inserted in place of the","displayNoNewLineWarning":false,"position":18,"left":102,"right":106},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":107,"text":"+ include records. These records only contain two fields:","html":"+ include records. These records only contain two fields:","displayNoNewLineWarning":false,"position":19,"left":102,"right":107},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":108,"text":"+ \u003cliteral\u003einclude\u003c/literal\u003e, \u003cliteral\u003einclude_if_exists\u003c/literal\u003e or","html":"+ \u0026lt;literal\u0026gt;include\u0026lt;/literal\u0026gt;, \u0026lt;literal\u0026gt;include_if_exists\u0026lt;/literal\u0026gt; or","displayNoNewLineWarning":false,"position":20,"left":102,"right":108},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":109,"text":"+ \u003cliteral\u003einclude_dir\u003c/literal\u003e directive and the file or directory to be","html":"+ \u0026lt;literal\u0026gt;include_dir\u0026lt;/literal\u0026gt; directive and the file or directory to be","displayNoNewLineWarning":false,"position":21,"left":102,"right":109},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":110,"text":"+ included. The file or directory can be a relative of absolute path, and can","html":"+ included. The file or directory can be a relative of absolute path, and can","displayNoNewLineWarning":false,"position":22,"left":102,"right":110},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":111,"text":"+ be double-quoted. For the \u003cliteral\u003einclude_dir\u003c/literal\u003e form, all files","html":"+ be double-quoted. For the \u0026lt;literal\u0026gt;include_dir\u0026lt;/literal\u0026gt; form, all files","displayNoNewLineWarning":false,"position":23,"left":102,"right":111},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":112,"text":"+ not starting with a \u003cliteral\u003e.\u003c/literal\u003e and ending with","html":"+ not starting with a \u0026lt;literal\u0026gt;.\u0026lt;/literal\u0026gt; and ending with","displayNoNewLineWarning":false,"position":24,"left":102,"right":112},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":113,"text":"+ \u003cliteral\u003e.conf\u003c/literal\u003e will be included. Multiple files within an include","html":"+ \u0026lt;literal\u0026gt;.conf\u0026lt;/literal\u0026gt; will be included. Multiple files within an include","displayNoNewLineWarning":false,"position":25,"left":102,"right":113},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":114,"text":"+ directory are processed in file name order (according to C locale rules,","html":"+ directory are processed in file name order (according to C locale rules,","displayNoNewLineWarning":false,"position":26,"left":102,"right":114},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":115,"text":"+ i.e., numbers before letters, and uppercase letters before lowercase ones).","html":"+ i.e., numbers before letters, and uppercase letters before lowercase ones).","displayNoNewLineWarning":false,"position":27,"left":102,"right":115},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":116,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":28,"left":102,"right":116},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":117,"text":"+","html":"+","displayNoNewLineWarning":false,"position":29,"left":102,"right":117},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":118,"text":" \u003cpara\u003e","html":" \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":30,"left":103,"right":118},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":119,"text":" A record can have several formats:","html":" A record can have several formats:","displayNoNewLineWarning":false,"position":31,"left":104,"right":119},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":120,"text":" \u003csynopsis\u003e","html":" \u0026lt;synopsis\u0026gt;","displayNoNewLineWarning":false,"position":32,"left":105,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":106,"text":"-local \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-local \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":33,"left":106,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":107,"text":"-host \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-host \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":34,"left":107,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":108,"text":"-hostssl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostssl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":35,"left":108,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":109,"text":"-hostnossl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostnossl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":36,"left":109,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":110,"text":"-hostgssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostgssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":37,"left":110,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":111,"text":"-hostnogssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostnogssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":38,"left":111,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":112,"text":"-host \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-host \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":39,"left":112,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":113,"text":"-hostssl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostssl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":40,"left":113,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":114,"text":"-hostnossl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostnossl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":41,"left":114,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":115,"text":"-hostgssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostgssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":42,"left":115,"right":120},{"stylingDirective":null,"type":"DELETION","blobLineNumber":116,"text":"-hostnogssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"-hostnogssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":43,"left":116,"right":120},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":121,"text":"+local \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+local \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":44,"left":116,"right":121},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":122,"text":"+host \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+host \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":45,"left":116,"right":122},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":123,"text":"+hostssl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostssl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":46,"left":116,"right":123},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":124,"text":"+hostnossl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostnossl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":47,"left":116,"right":124},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":125,"text":"+hostgssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostgssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":48,"left":116,"right":125},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":126,"text":"+hostnogssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eaddress\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostnogssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":49,"left":116,"right":126},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":127,"text":"+host \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+host \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":50,"left":116,"right":127},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":128,"text":"+hostssl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostssl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":51,"left":116,"right":128},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":129,"text":"+hostnossl \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostnossl \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":52,"left":116,"right":129},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":130,"text":"+hostgssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostgssenc \u0026lt;replaceable\u0026gt;database\
8000
u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":53,"left":116,"right":130},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":131,"text":"+hostnogssenc \u003creplaceable\u003edatabase\u003c/replaceable\u003e \u003creplaceable\u003euser\u003c/replaceable\u003e \u003creplaceable\u003eIP-address\u003c/replaceable\u003e \u003creplaceable\u003eIP-mask\u003c/replaceable\u003e \u003creplaceable\u003eauth-method\u003c/replaceable\u003e \u003coptional\u003e\u003creplaceable\u003eauth-options\u003c/replaceable\u003e\u003c/optional\u003e","html":"+hostnogssenc \u0026lt;replaceable\u0026gt;database\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;user\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-address\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;IP-mask\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;auth-method\u0026lt;/replaceable\u0026gt; \u0026lt;optional\u0026gt;\u0026lt;replaceable\u0026gt;auth-options\u0026lt;/replaceable\u0026gt;\u0026lt;/optional\u0026gt;","displayNoNewLineWarning":false,"position":54,"left":116,"right":131},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":132,"text":"+include \u003creplaceable\u003efile\u003c/replaceable\u003e","html":"+include \u0026lt;replaceable\u0026gt;file\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":55,"left":116,"right":132},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":133,"text":"+include_if_exists \u003creplaceable\u003efile\u003c/replaceable\u003e","html":"+include_if_exists \u0026lt;replaceable\u0026gt;file\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":56,"left":116,"right":133},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":134,"text":"+include_dir \u003creplaceable\u003edirectory\u003c/replaceable\u003e","html":"+include_dir \u0026lt;replaceable\u0026gt;directory\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":57,"left":116,"right":134},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":135,"text":" \u003c/synopsis\u003e","html":" \u0026lt;/synopsis\u0026gt;","displayNoNewLineWarning":false,"position":58,"left":117,"right":135},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":136,"text":" The meaning of the fields is as follows:","html":" The meaning of the fields is as follows:","displayNoNewLineWarning":false,"position":59,"left":118,"right":136},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":137,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":60,"left":119,"right":137},{"stylingDirective":null,"type":"HUNK","blobLineNumber":672,"text":"@@ -655,6 +673,39 @@ openssl x509 -in myclient.crt -noout --subject -nameopt RFC2253 | sed \"s/^subjec","html":"@@ -655,6 +673,39 @@ openssl x509 -in myclient.crt -noout --subject -nameopt RFC2253 | sed \u0026quot;s/^subjec","displayNoNewLineWarning":false,"position":61,"left":654,"right":672},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":673,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":62,"left":655,"right":673},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":674,"text":" \u003c/listitem\u003e","html":" \u0026lt;/listitem\u0026gt;","displayNoNewLineWarning":false,"position":63,"left":656,"right":674},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":675,"text":" \u003c/varlistentry\u003e","html":" \u0026lt;/varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":64,"left":657,"right":675},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":676,"text":"+","html":"+","displayNoNewLineWarning":false,"position":65,"left":657,"right":676},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":677,"text":"+ \u003cvarlistentry\u003e","html":"+ \u0026lt;varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":66,"left":657,"right":677},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":678,"text":"+ \u003cterm\u003e\u003cliteral\u003einclude\u003c/literal\u003e\u003c/term\u003e","html":"+ \u0026lt;term\u0026gt;\u0026lt;literal\u0026gt;include\u0026lt;/literal\u0026gt;\u0026lt;/term\u0026gt;","displayNoNewLineWarning":false,"position":67,"left":657,"right":678},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":679,"text":"+ \u003clistitem\u003e","html":"+ \u0026lt;listitem\u0026gt;","displayNoNewLineWarning":false,"position":68,"left":657,"right":679},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":680,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":69,"left":657,"right":680},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":681,"text":"+ This line will be replaced by the contents of the given file.","html":"+ This line will be replaced by the contents of the given file.","displayNoNewLineWarning":false,"position":70,"left":657,"right":681},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":682,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":71,"left":657,"right":682},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":683,"text":"+ \u003c/listitem\u003e","html":"+ \u0026lt;/listitem\u0026gt;","displayNoNewLineWarning":false,"position":72,"left":657,"right":683},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":684,"text":"+ \u003c/varlistentry\u003e","html":"+ \u0026lt;/varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":73,"left":657,"right":684},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":685,"text":"+","html":"+","displayNoNewLineWarning":false,"position":74,"left":657,"right":685},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":686,"text":"+ \u003cvarlistentry\u003e","html":"+ \u0026lt;varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":75,"left":657,"right":686},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":687,"text":"+ \u003cterm\u003e\u003cliteral\u003einclude_if_exists\u003c/literal\u003e\u003c/term\u003e","html":"+ \u0026lt;term\u0026gt;\u0026lt;literal\u0026gt;include_if_exists\u0026lt;/literal\u0026gt;\u0026lt;/term\u0026gt;","displayNoNewLineWarning":false,"position":76,"left":657,"right":687},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":688,"text":"+ \u003clistitem\u003e","html":"+ \u0026lt;listitem\u0026gt;","displayNoNewLineWarning":false,"position":77,"left":657,"right":688},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":689,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":78,"left":657,"right":689},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":690,"text":"+ This line will be replaced by the content of the given file if the","html":"+ This line will be replaced by the content of the given file if the","displayNoNewLineWarning":false,"position":79,"left":657,"right":690},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":691,"text":"+ file exists. Otherwise, a message is logged to indicate that the file","html":"+ file exists. Otherwise, a message is logged to indicate that the file","displayNoNewLineWarning":false,"position":80,"left":657,"right":691},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":692,"text":"+ has been skipped.","html":"+ has been skipped.","displayNoNewLineWarning":false,"position":81,"left":657,"right":692},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":693,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":82,"left":657,"right":693},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":694,"text":"+ \u003c/listitem\u003e","html":"+ \u0026lt;/listitem\u0026gt;","displayNoNewLineWarning":false,"position":83,"left":657,"right":694},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":695,"text":"+ \u003c/varlistentry\u003e","html":"+ \u0026lt;/varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":84,"left":657,"right":695},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":696,"text":"+","html":"+","displayNoNewLineWarning":false,"position":85,"left":657,"right":696},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":697,"text":"+ \u003cvarlistentry\u003e","html":"+ \u0026lt;varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":86,"left":657,"right":697},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":698,"text":"+ \u003cterm\u003e\u003cliteral\u003einclude_dir\u003c/literal\u003e\u003c/term\u003e","html":"+ \u0026lt;term\u0026gt;\u0026lt;literal\u0026gt;include_dir\u0026lt;/literal\u0026gt;\u0026lt;/term\u0026gt;","displayNoNewLineWarning":false,"position":87,"left":657,"right":698},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":699,"text":"+ \u003clistitem\u003e","html":"+ \u0026lt;listitem\u0026gt;","displayNoNewLineWarning":false,"position":88,"left":657,"right":699},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":700,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":89,"left":657,"right":700},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":701,"text":"+ This line will be replaced by the contents of all the files found in","html":"+ This line will be replaced by the contents of all the files found in","displayNoNewLineWarning":false,"position":90,"left":657,"right":701},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":702,"text":"+ the directory, if they don't start with a \u003cliteral\u003e.\u003c/literal\u003e and end","html":"+ the directory, if they don\u0026#39;t start with a \u0026lt;literal\u0026gt;.\u0026lt;/literal\u0026gt; and end","displayNoNewLineWarning":false,"position":91,"left":657,"right":702},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":703,"text":"+ with \u003cliteral\u003e.conf\u003c/literal\u003e, processed in file name order (according","html":"+ with \u0026lt;literal\u0026gt;.conf\u0026lt;/literal\u0026gt;, processed in file name order (according","displayNoNewLineWarning":false,"position":92,"left":657,"right":703},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":704,"text":"+ to C locale rules, i.e., numbers before letters, and uppercase letters","html":"+ to C locale rules, i.e., numbers before letters, and uppercase letters","displayNoNewLineWarning":false,"position":93,"left":657,"right":704},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":705,"text":"+ before lowercase ones).","html":"+ before lowercase ones).","displayNoNewLineWarning":false,"position":94,"left":657,"right":705},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":706,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":95,"left":657,"right":706},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":707,"text":"+ \u003c/listitem\u003e","html":"+ \u0026lt;/listitem\u0026gt;","displayNoNewLineWarning":false,"position":96,"left":657,"right":707},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":708,"text":"+ \u003c/varlistentry\u003e","html":"+ \u0026lt;/varlistentry\u0026gt;","displayNoNewLineWarning":false,"position":97,"left":657,"right":708},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":709,"text":" \u003c/variablelist\u003e","html":" \u0026lt;/variablelist\u0026gt;","displayNoNewLineWarning":false,"position":98,"left":658,"right":709},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":710,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":99,"left":659,"right":710},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":711,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":100,"left":660,"right":711},{"stylingDirective":null,"type":"HUNK","blobLineNumber":913,"text":"@@ -863,9 +914,12 @@ local db1,db2,@demodbs all md5","html":"@@ -863,9 +914,12 @@ local db1,db2,@demodbs all md5","displayNoNewLineWarning":false,"position":101,"left":862,"right":913},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":914,"text":" cluster's data directory. (It is possible to place the map file","html":" cluster\u0026#39;s data directory. (It is possible to place the map file","displayNoNewLineWarning":false,"position":102,"left":863,"right":914},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":915,"text":" elsewhere, however; see the \u003cxref linkend=\"guc-ident-file\"/\u003e","html":" elsewhere, however; see the \u0026lt;xref linkend=\u0026quot;guc-ident-file\u0026quot;/\u0026gt;","displayNoNewLineWarning":false,"position":103,"left":864,"right":915},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":916,"text":" configuration parameter.)","html":" configuration parameter.)","displayNoNewLineWarning":false,"position":104,"left":865,"right":916},{"stylingDirective":null,"type":"DELETION","blobLineNumber":866,"text":"- The ident map file contains lines of the general form:","html":"- The ident map file contains lines of the general \u003cspan class=\"x x-first x-last\"\u003eform\u003c/span\u003e:","displayNoNewLineWarning":false,"position":105,"left":866,"right":916},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":917,"text":"+ The ident map file contains lines of the general forms:","html":"+ The ident map file contains lines of the general \u003cspan class=\"x x-first x-last\"\u003eforms\u003c/span\u003e:","displayNoNewLineWarning":false,"position":106,"left":866,"right":917},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":918,"text":" \u003csynopsis\u003e","html":" \u0026lt;synopsis\u0026gt;","displayNoNewLineWarning":false,"position":107,"left":867,"right":918},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":919,"text":" \u003creplaceable\u003emap-name\u003c/replaceable\u003e \u003creplaceable\u003esystem-username\u003c/replaceable\u003e \u003creplaceable\u003edatabase-username\u003c/replaceable\u003e","html":" \u0026lt;replaceable\u0026gt;map-name\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;system-username\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;database-username\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":108,"left":868,"right":919},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":920,"text":"+\u003creplaceable\u003einclude\u003c/replaceable\u003e \u003creplaceable\u003efile\u003c/replaceable\u003e","html":"+\u0026lt;replaceable\u0026gt;include\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;file\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":109,"left":868,"right":920},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":921,"text":"+\u003creplaceable\u003einclude_if_exists\u003c/replaceable\u003e \u003creplaceable\u003efile\u003c/replaceable\u003e","html":"+\u0026lt;replaceable\u0026gt;include_if_exists\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;file\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":110,"left":868,"right":921},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":922,"text":"+\u003creplaceable\u003einclude_dir\u003c/replaceable\u003e \u003creplaceable\u003edirectory\u003c/replaceable\u003e","html":"+\u0026lt;replaceable\u0026gt;include_dir\u0026lt;/replaceable\u0026gt; \u0026lt;replaceable\u0026gt;directory\u0026lt;/replaceable\u0026gt;","displayNoNewLineWarning":false,"position":111,"left":868,"right":922},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":923,"text":" \u003c/synopsis\u003e","html":" \u0026lt;/synopsis\u0026gt;","displayNoNewLineWarning":false,"position":112,"left":869,"right":923},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":924,"text":" Comments, whitespace and line continuations are handled in the same way as in","html":" Comments, whitespace and line continuations are handled in the same way as in","displayNoNewLineWarning":false,"position":113,"left":870,"right":924},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":925,"text":" \u003cfilename\u003epg_hba.conf\u003c/filename\u003e. The","html":" \u0026lt;filename\u0026gt;pg_hba.conf\u0026lt;/filename\u0026gt;. The","displayNoNewLineWarning":false,"position":114,"left":871,"right":925},{"stylingDirective":null,"type":"HUNK","blobLineNumber":928,"text":"@@ -875,6 +929,10 @@ local db1,db2,@demodbs all md5","html":"@@ -875,6 +929,10 @@ local db1,db2,@demodbs all md5","displayNoNewLineWarning":false,"position":115,"left":874,"right":928},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":929,"text":" database user name. The same \u003creplaceable\u003emap-name\u003c/replaceable\u003e can be","html":" database user name. The same \u0026lt;replaceable\u0026gt;map-name\u0026lt;/replaceable\u0026gt; can be","displayNoNewLineWarning":false,"position":116,"left":875,"right":929},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":930,"text":" used repeatedly to specify multiple user-mappings within a single map.","html":" used repeatedly to specify multiple user-mappings within a single map.","displayNoNewLineWarning":false,"position":117,"left":876,"right":930},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":931,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":118,"left":877,"right":931},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":932,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":119,"left":877,"right":932},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":933,"text":"+ As for \u003cfilename\u003epg_hba.conf\u003c/filename\u003e, the lines in this file can","html":"+ As for \u0026lt;filename\u0026gt;pg_hba.conf\u0026lt;/filename\u0026gt;, the lines in this file can","displayNoNewLineWarning":false,"position":120,"left":877,"right":933},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":934,"text":"+ be include directives, following the same rules.","html":"+ be include directives, following the same rules.","displayNoNewLineWarning":false,"position":121,"left":877,"right":934},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":935,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":122,"left":877,"right":935},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":936,"text":" \u003cpara\u003e","html":" \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":123,"left":878,"right":936},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":937,"text":" There is no restriction regarding how many database users a given","html":" There is no restriction regarding how many database users a given","displayNoNewLineWarning":false,"position":124,"left":879,"right":937},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":938,"text":" operating system user can correspond to, nor vice versa. Thus, entries","html":" operating system user can correspond to, nor vice versa. Thus, entries","displayNoNewLineWarning":false,"position":125,"left":880,"right":938}],"diffNumber":0,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":2328,"linesChanged":86,"newTreeEntry":{"lineCount":2328,"path":"doc/src/sgml/client-auth.sgml","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"doc/src/sgml/client-auth.sgml","mode":100644},"linesAdded":72,"linesDeleted":14,"path":"doc/src/sgml/client-auth.sgml","pathDigest":"1cc5cfc64842ea7af65842fbc9106d6216b16d5744065f971f98edcb1190d584","status":"MODIFIED","truncatedReason":null,"oldOid":"d09dbeb9bde6b9faabd30e887eff4493331d6424","newOid":"a54b658ce77b6705eb1f997b416c2e820a77946c","copilotChatReference":null,"deletedSha":"d09dbeb9bde6b9faabd30e887eff4493331d6424","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"diffLines":[{"stylingDirective":null,"type":"HUNK","blobLineNumber":1001,"text":"@@ -1002,12 +1002,21 @@","html":"@@ -1002,12 +1002,21 @@","displayNoNewLineWarning":false,"position":0,"left":1001,"right":1001},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1002,"text":" \u003c/para\u003e\u003c/entry\u003e","html":" \u0026lt;/para\u0026gt;\u0026lt;/entry\u0026gt;","displayNoNewLineWarning":false,"position":1,"left":1002,"right":1002},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1003,"text":" \u003c/row\u003e","html":" \u0026lt;/row\u0026gt;","displayNoNewLineWarning":false,"position":2,"left":1003,"right":1003},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1004,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":3,"left":1004,"right":1004},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1005,"text":"+ \u003crow\u003e","html":"+ \u0026lt;row\u0026gt;","displayNoNewLineWarning":false,"position":4,"left":1004,"right":1005},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1006,"text":"+ \u003centry role=\"catalog_table_entry\"\u003e\u003cpara role=\"column_definition\"\u003e","html":"+ \u0026lt;entry role=\u0026quot;catalog_table_entry\u0026quot;\u0026gt;\u0026lt;para role=\u0026quot;column_definition\u0026quot;\u0026gt;","displayNoNewLineWarning":false,"position":5,"left":1004,"right":1006},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1007,"text":"+ \u003cstructfield\u003efile_name\u003c/structfield\u003e \u003ctype\u003etext\u003c/type\u003e","html":"+ \u0026lt;structfield\u0026gt;file_name\u0026lt;/structfield\u0026gt; \u0026lt;type\u0026gt;text\u0026lt;/type\u0026gt;","displayNoNewLineWarning":false,"position":6,"left":1004,"right":1007},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1008,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":7,"left":1004,"right":1008},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1009,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":8,"left":1004,"right":1009},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1010,"text":"+ Name of the file containing this rule","html":"+ Name of the file containing this rule","displayNoNewLineWarning":false,"position":9,"left":1004,"right":1010},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1011,"text":"+ \u003c/para\u003e\u003c/entry\u003e","html":"+ \u0026lt;/para\u0026gt;\u0026lt;/entry\u0026gt;","displayNoNewLineWarning":false,"position":10,"left":1004,"right":1011},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1012,"text":"+ \u003c/row\u003e","html":"+ \u0026lt;/row\u0026gt;","displayNoNewLineWarning":false,"position":11,"left":1004,"right":1012},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1013,"text":"+","html":"+","displayNoNewLineWarning":false,"position":12,"left":1004,"right":1013},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1014,"text":" \u003crow\u003e","html":" \u0026lt;row\u0026gt;","displayNoNewLineWarning":false,"position":13,"left":1005,"right":1014},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1015,"text":" \u003centry role=\"catalog_table_entry\"\u003e\u003cpara role=\"column_definition\"\u003e","html":" \u0026lt;entry role=\u0026quot;catalog_table_entry\u0026quot;\u0026gt;\u0026lt;para role=\u0026quot;column_definition\u0026quot;\u0026gt;","displayNoNewLineWarning":false,"position":14,"left":1006,"right":1015},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1016,"text":" \u003cstructfield\u003eline_number\u003c/structfield\u003e \u003ctype\u003eint4\u003c/type\u003e","html":" \u0026lt;structfield\u0026gt;line_number\u0026lt;/structfield\u0026gt; \u0026lt;type\u0026gt;int4\u0026lt;/type\u0026gt;","displayNoNewLineWarning":false,"position":15,"left":1007,"right":1016},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1017,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":16,"left":1008,"right":1017},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1018,"text":" \u003cpara\u003e","html":" \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":17,"left":1009,"right":1018},{"stylingDirective":null,"type":"DELETION","blobLineNumber":1010,"text":"- Line number of this rule in \u003cfilename\u003epg_hba.conf\u003c/filename\u003e","html":"- Line number of this rule in \u0026lt;\u003cspan class=\"x x-first x-last\"\u003efilename\u0026gt;pg_hba.conf\u0026lt;/filename\u003c/span\u003e\u0026gt;","displayNoNewLineWarning":false,"position":18,"left":1010,"right":1018},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1019,"text":"+ Line number of this rule in \u003cliteral\u003efile_name\u003c/literal\u003e","html":"+ Line number of this rule in \u0026lt;\u003cspan class=\"x x-first x-last\"\u003eliteral\u0026gt;file_name\u0026lt;/literal\u003c/span\u003e\u0026gt;","displayNoNewLineWarning":false,"position":19,"left":1010,"right":1019},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1020,"text":" \u003c/para\u003e\u003c/entry\u003e","html":" \u0026lt;/para\u0026gt;\u0026lt;/entry\u0026gt;","displayNoNewLineWarning":false,"position":20,"left":1011,"right":1020},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1021,"text":" \u003c/row\u003e","html":" \u0026lt;/row\u0026gt;","displayNoNewLineWarning":false,"position":21,"left":1012,"right":1021},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1022,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":22,"left":1013,"right":1022},{"stylingDirective":null,"type":"HUNK","blobLineNumber":1160,"text":"@@ -1152,12 +1161,21 @@","html":"@@ -1152,12 +1161,21 @@","displayNoNewLineWarning":false,"position":23,"left":1151,"right":1160},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1161,"text":" \u003c/para\u003e\u003c/entry\u003e","html":" \u0026lt;/para\u0026gt;\u0026lt;/entry\u0026gt;","displayNoNewLineWarning":false,"position":24,"left":1152,"right":1161},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1162,"text":" \u003c/row\u003e","html":" \u0026lt;/row\u0026gt;","displayNoNewLineWarning":false,"position":25,"left":1153,"right":1162},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1163,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":26,"left":1154,"right":1163},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1164,"text":"+ \u003crow\u003e","html":"+ \u0026lt;row\u0026gt;","displayNoNewLineWarning":false,"position":27,"left":1154,"right":1164},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1165,"text":"+ \u003centry role=\"catalog_table_entry\"\u003e\u003cpara role=\"column_definition\"\u003e","html":"+ \u0026lt;entry role=\u0026quot;catalog_table_entry\u0026quot;\u0026gt;\u0026lt;para role=\u0026quot;column_definition\u0026quot;\u0026gt;","displayNoNewLineWarning":false,"position":28,"left":1154,"right":1165},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1166,"text":"+ \u003cstructfield\u003efile_name\u003c/structfield\u003e \u003ctype\u003etext\u003c/type\u003e","html":"+ \u0026lt;structfield\u0026gt;file_name\u0026lt;/structfield\u0026gt; \u0026lt;type\u0026gt;text\u0026lt;/type\u0026gt;","displayNoNewLineWarning":false,"position":29,"left":1154,"right":1166},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1167,"text":"+ \u003c/para\u003e","html":"+ \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":30,"left":1154,"right":1167},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1168,"text":"+ \u003cpara\u003e","html":"+ \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":31,"left":1154,"right":1168},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1169,"text":"+ Name of the file containing this map","html":"+ Name of the file containing this map","displayNoNewLineWarning":false,"position":32,"left":1154,"right":1169},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1170,"text":"+ \u003c/para\u003e\u003c/entry\u003e","html":"+ \u0026lt;/para\u0026gt;\u0026lt;/entry\u0026gt;","displayNoNewLineWarning":false,"position":33,"left":1154,"right":1170},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1171,"text":"+ \u003c/row\u003e","html":"+ \u0026lt;/row\u0026gt;","displayNoNewLineWarning":false,"position":34,"left":1154,"right":1171},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1172,"text":"+","html":"+","displayNoNewLineWarning":false,"position":35,"left":1154,"right":1172},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1173,"text":" \u003crow\u003e","html":" \u0026lt;row\u0026gt;","displayNoNewLineWarning":false,"position":36,"left":1155,"right":1173},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1174,"text":" \u003centry role=\"catalog_table_entry\"\u003e\u003cpara role=\"column_definition\"\u003e","html":" \u0026lt;entry role=\u0026quot;catalog_table_entry\u0026quot;\u0026gt;\u0026lt;para role=\u0026quot;column_definition\u0026quot;\u0026gt;","displayNoNewLineWarning":false,"position":37,"left":1156,"right":1174},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1175,"text":" \u003cstructfield\u003eline_number\u003c/structfield\u003e \u003ctype\u003eint4\u003c/type\u003e","html":" \u0026lt;structfield\u0026gt;line_number\u0026lt;/structfield\u0026gt; \u0026lt;type\u0026gt;int4\u0026lt;/type\u0026gt;","displayNoNewLineWarning":false,"position":38,"left":1157,"right":1175},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1176,"text":" \u003c/para\u003e","html":" \u0026lt;/para\u0026gt;","displayNoNewLineWarning":false,"position":39,"left":1158,"right":1176},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1177,"text":" \u003cpara\u003e","html":" \u0026lt;para\u0026gt;","displayNoNewLineWarning":false,"position":40,"left":1159,"right":1177},{"stylingDirective":null,"type":"DELETION","blobLineNumber":1160,"text":"- Line number of this map in \u003cfilename\u003epg_ident.conf\u003c/filename\u003e","html":"- Line number of this map in \u0026lt;\u003cspan class=\"x x-first x-last\"\u003efilename\u0026gt;pg_ident.conf\u0026lt;/filename\u003c/span\u003e\u0026gt;","displayNoNewLineWarning":false,"position":41,"left":1160,"right":1177},{"stylingDirective":null,"type":"ADDITION","blobLineNumber":1178,"text":"+ Line number of this map in \u003cliteral\u003efile_name\u003c/literal\u003e","html":"+ Line number of this map in \u0026lt;\u003cspan class=\"x x-first x-last\"\u003eliteral\u0026gt;file_name\u0026lt;/literal\u003c/span\u003e\u0026gt;","displayNoNewLineWarning":false,"position":42,"left":1160,"right":1178},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1179,"text":" \u003c/para\u003e\u003c/entry\u003e","html":" \u0026lt;/para\u0026gt;\u0026lt;/entry\u0026gt;","displayNoNewLineWarning":false,"position":43,"left":1161,"right":1179},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber
8000
":1180,"text":" \u003c/row\u003e","html":" \u0026lt;/row\u0026gt;","displayNoNewLineWarning":false,"position":44,"left":1162,"right":1180},{"stylingDirective":null,"type":"CONTEXT","blobLineNumber":1181,"text":" ","html":"\u003cbr\u003e","displayNoNewLineWarning":false,"position":45,"left":1163,"right":1181}],"diffNumber":1,"diffSize":"0 Bytes","isBinary":false,"isTooBig":false,"collapsed":false,"isSubmodule":false,"lineCount":4800,"linesChanged":22,"newTreeEntry":{"lineCount":4800,"path":"doc/src/sgml/system-views.sgml","mode":100644,"isGenerated":false},"oldTreeEntry":{"lineCount":0,"path":"doc/src/sgml/system-views.sgml","mode":100644},"linesAdded":20,"linesDeleted":2,"path":"doc/src/sgml/system-views.sgml","pathDigest":"1af88790f04615e2bf000e492bde2e3a7a836ff1131282c51211affc796ebc47","status":"MODIFIED","truncatedReason":null,"oldOid":"d09dbeb9bde6b9faabd30e887eff4493331d6424","newOid":"a54b658ce77b6705eb1f997b416c2e820a77946c","copilotChatReference":null,"deletedSha":"d09dbeb9bde6b9faabd30e887eff4493331d6424","canToggleRichDiff":false,"defaultToRichDiff":false,"proseDifffHtml":null,"renderInfo":null,"dependencyDiffPath":null,"submodule":null},{"path":"src/backend/libpq/hba.c","pathDigest":"4a2eb01a737378aeed6b0d8c0fc21ea480afa881165dc2e20865f91954786179","status":"MODIFIED"},{"path":"src/backend/libpq/pg_hba.conf.sample","pathDigest":"75c4e8cf89ad437d58f7cfeac187c2d70716339b6aecbdd109b08b0f5e6eb09e","status":"MODIFIED"},{"path":"src/backend/libpq/pg_ident.conf.sample","pathDigest":"80bbd8ff1e178969ce59d92951aec59a0e2090950202e3512ec11b4b39a94f02","status":"MODIFIED"},{"path":"src/backend/utils/adt/hbafuncs.c","pathDigest":"01866b6ea7e90b056337a278c2f9de52fa68c6cee2333f7549199bc647c32726","status":"MODIFIED"},{"path":"src/include/catalog/catversion.h","pathDigest":"ee3a5187a356cefc95d2bd7330e9f5de9f7606e872b36b834d9c03f0b6cb4e32","status":"MODIFIED"},{"path":"src/include/catalog/pg_proc.dat","pathDigest":"e2a931f90073b784e341960c6fe1f48aaea4b5d57eb4388143534eec3863477b","status":"MODIFIED"},{"path":"src/test/regress/expected/rules.out","pathDigest":"2d4dc738b28efb3a7970e3d76a9c74e9da61ab19cab56bdc6e2860575328b68a","status":"MODIFIED"}],"splitViewPreference":"unified","ignoreWhitespace":false,"repoOwnerGlobalRelayId":"MDEyOk9yZ2FuaXphdGlvbjE3NzU0Mw==","commentsPreference":"visible","diffLineSpacingPreference":"relaxed","useMonospaceFont":false,"pasteUrlLinkAsPlainText":false,"userNotices":[],"path":"/postgres/postgres/commit/a54b658c","fileTreeExpanded":true,"headerInfo":{"additions":352,"deletions":60,"filesChanged":9,"filesChangedString":"9"},"moreDiffsToLoad":true,"asyncDiffLoadInfo":{"startIndex":2,"truncated":false,"byteCount":11164,"lineShownCount":172},"commentInfo":{"canComment":false,"locked":false,"canLock":false,"repoArchived":false},"csrf_tokens":{"/users/diffview?diff=split":{"post":"an7gpoYbG36K6N-T3eIKdLJjcjTO0cntO3nApiUv4DS2PDuub5LkHnTVuOxWQzX4DetYFHvB1iAUdUqbYfL_Xg"},"/users/diffview?diff=unified":{"post":"nOftskX1cP_mF5zMaj8KuONnhnIWobHmMQg6uOfgs7ZApTa6rHyPnxgq-7PhnjU0XO-sUqOxriseBLCFoz2s3A"},"/notifications/thread":{"post":"iU3ivM2uTC_nAW5rWXvKR-5genKdAJLGumaX2vmZD4nkEgiJeyGwBvTDSLKwo9ABgyJIrGBtSz1kqHJJq5QsaQ"}}},"title":"Add support for file inclusions in HBA and ident configuration files · postgres/postgres@a54b658","appPayload":{"helpUrl":"https://docs.github.com","findInDiffWorkerPath":"/assets-cdn/worker/find-in-diff-worker-f6b2312e7da9.js","enabled_features":{"diff_ux_refresh_beta":false,"diff_inline_comments":true,"diff_ux_refresh_ssr_five":false,"diff_ux_refresh_ssr_ten":false,"react_diff_line_type_character_correction":false}}}
Add support for file inclusions in HBA and ident configuration files
pg_hba.conf and pg_ident.conf gain support for three record keywords:
- "include", to include a file.
- "include_if_exists", to include a file, ignoring it if missing.
- "include_dir", to include a directory of files. These are classified
by name (C locale, mostly) and need to be prefixed by ".conf", hence
following the same rules as GUCs.
This commit relies on the refactoring pieces done in efc9816, ad6c528,
783e8c6 and 1b73d0b, adding a small wrapper to build a list of
TokenizedAuthLines (tokenize_include_file), and the code is shaped to
offer some symmetry with what is done for GUCs with the same options.
pg_hba_file_rules and pg_ident_file_mappings gain a new field called
file_name, to track from which file a record is located, taking
advantage of the addition of rule_number in c591300 to offer an
organized view of the HBA or ident records loaded.
Bump catalog version.
Author: Julien Rouhaud
Reviewed-by: Michael Paquier
Discussion: https://postgr.es/m/20220223045959.35ipdsvbxcstrhya@jrouhaud
Copy file name to clipboardExpand all lines: doc/src/sgml/client-auth.sgml
+72-14Lines changed: 72 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -89,8 +89,8 @@
89
89
</para>
90
90
91
91
<para>
92
-
Each record specifies a connection type, a client IP address range
93
-
(if relevant for the connection type), a database name, a user name,
92
+
Each authentication record specifies a connection type, a client IP address
93
+
range (if relevant for the connection type), a database name, a user name,
94
94
and the authentication method to be used for connections matching
95
95
these parameters. The first record with a matching connection type,
96
96
client address, requested database, and user name is used to perform
@@ -100,20 +100,38 @@
100
100
access is denied.
101
101
</para>
102
102
103
+
<para>
104
+
Each record can be an include directive or an authentication record.
105
+
Include directives specify files that can be included, that contain
106
+
additional records. The records will be inserted in place of the
107
+
include records. These records only contain two fields:
108
+
<literal>include</literal>, <literal>include_if_exists</literal> or
109
+
<literal>include_dir</literal> directive and the file or directory to be
110
+
included. The file or directory can be a relative of absolute path, and can
111
+
be double-quoted. For the <literal>include_dir</literal> form, all files
112
+
not starting with a <literal>.</literal> and ending with
113
+
<literal>.conf</literal> will be included. Multiple files within an include
114
+
directory are processed in file name order (according to C locale rules,
115
+
i.e., numbers before letters, and uppercase letters before lowercase ones).
116
+
</para>
117
+
103
118
<para>
104
119
A record can have several formats:
105
120
<synopsis>
106
-
local <replaceable>database</replaceable> <replaceable>user</replaceable> <replaceable>auth-method</replaceable> <optional><replaceable>auth-options</replaceable></optional>
local <replaceable>database</replaceable> <replaceable>user</replaceable> <replaceable>auth-method</replaceable> <optional><replaceable>auth-options</replaceable></optional>
0 commit comments