1. 12 Aug, 2017 1 commit
  2. 11 Aug, 2017 11 commits
  3. 10 Aug, 2017 5 commits
  4. 09 Aug, 2017 2 commits
    • Tom Lane's avatar
      Fix handling of container types in find_composite_type_dependencies. · 749c7c41
      Tom Lane authored
      find_composite_type_dependencies correctly found columns that are of
      the specified type, and columns that are of arrays of that type, but
      not columns that are domains or ranges over the given type, its array
      type, etc.  The most general way to handle this seems to be to assume
      that any type that is directly dependent on the specified type can be
      treated as a container type, and processed recursively (allowing us
      to handle nested cases such as ranges over domains over arrays ...).
      Since a type's array type already has such a dependency, we can drop
      the existing special case for the array type.
      
      The very similar logic in get_rels_with_domain was likewise a few
      bricks shy of a load, as it supposed that a directly dependent type
      could *only* be a sub-domain.  This is already wrong for ranges over
      domains, and it'll someday be wrong for arrays over domains.
      
      Add test cases illustrating the problems, and back-patch to all
      supported branches.
      
      Discussion: https://postgr.es/m/15268.1502309024@sss.pgh.pa.us
      749c7c41
    • Tom Lane's avatar
      Prevent passing down MAKELEVEL/MAKEFLAGS from non-GNU make to GNU make. · a76200de
      Tom Lane authored
      FreeBSD's make, for one, sets the MAKELEVEL environment variable when
      invoking commands.  In the special Makefile we provide to hand off control
      from a non-GNU make to GNU make, this causes GNU make to think it is a
      child make invocation rather than top-level.  That interferes with the hack
      added in commit dcae5fac to cause the temp-install tree to be made only by
      the top-level invocation of gmake.  Unset the variable to prevent that.
      
      Likewise unset MAKEFLAGS, which FreeBSD's make also sets, and which could
      easily confuse gmake.  There are no reports of actual trouble from that,
      but it seems better to be proactive.
      
      Back-patch to 9.5 where dcae5fac came in.
      
      Thomas Munro, hacked a bit more by me
      
      Discussion: https://postgr.es/m/CAEepm=1ueww35AXTkt1A3gyzZUqv5XCzh8RUNvJZAQAW=eOhVw@mail.gmail.com
      a76200de
  5. 08 Aug, 2017 8 commits
    • Peter Eisentraut's avatar
    • Tom Lane's avatar
      Fix datumSerialize infrastructure to not crash on non-varlena data. · 9bf4068c
      Tom Lane authored
      Commit 1efc7e53 did a poor job of emulating existing logic for touching
      Datums that might be expanded-object pointers.  It didn't check for typlen
      being -1 first, which meant it could crash on fixed-length pass-by-ref
      values, and probably on cstring values as well.  It also didn't use
      DatumGetPointer before VARATT_IS_EXTERNAL_EXPANDED, which while currently
      harmless is not according to documentation nor prevailing style.
      
      I also think the lack of any explanation as to why datumSerialize makes
      these particular nonobvious choices is pretty awful, so fix that.
      
      Per report from Jarred Ward.  Back-patch to 9.6 where this code came in.
      
      Discussion: https://postgr.es/m/6F61E6D2-2F5E-4794-9479-A429BE1CEA4B@simple.com
      9bf4068c
    • Alvaro Herrera's avatar
      Reword some unclear comments · 77d2c00a
      Alvaro Herrera authored
      77d2c00a
    • Alvaro Herrera's avatar
      Fix typo in comment · f5d54ef9
      Alvaro Herrera authored
      f5d54ef9
    • Tom Lane's avatar
      Fix yet another race condition in recovery/t/001_stream_rep.pl. · 4576a693
      Tom Lane authored
      In commit 5c77690f, we added polling in front of most of the
      get_slot_xmins calls in 001_stream_rep.pl, but today's results from
      buildfarm member nightjar show that at least one more poll loop
      is needed.
      
      Proactively add a poll loop before the next-to-last get_slot_xmins call
      as well.  It may be that there is no race condition there because the
      standby_2 server is shut down at that point, but I'm quite tired of
      fighting with this test script.  The empirical evidence that it's safe,
      from the buildfarm, is no stronger than the evidence for the other
      call that nightjar just proved unsafe.
      
      The only remaining get_slot_xmins calls without wait_slot_xmins
      protection are the first two, which should be OK since nothing has
      happened at that point.  It's tempting to ignore that special case
      and merge get_slot_xmins and wait_slot_xmins into a single function.
      I didn't go that far though.
      
      Discussion: https://postgr.es/m/18436.1502228036@sss.pgh.pa.us
      4576a693
    • Alvaro Herrera's avatar
      Fix replication origin-related race conditions · b2c95a37
      Alvaro Herrera authored
      Similar to what was fixed in commit 9915de6c for replication slots,
      but this time it's related to replication origins: DROP SUBSCRIPTION
      attempts to drop the replication origin, but that fails if the
      replication worker process hasn't yet marked it unused.  This causes
      failures in the buildfarm:
      ERROR:  could not drop replication origin with OID 1, in use by PID 34069
      
      Like the aforementioned commit, fix by having the process running DROP
      SUBSCRIPTION sleep until the worker marks the the replication origin
      struct as free.  This uses a condition variable on each replication
      origin shmem state struct, so that the session trying to drop can sleep
      and expect to be awakened by the process keeping the origin open.
      
      Also fix a SGML markup in the previous commit.
      
      Discussion: https://postgr.es/m/20170808001433.rozlseaf4m2wkw3n@alvherre.pgsql
      b2c95a37
    • Alvaro Herrera's avatar
      Fix inadequacies in recently added wait events · 030273b7
      Alvaro Herrera authored
      In commit 9915de6c, we introduced a new wait point for replication
      slots and incorrectly labelled it as wait event PG_WAIT_LOCK.  That's
      wrong, so invent an appropriate new wait event instead, and document it
      properly.
      
      While at it, fix numerous other problems in the vicinity:
      - two different walreceiver wait events were being mixed up in a single
        wait event (which wasn't documented either); split it out so that they
        can be distinguished, and document the new events properly.
      
      - ParallelBitmapPopulate was documented but didn't exist.
      
      - ParallelBitmapScan was not documented (I think this should be called
        "ParallelBitmapScanInit" instead.)
      
      - Logical replication wait events weren't documented
      
      - various symbols had been added in dartboard order in various places.
        Put them in alphabetical order instead, as was originally intended.
      
      Discussion: https://postgr.es/m/20170808181131.mu4fjepuh5m75cyq@alvherre.pgsql
      030273b7
    • Noah Misch's avatar
      Disclaim xmltable() support for non-UTF8 databases. · b4a2eea0
      Noah Misch authored
      The xmltable() implementation mirrors xpath(), including its lack of
      character encoding awareness.
      b4a2eea0
  6. 07 Aug, 2017 13 commits
    • Tom Lane's avatar
      Stamp 10beta3. · 8d644237
      Tom Lane authored
      8d644237
    • Tom Lane's avatar
      Skip test for IPC::Run if user is overriding our search for PROVE. · 8014d2af
      Tom Lane authored
      The check for IPC::Run we added in commit c254970a is useful in simple
      cases, but there are real use-cases where "prove" is coming from a
      different Perl installation than the "perl" we want to use to build.
      In such cases asking whether "perl" knows about IPC::Run is irrelevant
      and can cause an unnecessary configure failure.  Hence, if user has
      specified a value for PROVE, skip the IPC::Run check.  Per discussion
      with Andrew Dunstan.
      
      Discussion: https://postgr.es/m/E1dcE5n-0005Sk-UE@gemulon.postgresql.org
      8014d2af
    • Peter Eisentraut's avatar
      Update SQL features list · cdc47d1f
      Peter Eisentraut authored
      cdc47d1f
    • Peter Eisentraut's avatar
      Translation updates · f7668b2b
      Peter Eisentraut authored
      Source-Git-URL: git://git.postgresql.org/git/pgtranslation/messages.git
      Source-Git-Hash: 1a0b5e655d7871506c2b1c7ba562c2de6b6a55de
      f7668b2b
    • Tom Lane's avatar
      Last-minute updates for release notes. · a8b37ebe
      Tom Lane authored
      Security: CVE-2017-7546, CVE-2017-7547, CVE-2017-7548
      a8b37ebe
    • Peter Eisentraut's avatar
      Fix local/remote attribute mix-up in logical replication · fca17a93
      Peter Eisentraut authored
      This would lead to failures if local and remote tables have a different
      column order.  The tests previously didn't catch that because they only
      tested the initial data copy.  So add another test that exercises the
      apply worker.
      
      Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
      fca17a93
    • Peter Eisentraut's avatar
      Fix handling of dropped columns in logical replication · 0e58455d
      Peter Eisentraut authored
      The relation attribute map was not initialized for dropped columns,
      leading to errors later on.
      
      Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
      Reported-by: default avatarScott Milliken <scott@deltaex.com>
      Bug: #14769
      0e58455d
    • Tom Lane's avatar
      Require update permission for the large object written by lo_put(). · 8d988191
      Tom Lane authored
      lo_put() surely should require UPDATE permission, the same as lowrite(),
      but it failed to check for that, as reported by Chapman Flack.  Oversight
      in commit c50b7c09; backpatch to 9.4 where that was introduced.
      
      Tom Lane and Michael Paquier
      
      Security: CVE-2017-7548
      8d988191
    • Noah Misch's avatar
      Again match pg_user_mappings to information_schema.user_mapping_options. · e568e1ee
      Noah Misch authored
      Commit 3eefc510 claimed to make
      pg_user_mappings enforce the qualifications user_mapping_options had
      been enforcing, but its removal of a longstanding restriction left them
      distinct when the current user is the subject of a mapping yet has no
      server privileges.  user_mapping_options emits no rows for such a
      mapping, but pg_user_mappings includes full umoptions.  Change
      pg_user_mappings to show null for umoptions.  Back-patch to 9.2, like
      the above commit.
      
      Reviewed by Tom Lane.  Reported by Jeff Janes.
      
      Security: CVE-2017-7547
      e568e1ee
    • Heikki Linnakangas's avatar
      Don't allow logging in with empty password. · bf6b9e94
      Heikki Linnakangas authored
      Some authentication methods allowed it, others did not. In the client-side,
      libpq does not even try to authenticate with an empty password, which makes
      using empty passwords hazardous: an administrator might think that an
      account with an empty password cannot be used to log in, because psql
      doesn't allow it, and not realize that a different client would in fact
      allow it. To clear that confusion and to be be consistent, disallow empty
      passwords in all authentication methods.
      
      All the authentication methods that used plaintext authentication over the
      wire, except for BSD authentication, already checked that the password
      received from the user was not empty. To avoid forgetting it in the future
      again, move the check to the recv_password_packet function. That only
      forbids using an empty password with plaintext authentication, however.
      MD5 and SCRAM need a different fix:
      
      * In stable branches, check that the MD5 hash stored for the user does not
      not correspond to an empty string. This adds some overhead to MD5
      authentication, because the server needs to compute an extra MD5 hash, but
      it is not noticeable in practice.
      
      * In HEAD, modify CREATE and ALTER ROLE to clear the password if an empty
      string, or a password hash that corresponds to an empty string, is
      specified. The user-visible behavior is the same as in the stable branches,
      the user cannot log in, but it seems better to stop the empty password from
      entering the system in the first place. Secondly, it is fairly expensive to
      check that a SCRAM hash doesn't correspond to an empty string, because
      computing a SCRAM hash is much more expensive than an MD5 hash by design,
      so better avoid doing that on every authentication.
      
      We could clear the password on CREATE/ALTER ROLE also in stable branches,
      but we would still need to check at authentication time, because even if we
      prevent empty passwords from being stored in pg_authid, there might be
      existing ones there already.
      
      Reported by Jeroen van der Ham, Ben de Graaff and Jelte Fennema.
      
      Security: CVE-2017-7546
      bf6b9e94
    • Peter Eisentraut's avatar
      Fix function name in code comment · 86524f03
      Peter Eisentraut authored
      Reported-by: default avatarPeter Geoghegan <pg@bowt.ie>
      86524f03
    • Peter Eisentraut's avatar
    • Peter Eisentraut's avatar
      Downgrade subscription refresh messages to DEBUG1 · 6f81306e
      Peter Eisentraut authored
      The NOTICE messages about tables being added or removed during
      subscription refresh would be incorrect and possibly confusing if the
      transaction rolls back, so silence them but keep them available for
      debugging.
      
      Discussion: https://www.postgresql.org/message-id/CAD21AoAvaXizc2h7aiNyK_i0FQSa-tmhpdOGwbhh7Jy544Ad4Q%40mail.gmail.com
      6f81306e