postgresql/src/tools/msvc
Stephen Frost b0b39f72b9 GSSAPI encryption support
On both the frontend and backend, prepare for GSSAPI encryption
support by moving common code for error handling into a separate file.
Fix a TODO for handling multiple status messages in the process.
Eliminate the OIDs, which have not been needed for some time.

Add frontend and backend encryption support functions.  Keep the
context initiation for authentication-only separate on both the
frontend and backend in order to avoid concerns about changing the
requested flags to include encryption support.

In postmaster, pull GSSAPI authorization checking into a shared
function.  Also share the initiator name between the encryption and
non-encryption codepaths.

For HBA, add "hostgssenc" and "hostnogssenc" entries that behave
similarly to their SSL counterparts.  "hostgssenc" requires either
"gss", "trust", or "reject" for its authentication.

Similarly, add a "gssencmode" parameter to libpq.  Supported values are
"disable", "require", and "prefer".  Notably, negotiation will only be
attempted if credentials can be acquired.  Move credential acquisition
into its own function to support this behavior.

Add a simple pg_stat_gssapi view similar to pg_stat_ssl, for monitoring
if GSSAPI authentication was used, what principal was used, and if
encryption is being used on the connection.

Finally, add documentation for everything new, and update existing
documentation on connection security.

Thanks to Michael Paquier for the Windows fixes.

Author: Robbie Harwood, with changes to the read/write functions by me.
Reviewed in various forms and at different times by: Michael Paquier,
   Andres Freund, David Steele.
Discussion: https://www.postgresql.org/message-id/flat/jlg1tgq1ktm.fsf@thriss.redhat.com
2019-04-03 15:02:33 -04:00
..
dummylib perltidy run prior to branching 2018-06-30 12:28:55 -04:00
.gitignore Ignore config.pl and buildenv.pl in src/tools/msvc. 2014-05-12 14:24:18 -04:00
build.bat Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
build.pl Unify searchpath and do file logic in MSVC build scripts. 2019-02-06 07:36:02 -05:00
clean.bat Replace the data structure used for keyword lookup. 2019-01-06 17:02:57 -05:00
config_default.pl Fix typo in comment 2017-11-27 09:24:14 +01:00
ecpg_regression.proj Fix msvc/ecpg_regression.proj for recent ECPG test additions. 2018-03-15 22:36:19 -04:00
gendef.pl Don't fall off the end of perl functions 2018-05-27 09:08:42 -04:00
install.bat Turn install.bat into a pure one line wrapper fort he perl script. 2015-07-06 22:18:26 +03:00
install.pl Fix included file path for modern perl 2019-02-05 19:27:47 -05:00
Install.pm Fix included file path for modern perl 2019-02-05 19:27:47 -05:00
mkvcbuild.pl Fix included file path for modern perl 2019-02-05 19:27:47 -05:00
Mkvcbuild.pm GSSAPI encryption support 2019-04-03 15:02:33 -04:00
MSBuildProject.pm Require C99 (and thus MSCV 2013 upwards). 2018-08-23 18:33:57 -07:00
pgbison.bat Fix comments over eagerly c&p'd. 2011-07-07 03:53:49 -04:00
pgbison.pl Fix included file path for modern perl 2019-02-05 19:27:47 -05:00
pgflex.bat Fix comments over eagerly c&p'd. 2011-07-07 03:53:49 -04:00
pgflex.pl Fix included file path for modern perl 2019-02-05 19:27:47 -05:00
Project.pm Fix compile-time warnings on all perl code 2018-05-31 08:13:02 -04:00
README Require C99 (and thus MSCV 2013 upwards). 2018-08-23 18:33:57 -07:00
Solution.pm Get rid of jsonpath_gram.h and jsonpath_scanner.h 2019-03-20 11:13:34 +03:00
vcregress.bat Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
vcregress.pl Fix included file path for modern perl 2019-02-05 19:27:47 -05:00
VSObjectFactory.pm Require C99 (and thus MSCV 2013 upwards). 2018-08-23 18:33:57 -07:00

src/tools/msvc/README

MSVC build
==========

This directory contains the tools required to build PostgreSQL using
Microsoft Visual Studio 2013 - 2017. This builds the whole backend, not just
the libpq frontend library. For more information, see the documentation
chapter "Installation on Windows" and the description below.


Notes about Visual Studio Express
---------------------------------
To build PostgreSQL using Visual Studio Express, the Microsoft Windows SDK
has to be installed. Since this is not included in the product
originally, extra steps are needed to make it work.

First, download and install a supported version of the Microsoft Windows SDK
from www.microsoft.com (v6.0 or greater).

Locate the files vcprojectengine.dll.express.config and
vcprojectengine.dll.config in the vc\vcpackages directory of
the Visual C++ Express installation. In these files, add the paths
to the Platform SDK to the Include, Library and Path tags. Be sure
to add them to the beginning of the list.

This should work for both GUI and commandline builds, but a restart
may be necessary.

If you are using a recent version of the Microsoft Windows SDK that includes
the compilers and build tools you probably don't even need Visual Studio
Express to build PostgreSQL.


Structure of the build tools
----------------------------
The tools for building PostgreSQL using Microsoft Visual Studio currently
consist of the following files:

- Configuration files -
config_default.pl      default configuration arguments

A typical build environment has two more files, buildenv.pl and config.pl
that contain the user's build environment settings and configuration
arguments.


- User tools -
build.pl               tool to build the binaries
clean.bat              batch file for cleaning up generated files
install.pl             tool to install the generated files
mkvcbuild.pl           tool to generate the Visual Studio build files
vcregress.pl           tool to run the regression tests


- Internal tools -
gendef.pl              internal tool to generate .DEF files
pgbison.pl             internal tool to process .y files using bison
pgflex.pl              internal tool to process .l files using flex

Many of those .pl files also have a corresponding .bat-wrapper that doesn't
contain any additional logic.


- Internal modules -
Install.pm             module containing the install logic
Mkvcbuild.pm           module containing the code to generate the Visual
                       Studio build (project/solution) files
MSBuildProject.pm      module containing the code to generate MSBuild based
                       project files (Visual Studio 2013 or greater)
Project.pm             module containing the common code to generate the
                       Visual Studio project files. Also provides the
                       common interface of all project file generators
Solution.pm            module containing the code to generate the Visual
                       Studio solution files.
VSObjectFactory.pm     factory module providing the code to create the
                       appropriate project/solution files for the current
                       environment


Description of the internals of the Visual Studio build process
---------------------------------------------------------------
By typing 'build' the user starts the build.bat wrapper which simply passes
it's arguments to build.pl.
In build.pl the user's buildenv.pl is used to set up the build environment
(i. e. path to bison and flex). In addition his config.pl file is merged into
config_default.pl to create the configuration arguments.
These configuration arguments are passed over to Mkvcbuild::mkvcbuild
(Mkvcbuild.pm) which creates the Visual Studio project and solution files.
It does this by using VSObjectFactory::CreateSolution to create an object
implementing the Solution interface (this could be either a VS2013Solution,
or a VS2015Solution or a VS2017Solution, all in Solution.pm, depending on
the user's build environment) and adding objects implementing the corresponding
Project interface (VC2013Project or VC2015Project or VC2017Project from
MSBuildProject.pm) to it.
When Solution::Save is called, the implementations of Solution and Project
save their content in the appropriate format.
The final step of starting the appropriate build program (msbuild) is
performed in build.pl again.