diff --git a/src/warden-server/bin/registerReceiver.pl b/src/warden-server/bin/registerReceiver.pl index abd215c3555ee0472c817ad9e03cc6a004b28614..c521d1b75b1ec258031893a742311363a33e9420 100755 --- a/src/warden-server/bin/registerReceiver.pl +++ b/src/warden-server/bin/registerReceiver.pl @@ -137,41 +137,64 @@ my $valid = "t"; my $registered = DateTime->now; my $service = undef; my $description_tags = undef; +my $warden_server = WardenCommon::trim(`hostname -f`); # connect to DB my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS); -my $warden_server = WardenCommon::trim(`hostname -f`); - -# check if user defined client_id wasn't used -my ($sth, $client_id_db, $registered_db); +# register receiver +my ($sth, $client_id_db, $hostname_db, $registered_db, $requestor_db, $client_type_db, $type_db, $receive_own_events_db, $ip_net_client_db, $valid_db); +# check if user client_id is specified and prepare statement according to this if (defined $client_id) { - $sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + $sth = $dbh->prepare("SELECT client_id, hostname, registered, requestor, client_type, type, receive_own_events, ip_net_client, valid 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; -($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("SELECT client_id, hostname, registered, requestor, client_type, type, receive_own_events, ip_net_client, valid 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; +} +($client_id_db, $hostname_db, $registered_db, $requestor_db, $client_type_db, $type_db, $receive_own_events_db, $ip_net_client_db, $valid_db) = $sth->fetchrow(); +# register receiver without user specified client_id +if (!defined $client_id_db) { $sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->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"); - WardenCommon::succMsg("Registration of receiver (#$last_insert_id) was SUCCESSFUL!!!"); + if (!defined $client_id) { + $client_id = $dbh->last_insert_id(undef, undef, "clients", undef); + } + sendMsg("info", "New receiver [ID: '$client_id', Hostname: '$hostname', Requestor: '$requestor', Type: '$type', ROE: '$receive_own_events', CIDR: '$ip_net_client'] was registered"); + WardenCommon::succMsg("Registration of receiver (#$client_id) was SUCCESSFUL!"); } else { - WardenCommon::errMsg("Registration of receiver $hostname ($type) FAILED!!!"); + WardenCommon::errMsg("Registration of receiver $hostname ($service) FAILED!"); } +# re-activate old sender if is already registered but is not valid +} elsif (defined $client_id_db && $hostname eq $hostname_db && $client_type eq $client_type_db && $type eq $type_db && $ip_net_client eq $ip_net_client_db && $valid_db eq 'f') { + # change requestor if is needed + if ($requestor ne $requestor_db) { + $sth = $dbh->prepare("UPDATE clients SET requestor = ? WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + $sth->execute($requestor, $client_id_db) or die "Cannot execute statement: " . $sth->errstr; + } + # change receive_own_events if is needed + if ($receive_own_events ne $receive_own_events_db) { + $sth = $dbh->prepare("UPDATE clients SET receive_own_events = ? WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + $sth->execute($receive_own_events, $client_id_db) or die "Cannot execute statement: " . $sth->errstr; + } + # reactivate old receiver + $sth = $dbh->prepare("UPDATE clients SET valid = 't' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + my $ret_val = $sth->execute($client_id_db) or die "Cannot execute statement: " . $sth->errstr; + if ($ret_val == 1) { + sendMsg("info", "Receiver [ID: '$client_id_db', Hostname: '$hostname', Requestor: '$requestor', Type: '$type', ROE: '$receive_own_events', CIDR: '$ip_net_client'] was re-activated"); + WardenCommon::succMsg("Re-activation of receiver (#$client_id_db) was SUCCESSFUL!"); + } else { + WardenCommon::errMsg("Re-activation of receiver (#$client_id_db) FAILED!"); + } +# receiver is already registered and valid - send error msg +} elsif (defined $client_id_db && $hostname eq $hostname_db && $client_type eq $client_type_db && $type eq $type_db && $ip_net_client eq $ip_net_client_db && $valid_db eq 't') { + sendMsg("err", "Attempt to 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'"); +# user specified client_id is already used - send error msg +} else { + sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'"); + WardenCommon::errMsg("Client ID (#$client_id_db) has been already used at Warden server '$warden_server' in '$registered_db'"); } # cleanup section diff --git a/src/warden-server/bin/registerSender.pl b/src/warden-server/bin/registerSender.pl index a8ee7e2fa8c012f37410f018a7875b288555ac51..725069d08f657bfd6ac914767b134ef86c02f83e 100755 --- a/src/warden-server/bin/registerSender.pl +++ b/src/warden-server/bin/registerSender.pl @@ -133,41 +133,64 @@ my $valid = "t"; my $registered = DateTime->now; my $type = undef; my $receive_own_events = undef; +my $warden_server = WardenCommon::trim(`hostname -f`); # connect to DB my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS); -my $warden_server = WardenCommon::trim(`hostname -f`); - -# check if user defined client_id wasn't used -my ($sth, $client_id_db, $registered_db); +# register sender +my ($sth, $client_id_db, $hostname_db, $registered_db, $requestor_db, $service_db, $client_type_db, $description_tags_db, $ip_net_client_db, $valid_db); +# check if user client_id is specified and prepare statement according to this if (defined $client_id) { - $sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + $sth = $dbh->prepare("SELECT client_id, hostname, registered, requestor, service, client_type, description_tags, ip_net_client, valid 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; -($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("SELECT client_id, hostname, registered, requestor, service, client_type, description_tags, ip_net_client, valid 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; +} +($client_id_db, $hostname_db, $registered_db, $requestor_db, $service_db, $client_type_db, $description_tags_db, $ip_net_client_db, $valid_db) = $sth->fetchrow(); +# register sender without user specified client_id +if (!defined $client_id_db) { $sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->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"); - WardenCommon::succMsg("Registration of sender (#$last_insert_id) was SUCCESSFUL!!!"); + if (!defined $client_id) { + $client_id = $dbh->last_insert_id(undef, undef, "clients", undef); + } + sendMsg("info", "New sender [ID: '$client_id', Hostname: '$hostname', Requestor: '$requestor', Service: '$service', Description_tags: '$description_tags', CIDR: '$ip_net_client'] was registered"); + WardenCommon::succMsg("Registration of sender (#$client_id) was SUCCESSFUL!"); } else { - WardenCommon::errMsg("Registration of sender $hostname ($service) FAILED!!!"); + WardenCommon::errMsg("Registration of sender $hostname ($service) FAILED!"); } +# re-activate old sender if is already registered but is not valid +} elsif (defined $client_id_db && $hostname eq $hostname_db && $service eq $service_db && $client_type eq $client_type_db && $ip_net_client eq $ip_net_client_db && $valid_db eq 'f') { + # change requestor if is needed + if ($requestor ne $requestor_db) { + $sth = $dbh->prepare("UPDATE clients SET requestor = ? WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + $sth->execute($requestor, $client_id_db) or die "Cannot execute statement: " . $sth->errstr; + } + # change description_tags if is needed + if ($description_tags ne $description_tags_db) { + $sth = $dbh->prepare("UPDATE clients SET description_tags = ? WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + $sth->execute($description_tags, $client_id_db) or die "Cannot execute statement: " . $sth->errstr; + } + # re-activate old sender + $sth = $dbh->prepare("UPDATE clients SET valid = 't' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr; + my $ret_val = $sth->execute($client_id_db) or die "Cannot execute statement: " . $sth->errstr; + if ($ret_val == 1) { + sendMsg("info", "Sender [ID: '$client_id_db', Hostname: '$hostname', Requestor: '$requestor', Service: '$service', Description_tags: '$description_tags', CIDR: '$ip_net_client'] was re-activated"); + WardenCommon::succMsg("Re-activation of sender (#$client_id_db) was SUCCESSFUL! (Client's old data are still obsoleted.)"); + } else { + WardenCommon::errMsg("Re-activation of sender (#$client_id_db) FAILED!"); + } +# sender is already registered and valid - send error msg +} elsif (defined $client_id_db && $hostname eq $hostname_db && $service eq $service_db && $client_type eq $client_type_db && $ip_net_client eq $ip_net_client_db && $valid_db eq 't') { + sendMsg("err", "Attempt to 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'"); +# user specified client_id is already used - send error msg +} else { + sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'"); + WardenCommon::errMsg("Client ID (#$client_id_db) has been already used at Warden server '$warden_server' in '$registered_db'"); } # cleanup section