How do I log into a database at startup/reload, and pass the database 
handle, or expose it to subsequent rules?  I have successfully logged 
into a database and select suitable information.  Unfortunately, if I 
comment out the 'use DBI' and 'DBI->connect', and insert a rule (rule 1) 
that is caught on a startup internal event, the same lookup fails when 
dereferencing the database handle.   Since the database is defined in a 
previous rule, it is unitialized at the time of the call in rule 2.

How do I pass the database handle from one rule to another?

Please advise,
Tim

-- 
Tim Peiffer
Network Support Engineer
Office of Information Technology
University of Minnesota/NorthernLights GigaPOP

+1 612 626-7884 (desk)


# Rule 1 log into the database
type=Single
desc=Module load and range setup
continue=TakeNext
ptype=SubStr
pattern=SEC_STARTUP
context=[SEC_INTERNAL_EVENT]
action=eval %dbh ( \
              use DBI; \
              my $dbh = 
DBI->connect("DBI:mysql:database=sedb;host=localhost", \
                                     "sec", "correlator"); \
              $dbh->{RaiseError} = 1; \
              $dbh->{AutoCommit} = 1; \
     );

# Rule 2, Log into the database, select a matching type, contact and 
description.
# Since $type, $contact, and $descr are exposed, assign in subsequent 
eval statements.
type=Single
desc=Peer Lookup
continue=TakeNext
ptype=RegExp
pattern=Peer (.*)
action= \
         eval %type ( \
              use DBI; \
              my $dbh = 
DBI->connect("DBI:mysql:database=sedb;host=localhost", \
                                     "sec", "correlator"); \
              $dbh->{RaiseError} = 1; \
              $dbh->{AutoCommit} = 1; \
           my $sth = $dbh->prepare( "SELECT type,contact,descr FROM 
peering where ip='$1'" ); \
           my $rv = $sth->execute; \
           ($type,$contact,$descr) = $sth->fetchrow ; \
           return "$type"; \
         ); \
         eval %contact ( return "$contact" ; ); \
         eval %descr ( return "$descr" ; ); \
         logonly %s ip=$1 type='%type' contact='%contact' descr='%descr' ;

x-128-101-232-110:database peiffer$ ../sec.pl -conf=./sec.cfg -input=- 
-log=- -debug=4 -intevents
[...]
Peer 1.1.1.1
Error evaluating code 'my $sth = $dbh->prepare( "SELECT 
type,contact,descr FROM peering where ip='1.1.1.1'" );           my $rv 
= $sth->execute;       ($type,$contact,$descr) = $sth->fetchrow 
;           return "$type";     ': Can't call method "prepare" on an 
undefined value at (eval 14) line 1.
Fri Dec 10 19:58:17 2010: Error evaluating code 'my $sth = 
$dbh->prepare( "SELECT type,contact,descr FROM peering where 
ip='1.1.1.1'" );           my $rv = $sth->execute;       
($type,$contact,$descr) = $sth->fetchrow ;           return "$type";     
': Can't call method "prepare" on an undefined value at (eval 14) line 1.
Use of uninitialized value $main::SEC::contact in string at (eval 15) 
line 1.
Use of uninitialized value $main::SEC::descr in string at (eval 16) line 1.
Peer Lookup ip=1.1.1.1 type='%type' contact='' descr=''
Fri Dec 10 19:58:17 2010: Peer Lookup ip=1.1.1.1 type='%type' contact='' 
descr=''

# sec db table peering..
DROP TABLE peering;

CREATE TABLE peering (
   id INT NOT NULL AUTO_INCREMENT,
   PRIMARY KEY(id),
   ip varchar(15),
   type varchar(15),
   contact varchar(15),
   descr varchar(80)
);

INSERT INTO peering (ip,type,contact,descr)
VALUES ('1.1.1.1', 'connector', 'me', 'mypeer with you');

mysql> select * from peering;
+----+---------+-----------+---------+-----------------+
| id | ip      | type      | contact | descr           |
+----+---------+-----------+---------+-----------------+
|  1 | 1.1.1.1 | connector | me      | mypeer with you |
+----+---------+-----------+---------+-----------------+


------------------------------------------------------------------------------
Oracle to DB2 Conversion Guide: Learn learn about native support for PL/SQL,
new data types, scalar functions, improved concurrency, built-in packages, 
OCI, SQL*Plus, data movement tools, best practices and more.
http://p.sf.net/sfu/oracle-sfdev2dev 
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to