1. 26 6月, 2002 1 次提交
    • B
      The attached patch fixes some spelling mistakes, makes the · ed275aea
      Bruce Momjian 提交于
      comments on one of the optimizer functions a lot more
      clear, adds a summary of the recent KSQO discussion to the
      comments in the code, adds regression tests for the bug with
      sequence state Tom fixed recently and another reg. test, and
      removes some PostQuel legacy stuff: ExecAppend -> ExecInsert,
      ExecRetrieve -> ExecSelect, etc. This was changed because the
      elog() messages from this routine are user-visible, so we
      should be using the SQL terms.
      
      Neil Conway
      ed275aea
  2. 22 6月, 2002 1 次提交
  3. 21 6月, 2002 4 次提交
  4. 19 6月, 2002 2 次提交
  5. 16 6月, 2002 5 次提交
  6. 14 6月, 2002 4 次提交
    • B
      SSL patch that adds support for optional client certificates. · eb7afc14
      Bruce Momjian 提交于
      If the user has certificates in $HOME/.postgresql/postgresql.crt
      and $HOME/.postgresql/postgresql.key exist, they are provided
      to the server.  The certificate used to sign this cert must be
      known to the server, in $DataDir/root.crt.  If successful, the
      cert's "common name" is logged.
      
      Client certs are not used for authentication, but they could be
      via the port->peer (X509 *), port->peer_dn (char *) or
      port->peer_cn (char *) fields.  Or any other function could be
      used, e.g., many sites like the issuer + serial number hash.
      
      Bear Giles
      eb7afc14
    • B
      SSL patch to periodically renegotiate session key. · 8f440246
      Bruce Momjian 提交于
      In order to reduce the risk of cryptanalysis during extended
      sessions (or brief ones involving a substantial amount of data),
      this patch renegotiates the session key after 64kib has been
      transferred.
      
      Bear Giles
      8f440246
    • B
      Back out SSL changes. Newer patch available. · eb43af32
      Bruce Momjian 提交于
      eb43af32
    • B
      Attached are a revised set of SSL patches. Many of these patches · a9bd1761
      Bruce Momjian 提交于
      are motivated by security concerns, it's not just bug fixes.  The key
      differences (from stock 7.2.1) are:
      
      *) almost all code that directly uses the OpenSSL library is in two
         new files,
      
           src/interfaces/libpq/fe-ssl.c
           src/backend/postmaster/be-ssl.c
      
         in the long run, it would be nice to merge these two files.
      
      *) the legacy code to read and write network data have been
         encapsulated into read_SSL() and write_SSL().  These functions
         should probably be renamed - they handle both SSL and non-SSL
         cases.
      
         the remaining code should eliminate the problems identified
         earlier, albeit not very cleanly.
      
      *) both front- and back-ends will send a SSL shutdown via the
         new close_SSL() function.  This is necessary for sessions to
         work properly.
      
         (Sessions are not yet fully supported, but by cleanly closing
         the SSL connection instead of just sending a TCP FIN packet
         other SSL tools will be much happier.)
      
      *) The client certificate and key are now expected in a subdirectory
         of the user's home directory.  Specifically,
      
      	- the directory .postgresql must be owned by the user, and
      	  allow no access by 'group' or 'other.'
      
      	- the file .postgresql/postgresql.crt must be a regular file
      	  owned by the user.
      
      	- the file .postgresql/postgresql.key must be a regular file
      	  owned by the user, and allow no access by 'group' or 'other'.
      
         At the current time encrypted private keys are not supported.
         There should also be a way to support multiple client certs/keys.
      
      *) the front-end performs minimal validation of the back-end cert.
         Self-signed certs are permitted, but the common name *must*
         match the hostname used by the front-end.  (The cert itself
         should always use a fully qualified domain name (FDQN) in its
         common name field.)
      
         This means that
      
      	  psql -h eris db
      
         will fail, but
      
      	  psql -h eris.example.com db
      
         will succeed.  At the current time this must be an exact match;
         future patches may support any FQDN that resolves to the address
         returned by getpeername(2).
      
         Another common "problem" is expiring certs.  For now, it may be
         a good idea to use a very-long-lived self-signed cert.
      
         As a compile-time option, the front-end can specify a file
         containing valid root certificates, but it is not yet required.
      
      *) the back-end performs minimal validation of the client cert.
         It allows self-signed certs.  It checks for expiration.  It
         supports a compile-time option specifying a file containing
         valid root certificates.
      
      *) both front- and back-ends default to TLSv1, not SSLv3/SSLv2.
      
      *) both front- and back-ends support DSA keys.  DSA keys are
         moderately more expensive on startup, but many people consider
         them preferable than RSA keys.  (E.g., SSH2 prefers DSA keys.)
      
      *) if /dev/urandom exists, both client and server will read 16k
         of randomization data from it.
      
      *) the server can read empheral DH parameters from the files
      
           $DataDir/dh512.pem
           $DataDir/dh1024.pem
           $DataDir/dh2048.pem
           $DataDir/dh4096.pem
      
         if none are provided, the server will default to hardcoded
         parameter files provided by the OpenSSL project.
      
      Remaining tasks:
      
      *) the select() clauses need to be revisited - the SSL abstraction
         layer may need to absorb more of the current code to avoid rare
         deadlock conditions.  This also touches on a true solution to
         the pg_eof() problem.
      
      *) the SIGPIPE signal handler may need to be revisited.
      
      *) support encrypted private keys.
      
      *) sessions are not yet fully supported.  (SSL sessions can span
         multiple "connections," and allow the client and server to avoid
         costly renegotiations.)
      
      *) makecert - a script that creates back-end certs.
      
      *) pgkeygen - a tool that creates front-end certs.
      
      *) the whole protocol issue, SASL, etc.
      
       *) certs are fully validated - valid root certs must be available.
          This is a hassle, but it means that you *can* trust the identity
          of the server.
      
       *) the client library can handle hardcoded root certificates, to
          avoid the need to copy these files.
      
       *) host name of server cert must resolve to IP address, or be a
          recognized alias.  This is more liberal than the previous
          iteration.
      
       *) the number of bytes transferred is tracked, and the session
          key is periodically renegotiated.
      
       *) basic cert generation scripts (mkcert.sh, pgkeygen.sh).  The
          configuration files have reasonable defaults for each type
          of use.
      
      Bear Giles
      a9bd1761
  7. 13 6月, 2002 2 次提交
  8. 11 6月, 2002 2 次提交
    • T
      Implement SQL99 OVERLAY(). Allows substitution of a substring in a string. · ea01a451
      Thomas G. Lockhart 提交于
      Implement SQL99 SIMILAR TO as a synonym for our existing operator "~".
      Implement SQL99 regular expression SUBSTRING(string FROM pat FOR escape).
       Extend the definition to make the FOR clause optional.
       Define textregexsubstr() to actually implement this feature.
      Update the regression test to include these new string features.
       All tests pass.
      Rename the regular expression support routines from "pg95_xxx" to "pg_xxx".
      Define CREATE CHARACTER SET in the parser per SQL99. No implementation yet.
      ea01a451
    • J
      Katherine Ward wrote: · 469cb65a
      Jan Wieck 提交于
      > Changes to avoid collisions with WIN32 & MFC names...
      > 1.  Renamed:
      >       a.  PROC => PGPROC
      >       b.  GetUserName() => GetUserNameFromId()
      >       c.  GetCurrentTime() => GetCurrentDateTime()
      >       d.  IGNORE => IGNORE_DTF in include/utils/datetime.h & utils/adt/datetim
      >
      > 2.  Added _P to some lex/yacc tokens:
      >       CONST, CHAR, DELETE, FLOAT, GROUP, IN, OUT
      
      Jan
      469cb65a
  9. 04 6月, 2002 1 次提交
  10. 03 6月, 2002 1 次提交
  11. 28 5月, 2002 1 次提交
    • T
      Distinguish between MaxHeapAttributeNumber and MaxTupleAttributeNumber, · 3212cf94
      Tom Lane 提交于
      where the latter is made slightly larger to allow for in-memory tuples
      containing resjunk attributes.  Responds to today's complaint that one
      cannot UPDATE a table containing the allegedly-legal maximum number of
      columns.
      
      Also, apply Manfred Koizar's recent patch to avoid extra alignment padding
      when there is a null bitmap.  This saves bytes in some cases while not
      creating any backward-compatibility problem AFAICS.
      3212cf94
  12. 26 5月, 2002 1 次提交
  13. 25 5月, 2002 1 次提交
    • T
      Mark index entries "killed" when they are no longer visible to any · 3f4d4880
      Tom Lane 提交于
      transaction, so as to avoid returning them out of the index AM.  Saves
      repeated heap_fetch operations on frequently-updated rows.  Also detect
      queries on unique keys (equality to all columns of a unique index), and
      don't bother continuing scan once we have found first match.
      
      Killing is implemented in the btree and hash AMs, but not yet in rtree
      or gist, because there isn't an equally convenient place to do it in
      those AMs (the outer amgetnext routine can't do it without re-pinning
      the index page).
      
      Did some small cleanup on APIs of HeapTupleSatisfies, heap_fetch, and
      index_insert to make this a little easier.
      3f4d4880
  14. 23 5月, 2002 2 次提交
    • T
      Modify sequence state storage to eliminate dangling-pointer problem · a2597ef1
      Tom Lane 提交于
      exemplified by bug #671.  Moving the storage to relcache turned out to
      be a bad idea because relcache might decide to discard the info.  Instead,
      open and close the relcache entry on each sequence operation, and use
      a record of the current XID to discover whether we already hold
      AccessShareLock on the sequence.
      a2597ef1
    • P
      Add optional "validator" function to languages that can validate the · d60f10b0
      Peter Eisentraut 提交于
      function body (and other properties) as a function in the language
      is created.  This generalizes ad hoc code that already existed for
      the built-in languages.
      
      The validation now happens after the pg_proc tuple of the new function
      is created, so it is possible to define recursive SQL functions.
      
      Add some regression test cases that cover bogus function definition
      attempts.
      d60f10b0
  15. 22 5月, 2002 2 次提交
    • T
      Since COPY fires triggers, it seems like a good idea for it to use · 6c6f395a
      Tom Lane 提交于
      a frozen (copied) snapshot too.  Move execMain's snapshot copying code
      out into a subroutine in case we find other places that need it.
      6c6f395a
    • T
      Remove global variable scanCommandId in favor of storing a command ID · 959e61e9
      Tom Lane 提交于
      in snapshots, per my proposal of a few days ago.  Also, tweak heapam.c
      routines (heap_insert, heap_update, heap_delete, heap_mark4update) to
      be passed the command ID to use, instead of doing GetCurrentCommandID.
      For catalog updates they'll still get passed current command ID, but
      for updates generated from the main executor they'll get passed the
      command ID saved in the snapshot the query is using.  This should fix
      some corner cases associated with functions and triggers that advance
      current command ID while an outer query is still in progress.
      959e61e9
  16. 21 5月, 2002 1 次提交
    • T
      Restructure indexscan API (index_beginscan, index_getnext) per · 44fbe20d
      Tom Lane 提交于
      yesterday's proposal to pghackers.  Also remove unnecessary parameters
      to heap_beginscan, heap_rescan.  I modified pg_proc.h to reflect the
      new numbers of parameters for the AM interface routines, but did not
      force an initdb because nothing actually looks at those fields.
      44fbe20d
  17. 19 5月, 2002 2 次提交
  18. 18 5月, 2002 5 次提交
  19. 17 5月, 2002 1 次提交
    • T
      Merge the last few variable.c configuration variables into the generic · f0811a74
      Tom Lane 提交于
      GUC support.  It's now possible to set datestyle, timezone, and
      client_encoding from postgresql.conf and per-database or per-user
      settings.  Also, implement rollback of SET commands that occur in a
      transaction that later fails.  Create a SET LOCAL var = value syntax
      that sets the variable only for the duration of the current transaction.
      All per previous discussions in pghackers.
      f0811a74
  20. 13 5月, 2002 1 次提交
    • T
      Get rid of long-since-vestigial Iter node type, in favor of adding a · 3389a110
      Tom Lane 提交于
      returns-set boolean field in Func and Oper nodes.  This allows cleaner,
      more reliable tests for expressions returning sets in the planner and
      parser.  For example, a WHERE clause returning a set is now detected
      and complained of in the parser, not only at runtime.
      3389a110