Re: Enable SSPI on cygwin - Mailing list pgsql-hackers
From | Andrew Dunstan |
---|---|
Subject | Re: Enable SSPI on cygwin |
Date | |
Msg-id | 4A6A2FA4.9080206@dunslane.net Whole thread Raw |
In response to | Enable SSPI on cygwin (Reini Urban <rurban@x-ray.at>) |
List | pgsql-hackers |
Reini, the style of this patch has previously been criticized by both Magnus and me. We do not define WIN32 *anywhere* in our sources, and we don't want to start. In fact, IIRC we carefully removed all such code years ago, because it caused us lots of grief. Please find a way to code your patch that doesn't involve defining and undefining WIN32. cheers andrew Reini Urban wrote: > 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) > > ------------------------------------------------------------------------ > > >
pgsql-hackers by date: