1. 15 Aug, 2012 5 commits
    • Tom Lane's avatar
      Disallow extensions from owning the schema they are assigned to. · 4d642b59
      Tom Lane authored
      This situation creates a dependency loop that confuses pg_dump and probably
      other things.  Moreover, since the mental model is that the extension
      "contains" schemas it owns, but "is contained in" its extschema (even
      though neither is strictly true), having both true at once is confusing for
      people too.  So prevent the situation from being set up.
      
      Reported and patched by Thom Brown.  Back-patch to 9.1 where extensions
      were added.
      4d642b59
    • Bruce Momjian's avatar
      Properly escape usernames in initdb, so names with single-quotes are · a9732965
      Bruce Momjian authored
      supported.  Also add assert to catch future breakage.
      
      Also, improve documentation that "double"-quotes must be used in
      pg_hba.conf (not single quotes).
      a9732965
    • Tom Lane's avatar
      Resurrect the "last ditch" code path in join_search_one_level(). · eb919e8f
      Tom Lane authored
      This essentially reverts commit e54b10a6,
      in which I'd decided that the "last ditch" join logic was useless.  The
      folly of that is now exposed by a report from Pavel Stehule: although the
      function should always find at least one join in a self-contained join
      problem, it can still fail to do so in a sub-problem created by artificial
      from_collapse_limit or join_collapse_limit constraints.  Adjust the
      comments to describe this, and simplify the code a bit to match the new
      coding of the earlier loop in the function.
      
      I'm not terribly happy about this: I still subscribe to the opinion stated
      in the previous commit message that the "last ditch" code can obscure logic
      bugs elsewhere.  But the alternative seems to be to complicate the earlier
      tests for does-this-relation-have-a-join-clause to the point where they can
      tell whether the join clauses link outside the current join sub-problem.
      And that looks messy, slow, and possibly a source of bugs in itself.
      In any case, now is not the time to be inserting experimental code into
      9.2, so let's just go back to the time-tested solution.
      eb919e8f
    • Bruce Momjian's avatar
      864de654
    • Bruce Momjian's avatar
      Add doc example of restricting large object trigger firing to only · 9e84cccf
      Bruce Momjian authored
      updates of the column of interest.
      9e84cccf
  2. 14 Aug, 2012 7 commits
    • Tom Lane's avatar
      e45ae401
    • Tom Lane's avatar
      Prevent access to external files/URLs via contrib/xml2's xslt_process(). · adc97d03
      Tom Lane authored
      libxslt offers the ability to read and write both files and URLs through
      stylesheet commands, thus allowing unprivileged database users to both read
      and write data with the privileges of the database server.  Disable that
      through proper use of libxslt's security options.
      
      Also, remove xslt_process()'s ability to fetch documents and stylesheets
      from external files/URLs.  While this was a documented "feature", it was
      long regarded as a terrible idea.  The fix for CVE-2012-3489 broke that
      capability, and rather than expend effort on trying to fix it, we're just
      going to summarily remove it.
      
      While the ability to write as well as read makes this security hole
      considerably worse than CVE-2012-3489, the problem is mitigated by the fact
      that xslt_process() is not available unless contrib/xml2 is installed,
      and the longstanding warnings about security risks from that should have
      discouraged prudent DBAs from installing it in security-exposed databases.
      
      Reported and fixed by Peter Eisentraut.
      
      Security: CVE-2012-3488
      adc97d03
    • Tom Lane's avatar
      Prevent access to external files/URLs via XML entity references. · 17351fce
      Tom Lane authored
      xml_parse() would attempt to fetch external files or URLs as needed to
      resolve DTD and entity references in an XML value, thus allowing
      unprivileged database users to attempt to fetch data with the privileges
      of the database server.  While the external data wouldn't get returned
      directly to the user, portions of it could be exposed in error messages
      if the data didn't parse as valid XML; and in any case the mere ability
      to check existence of a file might be useful to an attacker.
      
      The ideal solution to this would still allow fetching of references that
      are listed in the host system's XML catalogs, so that documents can be
      validated according to installed DTDs.  However, doing that with the
      available libxml2 APIs appears complex and error-prone, so we're not going
      to risk it in a security patch that necessarily hasn't gotten wide review.
      So this patch merely shuts off all access, causing any external fetch to
      silently expand to an empty string.  A future patch may improve this.
      
      In HEAD and 9.2, also suppress warnings about undefined entities, which
      would otherwise occur as a result of not loading referenced DTDs.  Previous
      branches don't show such warnings anyway, due to different error handling
      arrangements.
      
      Credit to Noah Misch for first reporting the problem, and for much work
      towards a solution, though this simplistic approach was not his preference.
      Also thanks to Daniel Veillard for consultation.
      
      Security: CVE-2012-3489
      17351fce
    • Bruce Momjian's avatar
      Revert "commit_delay" change; just add comment that we don't have · 03bda453
      Bruce Momjian authored
      a microsecond specification.
      03bda453
    • Bruce Momjian's avatar
      Add pg_settings units display for "commit_delay" (ms). · e7472744
      Bruce Momjian authored
      Also remove unnecessary units designation in postgresql.conf.sample.
      e7472744
    • Bruce Momjian's avatar
      In documentation, change "recommendable" to "recommended", per · 1d96cf94
      Bruce Momjian authored
      consultation with word definitions.
      
      Backpatch to 9.2.
      1d96cf94
    • Tom Lane's avatar
      Update time zone data files to tzdata release 2012e. · 51fd748e
      Tom Lane authored
      DST law changes in Morocco; Tokelau has relocated to the other side of
      the International Date Line; and apparently Olson had Tokelau's GMT
      offset wrong by an hour even before that.
      
      There are also a large number of non-significant changes in this update.
      Upstream took the opportunity to remove trailing whitespace, and the
      SCCS-style version numbers on the individual files are gone too.
      51fd748e
  3. 13 Aug, 2012 1 commit
    • Heikki Linnakangas's avatar
      Add runtime checks for number of query parameters passed to libpq functions. · f86e6ba4
      Heikki Linnakangas authored
      The maximum number of parameters supported by the FE/BE protocol is 65535,
      as it's transmitted as a 16-bit unsigned integer. However, the nParams
      arguments to libpq functions are all of type 'int'. We can't change the
      signature of libpq functions, but a simple bounds check is in order to make
      it more clear what's going wrong if you try to pass more than 65535
      parameters.
      
      Per complaint from Jim Vanns.
      f86e6ba4
  4. 12 Aug, 2012 1 commit
    • Tom Lane's avatar
      More fixes for planner's handling of LATERAL. · c1774d2c
      Tom Lane authored
      Re-allow subquery pullup for LATERAL subqueries, except when the subquery
      is below an outer join and contains lateral references to relations outside
      that outer join.  If we pull up in such a case, we risk introducing lateral
      cross-references into outer joins' ON quals, which is something the code is
      entirely unprepared to cope with right now; and I'm not sure it'll ever be
      worth coping with.
      
      Support lateral refs in VALUES (this seems to be the only additional path
      type that needs such support as a consequence of re-allowing subquery
      pullup).
      
      Put in a slightly hacky fix for joinpath.c's refusal to consider
      parameterized join paths even when there cannot be any unparameterized
      ones.  This was causing "could not devise a query plan for the given query"
      failures in queries involving more than two FROM items.
      
      Put in an even more hacky fix for distribute_qual_to_rels() being unhappy
      with join quals that contain references to rels outside their syntactic
      scope; which is to say, disable that test altogether.  Need to think about
      how to preserve some sort of debugging cross-check here, while not
      expending more cycles than befits a debugging cross-check.
      c1774d2c
  5. 11 Aug, 2012 3 commits
    • Tom Lane's avatar
      Fix some issues with LATERAL(SELECT UNION ALL SELECT). · e76af541
      Tom Lane authored
      The LATERAL marking has to be propagated down to the UNION leaf queries
      when we pull them up.  Also, fix the formerly stubbed-off
      set_append_rel_pathlist().  It does already have enough smarts to cope with
      making a parameterized Append path at need; it just has to not assume that
      there *must* be an unparameterized path.
      e76af541
    • Tom Lane's avatar
      Add link from COPY ref page to psql \copy. · 83af58f6
      Tom Lane authored
      Jeff Janes
      83af58f6
    • Tom Lane's avatar
      Fix dependencies generated during ALTER TABLE ADD CONSTRAINT USING INDEX. · b5380035
      Tom Lane authored
      This command generated new pg_depend entries linking the index to the
      constraint and the constraint to the table, which match the entries made
      when a unique or primary key constraint is built de novo.  However, it did
      not bother to get rid of the entries linking the index directly to the
      table.  We had considered the issue when the ADD CONSTRAINT USING INDEX
      patch was written, and concluded that we didn't need to get rid of the
      extra entries.  But this is wrong: ALTER COLUMN TYPE wasn't expecting such
      redundant dependencies to exist, as reported by Hubert Depesz Lubaczewski.
      On reflection it seems rather likely to break other things as well, since
      there are many bits of code that crawl pg_depend for one purpose or
      another, and most of them are pretty naive about what relationships they're
      expecting to find.  Fortunately it's not that hard to get rid of the extra
      dependency entries, so let's do that.
      
      Back-patch to 9.1, where ALTER TABLE ADD CONSTRAINT USING INDEX was added.
      b5380035
  6. 10 Aug, 2012 7 commits
    • Tom Lane's avatar
      Update overlooked comment. · a67d6d9a
      Tom Lane authored
      a67d6d9a
    • Tom Lane's avatar
      Support having multiple Unix-domain sockets per postmaster. · c9b0cbe9
      Tom Lane authored
      Replace unix_socket_directory with unix_socket_directories, which is a list
      of socket directories, and adjust postmaster's code to allow zero or more
      Unix-domain sockets to be created.
      
      This is mostly a straightforward change, but since the Unix sockets ought
      to be created after the TCP/IP sockets for safety reasons (better chance
      of detecting a port number conflict), AddToDataDirLockFile needs to be
      fixed to support out-of-order updates of data directory lockfile lines.
      That's a change that had been foreseen to be necessary someday anyway.
      
      Honza Horak, reviewed and revised by Tom Lane
      c9b0cbe9
    • Bruce Momjian's avatar
      Prevent pg_upgrade from crashing if it can't write to the current · 85642ec0
      Bruce Momjian authored
      directory.
      
      Backpatch to 9.2.
      85642ec0
    • Bruce Momjian's avatar
      Adjust pgtest coding to be less complex. · 914b1301
      Bruce Momjian authored
      914b1301
    • Bruce Momjian's avatar
    • Tom Lane's avatar
      Centralize the logic for detecting misplaced aggregates, window funcs, etc. · eaccfded
      Tom Lane authored
      Formerly we relied on checking after-the-fact to see if an expression
      contained aggregates, window functions, or sub-selects when it shouldn't.
      This is grotty, easily forgotten (indeed, we had forgotten to teach
      DefineIndex about rejecting window functions), and none too efficient
      since it requires extra traversals of the parse tree.  To improve matters,
      define an enum type that classifies all SQL sub-expressions, store it in
      ParseState to show what kind of expression we are currently parsing, and
      make transformAggregateCall, transformWindowFuncCall, and transformSubLink
      check the expression type and throw error if the type indicates the
      construct is disallowed.  This allows removal of a large number of ad-hoc
      checks scattered around the code base.  The enum type is sufficiently
      fine-grained that we can still produce error messages of at least the
      same specificity as before.
      
      Bringing these error checks together revealed that we'd been none too
      consistent about phrasing of the error messages, so standardize the wording
      a bit.
      
      Also, rewrite checking of aggregate arguments so that it requires only one
      traversal of the arguments, rather than up to three as before.
      
      In passing, clean up some more comments left over from add_missing_from
      support, and annotate some tests that I think are dead code now that that's
      gone.  (I didn't risk actually removing said dead code, though.)
      eaccfded
    • Magnus Hagander's avatar
      Fix upper limit of superuser_reserved_connections, add limit for wal_senders · b3055ab4
      Magnus Hagander authored
      Should be limited to the maximum number of connections excluding
      autovacuum workers, not including.
      
      Add similar check for max_wal_senders, which should never be higher than
      max_connections.
      b3055ab4
  7. 09 Aug, 2012 3 commits
  8. 08 Aug, 2012 8 commits
  9. 07 Aug, 2012 5 commits
    • Tom Lane's avatar
      Implement SQL-standard LATERAL subqueries. · 5ebaaa49
      Tom Lane authored
      This patch implements the standard syntax of LATERAL attached to a
      sub-SELECT in FROM, and also allows LATERAL attached to a function in FROM,
      since set-returning function calls are expected to be one of the principal
      use-cases.
      
      The main change here is a rewrite of the mechanism for keeping track of
      which relations are visible for column references while the FROM clause is
      being scanned.  The parser "namespace" lists are no longer lists of bare
      RTEs, but are lists of ParseNamespaceItem structs, which carry an RTE
      pointer as well as some visibility-controlling flags.  Aside from
      supporting LATERAL correctly, this lets us get rid of the ancient hacks
      that required rechecking subqueries and JOIN/ON and function-in-FROM
      expressions for invalid references after they were initially parsed.
      Invalid column references are now always correctly detected on sight.
      
      In passing, remove assorted parser error checks that are now dead code by
      virtue of our having gotten rid of add_missing_from, as well as some
      comments that are obsolete for the same reason.  (It was mainly
      add_missing_from that caused so much fudging here in the first place.)
      
      The planner support for this feature is very minimal, and will be improved
      in future patches.  It works well enough for testing purposes, though.
      
      catversion bump forced due to new field in RangeTblEntry.
      5ebaaa49
    • Tom Lane's avatar
      Tweak new Perl pgindent for compatibility with middle-aged Perls. · 5078be48
      Tom Lane authored
      We seem to have a rough policy that our Perl scripts should work with
      Perl 5.8, so make this one do so.  Main change is to not use the newfangled
      \h character class in regexes; "[ \t]" is a serviceable replacement.
      5078be48
    • Robert Haas's avatar
      Fix memory leaks in event trigger code. · eea65943
      Robert Haas authored
      Spotted by Jeff Davis.
      eea65943
    • Bruce Momjian's avatar
      Fix to_char(), to_date(), and to_timestamp() to handle negative/BC · ac78c417
      Bruce Momjian authored
      century specifications just like positive/AD centuries.  Previously the
      behavior was either wrong or inconsistent with positive/AD handling.
      
      Centuries without years now always assume the first year of the century,
      which is now documented.
      ac78c417
    • Bruce Momjian's avatar
      Fix pg_upgrade file share violation on Windows created by the commit · fbcfa90b
      Bruce Momjian authored
      4741e9af.  This was done by adding an
      optional second log file parameter to exec_prog(), and closing and
      reopening the log file between system() calls.
      
      Backpatch to 9.2.
      fbcfa90b