Refactor hba_authname
authorMagnus Hagander <magnus@hagander.net>
Wed, 7 Apr 2021 12:21:19 +0000 (14:21 +0200)
committerMagnus Hagander <magnus@hagander.net>
Wed, 7 Apr 2021 12:24:47 +0000 (14:24 +0200)
The previous implementation (from 9afffcb833) had an unnecessary check
on the boundaries of the enum which trigtered compile warnings. To clean
it up, move the pre-existing static assert to a central location and
call that.

Reported-By: Erik Rijkers
Reviewed-By: Michael Paquier
Discussion: https://postgr.es/m/1056399262.13159.1617793249020@webmailclassic.xs4all.nl

src/backend/libpq/auth.c
src/backend/libpq/hba.c
src/include/libpq/hba.h

index dee056b0d653776f2391706c006f1c07f64e30d1..27865b14a033b01a62e2f36ade1c9a2459ca583a 100644 (file)
@@ -379,7 +379,7 @@ set_authn_id(Port *port, const char *id)
                ereport(LOG,
                                errmsg("connection authenticated: identity=\"%s\" method=%s "
                                           "(%s:%d)",
-                                          port->authn_id, hba_authname(port), HbaFileName,
+                                          port->authn_id, hba_authname(port->hba->auth_method), HbaFileName,
                                           port->hba->linenumber));
        }
 }
index b720b03e9a5bb615b6c9744def5e28b2597d6987..60767f295722a3acba0f2fa07bb0a268a2389764 100644 (file)
@@ -2607,14 +2607,8 @@ fill_hba_line(Tuplestorestate *tuple_store, TupleDesc tupdesc,
                else
                        nulls[index++] = true;
 
-               /*
-                * Make sure UserAuthName[] tracks additions to the UserAuth enum
-                */
-               StaticAssertStmt(lengthof(UserAuthName) == USER_AUTH_LAST + 1,
-                                                "UserAuthName[] must match the UserAuth enum");
-
                /* auth_method */
-               values[index++] = CStringGetTextDatum(UserAuthName[hba->auth_method]);
+               values[index++] = CStringGetTextDatum(hba_authname(hba->auth_method));
 
                /* options */
                options = gethba_options(hba);
@@ -3150,18 +3144,13 @@ hba_getauthmethod(hbaPort *port)
  * should not be freed.
  */
 const char *
-hba_authname(hbaPort *port)
+hba_authname(UserAuth auth_method)
 {
-       UserAuth        auth_method;
-
-       Assert(port->hba);
-       auth_method = port->hba->auth_method;
-
-       if (auth_method < 0 || USER_AUTH_LAST < auth_method)
-       {
-               /* Should never happen. */
-               elog(FATAL, "port has out-of-bounds UserAuth: %d", auth_method);
-       }
+       /*
+        * Make sure UserAuthName[] tracks additions to the UserAuth enum
+        */
+       StaticAssertStmt(lengthof(UserAuthName) == USER_AUTH_LAST + 1,
+                                        "UserAuthName[] must match the UserAuth enum");
 
        return UserAuthName[auth_method];
 }
index 63f2962139ff88ef38a8cc0e7e9e7729d8062e9b..8d9f3821b1284824900071dad347234901e85e21 100644 (file)
@@ -137,7 +137,7 @@ typedef struct Port hbaPort;
 
 extern bool load_hba(void);
 extern bool load_ident(void);
-extern const char *hba_authname(hbaPort *port);
+extern const char *hba_authname(UserAuth auth_method);
 extern void hba_getauthmethod(hbaPort *port);
 extern int     check_usermap(const char *usermap_name,
                                                  const char *pg_role, const char *auth_user,