diff --git a/Build.PL b/Build.PL index 933c368..f5768a2 100644 --- a/Build.PL +++ b/Build.PL @@ -30,6 +30,7 @@ my $builder = Module::Build->new( 'URI::Escape' => 0, 'String::MkPasswd::mkpasswd' => 0, #'List::Util' => 0, + 'Data::Validate::IP' => 0, 'Config::Any' => 0, 'YAML::Tiny' => 0, diff --git a/debian/control b/debian/control index 202c051..064de7d 100644 --- a/debian/control +++ b/debian/control @@ -26,7 +26,8 @@ Depends: libtie-ixhash-perl, libany-uri-escape-perl, libstring-mkpasswd-perl, - libyaml-tiny-perl, + libdata-validate-ip-perl, + libyaml-tiny-perl, liblog-log4perl-perl, libmime-base64-perl, libmime-lite-perl, diff --git a/lib/NGCP/BulkProcessor/LoadConfig.pm b/lib/NGCP/BulkProcessor/LoadConfig.pm index 2c4ffa1..77a55b4 100644 --- a/lib/NGCP/BulkProcessor/LoadConfig.pm +++ b/lib/NGCP/BulkProcessor/LoadConfig.pm @@ -30,7 +30,7 @@ use NGCP::BulkProcessor::LogError qw( use YAML::Tiny qw(); use Config::Any qw(); -use NGCP::BulkProcessor::Utils qw(format_number); +use NGCP::BulkProcessor::Utils qw(format_number trim); require Exporter; our @ISA = qw(Exporter); @@ -45,7 +45,7 @@ our @EXPORT_OK = qw( my $tuplesplitpattern = join('|',(quotemeta(','), quotemeta(';'), - quotemeta('/') + #quotemeta('/') ) ); @@ -154,7 +154,7 @@ sub _parse_config { sub split_tuple { my $token = shift; - return split(/$tuplesplitpattern/,$token); + return map { local $_ = $_; trim($_); } split(/$tuplesplitpattern/,$token); } diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Api.pm b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Api.pm index f6b06a1..93abd3e 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Api.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Api.pm @@ -13,6 +13,7 @@ use NGCP::BulkProcessor::Projects::Migration::IPGallery::Settings qw( $domain_name $reseller_id + $subsciber_username_prefix $set_call_forwards_multithreading $set_call_forwards_numofthreads @@ -357,7 +358,7 @@ sub _reset_context { my $userpassword = NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::UsernamePassword::findby_fqdn($context->{cli}); if (defined $userpassword) { - $context->{username} = $userpassword->{username}; + $context->{username} = (defined $subsciber_username_prefix ? $subsciber_username_prefix : '') . $userpassword->{username}; $context->{password} = $userpassword->{password}; $context->{userpassworddelta} = $userpassword->{delta}; } else { diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Preferences.pm b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Preferences.pm index 7072b3f..942b2e4 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Preferences.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Preferences.pm @@ -13,6 +13,7 @@ use NGCP::BulkProcessor::Projects::Migration::IPGallery::Settings qw( $domain_name $reseller_id + $subsciber_username_prefix $set_barring_profiles_multithreading $set_barring_profiles_numofthreads $barring_profiles @@ -20,6 +21,10 @@ use NGCP::BulkProcessor::Projects::Migration::IPGallery::Settings qw( $set_peer_auth_multithreading $set_peer_auth_numofthreads $peer_auth_realm + + $set_allowed_ips_multithreading + $set_allowed_ips_numofthreads + $allowed_ips ); use NGCP::BulkProcessor::Logging qw ( @@ -64,6 +69,9 @@ our @EXPORT_OK = qw( set_peer_auth set_peer_auth_batch + set_allowed_ips + set_allowed_ips_batch + clear_preferences set_preference @@ -384,7 +392,7 @@ sub _reset_context { my $userpassword = NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::UsernamePassword::findby_fqdn($context->{cli}); if (defined $userpassword) { - $context->{username} = $userpassword->{username}; + $context->{username} = (defined $subsciber_username_prefix ? $subsciber_username_prefix : '') . $userpassword->{username}; $context->{password} = $userpassword->{password}; $context->{userpassworddelta} = $userpassword->{delta}; } else { @@ -680,6 +688,313 @@ sub _reset_set_peer_auth_context { } + + + + + + + + + + + + + + + + + + + + + +sub set_allowed_ips { + + my ($mode) = @_; + my $static_context = { mode => $mode }; + my $result = _set_allowed_ips_checks($static_context); + + destroy_all_dbs(); + my $warning_count :shared = 0; + return ($result && NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::Subscriber::process_records( + static_context => $static_context, + process_code => sub { + my ($context,$records,$row_offset) = @_; + my $rownum = $row_offset; + foreach my $imported_subscriber (@$records) { + $rownum++; + next unless _reset_set_allowed_ips_context($context,$imported_subscriber,$rownum); + _set_allowed_ips($context); + } + + #return 0; + return 1; + }, + init_process_context_code => sub { + my ($context)= @_; + $context->{db} = &get_xa_db(); + $context->{error_count} = 0; + $context->{warning_count} = 0; + # below is not mandatory.. + _check_insert_tables(); + }, + uninit_process_context_code => sub { + my ($context)= @_; + undef $context->{db}; + destroy_all_dbs(); + { + lock $warning_count; + $warning_count += $context->{warning_count}; + } + }, + load_recursive => 0, + multithreading => $set_allowed_ips_multithreading, + numofthreads => $set_allowed_ips_numofthreads, + ),$warning_count); +} + +sub set_allowed_ips_batch { + + my ($mode) = @_; + my $static_context = { mode => $mode }; + my $result = _set_allowed_ips_checks($static_context); + + destroy_all_dbs(); + my $warning_count :shared = 0; + return ($result && NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::Batch::process_records( + static_context => $static_context, + process_code => sub { + my ($context,$records,$row_offset) = @_; + my $rownum = $row_offset; + foreach my $record (@$records) { + $rownum++; + my $imported_subscriber = NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::Subscriber::findby_subscribernumber($record->{number}); + if (defined $imported_subscriber) { + next unless _reset_set_allowed_ips_context($context,$imported_subscriber,$rownum); + _set_allowed_ips($context); + } else { + if ($skip_errors) { + _warn($context,'record ' . $rownum . ' - no subscriber record for batch number found: ' . $record->{number}); + next; + } else { + _error($context,'record ' . $rownum . ' - no subscriber record for batch number found: ' . $record->{number}); + } + } + } + + #return 0; + return 1; + }, + init_process_context_code => sub { + my ($context)= @_; + $context->{db} = &get_xa_db(); + $context->{error_count} = 0; + $context->{warning_count} = 0; + # below is not mandatory.. + _check_insert_tables(); + }, + uninit_process_context_code => sub { + my ($context)= @_; + undef $context->{db}; + destroy_all_dbs(); + { + lock $warning_count; + $warning_count += $context->{warning_count}; + } + }, + load_recursive => 0, + multithreading => $set_allowed_ips_multithreading, + numofthreads => $set_allowed_ips_numofthreads, + ),$warning_count); +} + +sub _set_allowed_ips { + my ($context) = @_; + _set_subscriber_preference($context,\&_set_allowed_ips_preferences); +} + +sub _set_allowed_ips_checks { + my ($context) = @_; + + my $result = _checks($context); + + eval { + $context->{peer_auth_user_attribute} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_USER); + }; + if ($@ or not defined $context->{peer_auth_user_attribute}) { + rowprocessingerror(threadid(),'cannot find peer_auth_user attribute',getlogger(__PACKAGE__)); + $result = 0; #even in skip-error mode.. + } + + eval { + $context->{peer_auth_pass_attribute} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_PASS); + }; + if ($@ or not defined $context->{peer_auth_pass_attribute}) { + rowprocessingerror(threadid(),'cannot find peer_auth_pass attribute',getlogger(__PACKAGE__)); + $result = 0; #even in skip-error mode.. + } + + eval { + $context->{peer_auth_realm_attribute} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_REALM); + }; + if ($@ or not defined $context->{peer_auth_realm_attribute}) { + rowprocessingerror(threadid(),'cannot find peer_auth_realm attribute',getlogger(__PACKAGE__)); + $result = 0; #even in skip-error mode.. + } + + eval { + $context->{peer_auth_register_attribute} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_REGISTER); + }; + if ($@ or not defined $context->{peer_auth_register_attribute}) { + rowprocessingerror(threadid(),'cannot find peer_auth_register attribute',getlogger(__PACKAGE__)); + $result = 0; #even in skip-error mode.. + } + + eval { + $context->{force_inbound_calls_to_peer_attribute} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::FORCE_INBOUND_CALLS_TO_PEER); + }; + if ($@ or not defined $context->{force_inbound_calls_to_peer_attribute}) { + rowprocessingerror(threadid(),'cannot find force_inbound_calls_to_peer attribute',getlogger(__PACKAGE__)); + $result = 0; #even in skip-error mode.. + } + + #eval { + # $context->{force_outbound_calls_to_peer_attribute} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + # $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::FORCE_OUTBOUND_CALLS_TO_PEER); + #}; + #if ($@ or not defined $context->{force_outbound_calls_to_peer_attribute}) { + # rowprocessingerror(threadid(),'cannot find force_outbound_calls_to_peer attribute',getlogger(__PACKAGE__)); + # $result = 0; #even in skip-error mode.. + #} + + return $result; +} + +sub _set_allowed_ips_preferences { + + my ($context) = @_; + + #if ($INIT_PEER_AUTH_MODE eq $context->{mode}) { + # + # $context->{peer_auth_user_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_user_attribute},$context->{username}); + # $context->{peer_auth_pass_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_pass_attribute},$context->{password}); + # $context->{peer_auth_realm_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_realm_attribute},$context->{realm}); + # + # $context->{peer_auth_register_attribute_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_register_attribute},$NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::FALSE); + # $context->{force_inbound_calls_to_peer_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{force_inbound_calls_to_peer_attribute},$NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::TRUE); + # + # _info($context,"($context->{rownum}) " . $context->{mode} . ' peer authentication preferences for subscriber ' . $context->{cli},1); + # + #} elsif ($SWITCHOVER_PEER_AUTH_MODE eq $context->{mode}) { + # + # $context->{peer_auth_user_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_user_attribute},$context->{username}); + # $context->{peer_auth_pass_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_pass_attribute},$context->{password}); + # $context->{peer_auth_realm_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_realm_attribute},$context->{realm}); + # + # $context->{peer_auth_register_attribute_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_register_attribute},$NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::TRUE); + # $context->{force_inbound_calls_to_peer_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{force_inbound_calls_to_peer_attribute},$NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::FALSE); + # + # _info($context,"($context->{rownum}) " . $context->{mode} . ' peer authentication preferences for subscriber ' . $context->{cli},1); + # + #} elsif ($CLEAR_PEER_AUTH_MODE eq $context->{mode}) { + # + # $context->{peer_auth_user_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_user_attribute},undef); + # $context->{peer_auth_pass_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_pass_attribute},undef); + # $context->{peer_auth_realm_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_realm_attribute},undef); + # + # $context->{peer_auth_register_attribute_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{peer_auth_register_attribute},undef); + # $context->{force_inbound_calls_to_peer_preference_id} = set_preference($context,$context->{provisioning_voip_subscriber}->{id}, + # $context->{force_inbound_calls_to_peer_attribute},undef); + # + # _info($context,"($context->{rownum}) " . $context->{mode} . ' peer authentication preferences for subscriber ' . $context->{cli},1); + # + #} + +} + +sub _reset_set_allowed_ips_context { + + my ($context,$imported_subscriber,$rownum) = @_; + + my $result = _reset_context($context,$imported_subscriber,$rownum); + + $context->{realm} = $peer_auth_realm; + #$context->{mode} = $mode; + + delete $context->{peer_auth_user_preference_id}; + delete $context->{peer_auth_pass_preference_id}; + delete $context->{peer_auth_realm_preference_id}; + + delete $context->{peer_auth_register_attribute_preference_id}; + delete $context->{force_inbound_calls_to_peer_preference_id}; + + return $result; + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Provisioning.pm b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Provisioning.pm index 7772aaa..4f52a26 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Provisioning.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Provisioning.pm @@ -14,6 +14,7 @@ use NGCP::BulkProcessor::Projects::Migration::IPGallery::Settings qw( $reseller_id $domain_name + $subsciber_username_prefix $billing_profile_id $contact_email_format $webpassword_length @@ -565,7 +566,7 @@ sub _reset_context { my $userpassword = NGCP::BulkProcessor::Projects::Migration::IPGallery::Dao::import::UsernamePassword::findby_fqdn($context->{cli}); if (defined $userpassword) { - $context->{username} = $userpassword->{username}; + $context->{username} = (defined $subsciber_username_prefix ? $subsciber_username_prefix : '') . $userpassword->{username}; $context->{password} = $userpassword->{password}; $context->{userpassworddelta} = $userpassword->{delta}; } else { diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Settings.pm b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Settings.pm index d20895b..c9921e1 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Settings.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/Settings.pm @@ -26,7 +26,7 @@ use NGCP::BulkProcessor::LoadConfig qw( split_tuple parse_regexp ); -use NGCP::BulkProcessor::Utils qw(format_number prompt); +use NGCP::BulkProcessor::Utils qw(format_number check_ipnet prompt); require Exporter; our @ISA = qw(Exporter); @@ -81,6 +81,7 @@ our @EXPORT_OK = qw( $reseller_id $domain_name + $subsciber_username_prefix $billing_profile_id $contact_email_format $webpassword_length @@ -98,6 +99,10 @@ our @EXPORT_OK = qw( $set_peer_auth_numofthreads $peer_auth_realm + $set_allowed_ips_multithreading + $set_allowed_ips_numofthreads + $allowed_ips + $set_call_forwards_multithreading $set_call_forwards_numofthreads $cfb_priorities @@ -165,6 +170,7 @@ our $billing_profile_id = undef; #1 our $contact_email_format = undef; #%s@melita.mt our $webpassword_length = undef; our $generate_webpassword = 1; +our $subsciber_username_prefix = undef; our $provision_subscriber_multithreading = $enablemultithreading; our $provision_subscriber_numofthreads = $cpucount; @@ -178,6 +184,10 @@ our $set_peer_auth_multithreading = $enablemultithreading; our $set_peer_auth_numofthreads = $cpucount; our $peer_auth_realm = undef; +our $set_allowed_ips_multithreading = $enablemultithreading; +our $set_allowed_ips_numofthreads = $cpucount; +our $allowed_ips = []; + our $set_call_forwards_multithreading = $enablemultithreading; our $set_call_forwards_numofthreads = $cpucount; our $cfb_priorities = []; @@ -256,6 +266,7 @@ sub update_settings { $result = 0; } $generate_webpassword = $data->{generate_webpassword} if exists $data->{generate_webpassword}; + $subsciber_username_prefix = $data->{subsciber_username_prefix} if exists $data->{subsciber_username_prefix}; $provision_subscriber_multithreading = $data->{provision_subscriber_multithreading} if exists $data->{provision_subscriber_multithreading}; $provision_subscriber_numofthreads = _get_import_numofthreads($cpucount,$data,'provision_subscriber_numofthreads'); @@ -268,6 +279,16 @@ sub update_settings { $set_peer_auth_numofthreads = _get_import_numofthreads($cpucount,$data,'set_peer_auth_numofthreads'); $peer_auth_realm = $data->{peer_auth_realm} if exists $data->{peer_auth_realm}; + $set_allowed_ips_multithreading = $data->{set_peer_auth_multithreading} if exists $data->{set_allowed_ips_multithreading}; + $set_allowed_ips_numofthreads = _get_import_numofthreads($cpucount,$data,'set_allowed_ips_numofthreads'); + $allowed_ips = [ split_tuple($data->{allowed_ips}) ] if exists $data->{allowed_ips}; + foreach my $ipnet (@$allowed_ips) { + if (not check_ipnet($ipnet)) { + configurationerror($configfile,"invalid allowed_ip '$ipnet'",getlogger(__PACKAGE__)); + $result = 0; + } + } + $set_call_forwards_multithreading = $data->{set_call_forwards_multithreading} if exists $data->{set_call_forwards_multithreading}; $set_call_forwards_numofthreads = _get_import_numofthreads($cpucount,$data,'set_call_forwards_numofthreads'); $cfb_priorities = [ split_tuple($data->{cfb_priorities}) ] if exists $data->{cfb_priorities}; diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/process.pl b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/process.pl index 5320f6b..4d8c1f9 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/process.pl +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/process.pl @@ -109,6 +109,9 @@ use NGCP::BulkProcessor::Projects::Migration::IPGallery::Preferences qw( set_peer_auth set_peer_auth_batch + set_allowed_ips + set_allowed_ips_batch + $INIT_PEER_AUTH_MODE $SWITCHOVER_PEER_AUTH_MODE $CLEAR_PEER_AUTH_MODE @@ -177,6 +180,9 @@ push(@TASK_OPTS,$switchover_peer_auth_task_opt); my $clear_peer_auth_task_opt = 'clear_peer_auth'; push(@TASK_OPTS,$clear_peer_auth_task_opt); +#my $set_allowed_ips_task_opt = 'set_allowed_ips'; +#push(@TASK_OPTS,$set_allowed_ips_task_opt); + my $set_call_forwards_task_opt = 'set_call_forwards'; push(@TASK_OPTS,$set_call_forwards_task_opt); @@ -295,6 +301,13 @@ sub main() { $completion |= 1; } + #} elsif (lc($set_allowed_ips_task_opt) eq lc($task)) { + # if (taskinfo($set_allowed_ips_task_opt,$result,1) and ($result = batchinfo($result))) { + # next unless check_dry(); + # $result &= set_allowed_ips_task(\@messages); + # $completion |= 1; + # } + } elsif (lc($set_call_forwards_task_opt) eq lc($task)) { if (taskinfo($set_call_forwards_task_opt,$result,1) and ($result = batchinfo($result))) { next unless check_dry(); @@ -424,7 +437,7 @@ sub cleanup_task { sub import_features_define_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { ($result,$warning_count) = import_features_define($features_define_filename); }; @@ -502,7 +515,7 @@ sub import_truncate_features_task { sub import_subscriber_define_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { ($result,$warning_count) = import_subscriber_define($subscriber_define_filename); }; @@ -560,7 +573,7 @@ sub import_truncate_subscriber_task { sub import_lnp_define_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { ($result,$warning_count) = import_lnp_define($lnp_define_filename); }; @@ -625,7 +638,7 @@ sub import_truncate_lnp_task { sub import_user_password_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { ($result,$warning_count) = import_user_password($user_password_filename); }; @@ -688,7 +701,7 @@ sub import_truncate_user_password_task { sub import_batch_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { ($result,$warning_count) = import_batch($batch_filename); }; @@ -749,7 +762,7 @@ sub import_truncate_batch_task { sub provision_subscriber_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { if ($batch) { ($result,$warning_count) = provision_subscribers_batch(); @@ -801,7 +814,7 @@ sub provision_subscriber_task { sub set_barring_profiles_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { if ($batch) { ($result,$warning_count) = set_barring_profiles_batch(); @@ -843,7 +856,7 @@ sub set_barring_profiles_task { sub set_peer_auth_task { my ($messages,$mode) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { if ($batch) { ($result,$warning_count) = set_peer_auth_batch($mode); @@ -886,18 +899,71 @@ sub set_peer_auth_task { push(@$messages,"$mode subscribers\' peer auth preference INCOMPLETE$stats"); } else { push(@$messages,"$mode subscribers\' peer auth preference completed$stats"); - push(@$messages,"YOU MIGHT WANT TO RESTART SEMS NOW ..."); + if (not $dry) { + push(@$messages,"YOU MIGHT WANT TO RESTART SEMS NOW ..."); + } } destroy_all_dbs(); #every task should leave with closed connections. return $result; } +sub set_allowed_ips_task { + + my ($messages) = @_; + my ($result,$warning_count) = (0,0); + eval { + if ($batch) { + ($result,$warning_count) = set_allowed_ips_batch(); + } else { + ($result,$warning_count) = set_allowed_ips(); + } + }; + my $err = $@; + my $stats = ($skip_errors ? ": $warning_count warnings" : ''); + eval { + my $peer_auth_user_attribute = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_USER); + my $peer_auth_pass_attribute = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_PASS); + my $peer_auth_realm_attribute = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_REALM); + my $peer_auth_register_attribute = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::PEER_AUTH_REGISTER); + my $force_inbound_calls_to_peer_attribute = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::findby_attribute( + $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_preferences::FORCE_INBOUND_CALLS_TO_PEER); + + $stats .= "\n " . $peer_auth_user_attribute->{attribute} . "': " . + NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::countby_subscriberid_attributeid_value(undef, + $peer_auth_user_attribute->{id},undef) . ' rows'; + $stats .= "\n " . $peer_auth_pass_attribute->{attribute} . "': " . + NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::countby_subscriberid_attributeid_value(undef, + $peer_auth_pass_attribute->{id},undef) . ' rows'; + $stats .= "\n " . $peer_auth_realm_attribute->{attribute} . "': " . + NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::countby_subscriberid_attributeid_value(undef, + $peer_auth_realm_attribute->{id},undef) . ' rows'; + + $stats .= "\n " . $peer_auth_register_attribute->{attribute} . "': " . + NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::countby_subscriberid_attributeid_value(undef, + $peer_auth_register_attribute->{id},undef) . ' rows'; + $stats .= "\n " . $force_inbound_calls_to_peer_attribute->{attribute} . "': " . + NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_usr_preferences::countby_subscriberid_attributeid_value(undef, + $force_inbound_calls_to_peer_attribute->{id},undef) . ' rows'; + }; + if ($err or !$result) { + push(@$messages,"set subscribers\' allowed_ips preference INCOMPLETE$stats"); + } else { + push(@$messages,"set subscribers\' allowed_ips preference completed$stats"); + } + destroy_all_dbs(); #every task should leave with closed connections. + return $result; + +} sub set_call_forwards_task { my ($messages,$mode) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { if ($batch) { ($result,$warning_count) = set_call_forwards_batch($mode); @@ -937,7 +1003,7 @@ sub set_call_forwards_task { sub create_lnps_task { my ($messages) = @_; - my ($result,$warning_count) = (0,0,0); + my ($result,$warning_count) = (0,0); eval { ($result,$warning_count) = create_lnps(); }; diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/settings.cfg b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/settings.cfg index 22c0cda..39cc035 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/settings.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Migration/IPGallery/settings.cfg @@ -33,6 +33,7 @@ generate_webpassword = 1 webpassword_length = 8 provision_subscriber_multithreading = 1 #provision_subscriber_numofthreads = 6 +subsciber_username_prefix = 356 set_barring_profiles_multithreading = 1 #set_barring_profiles_numofthreads = 6 @@ -42,6 +43,10 @@ set_peer_auth_multithreading = 1 #set_peer_auth_numofthreads = 6 peer_auth_realm = myrealm +set_allowed_ips_multithreading = 1 +#set_allowed_ips_numofthreads = 6 +allowed_ips=127.0.0.1/24 + set_call_forwards_multithreading = 1 #set_call_forwards_numofthreads = 6 cfb_priorities = diff --git a/lib/NGCP/BulkProcessor/Utils.pm b/lib/NGCP/BulkProcessor/Utils.pm index a278f30..40b1410 100644 --- a/lib/NGCP/BulkProcessor/Utils.pm +++ b/lib/NGCP/BulkProcessor/Utils.pm @@ -12,6 +12,8 @@ setlocale(LC_NUMERIC, 'C'); use Data::UUID qw(); use UUID qw(); +use Data::Validate::IP qw(is_ipv4 is_ipv6); + use Net::Address::IP::Local qw(); #use FindBin qw($Bin); #use File::Spec::Functions qw(splitdir catdir); @@ -101,6 +103,8 @@ our @EXPORT_OK = qw( $chmod_umask prompt + check_int + check_ipnet ); our $chmod_umask = 0644; @@ -851,4 +855,31 @@ sub prompt { return $answer; } +sub check_ipnet { + my ($ipnet) = @_; + my ($ip, $net) = split(/\//,$ipnet); + if (is_ipv4($ip)) { + if (defined $net) { + return check_int($net) && $net >= 0 && $net <= 32; + } else { + return 1; + } + } elsif (is_ipv6($ip)) { + if (defined $net) { + return check_int($net) && $net >= 0 && $net <= 128; + } else { + return 1; + } + } + return 0; +} + +sub check_int { + my $val = shift; + if($val =~ /^[+-]?[0-9]+$/) { + return 1; + } + return 0; +} + 1;