postgresql/contrib
Heikki Linnakangas fe0a0b5993 Replace PostmasterRandom() with a stronger source, second attempt.
This adds a new routine, pg_strong_random() for generating random bytes,
for use in both frontend and backend. At the moment, it's only used in
the backend, but the upcoming SCRAM authentication patches need strong
random numbers in libpq as well.

pg_strong_random() is based on, and replaces, the existing implementation
in pgcrypto. It can acquire strong random numbers from a number of sources,
depending on what's available:

- OpenSSL RAND_bytes(), if built with OpenSSL
- On Windows, the native cryptographic functions are used
- /dev/urandom

Unlike the current pgcrypto function, the source is chosen by configure.
That makes it easier to test different implementations, and ensures that
we don't accidentally fall back to a less secure implementation, if the
primary source fails. All of those methods are quite reliable, it would be
pretty surprising for them to fail, so we'd rather find out by failing
hard.

If no strong random source is available, we fall back to using erand48(),
seeded from current timestamp, like PostmasterRandom() was. That isn't
cryptographically secure, but allows us to still work on platforms that
don't have any of the above stronger sources. Because it's not very secure,
the built-in implementation is only used if explicitly requested with
--disable-strong-random.

This replaces the more complicated Fortuna algorithm we used to have in
pgcrypto, which is unfortunate, but all modern platforms have /dev/urandom,
so it doesn't seem worth the maintenance effort to keep that. pgcrypto
functions that require strong random numbers will be disabled with
--disable-strong-random.

Original patch by Magnus Hagander, tons of further work by Michael Paquier
and me.

