aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/init/flatfiles.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-06-12 17:16:52 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-06-12 17:16:52 +0000
commit152133bfaf5f34add7e1d85037e5c7cdc4a9d495 (patch)
treed463bcece861a3f5765dfe0612f57bf8ccb6b43b /src/backend/utils/init/flatfiles.c
parent8be9b50ab4776566374815425f3d61ec92b4ad93 (diff)
downloadpostgresql-152133bfaf5f34add7e1d85037e5c7cdc4a9d495.tar.gz
postgresql-152133bfaf5f34add7e1d85037e5c7cdc4a9d495.zip
Add some comments about the safety of accessing rolpassword without using
the normal heap_getattr() machinery. Per Greg Stark.
Diffstat (limited to 'src/backend/utils/init/flatfiles.c')
-rw-r--r--src/backend/utils/init/flatfiles.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/backend/utils/init/flatfiles.c b/src/backend/utils/init/flatfiles.c
index e388d1edfdc..992fc70bb44 100644
--- a/src/backend/utils/init/flatfiles.c
+++ b/src/backend/utils/init/flatfiles.c
@@ -23,7 +23,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.25 2007/04/06 04:21:43 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.26 2007/06/12 17:16:52 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -441,7 +441,10 @@ write_auth_file(Relation rel_authid, Relation rel_authmem)
* We can't use heap_getattr() here because during startup we will not
* have any tupdesc for pg_authid. Fortunately it's not too hard to
* work around this. rolpassword is the first possibly-null field so
- * we can compute its offset directly.
+ * we can compute its offset directly. Note that this only works
+ * reliably because the preceding field (rolconnlimit) is int4, and
+ * therefore rolpassword is always 4-byte-aligned, and will be at
+ * the same offset no matter whether it uses 1-byte or 4-byte header.
*/
tp = (char *) tup + tup->t_hoff;
off = offsetof(FormData_pg_authid, rolpassword);
@@ -460,6 +463,10 @@ write_auth_file(Relation rel_authid, Relation rel_authmem)
/*
* The password probably shouldn't ever be out-of-line toasted; if
* it is, ignore it, since we can't handle that in startup mode.
+ *
+ * It is entirely likely that it's 1-byte format not 4-byte, and
+ * theoretically possible that it's compressed inline, but textout
+ * should be able to handle those cases even in startup mode.
*/
if (VARATT_IS_EXTERNAL(DatumGetPointer(datum)))
auth_info[curr_role].rolpassword = pstrdup("");