To clarify further, "/tmp" in 

conn_string = "host='/tmp' dbname='foobar' user='foo' password='bar'"

implies the use of Unix Sockets. This is a legitamte connection and 
supported by psycopg2 however it is disregarded by the DAL due to the 
Regular Expression enforced syntax of the connection string.


On Monday, May 28, 2012 9:43:06 AM UTC-7, Babak wrote:
>
> Web2Py community,
>
> I am rewriting this note, please disregard/delete the prior post (I'm not 
> getting updated on it)
>
> Working with the DAL I noted that the Regular Expression does not allow 
> for host names that are directories such as "/tmp"
>
> The following line is from DAL.py
>
> [1] 
> re.compile('^(?P<user>[^:@]+)(\:(?P<password>[^@]*))?@(?P<host>[^\:@/]+)(\:(?P<port>[0-9]+))?/(?P<db>[^\?]+)(\?sslmode=(?P<sslmode>.+))?$')
>
> Note that the 70th character in [1] above, "/" excludes the option of 
> having a host named "/tmp" however the following is a legitimate postgres 
> connection:
>
> import psycopg2
> conn_string = "host='/tmp' dbname='foobar' user='foo' password='bar'"
> conn = psycopg2.connect(conn_string)
> cursor = conn.cursor()
> cursor.execute("SELECT * FROM foobar_table")
> records = cursor.fetchall()
>  
>
There are many instances where a UNIX user may prefer sockets over 
> localhost connections. The easiest work around I can think of is to change 
> [1] to the following:
>
> [2] 
> re.compile('^(?P<user>[^:@]+)(\:(?P<password>[^@]*))?@(?P<host>[^\:@]+)(\:(?P<port>[0-9]+))?/(?P<db>[^\?]+)(\?sslmode=(?P<sslmode>.+))?$')
>
> Where the "/" character exclusion is removed from the character class 
> definition for the group "host"
>
> Best regards,
>
> Babak
>
>

Reply via email to