Discussion: https://www.postgresql.org/message-id/CAB7nPqRy3krN8quR9XujMVVHYtXJ0_60nqgVc6oUk8ygyVkZsA@mail.gmail.com
Discussion: https://www.postgresql.org/message-id/CAB7nPqRWkNYRRPJA7-cF+LfroYV10pvjdz6GNvxk-Eee9FypKA@mail.gmail.com
2016-12-05 13:42:59 +02:00
..
adminpack Update copyright for 2016 2016-01-02 13:33:40 -05:00
auth_delay Update copyright for 2016 2016-01-02 14:19:48 -05:00
auto_explain pgindent run for 9.6 2016-06-09 18:02:36 -04:00
bloom Remove unnecessary prototypes 2016-09-30 14:04:16 -04:00
btree_gin Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
btree_gist Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
chkpass Avoid returning undefined bytes in chkpass_in(). 2015-02-14 12:20:56 -05:00
citext Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
cube Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
dblink Remove unnecessary prototypes 2016-09-30 14:04:16 -04:00
dict_int Update copyright for 2016 2016-01-02 13:33:40 -05:00
dict_xsyn Update copyright for 2016 2016-01-02 13:33:40 -05:00
earthdistance psql: Split up "Modifiers" column in \d and \dD 2016-11-03 14:02:46 -04:00
file_fdw Allow contrib/file_fdw to read from a program, like COPY FROM PROGRAM. 2016-09-29 13:32:34 -04:00
fuzzystrmatch Update fuzzystrmatch extension for parallel query. 2016-06-07 11:26:41 -04:00
hstore Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
hstore_plperl Avoid direct cross-module links in hstore_plperl and ltree_plpython, too. 2016-10-04 17:49:07 -04:00
hstore_plpython Fix hstore_plpython for Python 3. 2016-10-04 09:38:43 -04:00
intagg Schema-qualify some references to regprocedure. 2016-06-10 10:41:58 -04:00
intarray Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
isn Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
lo Update lo extension for parallel query. 2016-06-07 11:26:42 -04:00
ltree Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
ltree_plpython Avoid direct cross-module links in hstore_plperl and ltree_plpython, too. 2016-10-04 17:49:07 -04:00
oid2name Simplify correct use of simple_prompt(). 2016-08-30 17:02:02 -04:00
pageinspect Fix gin_leafpage_items(). 2016-11-04 12:11:54 -04:00
passwordcheck Move code shared between libpq and backend from backend/libpq/ to common/. 2016-09-02 13:49:59 +03:00
pg_buffercache Don't bother to lock bufmgr partitions in pg_buffercache. 2016-09-29 13:16:30 +03:00
pg_freespacemap Update pg_freespacemap extension for parallel query. 2016-06-09 17:18:16 -04:00
pg_prewarm Update pg_prewarm extension for parallel query. 2016-06-09 17:18:18 -04:00
pg_standby Fix a bunch of places that called malloc and friends with no NULL check. 2016-08-30 18:22:43 -04:00
pg_stat_statements Provide NO_INSTALLCHECK option for pgxs. 2016-11-14 14:53:07 -08:00
pg_trgm Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
pg_visibility Fix bugs in contrib/pg_visibility. 2016-10-01 16:32:54 -04:00
pgcrypto Replace PostmasterRandom() with a stronger source, second attempt. 2016-12-05 13:42:59 +02:00
pgrowlocks Fix handling of multixacts predating pg_upgrade 2016-06-24 18:29:28 -04:00
pgstattuple pgstattuple: Don't take heavyweight locks when examining a hash index. 2016-10-28 12:21:15 -04:00
postgres_fdw postgres_fdw: Fix typo in comment. 2016-11-04 09:03:42 -04:00
seg Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
sepgsql Add macros to make AllocSetContextCreate() calls simpler and safer. 2016-08-27 17:50:38 -04:00
spi Replace uses of SPI_modifytuple that intend to allocate in current context. 2016-11-08 15:36:44 -05:00
sslinfo Support OpenSSL 1.1.0. 2016-09-15 14:42:29 +03:00
start-scripts Fix typo in linux startup script. 2015-04-26 09:43:15 -04:00
tablefunc Remove unnecessary prototypes 2016-09-30 14:04:16 -04:00
tcn Revert CREATE INDEX ... INCLUDING ... 2016-04-08 21:52:13 +03:00
test_decoding Make contrib/test_decoding regression tests safe for CZ locale. 2016-11-21 20:39:28 -05:00
tsearch2 Test all contrib-created operator classes with amvalidate. 2016-11-29 15:05:22 -05:00
tsm_system_rows Update copyright for 2016 2016-01-02 13:33:40 -05:00
tsm_system_time Update copyright for 2016 2016-01-02 13:33:40 -05:00
unaccent Update unaccent extension for parallel query. 2016-06-14 14:55:49 -04:00
uuid-ossp Update uuid-ossp extension for parallel query. 2016-06-14 14:56:21 -04:00
vacuumlo Fix a bunch of places that called malloc and friends with no NULL check. 2016-08-30 18:22:43 -04:00
xml2 Revert "Delete contrib/xml2's legacy implementation of xml_is_well_formed()." 2016-11-07 10:27:52 -05:00
Makefile Bloom index contrib module 2016-04-01 16:42:24 +03:00
README Rename 'gmake' to 'make' in docs and recommended commands 2014-02-12 17:29:19 -05:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05:00

README

The PostgreSQL contrib tree
---------------------------

This subtree contains porting tools, analysis utilities, and plug-in
features that are not part of the core PostgreSQL system, mainly
because they address a limited audience or are too experimental to be
part of the main source tree.  This does not preclude their
usefulness.

User documentation for each module appears in the main SGML
documentation.

When building from the source distribution, these modules are not
built automatically, unless you build the "world" target.  You can
also build and install them all by running "make all" and "make
install" in this directory; or to build and install just one selected
module, do the same in that module's subdirectory.

Some directories supply new user-defined functions, operators, or
types.  To make use of one of these modules, after you have installed
the code you need to register the new SQL objects in the database
system by executing a CREATE EXTENSION command.  In a fresh database,
you can simply do

    CREATE EXTENSION module_name;

See the PostgreSQL documentation for more information about this
procedure.