Skip to content
Snippets Groups Projects
Commit 1d37b647 authored by Tomáš Plesník's avatar Tomáš Plesník
Browse files

pridana moznost uzivatelskeho nastaveni client_id

parent 214ee598
No related branches found
No related tags found
No related merge requests found
......@@ -37,19 +37,20 @@ WardenCommon::loadConf($conf_file);
# FUNCTIONS
################################################################################
sub usage {
print "Usage: $RealScript [-h -o -n <hostname> -r <requestor> -t <type> -i <ip_net_client>]\n";
print "Usage: $RealScript -h -o -n <hostname> -r <requestor> -t <type> -c <ip_net_client> [-i <client_id>]\n";
exit 1;
}
sub help {
print "$RealScript [-h -o -n <hostname> -r <requestor> -t <type> -i <ip_net_client>]\n";
print "$RealScript -h -o -n <hostname> -r <requestor> -t <type> -c <ip_net_client> [-i <client_id>]\n";
print "-h print this text and exit\n";
print "-n hostname of receiver\n";
print "-r client registration requestor\n";
print "-t type of received events or '_any_' for receiving of all types of events\n";
print "-o enable receiving of own events\n";
print "-i CIDR of receiver\n";
print "-c CIDR of receiver\n";
print "-i user defined client ID (optional)\n";
exit 0;
}
......@@ -71,31 +72,29 @@ sub sendMsg
################################################################################
# MAIN
################################################################################
our ($opt_n, $opt_r, $opt_t, $opt_o, $opt_i, $opt_h);
our ($opt_n, $opt_r, $opt_t, $opt_o, $opt_c, $opt_i, $opt_h);
if ($#ARGV == -1) {
usage;
}
die usage unless getopts("n:r:t:i:ho");
die usage unless getopts("n:r:t:c:i:ho");
my $hostname = $opt_n;
my $requestor = $opt_r;
my $type = $opt_t;
my $ip_net_client = $opt_i;
my $ip_net_client = $opt_c;
my $client_id = $opt_i;
my $help = $opt_h;
my $receive_own_events = "f";
if ($opt_o) {$receive_own_events = "t"}
if ($opt_o) {
$receive_own_events = "t";
}
# catch help param
if ($help) {
help;
}
# check validity of IP address (CIDR format)
if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
WardenCommon::errMsg("Enter correct IP address in CIDR format!");
}
# check parameters definition
switch () {
case {!defined $hostname} {WardenCommon::errMsg("Parameter 'hostname' is not defined!")}
......@@ -105,6 +104,16 @@ switch () {
case {!defined $ip_net_client} {WardenCommon::errMsg("Parameter 'ip_net_client' is not defined!")}
}
# check validity of IP address (CIDR format)
if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
WardenCommon::errMsg("Enter correct IP address in CIDR format!");
}
# check client ID
if (defined $client_id && $client_id !~ /^\d+\z/) {
WardenCommon::errMsg("Parameter 'client_id' is not a integer!");
}
# defined variables by script
my $client_type = "r";
my $valid = "t";
......@@ -117,16 +126,28 @@ my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST
my $warden_server = WardenCommon::trim(`hostname -f`);
# check if receiver has been already registered or register it
my $sth = $dbh->prepare("SELECT registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
# check if user defined client_id wasn't used
my ($sth, $client_id_db, $registered_db);
if (defined $client_id) {
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Client with ID '$client_id_db' has been already registered at Warden server '$warden_server' in '$registered_db'");
}
}
# check if receiver has been already registered
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($hostname, $client_type, $type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
my $result = $sth->fetchrow();
if (defined $result) {
sendMsg("err", "Attempt to re-register receiver [Hostname: '$hostname', Type: '$type', CIDR: '$ip_net_client'] at Warden server '$warden_server'");
WardenCommon::errMsg("Receiver has already been registered at Warden server '$warden_server' in '$result'");
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to re-register receiver (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Receiver has been already registered at Warden server '$warden_server' in '$registered_db' with ID '$client_id_db'");
} else {
# register receiver
$sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
my $ret_val = $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
my $ret_val = $sth->execute($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
if ($ret_val == 1) {
my $last_insert_id = $dbh->last_insert_id(undef, undef, "clients", undef);
sendMsg("info", "New receiver [ID: '$last_insert_id', Hostname: '$hostname', Requestor: '$requestor', Type: '$type', ROE: '$receive_own_events', CIDR: '$ip_net_client'] has been registered");
......
......@@ -37,19 +37,20 @@ WardenCommon::loadConf($conf_file);
# FUNCTIONS
################################################################################
sub usage {
print "Usage: $RealScript [-h -n <hostname> -r <requestor> -s <service> -d <description_tags> -i <ip_net_client>]\n";
print "Usage: $RealScript -h -n <hostname> -r <requestor> -s <service> -d <description_tags> -c <ip_net_client> [-i <client_id>]\n";
exit 1;
}
sub help {
print "$RealScript [-h -n <hostname> -r <requestor> -s <service> -d <description_tags> -i <ip_net_client>]\n";
print "$RealScript -h -n <hostname> -r <requestor> -s <service> -d <description_tags> -c <ip_net_client> [-i <client_id>]\n";
print "-h print this text and exit\n";
print "-n hostname of sender\n";
print "-r client registration requestor\n";
print "-s name of service which sent events\n";
print "-d description tags of send events\n";
print "-i CIDR of sender\n";
print "-c CIDR of sender\n";
print "-i user defined client ID (optional)\n";
exit 0;
}
......@@ -71,18 +72,19 @@ sub sendMsg
################################################################################
# MAIN
################################################################################
our ($opt_n, $opt_r, $opt_s, $opt_d, $opt_i, $opt_h);
our ($opt_n, $opt_r, $opt_s, $opt_d, $opt_c, $opt_i, $opt_h);
if ($#ARGV == -1) {
usage;
}
die usage unless getopts("n:r:s:d:i:h");
die usage unless getopts("n:r:s:d:c:i:h");
my $hostname = $opt_n;
my $requestor = $opt_r;
my $service = $opt_s;
my $description_tags = $opt_d;
my $ip_net_client = $opt_i;
my $ip_net_client = $opt_c;
my $client_id = $opt_i;
my $help = $opt_h;
# catch help param
......@@ -90,11 +92,6 @@ if ($help) {
help;
}
# check validity of IP address (CIDR format)
if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
WardenCommon::errMsg("Enter correct IP in CIDR format!");
}
# check parameters definition
switch () {
case {!defined $hostname} {WardenCommon::errMsg("Parameter 'hostname' is not defined!")}
......@@ -104,6 +101,16 @@ switch () {
case {!defined $ip_net_client} {WardenCommon::errMsg("Parameter 'ip_net_client' is not defined!")}
}
# check validity of IP address (CIDR format)
if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
WardenCommon::errMsg("Enter correct IP in CIDR format!");
}
# check client ID
if (defined $client_id && $client_id !~ /^\d+\z/) {
WardenCommon::errMsg("Parameter 'client_id' is not a integer!");
}
# defined variables by method
my $client_type = "s";
my $valid = "t";
......@@ -116,16 +123,28 @@ my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST
my $warden_server = WardenCommon::trim(`hostname -f`);
# check if receiver has been already registered or do its registration
my $sth = $dbh->prepare("SELECT registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
# check if user defined client_id wasn't used
my ($sth, $client_id_db, $registered_db);
if (defined $client_id) {
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Client with ID '$client_id_db' has been already registered at Warden server '$warden_server' in '$registered_db'");
}
}
# check if sender has been already registered
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($hostname, $service, $client_type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
my $result = $sth->fetchrow();
if (defined $result) {
sendMsg("err", "Attempt to re-register sender [Hostname: '$hostname', Service: '$service', CIDR: '$ip_net_client'] at Warden server '$warden_server'");
WardenCommon::errMsg("Sender has already been registered at Warden server '$warden_server' in '$result'");
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to re-register sender (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Sender has been already registered at Warden server '$warden_server' in '$registered_db' with ID '$client_id_db'");
} else {
# register sender
$sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
my $ret_val = $sth->execute(undef, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
my $ret_val = $sth->execute($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
if ($ret_val == 1) {
my $last_insert_id = $dbh->last_insert_id(undef, undef, "clients", undef);
sendMsg("info", "New sender [ID: '$last_insert_id', Hostname: '$hostname', Requestor: '$requestor', Service: '$service', Description_tags: '$description_tags', CIDR: '$ip_net_client'] has been registered");
......
......@@ -272,7 +272,7 @@ G. Registration of Clients
The Warden server administrator is responsible for registering new clients or
removing those already registered. Both registration or unregistration scripts
are provided in the Warden server package. Those scripts should be run from
localhost (the same machine the Warden server is installed and running on).
the same machine the Warden server is installed and running on.
Members of Warden community who would like to have their client registered must
contact the Warden server administrator with the requirement. This is usually
......@@ -291,7 +291,8 @@ G. Registration of Clients
client registration,
service - name of the service of a new registered client,
description_tags - tags describing the nature of the service,
ip_net_client - CIDR the client is only allowed to communicate from.
ip_net_client - CIDR the client is only allowed to communicate from,
client_id - user defined client ID (optionaly).
One can run registerSender.pl with -h argument to see a help.
......@@ -310,7 +311,8 @@ G. Registration of Clients
for receiving of all types of events,
receive_own_events - boolean value describing if events originating from
the same CIDR will be sent to the client,
ip_net_client - CIDR the client is only allowed to communicate from.
ip_net_client - CIDR the client is only allowed to communicate from,
client_id - user defined client ID (optionaly)
One can run registerReceiver.pl with -h argument to see a help.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment