Skip to Content.
Sympa Menu

freetds - Re: [freetds] CS_SERVERADDR tag is not handled correctly in ct_con_props

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Stephen Marshall <smarshall AT kayak.com>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] CS_SERVERADDR tag is not handled correctly in ct_con_props
  • Date: Mon, 6 Jan 2014 14:16:50 -0500

On Mon, Jan 6, 2014 at 12:21 PM, Frediano Ziglio <freddy77 AT gmail.com> wrote:

> 2014/1/6 Stephen Marshall <smarshall AT kayak.com>:
> > Let me try to explain in better detail:
> >
> > Problem:
> > The CS_SERVERADDR enum is not properly honored in the ct_con_props
> function
> > call.
> > For example, this call should effectively set the host and port for a DB
> > connection, but it results in an error when the connection information is
> > actually used.
> > ct_con_props( g_connection,
> > CS_SET,
> > CS_SERVERADDR,
> > (CS_VOID*)server,
> > CS_NULLTERM,
> > (CS_INT*)NULL
> > );
> > Here: g_connection is a pointer to type CS_CONNECTION, and server is text
> > of the form "<host> <port>". Note that FreeTDS provides other ways to
> > specify host and port (e.g. setting the server parameter to
> > "<host>:<port>"; however, the method using CS_SERVERADDR does not work.
> >
>
> Now I got it.
>
> > Approaches to fix:
> > I see two ways to attack this problem. Of course, you may see others.
> >
> > One approach is to ensure port information is set in the CS_CONNECTION
> data
> > structures and then passed to the other internal data structures used to
> > establish a connection in FreeTDS. This would be a true fix to the
> > problem, but would require some changes to at least a few internal data
> > structures.
> >
> > Another approach is the mark the CS_SERVERADDR tag as disabled in
> FreeTDS.
> > This would not actually fix the problem, but would allow client
> > applications to work around the limitation. However, I think this can be
> > achieved by simply undefining CS_SERVERADDR in cspublic.h.
> >
> > If you have any thoughts on ways to fix this, I'm certainly open to
> > suggestions.
> >
> > Steve
> >
>
> Well, as Sybase write specification while we should stick to it we
> should just handle properly this tag. Perhaps the problem is how to
> fit this with other port specification. Should CS_SERVERADDR port
> override CS_SERVERNAME "host:port" FreeTDS syntax? Perhaps we should
> just document the combination as not supported or undefined behaviour.
>


You raise an interesting idea to use CS_SERVERADDR to set the
CS_SERVERNAME. This seems easier than either of my suggestions. The main
complexity is that servername is passed directly to the ct_connect
function, while CS_SERVERADDR is set ahead of time in the CS_CONNECTION
data structure.

I have implemented your suggestion in the attached patch file for
src/ctlib/ct.c. This required small changes to both ct_con_props and
ct_connect. I tested this change using sqsh 2.4, but creating a test
within FreeTDS itself would be a good idea.

Let me know if this looks ok to you. The part where I changed how
not-NULL values of con->server_addr are interpreted in ct_connect is the
only change that may be prone to side effects. The previous logic appears
to have ignored any server_addr setting that was previously made. Now
server_addr settings override the server name passed into ct_connect.



> Frediano
> _______________________________________________
> FreeTDS mailing list
> FreeTDS AT lists.ibiblio.org
> http://lists.ibiblio.org/mailman/listinfo/freetds
>

Attachment: ct.c.cs_serveraddr_patch
Description: Binary data




Archive powered by MHonArc 2.6.24.

Top of Page