Ok, I
tried using the FreeTDS driver for unixodbc and I got a more detailed error
message that might shine a light:
Failed to connect
The driver reported the following
diagnostics whilst running SQLDriverConnect
IM007:1:0:[unixODBC][FreeTDS][SQL Server]Could
not find UID parameter
HYC00:2:0:[unixODBC][FreeTDS][SQL
Server]Driver not capable
0(0) auth_db:str_fixup: Unable to
open database connection
0(0) ERROR: fix_expr : fix_actions
error
ERROR: error -1 while trying to fix
configuration
These are my entries in /etc/odbc.ini
[SYBASE]
Driver
= /usr/local/lib/libtdsodbc.so
Description =
Sybase Server
Trace
= Yes
Trafcefile =
/tmp/odbc.log
#Servername
= JDBC
Server
= xx.xx.xx.xx
Port
= 5000
DSN
= database
Database
= database
#UserID
= username # I tried using both UID and UserID, had same results
UID
= username
Password
= passwd
TDS_Version = 5
These are my entries in /etc/freetds.conf:
[SYBASE]
host = xx.xx.xx.xx
port = 5000
tds version = 5
For whatever reason the module is not
picking up the UID and PWD from the db_url parameter i.e. modparam("usrloc|auth_db", "db_url",
"unixodbc://username:passwd@xx.xx.xx.xx/SYBASE")
The way I fixed the problem was by
changing the file my_con.c, line 69:
From:
sprintf( stringDNS, "%s%s%s", "DSN=", id->database,
";");
to:
sprintf( stringDNS, "%s%s%s", "DSN=", id->database,
";UID=username;PWD=passwd;");
And now works fine. Also, to add debug to
figure out which SQL queries fail, I changed the file dbase.c line 75:
From:
LOG(L_ERR, "Return value: %d\n", ret);
To:
LOG(L_ERR, "Return value: %d, Performing query: %s\n", ret, _s);
Now everytime a query fails it’ll
say the result msg, as well as the actual query that failed.
Lenir
From:
devel-bounces@openser.org [mailto:devel-bounces@openser.org] On Behalf Of lenirsantiago@yahoo.com
Sent: Thursday, December 08, 2005
12:59 PM
To: devel@openser.org;
users@openser.org
Subject: [Devel] unixODBC Database
Connection Problem
Guys,
Im trying to use unixodbc.so to connect to a Sybase database
using Sybase native ODBC drivers. This is the entry that I have on:
/etc/odbc.ini:
=============
[SYBASE]
Description
= Sybase ODBC Data Source
UserID
= username
Password
= passwd
Driver
= ASE
Server
= xx.xx.xx.xx
Port
= 5000
Database
= database
UseCursor
= 1
/etc/odbcinst.ini
============
[ASE]
Description
= Sybase ODBC Driver
Driver
= /opt/sybase/ODBC-12_5/lib/libsybdrvodb.so
FileUsage
= -1
UsageCount
= 1
The database is on a remote host. I can connect from the
openser server using unixodbc’s isql tool, as such:
[root@ser openser]# isql SYBASE username passwd
+---------------------------------------+
|
Connected!
|
|
|
|
sql-statement
|
| help
[tablename]
|
|
quit
|
|
|
+---------------------------------------+
SQL>
This proves that unixodbc is installed correctly and that
the Sybase odbc driver is installed and functioning properly.
However when I try to run openser (debug=4) I get the
following:
0(0) fixing /usr/local/lib/openser/modules/auth_db.so
www_authorize
0(0) db_init: Connection
'unixodbc://username:passwd@xx.xx.xx.xx/SYBASE' not found in pool
Failed to connect
The driver reported the following diagnostics whilst running
SQLDriverConnect
0(0) auth_db:str_fixup: Unable to open database
connection
0(0) ERROR: fix_expr : fix_actions error
ERROR: error -1 while trying to fix configuration
0(0) XLOG: destroy module ...
0(0) DEBUG: tm_shutdown : start
0(0) DEBUG: unlink_timer_lists : emptying DELETE list
0(0) DEBUG: tm_shutdown : emptying hash table
0(0) DEBUG: tm_shutdown : releasing timers
0(0) DEBUG: tm_shutdown : removing semaphores
0(0) DEBUG: tm_shutdown : destroying tmcb lists
0(0) DEBUG: tm_shutdown : done
0(22871) shm_mem_destroy
0(22871) destroying the shared memory lock
[root@ser openser]#
This is a snippet of my openser.cfg
------------------------------START--------------------------------
debug=4
fork=no
log_stderror=yes
listen=yy.yy.yy.yy
port=5060
children=4
server_signature=no
dns=no
rev_dns=no
check_via=no
syn_branch=yes
memlog=1000
sip_warning=no
fifo_mode=0666
fifo="/tmp/openser_fifo"
fifo_db_url="unixodbc://username:passwd@xx.xx.xx.xx/SYBASE"
reply_to_via=no
loadmodule
"/usr/local/lib/openser/modules/mysql.so"
loadmodule
"/usr/local/lib/openser/modules/postgres.so"
loadmodule
"/usr/local/lib/openser/modules/unixodbc.so"
loadmodule "/usr/local/lib/openser/modules/sl.so"
loadmodule "/usr/local/lib/openser/modules/tm.so"
loadmodule "/usr/local/lib/openser/modules/rr.so"
loadmodule
"/usr/local/lib/openser/modules/maxfwd.so"
loadmodule
"/usr/local/lib/openser/modules/usrloc.so"
loadmodule "/usr/local/lib/openser/modules/registrar.so"
loadmodule "/usr/local/lib/openser/modules/acc.so"
loadmodule
"/usr/local/lib/openser/modules/auth.so"
loadmodule
"/usr/local/lib/openser/modules/auth_db.so"
loadmodule
"/usr/local/lib/openser/modules/auth_radius.so"
loadmodule "/usr/local/lib/openser/modules/uri.so"
loadmodule
"/usr/local/lib/openser/modules/uri_radius.so"
loadmodule
"/usr/local/lib/openser/modules/mediaproxy.so"
loadmodule
"/usr/local/lib/openser/modules/nathelper.so"
loadmodule "/usr/local/lib/openser/modules/textops.so"
loadmodule
"/usr/local/lib/openser/modules/domain.so"
loadmodule
"/usr/local/lib/openser/modules/avpops.so"
loadmodule
"/usr/local/lib/openser/modules/avp_radius.so"
loadmodule "/usr/local/lib/openser/modules/permissions.so"
loadmodule
"/usr/local/lib/openser/modules/xlog.so"
loadmodule
"/usr/local/lib/openser/modules/options.so"
#loadmodule
"/usr/local/lib/openser/modules/group.so"
loadmodule
"/usr/local/lib/openser/modules/speeddial.so"
loadmodule "/usr/local/lib/openser/modules/group_radius.so"
modparam("usrloc", "db_mode", 0)
modparam("usrloc", "timer_interval", 60)
modparam("usrloc", "desc_time_order", 1)
modparam("permissions", "db_mode", 1)
modparam("permissions", "trusted_table",
"trusted")
modparam("permissions",
"default_allow_file", "/etc/ser/permissions.allow")
modparam("permissions",
"default_deny_file", "/etc/ser/permissions.deny")
modparam("usrloc|auth_db", "db_url",
"unixodbc://username:passwd@xx.xx.xx.xx/SYBASE")
---------------------------------END-----------------------------------------
Any suggestions?
Lenir