diff options
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/rddb.pm | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lib/rddb.pm b/lib/rddb.pm new file mode 100755 index 0000000..1ef296c --- /dev/null +++ b/lib/rddb.pm @@ -0,0 +1,48 @@ +#!/usr/bin/perl + +use strict; +use Config::IniFiles; +use DBI; + +package rddb; + + +sub opendb +{ + my $RD_CONF = "/etc/rd.conf"; + my $cfg = Config::IniFiles->new(-file => $RD_CONF) + or return (undef , 'ERROR', "Config File Error: " . join("\n", @Config::IniFiles::errors)); + + my $dbhost = $cfg->val('mySQL', 'Hostname'); + my $dbname = $cfg->val('mySQL', 'Database'); + my $dbuser = $cfg->val('mySQL', 'Loginname'); + my $dbpasswd = $cfg->val('mySQL', 'Password'); + + my $dbh = DBI->connect("DBI:mysql:$dbname:$dbhost","$dbuser","$dbpasswd") + or return (undef, 'ERROR', "Database Error: " . $DBI::errstr); + + return ($dbh, 'OK', 'success'); +} + +sub get_token +{ + my $username = shift; + + my ($dbh, $state, $errorstring) = opendb(); + unless($dbh) { + return ('', $state, $errorstring); + } + + my $sth = $dbh->prepare('select PASSWORD from USERS where LOGIN_NAME = ?') + or return ('', 'ERROR', "Database Error: " . $dbh->errstr); + + $sth->execute($username) + or return ('', 'ERROR', "Database Error: " . $sth->errstr); + + my ($token) = $sth->fetchrow_array; + return ($token, 'OK', 'success') if(defined $token); + + return ('', 'ERROR', "user '" . $username . "' not known by rivendell") +} + +return 1; |