Attached is my patch to enable SSPI on cygwin.
------------------------------------------------------------------------
--- origsrc/postgresql-8.4.0/configure.in 2009-06-27 02:14:47.000000000
+0200
+++ src/postgresql-8.4.0/configure.in 2009-07-02 09:02:25.921875000 +0200
@@ -907,7 +907,11 @@ if test "$with_gssapi" = yes ; then
AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5
-lcrypto'], [],
[AC_MSG_ERROR([could not find function
'gss_init_sec_context' required for GSSAPI])])
else
- LIBS="$LIBS -lgssapi32"
+ if test "$PORTNAME" = "cygwin"; then
+ LIBS="$LIBS -lsecur32"
+ else
+ LIBS="$LIBS -lgssapi32"
+ fi
fi
fi
--- origsrc/postgresql-8.4.0/src/backend/libpq/auth.c 2009-06-25 13:30:08.000000000 +0200
+++ src/postgresql-8.4.0/src/backend/libpq/auth.c 2009-07-02
09:07:55.937500000 +0200
@@ -159,6 +159,9 @@ static krb5_principal pg_krb5_server;
*----------------------------------------------------------------
*/
#ifdef ENABLE_GSS
+#ifdef __CYGWIN__
+#define WIN32
+#endif
#if defined(HAVE_GSSAPI_H)
#include <gssapi.h>
#else
--- origsrc/postgresql-8.4.0/src/backend/postmaster/postmaster.c
2009-06-26 22:29:04.000000000 +0200
+++ src/postgresql-8.4.0/src/backend/postmaster/postmaster.c 2009-07-02
09:02:26.421875000 +0200
@@ -371,6 +371,9 @@ typedef struct
HANDLE PostmasterHandle;
#endif
+#endif
+#ifdef EXEC_BACKEND
+
static pid_t backend_forkexec(Port *port);
static pid_t internal_forkexec(int argc, char *argv[], Port *port);
@@ -442,6 +445,7 @@ static void ShmemBackendArrayAdd(Backend
static void ShmemBackendArrayRemove(Backend *bn);
#endif /* EXEC_BACKEND */
+
#define StartupDataBase() StartChildProcess(StartupProcess)
#define StartBackgroundWriter() StartChildProcess(BgWriterProcess)
#define StartWalWriter() StartChildProcess(WalWriterProcess)
@@ -1142,7 +1146,7 @@ checkDataDir(void)
*
* XXX can we safely enable this check on Windows?
*/
-#if !defined(WIN32) && !defined(__CYGWIN__)
+#ifndef WIN32
if (stat_buf.st_uid != geteuid())
ereport(FATAL,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
@@ -1164,7 +1168,7 @@ checkDataDir(void)
* be proper support for Unix-y file permissions. Need to think of a
* reasonable check to apply on Windows.
*/
-#if !defined(WIN32) && !defined(__CYGWIN__)
+#ifndef WIN32
if (stat_buf.st_mode & (S_IRWXG | S_IRWXO))
ereport(FATAL,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
--- origsrc/postgresql-8.4.0/src/include/libpq/libpq-be.h 2009-06-11
16:49:11.000000000 +0200
+++ src/postgresql-8.4.0/src/include/libpq/libpq-be.h 2009-07-02
09:12:54.203125000 +0200
@@ -47,6 +47,9 @@
#ifdef ENABLE_SSPI
#define SECURITY_WIN32
+#ifdef __CYGWIN__
+#include <windows.h>
+#endif
#if defined(WIN32) && !defined(WIN32_ONLY_COMPILER)
#include <ntsecapi.h>
#endif
--- origsrc/postgresql-8.4.0/src/include/libpq/libpq.h 2009-01-01
18:23:59.000000000 +0100
+++ src/postgresql-8.4.0/src/include/libpq/libpq.h 2009-07-02
09:02:26.703125000 +0200
@@ -20,6 +20,10 @@
#include "lib/stringinfo.h"
#include "libpq/libpq-be.h"
+#ifdef __CYGWIN__
+#undef WIN32
+#endif
+
/* ----------------
* PQArgBlock
* Information (pointer to array of this structure) required
--- origsrc/postgresql-8.4.0/src/include/miscadmin.h 2009-06-11
16:49:08.000000000 +0200
+++ src/postgresql-8.4.0/src/include/miscadmin.h 2009-07-02
09:02:26.765625000 +0200
@@ -78,7 +78,7 @@ extern PGDLLIMPORT volatile uint32 CritS
/* in tcop/postgres.c */
extern void ProcessInterrupts(void);
-#ifndef WIN32
+#if !defined(WIN32) || defined(__CYGWIN__)
#define CHECK_FOR_INTERRUPTS() \
do { \
--- origsrc/postgresql-8.4.0/src/include/port/cygwin.h 2007-07-25
14:22:53.000000000 +0200
+++ src/postgresql-8.4.0/src/include/port/cygwin.h 2009-07-02
09:02:26.843750000 +0200
@@ -19,3 +19,10 @@
#define PGDLLIMPORT __declspec (dllimport)
#endif
+
+/*
+ * Always build with SSPI support. Keep it as a #define in case
+ * we want a switch to disable it sometime in the future.
+ */
+#define ENABLE_SSPI 1
+
--- origsrc/postgresql-8.4.0/src/interfaces/libpq/Makefile 2009-01-05
10:27:19.000000000 +0100
+++ src/postgresql-8.4.0/src/interfaces/libpq/Makefile 2009-07-20
13:18:59.296875000 +0200
@@ -63,6 +63,9 @@ endif
ifeq ($(PORTNAME), win32)
SHLIB_LINK += -lshfolder -lwsock32 -lws2_32 -lsecur32 $(filter -leay32
-lssleay32 -lcomerr32 -lkrb5_32, $(LIBS))
endif
+ifeq ($(PORTNAME), cygwin)
+SHLIB_LINK += -lsecur32
+endif
SHLIB_EXPORTS = exports.txt
--- origsrc/postgresql-8.4.0/src/interfaces/libpq/fe-connect.c 2009-06-11 16:49:13.000000000 +0200
+++ src/postgresql-8.4.0/src/interfaces/libpq/fe-connect.c 2009-07-20
13:14:11.218750000 +0200
@@ -22,12 +22,16 @@
#include <time.h>
#include <unistd.h>
+#ifdef __CYGWIN__
+#undef WIN32
+#endif
+
#include "libpq-fe.h"
#include "libpq-int.h"
#include "fe-auth.h"
#include "pg_config_paths.h"
-#ifdef WIN32
+#if defined(WIN32) && !defined(__CYGWIN__)
#include "win32.h"
#ifdef _WIN32_IE
#undef _WIN32_IE
--- origsrc/postgresql-8.4.0/src/interfaces/libpq/libpq-int.h 2009-06-23
20:13:23.000000000 +0200
+++ src/postgresql-8.4.0/src/interfaces/libpq/libpq-int.h 2009-07-20
13:17:36.984375000 +0200
@@ -54,6 +54,22 @@
#endif
#ifdef ENABLE_SSPI
+#ifdef __CYGWIN__
+#include <windows.h>
+#undef WIN32
+int PASCAL WSAGetLastError(void);
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+typedef struct WSAData {
+ WORD wVersion;
+ WORD wHighVersion;
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+ unsigned short iMaxSockets;
+ unsigned short iMaxUdpDg;
+ char * lpVendorInfo;
+} WSADATA;
+#endif
#define SECURITY_WIN32
#if defined(WIN32) && !defined(WIN32_ONLY_COMPILER)
#include <ntsecapi.h>
@@ -586,7 +602,7 @@ __attribute__((format_arg(1)));
* These macros are needed to let error-handling code be portable between
* Unix and Windows. (ugh)
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(__CYGWIN__)
#define SOCK_ERRNO (WSAGetLastError())
#define SOCK_STRERROR winsock_strerror
#define SOCK_ERRNO_SET(e) WSASetLastError(e)
------------------------------------------------------------------------