]> granicus.if.org Git - postgresql/commitdiff
Set include_realm=1 default in parse_hba_line
authorStephen Frost <sfrost@snowman.net>
Fri, 6 Nov 2015 16:18:27 +0000 (11:18 -0500)
committerStephen Frost <sfrost@snowman.net>
Fri, 6 Nov 2015 16:18:27 +0000 (11:18 -0500)
With include_realm=1 being set down in parse_hba_auth_opt, if multiple
options are passed on the pg_hba line, such as:

host all     all    0.0.0.0/0    gss include_realm=0 krb_realm=XYZ.COM

We would mistakenly reset include_realm back to 1.  Instead, we need to
set include_realm=1 up in parse_hba_line, prior to parsing any of the
additional options.

Discovered by Jeff McCormick during testing.

Bug introduced by 9a08841.

Back-patch to 9.5

src/backend/libpq/hba.c

index 23c8b5de6b448650e6d8c5b7c38a198bb2ab2f99..94f7cfa84ccfaa72c339ce6b9c8fe4034a5ada8e 100644 (file)
@@ -1274,6 +1274,19 @@ parse_hba_line(List *line, int line_num, char *raw_line)
                return NULL;
        }
 
+       /*
+        * For GSS and SSPI, set the default value of include_realm to true.
+        * Having include_realm set to false is dangerous in multi-realm
+        * situations and is generally considered bad practice.  We keep the
+        * capability around for backwards compatibility, but we might want to
+        * remove it at some point in the future.  Users who still need to strip
+        * the realm off would be better served by using an appropriate regex in a
+        * pg_ident.conf mapping.
+        */
+       if (parsedline->auth_method == uaGSS ||
+               parsedline->auth_method == uaSSPI)
+               parsedline->include_realm = true;
+
        /* Parse remaining arguments */
        while ((field = lnext(field)) != NULL)
        {
@@ -1376,19 +1389,6 @@ parse_hba_auth_opt(char *name, char *val, HbaLine *hbaline, int line_num)
        hbaline->ldapscope = LDAP_SCOPE_SUBTREE;
 #endif
 
-       /*
-        * For GSS and SSPI, set the default value of include_realm to true.
-        * Having include_realm set to false is dangerous in multi-realm
-        * situations and is generally considered bad practice.  We keep the
-        * capability around for backwards compatibility, but we might want to
-        * remove it at some point in the future.  Users who still need to strip
-        * the realm off would be better served by using an appropriate regex in a
-        * pg_ident.conf mapping.
-        */
-       if (hbaline->auth_method == uaGSS ||
-               hbaline->auth_method == uaSSPI)
-               hbaline->include_realm = true;
-
        if (strcmp(name, "map") == 0)
        {
                if (hbaline->auth_method != uaIdent &&