Re: Unix domain socket

From: ramond(at)post(dot)tau(dot)ac(dot)il
To: pgsql-odbc(at)postgresql(dot)org
Cc: Dave Page <dpage(at)vale-housing(dot)co(dot)uk>
Subject: Re: Unix domain socket
Date: 2007-04-17 08:26:11
Message-ID: 1176798371.462484a3cd0dc@webmail.tau.ac.il
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Hi Dave,

Could u please let me know in which version this patch was eventually included?
Currently we still use our own modified driver (based on the 08.00.0004) and we
would like to upgrade.
Our best option would be to use a standard RedHat RPM (4.0/5.0 AS famiy).
Otherwise, we would use the latest from your site.
Thanks,
Ramon

BTW - the link to the original thread:
http://archives.postgresql.org/pgsql-odbc/2005-03/msg00010.php

Quoting Dave Page <dpage(at)vale-housing(dot)co(dot)uk>:

> Thanks Ramon, patch applied.
>
> Regards, Dave.
>
> > -----Original Message-----
> > From: Ramon Danieli [mailto:ramond(at)post(dot)tau(dot)ac(dot)il]
> > Sent: 01 March 2005 09:01
> > To: pgsql-odbc(at)postgresql(dot)org
> > Cc: Dave Page; Peter Eisentraut
> > Subject: Re: [ODBC] Unix domain socket
> >
> > Quoting Peter Eisentraut <peter_e(at)gmx(dot)net>:
> >
> > > Dave Page wrote:
> > > > Hmm, did even realise it had crept in there. Well to enable it you
> > > > will need to define the HAVE_UNIX_SOCKETS macro when you compile.
> > > > Does it then work? As for why it's done the way it is, I
> > have no idea
> > > > - it was committed by Hiroshi Inoue, so he'd need to answer that -
> > > > unfortunately though, he no longer works on psqlODBC.
> > >
> > > HAVE_UNIX_SOCKETS is defined in the server source tree, so
> > I guess this
> > > could be a leftover from those days. Turn on the macro and
> > see if you
> > > get it working.
> > >
> > > --
> >
> > The macro is turned on automatically (RHL 4.0AS, gcc version
> > 3.4.2 20041017 (Red
> > Hat 3.4.2-6.fc3)) and it works.
> >
> > The following patch allow users to configure the Unix domain
> > socket path,
> > using the "Uds" property.
> > I took some code from the unixODBC PG driver and performed
> > the necessary
> > adjustments.
> > Please note that unlike unixODBC, I have followed the current
> > convention, which
> > means that:
> > 1) "Uds" is considered only if "Servername" is empty.
> > 2) Default path is "/tmp".
> > 3) The provided path should point the folder that comtains
> > the UDS node.
> >
> > Please let me know if you find anything wrong in this patch
> > and whether it will
> > be included sometimes in the near future.
> >
> > Thanks,
> > Ramon
> >
> >
> > diff -Naur psqlodbc-08.00.0004/connection.c
> > psqlodbc-08.00.0004.patch/connection.c
> > --- psqlodbc-08.00.0004/connection.c 2005-01-28
> > 23:36:14.000000000 +0200
> > +++ psqlodbc-08.00.0004.patch/connection.c 2005-02-27
> > 14:40:34.430232000 +0200
> > @@ -725,7 +725,16 @@
> > return 0;
> > }
> >
> > - mylog("CC_connect(): DSN = '%s', server = '%s',
> > port = '%s', database = '%s',
> > username = '%s', password='%s'\n", ci->dsn, ci->server,
> > ci->port, ci->database,
> > ci->username, ci->password ? "xxxxx" : "");
> > + mylog("CC_connect(): DSN = '%s', server = '%s',
> > port = '%s',"
> > +#ifdef HAVE_UNIX_SOCKETS
> > + " uds = '%s',"
> > +#endif
> > + " database = '%s', username = '%s',"
> > + " password='%s'\n", ci->dsn, ci->server, ci->port,
> > +#ifdef HAVE_UNIX_SOCKETS
> > + ci->uds,
> > +#endif
> > + ci->database, ci->username, ci->password
> > ? "xxxxx" : "");
> >
> > another_version_retry:
> >
> > @@ -747,7 +756,11 @@
> >
> > mylog("connecting to the server socket...\n");
> >
> > - SOCK_connect_to(sock, (short) atoi(ci->port),
> > ci->server);
> > + SOCK_connect_to(sock, (short) atoi(ci->port), ci->server
> > +#ifdef HAVE_UNIX_SOCKETS
> > + , ci->uds
> > +#endif
> > + );
> > if (SOCK_get_errcode(sock) != 0)
> > {
> > mylog("connection to the server socket
> > failed.\n");
> > diff -Naur psqlodbc-08.00.0004/connection.h
> > psqlodbc-08.00.0004.patch/connection.h
> > --- psqlodbc-08.00.0004/connection.h 2005-01-28
> > 23:36:14.000000000 +0200
> > +++ psqlodbc-08.00.0004.patch/connection.h 2005-02-27
> > 16:04:37.469858000 +0200
> > @@ -19,6 +19,10 @@
> > #include <pthread.h>
> > #endif
> >
> > +#if !defined WIN32 && defined HAVE_SYS_UN_H && !defined
> > HAVE_UNIX_SOCKETS
> > +#define HAVE_UNIX_SOCKETS
> > +#endif
> > +
> > typedef enum
> > {
> > CONN_NOT_CONNECTED, /* Connection
> > has not been established */
> > @@ -239,6 +243,9 @@
> > char conn_settings[LARGE_REGISTRY_LEN];
> > char protocol[SMALL_REGISTRY_LEN];
> > char port[SMALL_REGISTRY_LEN];
> > +#ifdef HAVE_UNIX_SOCKETS
> > + char uds[LARGE_REGISTRY_LEN];
> > +#endif
> > char onlyread[SMALL_REGISTRY_LEN];
> > char fake_oid_index[SMALL_REGISTRY_LEN];
> > char show_oid_column[SMALL_REGISTRY_LEN];
> > diff -Naur psqlodbc-08.00.0004/dlg_specific.c
> > psqlodbc-08.00.0004.patch/dlg_specific.c
> > --- psqlodbc-08.00.0004/dlg_specific.c 2005-01-28
> > 23:36:15.000000000 +0200
> > +++ psqlodbc-08.00.0004.patch/dlg_specific.c 2005-02-27
> > 16:03:10.559495000
> > +0200
> > @@ -286,6 +286,11 @@
> > else if (stricmp(attribute, INI_PORT) == 0)
> > strcpy(ci->port, value);
> >
> > +#ifdef HAVE_UNIX_SOCKETS
> > + else if (stricmp(attribute, INI_UDS) == 0)
> > + strcpy(ci->uds, value);
> > +#endif
> > +
> > else if (stricmp(attribute, INI_READONLY) == 0 ||
> > stricmp(attribute, "A0") ==
> > 0)
> > strcpy(ci->onlyread, value);
> >
> > @@ -492,6 +497,11 @@
> > if (ci->port[0] == '\0' || overwrite)
> > SQLGetPrivateProfileString(DSN, INI_PORT, "",
> > ci->port, sizeof(ci->port),
> > ODBC_INI);
> >
> > +#ifdef HAVE_UNIX_SOCKETS
> > + if (ci->uds[0] == '\0' || overwrite)
> > + SQLGetPrivateProfileString(DSN, INI_UDS, "",
> > ci->uds, sizeof(ci->uds),
> > ODBC_INI);
> > +#endif
> > +
> > if (ci->onlyread[0] == '\0' || overwrite)
> > SQLGetPrivateProfileString(DSN, INI_READONLY,
> > "", ci->onlyread,
> > sizeof(ci->onlyread), ODBC_INI);
> >
> > @@ -725,6 +735,13 @@
> >
> > ci->port,
> >
> > ODBC_INI);
> >
> > +#ifdef HAVE_UNIX_SOCKETS
> > + SQLWritePrivateProfileString(DSN,
> > +
> > INI_UDS,
> > +
> > ci->uds,
> > +
> > ODBC_INI);
> > +#endif
> > +
> > SQLWritePrivateProfileString(DSN,
> >
> > INI_USER,
> >
> > ci->username,
> > diff -Naur psqlodbc-08.00.0004/dlg_specific.h
> > psqlodbc-08.00.0004.patch/dlg_specific.h
> > --- psqlodbc-08.00.0004/dlg_specific.h 2005-01-28
> > 23:36:15.000000000 +0200
> > +++ psqlodbc-08.00.0004.patch/dlg_specific.h 2005-02-27
> > 14:10:03.393190000
> > +0200
> > @@ -38,6 +38,14 @@
> > #define INI_KDESC "Description" /* Data
> > source description */
> > #define INI_SERVER "Servername" /* Name
> > of Server running PostgreSQL */
> > #define INI_PORT "Port" /* Port
> > on which the Postmaster is listening */
> > +
> > +#if !defined WIN32 && defined HAVE_SYS_UN_H
> > +#ifndef HAVE_UNIX_SOCKETS
> > +#define HAVE_UNIX_SOCKETS
> > +#endif
> > +#define INI_UDS "Uds"
> > /* Unix domain socket path*/
> > +#endif
> > +
> > #define INI_DATABASE "Database" /*
> > Database Name */
> > #define INI_USER "Username" /*
> > Default User Name */
> > #define INI_PASSWORD "Password" /*
> > Default Password */
> > diff -Naur psqlodbc-08.00.0004/socket.c
> > psqlodbc-08.00.0004.patch/socket.c
> > --- psqlodbc-08.00.0004/socket.c 2005-01-28
> > 23:36:20.000000000 +0200
> > +++ psqlodbc-08.00.0004.patch/socket.c 2005-02-27
> > 16:20:34.993553000 +0200
> > @@ -109,7 +109,11 @@
> >
> >
> > char
> > -SOCK_connect_to(SocketClass *self, unsigned short port, char
> > *hostname)
> > +SOCK_connect_to(SocketClass *self, unsigned short port, char
> > *hostname
> > +#ifdef HAVE_UNIX_SOCKETS
> > + , char *uds /* unix domain socket path */
> > +#endif
> > + )
> > {
> > #if defined (POSIX_MULTITHREAD_SUPPORT)
> > const int bufsz = 8192;
> > @@ -140,7 +144,7 @@
> >
> >
> > /*
> > - * If it is a valid IP address, use it. Otherwise use
> > hostname lookup.
> > + * If it is a valid IP address, use it. Otherwise use
> > AF_UNIX socket.
> > */
> > if (hostname && hostname[0])
> > {
> > @@ -196,7 +200,7 @@
> > }
> > un->sun_family = family = AF_UNIX;
> > /* passing NULL means that this only suports
> > the pg default "/tmp" */
> > - UNIXSOCK_PATH(un, port, ((char *) NULL));
> > + UNIXSOCK_PATH(un, port, uds);
> > sLen = UNIXSOCK_LEN(un);
> > self->sadr = (struct sockaddr *) un;
> > }
> > diff -Naur psqlodbc-08.00.0004/socket.h
> > psqlodbc-08.00.0004.patch/socket.h
> > --- psqlodbc-08.00.0004/socket.h 2005-01-28
> > 23:36:20.000000000 +0200
> > +++ psqlodbc-08.00.0004.patch/socket.h 2005-02-27
> > 16:18:22.733047000 +0200
> > @@ -34,7 +34,7 @@
> >
> > #define SOCK_ERRNO errno
> > #define SOCK_ERRNO_SET(e) (errno = e)
> > -#ifdef HAVE_SYS_UN_H
> > +#if defined HAVE_SYS_UN_H && !defined HAVE_UNIX_SOCKETS
> > #define HAVE_UNIX_SOCKETS
> > #endif /* HAVE_SYS_UN_H */
> > #else
> > @@ -121,7 +121,12 @@
> > /* Socket prototypes */
> > SocketClass *SOCK_Constructor(const ConnectionClass *conn);
> > void SOCK_Destructor(SocketClass *self);
> > -char SOCK_connect_to(SocketClass *self, unsigned
> > short port, char *hostname);
> > +char SOCK_connect_to(SocketClass *self, unsigned short port,
> > + char *hostname
> > +#ifdef HAVE_UNIX_SOCKETS
> > + , char *uds
> > +#endif
> > + );
> > void SOCK_get_n_char(SocketClass *self, char
> > *buffer, int len);
> > void SOCK_put_n_char(SocketClass *self, char
> > *buffer, int len);
> > BOOL SOCK_get_string(SocketClass *self, char
> > *buffer, int bufsize);
> >
> >
> > ----------------------------------------------------------------
> > This message was sent using IMP, the Internet Messaging Program.
> >
> >
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
>
> +++++++++++++++++++++++++++++++++++++++++++
> This Mail Was Scanned By Mail-seCure System
> at the Tel-Aviv University CC.
>

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

Browse pgsql-odbc by date

  From Date Subject
Next Message noreply 2007-04-18 10:24:29 [ psqlodbc-Bugs-1003103 ] copy_and_convert_field(...) destroys bind info for wide char varchar columns
Previous Message noreply 2007-04-16 23:43:58 [ psqlodbc-Bugs-1003103 ] copy_and_convert_field(...) destroys bind info for wide char varchar columns