Re: Unix domain socket - Mailing list pgsql-odbc

From ramond@post.tau.ac.il
Subject Re: Unix domain socket
Date
Msg-id 1176798371.462484a3cd0dc@webmail.tau.ac.il
Whole thread Raw
In response to Unix domain socket  (Ramon Danieli <ramond@post.tau.ac.il>)
List 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@vale-housing.co.uk>:

> Thanks Ramon, patch applied.
>
> Regards, Dave.
>
> > -----Original Message-----
> > From: Ramon Danieli [mailto:ramond@post.tau.ac.il]
> > Sent: 01 March 2005 09:01
> > To: pgsql-odbc@postgresql.org
> > Cc: Dave Page; Peter Eisentraut
> > Subject: Re: [ODBC] Unix domain socket
> >
> > Quoting Peter Eisentraut <peter_e@gmx.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@postgresql.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.


pgsql-odbc by date:

Previous
From:
Date:
Subject: [ psqlodbc-Bugs-1003103 ] copy_and_convert_field(...) destroys bind info for wide char varchar columns
Next
From:
Date:
Subject: [ psqlodbc-Bugs-1003103 ] copy_and_convert_field(...) destroys bind info for wide char varchar columns