Add GUC krb_server_hostname so the server hostname can be specified as
authorBruce Momjian <bruce@momjian.us>
Tue, 14 Jun 2005 17:43:14 +0000 (17:43 +0000)
committerBruce Momjian <bruce@momjian.us>
Tue, 14 Jun 2005 17:43:14 +0000 (17:43 +0000)
part of service principal.  If not set, any service principal matching
an entry in the keytab can be used.

NEW KERBEROS MATCHING BEHAVIOR FOR 8.1.

Todd Kover

doc/src/sgml/runtime.sgml
src/backend/libpq/auth.c
src/backend/utils/misc/guc.c
src/bin/psql/tab-complete.c
src/include/libpq/auth.h

index 93040bd31d184c8f60af377443112a627dea1982..c209dd39e9df872863facfee14d07d312a3e31f5 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.325 2005/06/13 02:40:06 neilc Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.326 2005/06/14 17:43:12 momjian Exp $
 -->
 
 <chapter Id="runtime">
@@ -969,24 +969,44 @@ SET ENABLE_SEQSCAN TO OFF;
       <listitem>
        <para>
         Sets the Kerberos service name. See <xref linkend="kerberos-auth">
-        for details. This parameter can only be set at server start.
+        for details.  This parameter can only be set at server start.
        </para>
       </listitem>
      </varlistentry>
 
-    <varlistentry id="guc-krb-caseins-users" xreflabel="krb_caseins_users">
-     <term><varname>krb_caseins_users</varname> (<type>boolean</type>)</term>
-     <indexterm>
-      <primary><varname>krb_caseins_users</varname> configuration parameter</primary>
+     <varlistentry id="guc-krb-caseins-users" xreflabel="krb_caseins_users">
+      <term><varname>krb_caseins_users</varname> (<type>boolean</type>)</term>
+      <indexterm>
+       <primary><varname>krb_caseins_users</varname> configuration parameter</primary>
       </indexterm>
-     <listitem>
-      <para>
-       Sets if Kerberos usernames should be treated case-insensitive.
-       The default is off (case sensitive). This parameter can only be
-       set at server start.
+      <listitem>
+       <para>
+        Sets if Kerberos usernames should be treated case-insensitive.
+        The default is off (case sensitive). This parameter can only be
+        set at server start.
        </para>
-     </listitem>
-    </varlistentry>
+      </listitem>
+     </varlistentry>
+
+     <varlistentry id="guc-krb-server-hostname" xreflabel="krb_server_hostname">
+      <term><varname>krb_server_hostname</varname> (<type>string</type>)</term>
+      <indexterm>
+       <primary><varname>krb_server_hostname</> configuration parameter</primary>
+      </indexterm>
+      <listitem>
+       <para>
+        Sets the hostname part of the service principal.
+        This, combined with <varname>krb_srvname</>, is used to generate
+        the complete service principal, i.e.
+        <varname>krb_server_hostname</><literal>/</><varname>krb_server_hostname</><literal>@</>REALM.
+       </para>
+       <para>
+        If not set, the default is to allow any service principal matching an entry
+        in the keytab.  See <xref linkend="kerberos-auth"> for details.
+        This parameter can only be set at server start.
+       </para>
+      </listitem>
+     </varlistentry>
 
      <varlistentry id="guc-db-user-namespace" xreflabel="db_user_namespace">
       <term><varname>db_user_namespace</varname> (<type>boolean</type>)</term>
index 7970f817561bbac85eac1ef6ecfa07932674bb2f..a50227068ba4692d130be3b27aab90cc6086195e 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.124 2005/06/04 20:42:42 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/libpq/auth.c,v 1.125 2005/06/14 17:43:13 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -43,6 +43,7 @@ static int    recv_and_check_password_packet(Port *port);
 char      *pg_krb_server_keyfile;
 char       *pg_krb_srvnam;
 bool       pg_krb_caseins_users;
+char      *pg_krb_server_hostname = NULL;
 
 #ifdef USE_PAM
 #ifdef HAVE_PAM_PAM_APPL_H
@@ -221,20 +222,25 @@ pg_krb5_init(void)
        return STATUS_ERROR;
    }
 
-   retval = krb5_sname_to_principal(pg_krb5_context, NULL, pg_krb_srvnam,
-                                    KRB5_NT_SRV_HST, &pg_krb5_server);
-   if (retval)
+   if (pg_krb_server_hostname)
    {
-       ereport(LOG,
-        (errmsg("Kerberos sname_to_principal(\"%s\") returned error %d",
-                pg_krb_srvnam, retval)));
-       com_err("postgres", retval,
-               "while getting server principal for service \"%s\"",
-               pg_krb_srvnam);
-       krb5_kt_close(pg_krb5_context, pg_krb5_keytab);
-       krb5_free_context(pg_krb5_context);
-       return STATUS_ERROR;
-   }
+       retval = krb5_sname_to_principal(pg_krb5_context, 
+                   pg_krb_server_hostname, pg_krb_srvnam,
+                   KRB5_NT_SRV_HST, &pg_krb5_server);
+       if (retval)
+       {
+           ereport(LOG,
+           (errmsg("Kerberos sname_to_principal(\"%s\") returned error %d",
+                   pg_krb_srvnam, retval)));
+           com_err("postgres", retval,
+                   "while getting server principal for service \"%s\"",
+                   pg_krb_srvnam);
+           krb5_kt_close(pg_krb5_context, pg_krb5_keytab);
+           krb5_free_context(pg_krb5_context);
+           return STATUS_ERROR;
+       }
+   } else
+       pg_krb5_server = NULL;
 
    pg_krb5_initialised = 1;
    return STATUS_OK;
index 3d57509548f46ff74dcefd832050192b7caa83e1..073aae2a2357a77e11f391ff7f922d323e7842b4 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.264 2005/06/04 20:42:42 momjian Exp $
+ *   $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.265 2005/06/14 17:43:13 momjian Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -1593,6 +1593,15 @@ static struct config_string ConfigureNamesString[] =
        PG_KRB_SRVNAM, NULL, NULL
    },
 
+   {
+       {"krb_server_hostname", PGC_POSTMASTER, CONN_AUTH_SECURITY,
+           gettext_noop("Sets the hostname of the Kerberos server."),
+           NULL
+       },
+       &pg_krb_server_hostname,
+       NULL, NULL, NULL
+   },
+
    {
        {"bonjour_name", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
            gettext_noop("Sets the Bonjour broadcast service name."),
index 3d1ce4ca122d759645fb378ccdeb672ecd862bc8..2b215d97286d5c5e7ceaec378b9a6383734c5245 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2005, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.130 2005/05/25 22:12:05 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.131 2005/06/14 17:43:14 momjian Exp $
  */
 
 /*----------------------------------------------------------------------
@@ -559,7 +559,6 @@ psql_completion(char *text, int start, int end)
        "geqo_selection_bias",
        "geqo_threshold",
        "join_collapse_limit",
-       "krb_server_keyfile",
        "lc_messages",
        "lc_monetary",
        "lc_numeric",
index b8fd25eb64f6c9620d1b8b90efb1bbacc71b5924..94b0976e113a3dc4ee1e3cd5c57dda9906baac6a 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/libpq/auth.h,v 1.27 2005/06/04 20:42:42 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/libpq/auth.h,v 1.28 2005/06/14 17:43:14 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,5 +29,6 @@ extern void ClientAuthentication(Port *port);
 extern char *pg_krb_server_keyfile;
 extern char *pg_krb_srvnam;
 extern bool pg_krb_caseins_users;
+extern char *pg_krb_server_hostname;
 
 #endif   /* AUTH_H */