Does anyone know if there is a way to authenticate SER to MS Active
Directory? I'd like to use an existing user database instead of
having to manage users myself, and most of our users are in Active
Directory.
Has anyone tried this?
What are most SER users using for authentication? Is anyone here
tying into any kind of existing organization user database?
hello i have ser 0.8.14 working, some clients are behind nat others not.
i have setup pstn gateway - asterisk a try to route some call here, but
there is some problem with audio, from both clients - with real ip
address and clients behind nat. Called party hear everything what caller
say, but caller hear nothing.
calling between client with real address and other behind nat works fine.
ser and pstn-gateway have real ip addresses, they are no same subnet.
Can anybody help me to solve this problem ?
below is my sr.cfg
best regards Marian
#
# $Id: ser.cfg,v 1.21.4.1 2003/11/10 15:35:15 andrei Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
#debug=3 # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no # (cmd line: -E)
/* Uncomment these lines to enter debugging mode
debug=7
fork=no
log_stderror=yes
*/
alias=mdk10.sunteq.sk
alias=sunteq.sk
#alias=atlas.sunteq.sk
check_via=no # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
#port=5060
#children=4
fifo="/tmp/ser_fifo"
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
loadmodule "/lib/ser/modules/mysql.so"
loadmodule "/lib/ser/modules/sl.so"
loadmodule "/lib/ser/modules/tm.so"
loadmodule "/lib/ser/modules/rr.so"
loadmodule "/lib/ser/modules/maxfwd.so"
loadmodule "/lib/ser/modules/usrloc.so"
loadmodule "/lib/ser/modules/registrar.so"
loadmodule "/lib/ser/modules/textops.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/lib/ser/modules/auth.so"
loadmodule "/lib/ser/modules/auth_db.so"
# load the voicemail module
#loadmodule "/lib/ser/modules/vm.so"
# load the enum module
loadmodule "/lib/ser/modules/enum.so"
# load the group module, to verify if a user forwards to voicemail
loadmodule "/lib/ser/modules/group.so"
# load the nathelper module
loadmodule "/lib/ser/modules/nathelper.so"
loadmodule "/lib/ser/modules/acc.so"
# ----------------- setting module-specific parameters ---------------
# -- registrar parameter
# special NAT flag indicates that a registered client is behind NAT
modparam("registrar", "nat_flag", 6)
# -- usrloc params --
#modparam("usrloc", "db_mode", 0)
# Uncomment this if you want to use SQL database
# for persistent storage and comment the previous line
modparam("usrloc", "db_mode", 2)
#modparam("usrloc", "db_url", "mysql://ser:heslo@localhost/ser")
modparam("usrloc|auth_db|acc|group|msilo|uri","db_url","mysql://ser:heslo@localhost/ser")
# -- auth params --
# Uncomment if you are using auth module
#
modparam("auth_db", "calculate_ha1", yes)
#
# If you set "calculate_ha1" parameter to yes (which true in this config),
# uncomment also the following parameter)
#
modparam("auth_db", "password_column", "password")
#modparam("auth_db", "db_url", "mysql://ser:heslo@localhost/ser")
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# -- voicemail params --
#modparam("voicemail", "db_url","mysql://ser:heslo@localhost/ser")
# -- voicemail params --
#modparam("group", "db_url","mysql://serro:heslo@localhost/ser")
# -- nathelper params --
modparam("nathelper", "natping_interval", 3)
modparam("nathelper", "ping_nated_only", 1)
modparam("tm", "fr_inv_timer", 30 )
#modparam("tm", "fr_inv_timer", 8 )
# ------------------------- request routing logic -------------------
# main routing logic
route{
log(1, "-------------------------------------------\n");
log(1, "entering main loop\n");
if (nat_uac_test("2")) {
log(1, "src address different than via header->NAT
detected\n");
log(1, "force_rport and fix_nated_contact and
setflag(5)\n");
#try NAT traversal, works only if the client is symmetrical
force_rport();
fix_nated_contact();
append_hf("P-hint: fixed NAT contact for request\r\n");
# flag 5 indicates that incoming request is from NATed
client
setflag(5);
};
if (method=="REGISTER")
log(1, "REGISTER message received\n");
if (method=="INVITE")
log(1, "INVITE message received\n");
if (method=="ACK")
log(1, "ACK message received\n");
if (method=="BYE")
log(1, "BYE message received\n");
if (method=="CANCEL")
log(1, "CANCEL message received\n");
if (method=="SUBSCRIBE")
log(1, "SUBSCRIBE message received\n");
if (method=="NOTIFY")
log(1, "NOTIFY message received\n");
if (method=="OPTIONS")
log(1, "OPTIONS message received\n");
if (method=="INFO")
log(1, "INFO message received\n");
if (method=="MESSAGE")
log(1, "MESSAGE message received\n");
if (method=="REFER")
log(1, "REFER message received\n");
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if (msg:len > max_len) {
#if (len_gt( max_len )) {
sl_send_reply("513", "Message too big");
break;
};
# loose-route processing
if (loose_route()) {
log(1, "loose_route processing\n");
t_relay();
break;
};
# Check for PSTN access
if (uri=~"^sip:0[0-9]*@.*") {
log(1, "going to PSTN route3\n");
route(3);
break;
};
# if the request is for other domain use UsrLoc
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
if (method=="REGISTER") {
log(1, "analyzing REGISTER request\n");
# Uncomment this if you want to use digest authentication
if (!www_authorize("mdk10.sunteq.sk",
"subscriber")) {
www_challenge("mdk10.sunteq.sk", "0");
break;
};
if (isflagset(5)) {
#register from nated client, save
nat_flag=6
#in location table
setflag(6);
};
if (!save("location")) {
log(1, "save location error\n");
sl_reply_error();
};
break;
};
lookup("aliases");
#mark transaction for voicemail
#if (is_user_in("Request-URI", "voicemail\n")) {
# log(1, "requested user is in voicemail group");
# setflag(4);
#};
# Process Aliases
lookup("aliases");
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
# handle user which was not found
log(1, "requested user not found\n");
route(4);
break;
};
};
#add failure route which should be performed if response code >=300
if (method=="INVITE" && isflagset(4)) {
log(1, "invite for voicemail user->initiate
failureroute[1]\n");
t_on_failure("1");
};
# forward to current uri now; use stateful forwarding; that
# works reliably even if we forward from TCP to UDP
route(1);
}
route[1]{
log(1, "-------------------------------------------\n");
log(1, "entering route[1] - relaying SIP message\n");
if ((isflagset(5)) || (isflagset(6))) {
log(1, "at least one of the participants is
NATed->record_route\n");
record_route();
log(1, " -->setting up reply processing
->onreply_route[1]");
t_on_reply("1");
if (method=="INVITE") {
log(1, " INVITE request-->force_rtp_proxy,
set NATED-INVITE flag(7)");
force_rtp_proxy();
append_hf("P-hint: request forced to rtp
proxy\r\n");
setflag(7);
};
};
log(1, "relaying message ...\n");
if (!t_relay()) {
log(1, "t_relay error occured\n");
sl_reply_error();
};
}
# all incoming replies for t_onrepli-ed transactions enter here
onreply_route[1] {
log(1, "-------------------------------------------\n");
log(1, "onreply_route[1] entered\n");
if (isflagset(6)) {
log(1, "transaction was sent to a NATED client -> fix
nated contact\n");
fix_nated_contact();
append_hf("P-hint: fixed NAT contact for response\r\n");
}
if ( (status=~"100") ) {
log(1, "status 100 received\n");
};
if ( (status=~"180") ) {
log(1, "status 180 received\n");
};
if ( (status=~"202") ) {
log(1, "status 202 received\n");
};
if ( (status=~"200" || status=~"183") ) {
log(1, "status 2xx or 183");
if ( isflagset(7) ) {
log(1, "marked(7) as NATED-INVITE ->
force_rtp_proxy \n");
force_rtp_proxy();
append_hf("P-hint: response forced to rtp
proxy\r\n");
};
};
}
route[3] {
if (method=="INVITE" && (!src_ip==194.1.222.26)) {
log(1, "method is invite\n");
if (!proxy_authorize( "mdk10.sunteq.sk","subscriber")) {
proxy_challenge( "mdk10.sunteq.sk", "0");
break;
};
# let's check from=id ... avoids accounting confusion
if(!is_user_in("credentials", "local")) {
sl_send_reply("403", "NO PSTN Privileges...");
break;
};
consume_credentials();
}; # INVITE to authorized PSTN
log(1, "authorized to PSTN\n");
# if you have passed through all the checks, let your call go to GW!
force_rtp_proxy();
record_route();
t_on_reply("1");
# snom conditioner
if (method=="INVITE" && search("User-Agent: snom")) {
replace("100rel, ", "");
};
append_hf("P-hint: GATEWAY\r\n");
# use UDP to guarantee well-known sender port (TCP ephemeral)
t_relay_to_udp("194.1.222.26","5060");
}
route[4]{
log(1, "-------------------------------------------\n");
log(1, "entering route[4] = requested user not online\n");
# non-Voip -- just send "off-line"
if (!(method == "INVITE" || method == "ACK" || method ==
"CANCEL" || method == "REFER" || method == "BYE")) {
log(1, "no invite,ack,cancel,refer->return 404\n");
sl_send_reply("404", "Not Found");
break;
};
# not voicemail subscriber and no echo/conference call
if ( isflagset(4)) {
log(1, "flag(4) active\n");
};
if (uri =~ "conference") {
log(1, "conference call\n");
};
if (uri =~ "echo") {
log(1, "echo call\n");
};
if ( !( isflagset(4) || (uri =~ "conference") || (uri =~
"echo") ) ) {
log(1, "no voicemail subscriber->return 404");
sl_send_reply("404", "Not Found and no voicemail turned
on");
break;
};
if ( isflagset(5) ) {
log(1, "caller is NATed->record_route\n");
record_route();
log(1, " -->setting up reply processing
->onreply_route[1]");
t_on_reply("1");
if (method=="INVITE") {
log(1, " INVITE request-->force_rtp_proxy");
force_rtp_proxy();
};
};
# forward to voicemail now
rewritehostport("192.168.1.253:5060");
log(1, "forward to voicemail\n");
t_relay_to_udp("192.168.1.253", "5060");
}
failure_route[1] {
/* XX: note: unsafe if preloaded routes without username used */
log(1, "-------------------------------------------\n");
log(1, "failureroute[1] entered\");
revert_uri();
rewritehostport("212.17.35.184:5060");
append_branch();
t_relay_to_udp("212.17.35.184", "5060");
}
Greetings,
For some reason enum_query("") failed in our setup to properly
resolve NAPTR records.
When I do a SIP INVITE to something like +41446336297(a)test.ethz.ch
with debug=9 in ser.cfg, I get syslog entries
get_record: lookup(7.9.2.6.3.3.6.4.4.1.4, 35) failed
enum_query(): No NAPTR record found for 7.9.2.6.3.3.6.4.4.1.4.
and the SIP ENUM call fails.
__
However, if we apply the following unified patch
--- modules/enum.ori/enum.c Fri Sep 3 10:15:09 2004
+++ modules/enum/enum.c Fri Sep 3 12:51:37 2004
@@ -258,6 +258,8 @@
memcpy(name + j, suffix->s, suffix->len + 1);
+ strcat(name, "e164.arpa");
+
head = get_record(name, T_NAPTR);
if (head == 0) {
to vanilla ser-0.8.14, all goes well.
Apparently, the domain_suffix parameter in the enum module can be set
but is not automatically appended. Can someone confirm this?
Cheers,
Marcel
Hi everybody,
I am searching for a Prepais Billing solution using SER and
Ser-Mysql. I have been "googling" but all I found was to pay
Iptel.org for the service.
Could anyone tell me if exist a free solution or if someone have do
it by hisself?
Thank you very much!!!.
Nahuel Ramos. (Sorry about my english.)
__________________________________
Do you Yahoo!?
Yahoo! Mail is new and improved - Check it out!
http://promotions.yahoo.com/new_mail
Hi all,
Since SER does not provide DNS SRV failover capability, how do you
perform failover for your PSTN gateways?
I currently think about some sort of load balancing with exec_dset()
which looks up a gateway in a mysql db and give it 10 tries to find a
gateway (SER is running on my.domain:5060)
route
{
if (!mf_process_maxfwd_header("10"))
{
sl_send_reply("483", "Too many hops");
break;
}
<snip>
exec_dset("/my/sipgw-balancing-script"); # returns a random GW
t_on_failure("1");
t_relay();
<snip>
}
failure_route[1]
{
if(t_check_status("503")
{
rewritehostport("my.domain:5060"); # peform loop
append_branch();
t_relay();
}
}
Is this good practice? Any other ideas/optimizations?
Cheers,
Andy
Hello list
Beside the BYE problem that i post in a past mail, i detected
another weird behaivor of SER. When i made a call from a registered
endpoint (64.76.148.242) to a PSTN-number through a PSTN-Gateway. The
destination devices keep ringing even if i send a CANCEL message. I don't
understand why. Here is the debug
U 64.76.148.242:5060 -> sersip.mydomain.com:5060
CANCEL sip:005622408196@sersip.mydomain.com SIP/2.0
Via: SIP/2.0/UDP 64.76.148.242:5060;branch=z9hG4bK1f42736da4462
From: <sip:5555832351@sersip.mydomain.com>;tag=1f42736da4
To: <sip:005622408196@sersip.mydomain.com>
Call-ID: 1f629d42-2d9e-73aa-826d-0002a400f1e9(a)64.76.148.242
CSeq: 462 CANCEL
Date: Wed, 01 Jun 2005 07:22:16 GMT
User-Agent: AddPac SIP Gateway
Content-Length: 0
Max-Forwards: 70
#
U sersip.mydomain.com:5060 -> 64.76.148.242:5060
SIP/2.0 404 Not Found IT!
Via: SIP/2.0/UDP 64.76.148.242:5060;branch=z9hG4bK1f42736da4462
From: <sip:5555832351@sersip.mydomain.com>;tag=1f42736da4
To:
<sip:005622408196@sersip.mydomain.com>;tag=a6a1c5f60faecf035a1ae5b6e96e979a-
3932
Call-ID: 1f629d42-2d9e-73aa-826d-0002a400f1e9(a)64.76.148.242
CSeq: 462 CANCEL
Server: Sip EXpress router (0.8.14 (i386/linux))
Content-Length: 0
Warning:392 sersip.mydomain.com:5060 "Noisy feedback tells: pid=16760
req_src_ip=64.76.148.242 req_src_port=5060
in_uri=sip:005622408196@sersip.mydomain.com
out_uri=sip:005622408196@sersip.mydomain.com via_cnt==1"
It seems to be related with my past message. Can someone help me here, i'm
very confused. Here is my ser.cfg.
Thanks in advance.
#
# $Id: ser.cfg,v 1.21.2.2 2003/10/13 22:53:06 jiri Exp $
#
# simple quick-start config script
#
# ----------- global configuration parameters ------------------------
debug=0 # debug level (cmd line: -dddddddddd)
fork=yes
log_stderror=yes # (cmd line: -E)
#Uncomment these lines to enter debugging mode
#fork=no
#log_stderror=yes
check_via=yes # (cmd. line: -v)
dns=no # (cmd. line: -r)
rev_dns=no # (cmd. line: -R)
port=5060
#children=4
fifo="/tmp/ser_fifo"
fifo_mode=0666
# ------------------ module loading ----------------------------------
# Uncomment this if you want to use SQL database
#loadmodule "/usr/local//lib/ser/modules/mysql.so"
loadmodule "/usr/local//lib/ser/modules/sl.so"
loadmodule "/usr/local//lib/ser/modules/tm.so"
loadmodule "/usr/local//lib/ser/modules/rr.so"
loadmodule "/usr/local//lib/ser/modules/maxfwd.so"
loadmodule "/usr/local//lib/ser/modules/usrloc.so"
loadmodule "/usr/local//lib/ser/modules/registrar.so"
loadmodule "/usr/local//lib/ser/modules/textops.so"
loadmodule "/usr/local//lib/ser/modules/exec.so"
# Para trabajar con NAT
loadmodule "/usr/local//lib/ser/modules/mediaproxy.so"
loadmodule "/usr/local//lib/ser/modules/domain.so"
loadmodule "/usr/local//lib/ser/modules/dbtext.so"
# Uncomment this if you want digest authentication
# mysql.so must be loaded !
loadmodule "/usr/local/lib/ser/modules/auth.so"
#loadmodule "/usr/local/lib/ser/modules/auth_db.so"
loadmodule "/usr/local/lib/ser/modules/auth_radius.so"
loadmodule "/usr/local/lib/ser/modules/group_radius.so"
loadmodule "/usr/local/lib/ser/modules/acc.so"
# ----------------- setting module-specific parameters ---------------
# ----------------- setting module-specific parameters ---------------
# -- rr params --
# add value to ;lr param to make some broken UAs happy
modparam("rr", "enable_full_lr", 1)
# module authorization
modparam("auth_radius","radius_config","/usr/local/etc/radiusclient/radiuscl
ient.conf")
modparam("auth_radius","service_type",15)
#module accounting
modparam("acc","radius_config","/usr/local/etc/radiusclient/radiusclient.con
f")
modparam("acc","log_level",1)
modparam("acc", "service_type", 15)
modparam("acc", "radius_flag", 1)
modparam("acc", "radius_missed_flag", 3)
modparam("acc", "failed_transactions", 1)
modparam("acc", "report_ack", 0)
#group radius
modparam("group_radius","radius_config","/usr/local/etc/radiusclient/radiusc
lient.conf")
modparam("group_radius", "use_domain", 1)
#module mediaproxy
modparam("mediaproxy", "natping_interval", 60)
modparam("mediaproxy", "mediaproxy_socket", "/var/run/mediaproxy.sock")
#modparam("mediaproxy", "sip_asymmetrics",
"/usr/local/etc/ser/sip-asymmetrics-clients")
#modparam("mediaproxy", "rtp_asymmetrics",
"/usr/local/etc/ser/rtp-asymmetrics-clients")
modparam("registrar", "nat_flag", 5)
#module domain
modparam("domain", "db_url", "/usr/local/etc/ser/domaintables")
modparam("domain", "domain_table", "domain")
modparam("domain", "domain_col", "domain")
# ------------------------- request routing logic -------------------
# main routing logic
route {
# initial sanity checks -- messages with
# max_forwards==0, or excessively long requests
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
break;
};
if ( msg:len > max_len ) {
sl_send_reply("513", "Message too big");
break;
};
# subsequent messages withing a dialog should take the
# path determined by record-routing
record_route();
if (loose_route()) {
if (method=="BYE" || method=="CANCEL") {
log(1, "NAT: BYE o CANCEL recibido --> terminando la
sesion de media\n");
end_media_session();
setflag(1);
};
t_relay();
break;
};
# Maracamos las llamadas para accounting
setflag(1);
if (client_nat_test("1")) {
log(1, "NAT: Requerimiento de IP privada --> fixed contact
(en rutina principal)\n");
setflag(5);
force_rport();
fix_contact();
append_hf("P-hint: fixed NAT contact for request\r\n");
};
# (in case, it does not work, use the following command
# with proper names and addresses in it)
if (uri==myself) {
if (method=="REGISTER") {
# Challenge/Response
if ( !radius_www_authorize("")) {
www_challenge("", "1");
break;
};
# Mandamos un mensaje de Log si es que un cliente NATEADO se
registro.
if (isflagset(5)) {
log(1, "NAT: Cliente NAT'eado registrado (dentro del
chequeo de REGISTER)\n");
};
save("location");
break;
}; # FIN DE CHEQUEO DE REGISTRO
# lookup("aliases");
# CHEQUEO EL INVITE DE LA LLAMADA A REALIZARSE SOLO SI ES DE MI
DOMINIO SIPPROXY.MAGENTA.CL
if (method=="INVITE" && search("^From: <sip:.*@64.76.148.231>")) {
if ( !radius_proxy_authorize("")) {
proxy_challenge("", "1");
log (1, "LOG: Llamada no AUTORIZADA\n");
break;
};
};
if ( (uri=~"^sip:0.*@.*") ){
if (method=="INVITE") {
log(1,"FORWARDING : Llamada hacia plataforma
H.323\n");
route(3);
break;
};
};
# Llamadas hacia dominio H.323 (todo lo que comienza con 111, 777,
333 y 00xxxxxxxx)
if ( (uri=~"^sip:111.*@.*") | (uri=~"^sip:777.*@.*") |
(uri=~"^sip:333.*@.*") ){
if (method=="INVITE") {
log(1,"FORWARDING : Llamada hacia plataforma
H.323\n");
route(1);
break;
};
};
# Llamadas SIP locales
if (!lookup("location")) { #Usuarios que no estan en "location"
database.
route(4);
break;
};
setflag(3);
# Manejo para llamadas NAT'das
if (method=="INVITE") {
log(1, "ROUTING: Reply processing (online user) enabled to
handle NAT'd resonses\n");
t_on_reply("1");
if ( (isflagset(5)) && (method=="INVITE" ||
method=="ACK") ) {
log(1, "NAT: Invite received --> enabling
media proxy (else del lookup 2do if)\n");
use_media_proxy();
append_hf("P-hint: request forced to media
proxy\r\n");
};
};
# Do it ? (Ricardo Martinez)
};
append_hf("P-hint: USRLOC\r\n");
if (!t_relay()) {
sl_reply_error();
break;
};
} /* end of initial routing logic */
#--------- Route 1 hacia SIPQUEST -------------------------------
route[1]
{
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
# Esta NATEADO?
if (isflagset(5)) {
log(1, "NAT: At least one participant NAT'd --> enable reply
processing (hacia GW)\n");
t_on_reply("1");
if (method=="INVITE") {
log(1, "NAT: Invite received --> enabling proxied
media session (hacia GW)\n");
setflag(1);
use_media_proxy();
};
};
rewritehostport("sipquest.mydomain.com:5060");
append_hf("P-hint: GATEWAY\r\n");
if (!t_relay()) {
sl_reply_error();
break;
};
}
#------- Route 3 : Trafico de Internet hacia la PSTN -------------------
route[3] {
setflag(1);
#Esta NETEADO?
if (isflagset(5)) {
log(1, "NAT: At least one participant NAT'd --> enable reply
processing (hacia GW)\n");
t_on_reply("1");
if (method=="INVITE") {
log(1, "NAT: Invite received --> enabling proxied
media session (hacia GW)\n");
#setflag(1);
use_media_proxy();
};
};
rewritehostport("gw1.mydomain.com:5060");
append_hf("P-hint: GATEWAY\r\n");
t_relay();
break;
}
#------ Route 4 : Llamadas a usuarios Off-line ------------------------
route[4] {
if (!t_newtran()) {
sl_reply_error();
};
if (!t_reply("404", "Not Found IT!")) {
sl_reply_error();
};
break;
}
# ---------------------------- Begin On-Reply Routes
--------------------------
onreply_route[1] {
# If we've got here, it's because we've previously passed through a
block
# which handles NAT requests and has set a t_on_reply condition. DB
03-08-2004
if (status =~ "(183)|(2[0-9][0-9])") {
if (client_nat_test("1") || isflagset(5)) {
log(1, "NAT: Reply from NAT'd client --> fixing contact
(onreply_route)\n");
fix_contact();
use_media_proxy();
setflag(5);
};
log(1, "NAT: NAT'd transaction answered --> enabling media proxy
(onreply_route)\n");
# use_media_proxy();
};
}
# ------------------------------ End On-Reply Routes
--------------------------
Ricardo.-
What can I do in order to make a decision based on
src_ip and the IP address in the URI domain? I have
calls between UAs located behind the same NAT on the
other end of a low bandwidth WAN circuit and want the
ability to not force the call through rtp_proxy. In
practice this works ok with a fixed IP address but I
am unsure how to make the process more dynamic. I am
new to SER and still learning the features and
scripting language so I apologize of this topic is
covered somewhere else.
Regards,
Allan
______________________________________________________________________
Post your free ad now! http://personals.yahoo.ca
Are there any examples of how run a select query to the db from within
ser.conf , and return a value other than 0 or 1 ?
I have read in the mailing list archives that the only way to do this is to
call a shell script, is that true ?
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.777 / Virus Database: 524 - Release Date: 10/14/2004