diff options
author | Bruce Momjian <bruce@momjian.us> | 2001-09-07 19:52:54 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2001-09-07 19:52:54 +0000 |
commit | a7621c92ae08aa7b7316244a4ac82ac05bd564bb (patch) | |
tree | c122673885045d54cfefc634e96fc5c80bc43f9a /src | |
parent | 0c585f7506d16887e31c90a44926842bae70eea9 (diff) | |
download | postgresql-a7621c92ae08aa7b7316244a4ac82ac05bd564bb.tar.gz postgresql-a7621c92ae08aa7b7316244a4ac82ac05bd564bb.zip |
Update SCM_CREDS for Net/Free/BSD-OS. Add configure checks.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/libpq/auth.c | 17 | ||||
-rw-r--r-- | src/backend/libpq/hba.c | 19 | ||||
-rw-r--r-- | src/include/pg_config.h.in | 11 | ||||
-rw-r--r-- | src/interfaces/libpq/fe-auth.c | 22 |
4 files changed, 45 insertions, 24 deletions
diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 56c1d01c5c0..e3c2a04a9be 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.65 2001/09/06 03:23:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.66 2001/09/07 19:52:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -17,9 +17,9 @@ #include <sys/types.h> #include <sys/param.h> -#include <sys/socket.h> /* for SCM_CREDS */ -#ifdef SCM_CREDS -#include <sys/uio.h> /* for struct iovec */ +#include <sys/socket.h> +#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) +#include <sys/uio.h> #include <sys/ucred.h> #include <errno.h> #endif @@ -520,13 +520,16 @@ ClientAuthentication(Port *port) break; case uaIdent: -#if !defined(SO_PEERCRED) && defined(SCM_CREDS) +#if !defined(SO_PEERCRED) && (defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED)) /* * If we are doing ident on unix-domain sockets, * use SCM_CREDS only if it is defined and SO_PEERCRED isn't. */ -#ifdef fc_uid - /* Receive credentials on next message receipt, BSD/OS */ +#if defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) + /* + * Receive credentials on next message receipt, BSD/OS, NetBSD. + * We need to set this before the client sends the next packet. + */ { int on = 1; if (setsockopt(port->sock, 0, LOCAL_CREDS, &on, sizeof(on)) < 0) diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 69f88c257fd..db4c259f86a 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.69 2001/09/06 03:23:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.70 2001/09/07 19:52:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -21,9 +21,9 @@ #include <fcntl.h> #include <sys/types.h> #include <sys/param.h> -#include <sys/socket.h> /* for SCM_CREDS */ -#ifdef SCM_CREDS -#include <sys/uio.h> /* for struct iovec */ +#include <sys/socket.h> +#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) +#include <sys/uio.h> #include <sys/ucred.h> #endif #include <netinet/in.h> @@ -872,7 +872,7 @@ ident_inet(const struct in_addr remote_ip_addr, static bool ident_unix(int sock, char *ident_user) { -#ifdef SO_PEERCRED +#if defined(SO_PEERCRED) /* Linux style: use getsockopt(SO_PEERCRED) */ struct ucred peercred; ACCEPT_TYPE_ARG3 so_len = sizeof(peercred); @@ -906,16 +906,19 @@ ident_unix(int sock, char *ident_user) return true; -#elif defined(SCM_CREDS) +#elif defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) struct msghdr msg; /* Credentials structure */ -#ifndef fc_uid +#ifdef HAVE_STRUCT_CMSGCRED typedef struct cmsgcred Cred; #define cruid cmcred_uid -#else +#elif HAVE_STRUCT_FCRED typedef struct fcred Cred; #define cruid fc_uid +#elif HAVE_STRUCT_SOCKCRED + typedef struct sockcred Cred; +#define cruid sc_uid #endif Cred *cred; diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 1cd0ba7e3c3..e72e5a1c224 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -8,7 +8,7 @@ * or in pg_config.h afterwards. Of course, if you edit pg_config.h, then your * changes will be overwritten the next time you run configure. * - * $Id: pg_config.h.in,v 1.4 2001/09/07 00:27:29 tgl Exp $ + * $Id: pg_config.h.in,v 1.5 2001/09/07 19:52:54 momjian Exp $ */ #ifndef PG_CONFIG_H @@ -607,6 +607,15 @@ extern int fdatasync(int fildes); /* Set to 1 if you have union semun */ #undef HAVE_UNION_SEMUN +/* Set to 1 if you have struct cmsgcred */ +#undef HAVE_STRUCT_CMSGCRED + +/* Set to 1 if you have struct fcred */ +#undef HAVE_STRUCT_FCRED + +/* Set to 1 if you have struct sockcred */ +#undef HAVE_STRUCT_SOCKCRED + /* Set to 1 if you have struct sockaddr_un */ #undef HAVE_STRUCT_SOCKADDR_UN diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c index 9438c442726..e496f7c3ee5 100644 --- a/src/interfaces/libpq/fe-auth.c +++ b/src/interfaces/libpq/fe-auth.c @@ -10,7 +10,7 @@ * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes). * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.58 2001/08/21 15:49:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.59 2001/09/07 19:52:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -44,9 +44,9 @@ #include <errno.h> #include <sys/types.h> #include <sys/param.h> /* for MAXHOSTNAMELEN on most */ -#include <sys/socket.h> /* for SCM_CREDS */ -#ifdef SCM_CREDS -#include <sys/uio.h> /* for struct iovec */ +#include <sys/socket.h> +#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) +#include <sys/uio.h> #include <sys/ucred.h> #endif #ifndef MAXHOSTNAMELEN @@ -436,19 +436,25 @@ pg_krb5_sendauth(char *PQerrormsg, int sock, #endif /* KRB5 */ -#ifdef SCM_CREDS +#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) static int pg_local_sendauth(char *PQerrormsg, PGconn *conn) { char buf; struct iovec iov; struct msghdr msg; -#ifndef fc_uid +#ifdef HAVE_STRUCT_CMSGCRED /* Prevent padding */ char cmsgmem[sizeof(struct cmsghdr) + sizeof(struct cmsgcred)]; /* Point to start of first structure */ struct cmsghdr *cmsg = (struct cmsghdr *)cmsgmem; #endif +#ifdef HAVE_STRUCT_SOCKCRED + /* Prevent padding */ + char cmsgmem[sizeof(struct cmsghdr) + sizeof(struct sockcred)]; + /* Point to start of first structure */ + struct cmsghdr *cmsg = (struct cmsghdr *)cmsgmem; +#endif /* * The backend doesn't care what we send here, but it wants @@ -463,7 +469,7 @@ pg_local_sendauth(char *PQerrormsg, PGconn *conn) msg.msg_iov = &iov; msg.msg_iovlen = 1; -#ifndef fc_uid +#ifdef HAVE_STRUCT_CMSGCRED /* Create control header, FreeBSD */ msg.msg_control = cmsg; msg.msg_controllen = sizeof(cmsgmem); @@ -609,7 +615,7 @@ fe_sendauth(AuthRequest areq, PGconn *conn, const char *hostname, break; case AUTH_REQ_SCM_CREDS: -#ifdef SCM_CREDS +#if defined(HAVE_STRUCT_CMSGCRED) || defined(HAVE_STRUCT_FCRED) || defined(HAVE_STRUCT_SOCKCRED) if (pg_local_sendauth(PQerrormsg, conn) != STATUS_OK) return STATUS_ERROR; #else |