Modified: vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm?rev=1613232&r1=1613231&r2=1613232&view=diff ============================================================================== --- vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm (original) +++ vcl/trunk/managementnode/lib/VCL/Module/OS/Windows.pm Thu Jul 24 18:18:50 2014 @@ -40,7 +40,6 @@ use FindBin; use lib "$FindBin::Bin/../../.."; # Configure inheritance -#use base qw(VCL::Module::OS::Windows); use base qw(VCL::Module::OS); # Specify the version of this module @@ -1101,7 +1100,7 @@ sub grant_access { my $system32_path = $self->get_system32_path(); my $request_forimaging = $self->data->get_request_forimaging(); - if($self->process_connect_methods("", 1) ){ + if ($self->process_connect_methods("", 1) ){ notify($ERRORS{'OK'}, 0, "processed connection methods on $computer_node_name"); } @@ -1143,7 +1142,6 @@ sub revoke_access { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); # Disallow RDP connections @@ -1182,7 +1180,6 @@ sub create_directory { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $path = shift; @@ -1199,7 +1196,7 @@ sub create_directory { # Assemble the Windows shell mkdir command and execute it my $mkdir_command = "cmd.exe /c \"mkdir \\\"$path\\\"\""; - my ($mkdir_exit_status, $mkdir_output) = run_ssh_command($computer_node_name, $management_node_keys, $mkdir_command, '', '', 1); + my ($mkdir_exit_status, $mkdir_output) = $self->execute($mkdir_command); if (!defined($mkdir_output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to create directory on $computer_node_name: $path"); @@ -1244,9 +1241,7 @@ sub delete_file { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get file path subroutine argument my $path_argument = shift; @@ -1313,7 +1308,7 @@ sub delete_file { # Run the command - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 0); + my ($exit_status, $output) = $self->execute($command, 0); if (!defined($exit_status)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to delete file: '$path_argument'"); return; @@ -1350,9 +1345,6 @@ sub move_file { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Get file path subroutine arguments my $source_path = shift; my $destination_path = shift; @@ -1373,7 +1365,7 @@ sub move_file { # Assemble the Windows shell move command and execute it my $move_command = "mv -fv \"$source_path\" \"$destination_path\""; - my ($move_exit_status, $move_output) = run_ssh_command($computer_node_name, $management_node_keys, $move_command, '', '', 1); + my ($move_exit_status, $move_output) = $self->execute($move_command, 1); if (defined($move_exit_status) && $move_exit_status == 0) { notify($ERRORS{'OK'}, 0, "file moved: $source_path --> $destination_path, output:\n@{$move_output}"); } @@ -1406,9 +1398,6 @@ sub delete_files_by_pattern { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $base_directory = shift; my $pattern = shift; my $max_depth = shift || '5'; @@ -1440,7 +1429,7 @@ sub delete_files_by_pattern { $command = "/bin/cygpath.exe \"$base_directory_variable\" && $command"; } - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 1); + my ($exit_status, $output) = $self->execute($command, 1); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to delete files under $base_directory matching pattern $pattern, command: $command"); @@ -1486,7 +1475,6 @@ sub file_exists { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); # Get the path from the subroutine arguments and make sure it was passed @@ -1500,7 +1488,7 @@ sub file_exists { # Assemble the dir command and execute it my $dir_command = "cmd.exe /c \"dir /a \\\"$path_dos\\\"\""; - my ($dir_exit_status, $dir_output) = run_ssh_command($computer_node_name, $management_node_keys, $dir_command, '', '', 0); + my ($dir_exit_status, $dir_output) = $self->execute($dir_command, 0); if (!defined($dir_output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to determine if file exists on $computer_node_name: $path"); return; @@ -1594,11 +1582,8 @@ sub set_file_owner { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Run chown - my ($chown_exit_status, $chown_output) = run_ssh_command($computer_node_name, $management_node_keys, "/usr/bin/chown.exe -vR \"$owner\" \"$file_path\"", '', '', 0); + my ($chown_exit_status, $chown_output) = $self->execute("/usr/bin/chown.exe -vR \"$owner\" \"$file_path\"", 0); # Check if exit status is defined - if not, SSH command failed if (!defined($chown_output)) { @@ -1642,11 +1627,10 @@ sub logoff_users { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, "$system32_path/qwinsta.exe", '', '', 1, 60); + my ($exit_status, $output) = $self->execute("$system32_path/qwinsta.exe", 1, 60); if ($exit_status > 0) { notify($ERRORS{'WARNING'}, 0, "failed to run qwinsta.exe on $computer_node_name, exit status: $exit_status, output:\n" . join("\n", @$output)); return; @@ -1692,7 +1676,7 @@ sub logoff_users { # session to log off (default is current). # /V Displays information about the actions performed. # Call logoff.exe, pass it the session - my ($logoff_exit_status, $logoff_output) = run_ssh_command($computer_node_name, $management_node_keys, "$system32_path/logoff.exe $session_identifier /V"); + my ($logoff_exit_status, $logoff_output) = $self->execute("$system32_path/logoff.exe $session_identifier /V"); if ($logoff_exit_status == 0) { notify($ERRORS{'OK'}, 0, "logged off session: $session_identifier, output:\n" . join("\n", @$logoff_output)); } @@ -1720,7 +1704,6 @@ sub user_exists { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -1735,7 +1718,7 @@ sub user_exists { # Attempt to query the user account my $query_user_command = "$system32_path/net.exe user \"$username\""; - my ($query_user_exit_status, $query_user_output) = run_ssh_command($computer_node_name, $management_node_keys, $query_user_command, '', '', '1'); + my ($query_user_exit_status, $query_user_output) = $self->execute($query_user_command, '1'); if (defined($query_user_exit_status) && $query_user_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "user $username exists on $computer_node_name"); return 1; @@ -1771,7 +1754,6 @@ sub create_user { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -1795,7 +1777,7 @@ sub create_user { # Does not allow for override called from manage_server_access # 1 - allow admin access, set $imagemeta_rootaccess=1 # 2 - disallow admin access, set $imagemeta_rootaccess=0 - if($imagemeta_rootaccess) { + if ($imagemeta_rootaccess) { if ($adminoverride eq '1') { $imagemeta_rootaccess = 1; } @@ -1830,7 +1812,7 @@ sub create_user { $add_user_command .= " && $system32_path/net.exe localgroup \"Administrators\" \"$username\" /ADD"; } - my ($add_user_exit_status, $add_user_output) = run_ssh_command($computer_node_name, $management_node_keys, $add_user_command, '', '', '1'); + my ($add_user_exit_status, $add_user_output) = $self->execute($add_user_command, '1'); if (defined($add_user_exit_status) && $add_user_exit_status == 0) { notify($ERRORS{'OK'}, 0, "added user $username ($password) to $computer_node_name"); } @@ -1867,7 +1849,6 @@ sub add_user_to_group { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -1882,7 +1863,7 @@ sub add_user_to_group { # Attempt to add the user to the group using net.exe localgroup my $localgroup_user_command = "$system32_path/net.exe localgroup \"$group\" $username /ADD"; - my ($localgroup_user_exit_status, $localgroup_user_output) = run_ssh_command($computer_node_name, $management_node_keys, $localgroup_user_command); + my ($localgroup_user_exit_status, $localgroup_user_output) = $self->execute($localgroup_user_command); if (defined($localgroup_user_exit_status) && $localgroup_user_exit_status == 0) { notify($ERRORS{'OK'}, 0, "added user $username to \"$group\" group on $computer_node_name"); } @@ -1929,7 +1910,6 @@ sub delete_user { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -1944,7 +1924,7 @@ sub delete_user { # Attempt to delete the user account my $delete_user_command = "$system32_path/net.exe user $username /DELETE"; - my ($delete_user_exit_status, $delete_user_output) = run_ssh_command($computer_node_name, $management_node_keys, $delete_user_command); + my ($delete_user_exit_status, $delete_user_output) = $self->execute($delete_user_command); if (defined($delete_user_exit_status) && $delete_user_exit_status == 0) { notify($ERRORS{'OK'}, 0, "deleted user $username from $computer_node_name"); } @@ -2077,7 +2057,6 @@ sub enable_user { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -2097,7 +2076,7 @@ sub enable_user { # Attempt to enable the user account (set ACTIVE=YES) notify($ERRORS{'DEBUG'}, 0, "enabling user $username on $computer_node_name"); - my ($enable_exit_status, $enable_output) = run_ssh_command($computer_node_name, $management_node_keys, "$system32_path/net.exe user $username /ACTIVE:YES"); + my ($enable_exit_status, $enable_output) = $self->execute("$system32_path/net.exe user $username /ACTIVE:YES"); if ($enable_exit_status == 0) { notify($ERRORS{'OK'}, 0, "user $username enabled on $computer_node_name"); } @@ -2174,14 +2153,12 @@ sub disable_pagefile { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Set the registry key to blank my $memory_management_key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management'; my $reg_add_command = $system32_path . '/reg.exe add "' . $memory_management_key . '" /v PagingFiles /d "" /t REG_MULTI_SZ /f'; - my ($reg_add_exit_status, $reg_add_output) = run_ssh_command($computer_node_name, $management_node_keys, $reg_add_command, '', '', 1); + my ($reg_add_exit_status, $reg_add_output) = $self->execute($reg_add_command, 1); if (defined($reg_add_exit_status) && $reg_add_exit_status == 0) { notify($ERRORS{'OK'}, 0, "set registry key to disable pagefile"); } @@ -2241,14 +2218,12 @@ sub enable_pagefile { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $memory_management_key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management'; my $reg_add_command = $system32_path . '/reg.exe add "' . $memory_management_key . '" /v PagingFiles /d "$SYSTEMDRIVE\\pagefile.sys 0 0" /t REG_MULTI_SZ /f'; - my ($reg_add_exit_status, $reg_add_output) = run_ssh_command($computer_node_name, $management_node_keys, $reg_add_command, '', '', 1); + my ($reg_add_exit_status, $reg_add_output) = $self->execute($reg_add_command, 1); if (defined($reg_add_exit_status) && $reg_add_exit_status == 0) { notify($ERRORS{'OK'}, 0, "set registry key to enable pagefile"); } @@ -2281,9 +2256,6 @@ sub enable_ipv6 { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<"EOF"; Windows Registry Editor Version 5.00 @@ -2323,9 +2295,6 @@ sub disable_ipv6 { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<"EOF"; Windows Registry Editor Version 5.00 @@ -2350,65 +2319,6 @@ EOF #///////////////////////////////////////////////////////////////////////////// -=head2 import_registry_file - - Parameters : - Returns : - Description : - -=cut - -sub import_registry_file { - my $self = shift; - if (ref($self) !~ /windows/i) { - notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method"); - return; - } - - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - - my $registry_file_path = shift; - if (!defined($registry_file_path) || !$registry_file_path) { - notify($ERRORS{'WARNING'}, 0, "registry file path was not passed correctly as an argument"); - return; - } - - my $registry_file_contents = `cat $registry_file_path`; - notify($ERRORS{'DEBUG'}, 0, "registry file '$registry_file_path' contents:\n$registry_file_contents"); - - $registry_file_contents =~ s/([\"])/\\$1/gs; - $registry_file_contents =~ s/\\+"/\\"/gs; - - # Specify where on the node the temporary registry file will reside - my $temp_registry_file_path = 'C:/Cygwin/tmp/vcl_import.reg'; - - # Echo the registry string to a file on the node - my $echo_registry_command = "/usr/bin/echo.exe -E \"$registry_file_contents\" > " . $temp_registry_file_path; - my ($echo_registry_exit_status, $echo_registry_output) = run_ssh_command($computer_node_name, $management_node_keys, $echo_registry_command, '', '', 1); - if (defined($echo_registry_exit_status) && $echo_registry_exit_status == 0) { - notify($ERRORS{'OK'}, 0, "registry file contents echoed to $temp_registry_file_path"); - } - elsif ($echo_registry_exit_status) { - notify($ERRORS{'WARNING'}, 0, "failed to echo registry file contents to $temp_registry_file_path, exit status: $echo_registry_exit_status, output:\n@{$echo_registry_output}"); - return; - } - else { - notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to echo registry file contents to $temp_registry_file_path"); - return; - } - - # Run reg.exe IMPORT - if (!$self->reg_import($temp_registry_file_path)) { - notify($ERRORS{'WARNING'}, 0, "failed to import registry string contents from $temp_registry_file_path"); - return; - } - - return 1; -} ## end sub import_registry_file - -#///////////////////////////////////////////////////////////////////////////// - =head2 import_registry_string Parameters : @@ -2424,9 +2334,6 @@ sub import_registry_string { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string = shift; if (!defined($registry_string) || !$registry_string) { notify($ERRORS{'WARNING'}, 0, "registry file path was not passed correctly as an argument"); @@ -2461,7 +2368,7 @@ sub import_registry_string { # Echo the registry string to a file on the node my $echo_registry_command = "rm -f $temp_registry_file_path; /usr/bin/echo.exe -E \"$registry_string\" > " . $temp_registry_file_path; - my ($echo_registry_exit_status, $echo_registry_output) = run_ssh_command($computer_node_name, $management_node_keys, $echo_registry_command, '', '', 0); + my ($echo_registry_exit_status, $echo_registry_output) = $self->execute($echo_registry_command, 0); if (defined($echo_registry_exit_status) && $echo_registry_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "registry string contents echoed to $temp_registry_file_path"); } @@ -2531,9 +2438,7 @@ sub reg_query { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $key_argument = shift; @@ -2579,7 +2484,7 @@ sub reg_query { $command .= " 2>/dev/null"; # Run reg.exe QUERY - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 0); + my ($exit_status, $output) = $self->execute($command, 0); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to query registry key: $key_argument"); return; @@ -2763,9 +2668,7 @@ sub reg_add { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $registry_key = shift; @@ -2810,7 +2713,7 @@ sub reg_add { # Run reg.exe ADD my $add_registry_command = $system32_path . "/reg.exe ADD \"$registry_key\" $value_parameter /t $registry_type /d \"$registry_data\" /f"; - my ($add_registry_exit_status, $add_registry_output) = run_ssh_command($computer_node_name, $management_node_keys, $add_registry_command, '', '', 1); + my ($add_registry_exit_status, $add_registry_output) = $self->execute($add_registry_command, 1); if (defined($add_registry_exit_status) && $add_registry_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "added registry key: $registry_key, output:\n" . join("\n", @$add_registry_output)); } @@ -2843,9 +2746,7 @@ sub reg_delete { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $registry_key = shift; @@ -2867,7 +2768,7 @@ sub reg_delete { $delete_registry_command = $system32_path . "/reg.exe DELETE \"$registry_key\" /f"; $registry_value = '*'; } - my ($delete_registry_exit_status, $delete_registry_output) = run_ssh_command($computer_node_name, $management_node_keys, $delete_registry_command, '', '', 1); + my ($delete_registry_exit_status, $delete_registry_output) = $self->execute($delete_registry_command, 1); if (defined($delete_registry_exit_status) && $delete_registry_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "deleted registry key: $registry_key, value: $registry_value, output:\n" . join("\n", @$delete_registry_output)); } @@ -2904,9 +2805,7 @@ sub reg_import { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the registry file path argument my $registry_file_path = shift; @@ -2917,7 +2816,7 @@ sub reg_import { # Run reg.exe IMPORT my $command .= $system32_path . "/reg.exe IMPORT $registry_file_path"; - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 0); + my ($exit_status, $output) = $self->execute($command, 0); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to import registry file: $registry_file_path"); return; @@ -2950,9 +2849,7 @@ sub reg_export { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $root_key = shift; @@ -2974,7 +2871,7 @@ sub reg_export { # Run reg.exe EXPORT my $command .= "cmd.exe /c \"del /Q \\\"$registry_file_path.tmp\\\" 2>NUL & $system32_path/reg.exe EXPORT $root_key \\\"$registry_file_path.tmp\\\" && type \\\"$registry_file_path.tmp\\\" > \\\"$registry_file_path\\\" && del /Q \\\"$registry_file_path.tmp\\\"\""; - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 1); + my ($exit_status, $output) = $self->execute($command, 1); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to export registry key $root_key to file: $registry_file_path"); return; @@ -3007,9 +2904,7 @@ sub reg_load { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $root_key = shift; @@ -3029,7 +2924,7 @@ sub reg_load { # Run reg.exe LOAD my $command .= "$system32_path/reg.exe LOAD $root_key $hive_file_path"; - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 0); + my ($exit_status, $output) = $self->execute($command, 0); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to load registry hive file '$hive_file_path' into key $root_key"); return; @@ -3062,9 +2957,7 @@ sub reg_unload { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $root_key = shift; @@ -3078,7 +2971,7 @@ sub reg_unload { # Run reg.exe UNLOAD my $command .= "$system32_path/reg.exe UNLOAD $root_key"; - my ($exit_status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 0); + my ($exit_status, $output) = $self->execute($command, 0); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to unload registry hive: $root_key"); return; @@ -3111,9 +3004,7 @@ sub add_hklm_run_registry_key { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $command_name = shift; my $command = shift; @@ -3159,7 +3050,7 @@ EOF # Attempt to query the registry key to make sure it was added my $reg_query_command = $system32_path . '/reg.exe query "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"'; - my ($reg_query_exit_status, $reg_query_output) = run_ssh_command($computer_node_name, $management_node_keys, $reg_query_command, '', '', 1); + my ($reg_query_exit_status, $reg_query_output) = $self->execute($reg_query_command, 1); if (defined($reg_query_exit_status) && $reg_query_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "queried '$command_name' registry key:\n" . join("\n", @{$reg_query_output})); } @@ -3192,9 +3083,7 @@ sub delete_hklm_run_registry_key { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $key_name = shift; @@ -3206,7 +3095,7 @@ sub delete_hklm_run_registry_key { # Attempt to query the registry key to make sure it was added my $reg_delete_command = $system32_path . '/reg.exe delete "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" /v "' . $key_name . '" /F'; - my ($reg_delete_exit_status, $reg_delete_output) = run_ssh_command($computer_node_name, $management_node_keys, $reg_delete_command, '', '', 1); + my ($reg_delete_exit_status, $reg_delete_output) = $self->execute($reg_delete_command, 1); if (defined($reg_delete_exit_status) && $reg_delete_exit_status == 0) { notify($ERRORS{'OK'}, 0, "deleted '$key_name' run registry key:\n" . join("\n", @{$reg_delete_output})); } @@ -3248,8 +3137,7 @@ sub set_scheduled_task_credentials { return; } - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $command = "$system32_path/schtasks.exe /Change /RU \"$username\" /RP \"$password\" /TN \"$task_name\""; my ($exit_status, $output) = $self->execute($command); @@ -3296,7 +3184,6 @@ sub delete_scheduled_task { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -3304,7 +3191,7 @@ sub delete_scheduled_task { # Run schtasks.exe to delete any existing task my $delete_task_command = "$system32_path/schtasks.exe /Delete /F /TN \"$task_name\""; - my ($delete_task_exit_status, $delete_task_output) = run_ssh_command($computer_node_name, $management_node_keys, $delete_task_command); + my ($delete_task_exit_status, $delete_task_output) = $self->execute($delete_task_command); if (defined($delete_task_exit_status) && $delete_task_exit_status == 0) { notify($ERRORS{'OK'}, 0, "deleted existing scheduled task '$task_name' on $computer_node_name"); } @@ -3340,7 +3227,6 @@ sub create_startup_scheduled_task { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -3375,7 +3261,7 @@ sub create_startup_scheduled_task { # Occasionally see this error even though it schtasks.exe returns exit status 0: # WARNING: The Scheduled task "System Startup Script" has been created, but may not run because the account information could not be set. my $create_task_command = "$system32_path/schtasks.exe /Create /RU \"$task_user\" /RP \"$task_password\" /SC ONSTART /TN \"$task_name\" /TR \"$task_command\""; - my ($create_task_exit_status, $create_task_output) = run_ssh_command($computer_node_name, $management_node_keys, $create_task_command); + my ($create_task_exit_status, $create_task_output) = $self->execute($create_task_command); if (defined($create_task_output) && grep(/could not be set/i, @{$create_task_output})) { notify($ERRORS{'WARNING'}, 0, "created scheduled task '$task_name' on $computer_node_name but error occurred: " . join("\n", @{$create_task_output})); return 0; @@ -3412,9 +3298,6 @@ sub enable_autoadminlogon { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<"EOF"; Windows Registry Editor Version 5.00 @@ -3455,9 +3338,6 @@ sub disable_autoadminlogon { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<EOF; Windows Registry Editor Version 5.00 @@ -3497,7 +3377,6 @@ sub create_eventlog_entry { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -3511,7 +3390,7 @@ sub create_eventlog_entry { # Run eventcreate.exe to create an event log entry my $eventcreate_command = $system32_path . '/eventcreate.exe /T INFORMATION /L APPLICATION /SO VCL /ID 555 /D "' . $message . '"'; - my ($eventcreate_exit_status, $eventcreate_output) = run_ssh_command($computer_node_name, $management_node_keys, $eventcreate_command); + my ($eventcreate_exit_status, $eventcreate_output) = $self->execute($eventcreate_command); if (defined($eventcreate_exit_status) && $eventcreate_exit_status == 0) { notify($ERRORS{'OK'}, 0, "created event log entry on $computer_node_name: $message"); } @@ -3684,7 +3563,6 @@ sub shutdown { # Get the argument that determines whether or not to disable DHCP before shutting down computer my $enable_dhcp = shift; - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -3741,7 +3619,7 @@ sub shutdown { sleep 10; } - my ($shutdown_exit_status, $shutdown_output) = run_ssh_command($computer_node_name, $management_node_keys, $shutdown_command); + my ($shutdown_exit_status, $shutdown_output) = $self->execute($shutdown_command); if (!defined($shutdown_output)) { notify($ERRORS{'WARNING'}, 0, "failed to execute ssh command to shutdown $computer_node_name"); last; @@ -3795,9 +3673,7 @@ sub set_service_startup_mode { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $service_name = shift; my $startup_mode = shift; @@ -3819,7 +3695,7 @@ sub set_service_startup_mode { # Use sc.exe to change the start mode my $service_startup_command = $system32_path . '/sc.exe config ' . "$service_name start= $startup_mode"; - my ($service_startup_exit_status, $service_startup_output) = run_ssh_command($computer_node_name, $management_node_keys, $service_startup_command); + my ($service_startup_exit_status, $service_startup_output) = $self->execute($service_startup_command); if (defined($service_startup_output) && grep(/service does not exist/, @$service_startup_output)) { notify($ERRORS{'WARNING'}, 0, "$service_name service startup mode not set because service does not exist"); return; @@ -3856,7 +3732,6 @@ sub defragment_hard_drive { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -3903,8 +3778,6 @@ sub prepare_post_load { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); my $end_state = $self->{end_state} || 'off'; # Set the DevicePath registry key @@ -3961,7 +3834,6 @@ sub set_service_credentials { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -3978,7 +3850,7 @@ sub set_service_credentials { # Attempt to set the service logon user name and password my $service_logon_command = $system32_path . '/sc.exe config ' . $service_name . ' obj= ".\\' . $username . '" password= "' . $password . '"'; - my ($service_logon_exit_status, $service_logon_output) = run_ssh_command($computer_node_name, $management_node_keys, $service_logon_command); + my ($service_logon_exit_status, $service_logon_output) = $self->execute($service_logon_command); if (defined($service_logon_exit_status) && $service_logon_exit_status == 0) { notify($ERRORS{'OK'}, 0, "changed logon credentials for '$service_name' service to $username ($password) on $computer_node_name"); } @@ -4087,8 +3959,6 @@ sub get_services_using_login_id { return; } - my $computer_node_name = $self->data->get_computer_node_name(); - my $login_id = shift; if (!$login_id) { notify($ERRORS{'WARNING'}, 0, "unable to get services using login id, login id argument was not passed correctly"); @@ -4132,7 +4002,6 @@ sub disable_scheduled_task { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -4145,7 +4014,7 @@ sub disable_scheduled_task { # Attempt to delete the user account my $schtasks_command = $system32_path . '/schtasks.exe /Change /DISABLE /TN "' . $task_name . '"'; - my ($schtasks_exit_status, $schtasks_output) = run_ssh_command($computer_node_name, $management_node_keys, $schtasks_command, '', '', 1); + my ($schtasks_exit_status, $schtasks_output) = $self->execute($schtasks_command, 1); if (!defined($schtasks_output)) { notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to disable $task_name scheduled task on $computer_node_name"); return; @@ -4297,9 +4166,7 @@ sub disable_dynamic_dns { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $registry_string .= <<"EOF"; Windows Registry Editor Version 5.00 @@ -4348,7 +4215,7 @@ EOF $netsh_command .= " ;"; # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_exit_status) && $netsh_exit_status == 0) { notify($ERRORS{'OK'}, 0, "disabled dynamic DNS registration on public and private adapters"); } @@ -4381,9 +4248,6 @@ sub disable_netbios { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Attempt to query the registry for the NetBT service parameters my $interface_registry_data = $self->reg_query('HKLM/SYSTEM/CurrentControlSet/Services/NetBT/Parameters/Interfaces'); if (!$interface_registry_data) { @@ -4426,9 +4290,6 @@ sub set_computer_description { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Attempt to get the description from the arguments my $description = shift; if (!$description) { @@ -4472,8 +4333,6 @@ sub set_my_computer_name { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; my $image_prettyname = $self->data->get_image_prettyname(); @@ -4481,7 +4340,7 @@ sub set_my_computer_name { $value = $image_prettyname if !$value; my $add_registry_command .= $system32_path . "/reg.exe add \"HKCR\\CLSID\\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\" /v LocalizedString /t REG_EXPAND_SZ /d \"$value\" /f"; - my ($add_registry_exit_status, $add_registry_output) = run_ssh_command($computer_node_name, $management_node_keys, $add_registry_command, '', '', 1); + my ($add_registry_exit_status, $add_registry_output) = $self->execute($add_registry_command, 1); if (defined($add_registry_exit_status) && $add_registry_exit_status == 0) { notify($ERRORS{'OK'}, 0, "my computer name changed to '$value'"); } @@ -5068,9 +4927,7 @@ sub firewall_enable_ping { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; $netsh_command .= "$system32_path/netsh.exe firewall set icmpsetting"; @@ -5079,7 +4936,7 @@ sub firewall_enable_ping { $netsh_command .= " profile = ALL"; # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to allow ping"); @@ -5113,9 +4970,7 @@ sub firewall_enable_ping_private { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5163,7 +5018,7 @@ sub firewall_enable_ping_private { } # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to allow ping on private interface"); @@ -5197,9 +5052,7 @@ sub firewall_disable_ping { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5242,7 +5095,7 @@ sub firewall_disable_ping { $netsh_command .= " profile = ALL"; # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to disallow ping"); @@ -5279,9 +5132,7 @@ sub firewall_enable_ssh { # Check if the remote IP was passed correctly as an argument my $remote_ip = shift; - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5333,7 +5184,7 @@ sub firewall_enable_ssh { } # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to allow SSH from $remote_ip"); @@ -5367,9 +5218,7 @@ sub firewall_enable_ssh_private { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5419,7 +5268,7 @@ sub firewall_enable_ssh_private { } # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to allow SSH on private interface"); @@ -5456,9 +5305,7 @@ sub firewall_enable_rdp { # Check if the remote IP was passed correctly as an argument my $remote_ip = shift; - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5482,7 +5329,7 @@ sub firewall_enable_rdp { } # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to allow RDP from $remote_ip"); @@ -5516,9 +5363,7 @@ sub firewall_enable_rdp_private { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5572,7 +5417,7 @@ sub firewall_enable_rdp_private { } # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to allow RDP on private interface"); @@ -5606,9 +5451,7 @@ sub firewall_disable_rdp { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $netsh_command; @@ -5651,7 +5494,7 @@ sub firewall_disable_rdp { $netsh_command .= " profile = ALL"; # Execute the netsh.exe command - my ($netsh_exit_status, $netsh_output) = run_ssh_command($computer_node_name, $management_node_keys, $netsh_command); + my ($netsh_exit_status, $netsh_output) = $self->execute($netsh_command); if (defined($netsh_output) && @$netsh_output[-1] =~ /(Ok|The object already exists)/i) { notify($ERRORS{'OK'}, 0, "configured firewall to disallow RDP"); @@ -5820,7 +5663,8 @@ sub get_network_configuration { } $self->{network_configuration} = $network_configuration; - #can produce large output, if you need to monitor the configuration setting uncomment the below output statement + + # Can produce large output, if you need to monitor the configuration setting uncomment the below output statement #notify($ERRORS{'DEBUG'}, 0, "retrieved network configuration:\n" . format_data($self->{network_configuration})); return $self->{network_configuration}; } @@ -5941,8 +5785,7 @@ sub enable_dhcp { return; } - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $interface_name = shift; if (!$interface_name) { @@ -6008,8 +5851,7 @@ sub is_dhcp_enabled { return; } - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $show_dhcp_command = "$system32_path/netsh.exe interface ip show address name=\"$interface_name\""; my ($show_dhcp_status, $show_dhcp_output) = $self->execute($show_dhcp_command); @@ -6048,8 +5890,7 @@ sub ipconfig_renew { return; } - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Delete cached network configuration information delete $self->{network_configuration}; @@ -6119,9 +5960,7 @@ sub delete_capture_configuration_files { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Remove old logon and logoff scripts if ($self->file_exists($system32_path . '/GroupPolicy/User/Scripts/*VCL*')) { @@ -6171,9 +6010,7 @@ sub add_group_policy_script { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $stage_argument = shift; @@ -6182,7 +6019,7 @@ sub add_group_policy_script { if (!$stage_argument || $stage_argument !~ /^(logon|logoff)$/i) { notify($ERRORS{'WARNING'}, 0, "stage (logon/logoff) argument was not specified"); return; - } + } if (!$cmdline_argument) { notify($ERRORS{'WARNING'}, 0, "CmdLine argument was not specified"); return; @@ -6209,7 +6046,7 @@ sub add_group_policy_script { # Set the owner of scripts.ini to root my $chown_command = "touch $scripts_ini && chown root $scripts_ini"; - my ($chown_status, $chown_output) = run_ssh_command($computer_node_name, $management_node_keys, $chown_command); + my ($chown_status, $chown_output) = $self->execute($chown_command); if (defined($chown_status) && $chown_status == 0) { notify($ERRORS{'DEBUG'}, 0, "set root as owner of scripts.ini"); } @@ -6222,7 +6059,7 @@ sub add_group_policy_script { # Set the permissions of scripts.ini to 664 my $chmod_command = "chmod 664 $scripts_ini"; - my ($chmod_status, $chmod_output) = run_ssh_command($computer_node_name, $management_node_keys, $chmod_command); + my ($chmod_status, $chmod_output) = $self->execute($chmod_command); if (defined($chmod_status) && $chmod_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran chmod on scripts.ini"); } @@ -6235,7 +6072,7 @@ sub add_group_policy_script { # Clear hidden, system, and readonly flags on scripts.ini my $attrib_command = "attrib -H -S -R $scripts_ini"; - my ($attrib_status, $attrib_output) = run_ssh_command($computer_node_name, $management_node_keys, $attrib_command); + my ($attrib_status, $attrib_output) = $self->execute($attrib_command); if (defined($attrib_status) && $attrib_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran attrib -H -S -R on scripts.ini"); } @@ -6248,7 +6085,7 @@ sub add_group_policy_script { # Get the contents of scripts.ini my $cat_command = "cat $scripts_ini"; - my ($cat_status, $cat_output) = run_ssh_command($computer_node_name, $management_node_keys, $cat_command, '', '', 1); + my ($cat_status, $cat_output) = $self->execute($cat_command, 1); if (defined($cat_status) && $cat_status == 0) { notify($ERRORS{'DEBUG'}, 0, "retrieved scripts.ini contents:\n" . join("\n", @{$cat_output})); } @@ -6368,7 +6205,7 @@ sub add_group_policy_script { # Echo the modified contents to scripts.ini my $echo_command = "echo \"$scripts_ini_modified\" > $scripts_ini"; - my ($echo_status, $echo_output) = run_ssh_command($computer_node_name, $management_node_keys, $echo_command); + my ($echo_status, $echo_output) = $self->execute($echo_command); if (defined($echo_status) && $echo_status == 0) { notify($ERRORS{'DEBUG'}, 0, "echo'd modified contents to scripts.ini"); } @@ -6386,7 +6223,7 @@ sub add_group_policy_script { # Get the modified contents of scripts.ini my $cat_modified_command = "cat $scripts_ini"; - my ($cat_modified_status, $cat_modified_output) = run_ssh_command($computer_node_name, $management_node_keys, $cat_modified_command, '', '', 1); + my ($cat_modified_status, $cat_modified_output) = $self->execute($cat_modified_command, 1); if (defined($cat_modified_status) && $cat_modified_status == 0) { notify($ERRORS{'DEBUG'}, 0, "retrieved modified scripts.ini contents"); } @@ -6421,9 +6258,7 @@ sub remove_group_policy_script { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get the arguments my $stage_argument = shift; @@ -6431,7 +6266,7 @@ sub remove_group_policy_script { if (!$stage_argument || $stage_argument !~ /^(logon|logoff)$/i) { notify($ERRORS{'WARNING'}, 0, "stage (logon/logoff) argument was not specified"); return; - } + } if (!$cmdline_argument) { notify($ERRORS{'WARNING'}, 0, "CmdLine argument was not specified"); return; @@ -6458,7 +6293,7 @@ sub remove_group_policy_script { # Set the owner of scripts.ini to root my $chown_command = "touch $scripts_ini && chown root $scripts_ini"; - my ($chown_status, $chown_output) = run_ssh_command($computer_node_name, $management_node_keys, $chown_command); + my ($chown_status, $chown_output) = $self->execute($chown_command); if (defined($chown_output) && grep(/no such file/i, @$chown_output)) { notify($ERRORS{'DEBUG'}, 0, "scripts.ini file does not exist, nothing to remove"); return 1; @@ -6475,7 +6310,7 @@ sub remove_group_policy_script { # Set the permissions of scripts.ini to 664 my $chmod_command = "chmod 664 $scripts_ini"; - my ($chmod_status, $chmod_output) = run_ssh_command($computer_node_name, $management_node_keys, $chmod_command); + my ($chmod_status, $chmod_output) = $self->execute($chmod_command); if (defined($chmod_status) && $chmod_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran chmod on scripts.ini"); } @@ -6488,7 +6323,7 @@ sub remove_group_policy_script { # Clear hidden, system, and readonly flags on scripts.ini my $attrib_command = "attrib -H -S -R $scripts_ini"; - my ($attrib_status, $attrib_output) = run_ssh_command($computer_node_name, $management_node_keys, $attrib_command); + my ($attrib_status, $attrib_output) = $self->execute($attrib_command); if (defined($attrib_status) && $attrib_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran attrib -H -S -R on scripts.ini"); } @@ -6501,7 +6336,7 @@ sub remove_group_policy_script { # Get the contents of scripts.ini my $cat_command = "cat $scripts_ini"; - my ($cat_status, $cat_output) = run_ssh_command($computer_node_name, $management_node_keys, $cat_command, '', '', 1); + my ($cat_status, $cat_output) = $self->execute($cat_command, 1); if (defined($cat_status) && $cat_status == 0) { notify($ERRORS{'DEBUG'}, 0, "retrieved scripts.ini contents:\n" . join("\n", @{$cat_output})); } @@ -6611,7 +6446,7 @@ sub remove_group_policy_script { # Echo the modified contents to scripts.ini my $echo_command = "echo \"$scripts_ini_modified\" > $scripts_ini"; - my ($echo_status, $echo_output) = run_ssh_command($computer_node_name, $management_node_keys, $echo_command); + my ($echo_status, $echo_output) = $self->execute($echo_command); if (defined($echo_status) && $echo_status == 0) { notify($ERRORS{'DEBUG'}, 0, "echo'd modified contents to scripts.ini"); } @@ -6629,7 +6464,7 @@ sub remove_group_policy_script { # Get the modified contents of scripts.ini my $cat_modified_command = "cat $scripts_ini"; - my ($cat_modified_status, $cat_modified_output) = run_ssh_command($computer_node_name, $management_node_keys, $cat_modified_command, '', '', 1); + my ($cat_modified_status, $cat_modified_output) = $self->execute($cat_modified_command, 1); if (defined($cat_modified_status) && $cat_modified_status == 0) { notify($ERRORS{'DEBUG'}, 0, "retrieved modified scripts.ini contents"); } @@ -6665,12 +6500,10 @@ sub run_gpupdate { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $gpupdate_command = "cmd.exe /c $system32_path/gpupdate.exe /Force"; - my ($gpupdate_status, $gpupdate_output) = run_ssh_command($computer_node_name, $management_node_keys, $gpupdate_command); + my ($gpupdate_status, $gpupdate_output) = $self->execute($gpupdate_command); if (defined($gpupdate_output) && !grep(/error/i, @{$gpupdate_output})) { notify($ERRORS{'OK'}, 0, "ran gpupdate /force"); } @@ -6703,9 +6536,6 @@ sub run_unix2dos { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Get the arguments my $file_path = shift; if (!$file_path) { @@ -6715,7 +6545,7 @@ sub run_unix2dos { # Run unix2dos on scripts.ini my $unix2dos_command = "unix2dos $file_path"; - my ($unix2dos_status, $unix2dos_output) = run_ssh_command($computer_node_name, $management_node_keys, $unix2dos_command); + my ($unix2dos_status, $unix2dos_output) = $self->execute($unix2dos_command); if (defined($unix2dos_status) && $unix2dos_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran unix2dos on $file_path"); } @@ -6748,9 +6578,6 @@ sub search_and_replace_in_files { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Get the arguments my $base_directory = shift; my $search_pattern = shift; @@ -6780,7 +6607,7 @@ sub search_and_replace_in_files { # Run grep to find files matching pattern my $grep_command = "/bin/grep -ilr \"$search_pattern\" \"$base_directory\" 2>&1 | grep -Ev \"\.(exe|dll)\""; - my ($grep_status, $grep_output) = run_ssh_command($computer_node_name, $management_node_keys, $grep_command, '', '', 0); + my ($grep_status, $grep_output) = $self->execute($grep_command, 0); if (!defined($grep_status)) { notify($ERRORS{'WARNING'}, 0, "unable to run ssh command to run grep on directory: $base_directory, pattern: $search_pattern"); return; @@ -6811,7 +6638,7 @@ sub search_and_replace_in_files { $matching_file =~ s/\\+/\//g; # Run grep to find files matching pattern my $sed_command = "/bin/sed -i -e \"s/$search_pattern/$replace_string/\" \"$matching_file\""; - my ($sed_status, $sed_output) = run_ssh_command($computer_node_name, $management_node_keys, $sed_command, '', '', 0); + my ($sed_status, $sed_output) = $self->execute($sed_command, 0); if (!defined($sed_status)) { notify($ERRORS{'WARNING'}, 0, "unable to run ssh command to run sed on file: $matching_file"); $sed_error_count++; @@ -6862,9 +6689,9 @@ sub copy_capture_configuration_files { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL module object method"); - return; + return; } - + my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -6951,14 +6778,13 @@ sub clean_hard_drive { return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; # Run dism.exe # The dism.exe file may not be present my $dism_command = "$system32_path/dism.exe /online /cleanup-image /spsuperseded"; - my ($dism_exit_status, $dism_output) = run_ssh_command($computer_node_name, $management_node_keys, $dism_command, '', '', 1); + my ($dism_exit_status, $dism_output) = $self->execute($dism_command, 1); if (!defined($dism_output)) { notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to run dism.exe"); return; @@ -7111,7 +6937,7 @@ EOF # Run cleanmgr.exe # The cleanmgr.exe file may not be present - it is not installed by default on Windows Server 2008 and possibly others my $cleanmgr_command = "/bin/cygstart.exe $system32_path/cleanmgr.exe /SAGERUN:01"; - my ($cleanmgr_exit_status, $cleanmgr_output) = run_ssh_command($computer_node_name, $management_node_keys, $cleanmgr_command); + my ($cleanmgr_exit_status, $cleanmgr_output) = $self->execute($cleanmgr_command); if (!defined($cleanmgr_output)) { notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to run cleanmgr.exe"); return; @@ -7155,9 +6981,7 @@ sub is_process_running { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $process_identifier = shift; if (!defined($process_identifier)) { @@ -7166,7 +6990,7 @@ sub is_process_running { } my $command = "$system32_path/tasklist.exe /FI \"IMAGENAME eq $process_identifier\""; - my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 0); + my ($status, $output) = $self->execute($command, 0); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run ssh command to determine if process is running: $process_identifier"); return; @@ -7202,9 +7026,7 @@ sub start_service { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $service_name = shift; if (!$service_name) { @@ -7213,7 +7035,7 @@ sub start_service { } my $command = $system32_path . '/net.exe start "' . $service_name . '"'; - my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command); + my ($status, $output) = $self->execute($command); if (defined($status) && $status == 0) { notify($ERRORS{'OK'}, 0, "started service: $service_name"); } @@ -7249,9 +7071,7 @@ sub stop_service { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $service_name = shift; if (!$service_name) { @@ -7260,7 +7080,7 @@ sub stop_service { } my $command = $system32_path . '/net.exe stop "' . $service_name . '"'; - my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command); + my ($status, $output) = $self->execute($command); if (defined($status) && $status == 0) { notify($ERRORS{'OK'}, 0, "stopped service: $service_name"); } @@ -7301,9 +7121,7 @@ sub restart_service { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $service_name = shift; if (!$service_name) { @@ -7312,7 +7130,7 @@ sub restart_service { } my $command = "$system32_path/net.exe stop \"$service_name\" ; $system32_path/net.exe start \"$service_name\""; - my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 1); + my ($status, $output) = $self->execute($command, 1); if (!defined($output)) { notify($ERRORS{'WARNING'}, 0, "failed to run command to restart service: $service_name"); return; @@ -7347,9 +7165,7 @@ sub service_exists { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $service_name = shift; if (!$service_name) { @@ -7358,7 +7174,7 @@ sub service_exists { } my $command = $system32_path . '/sc.exe query "' . $service_name . '"'; - my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command, '', '', 1); + my ($status, $output) = $self->execute($command, 1); if (defined($output) && grep(/service does not exist/i, @{$output})) { notify($ERRORS{'DEBUG'}, 0, "service does not exist: $service_name"); return 0; @@ -7503,13 +7319,11 @@ sub get_task_list { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Attempt to run tasklist.exe with /NH for no header my $tasklist_command = $system32_path . '/tasklist.exe /NH /V'; - my ($tasklist_exit_status, $tasklist_output) = run_ssh_command($computer_node_name, $management_node_keys, $tasklist_command, '', '', 0); + my ($tasklist_exit_status, $tasklist_output) = $self->execute($tasklist_command, 0); if (defined($tasklist_exit_status) && $tasklist_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran tasklist.exe"); } @@ -7546,13 +7360,11 @@ sub get_task_info { my $pattern = shift; - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Attempt to run tasklist.exe with /NH for no header my $tasklist_command = $system32_path . '/tasklist.exe /V /FO CSV'; - my ($tasklist_exit_status, $tasklist_output) = run_ssh_command($computer_node_name, $management_node_keys, $tasklist_command, '', '', 0); + my ($tasklist_exit_status, $tasklist_output) = $self->execute($tasklist_command, 0); if (defined($tasklist_exit_status) && $tasklist_exit_status == 0) { notify($ERRORS{'DEBUG'}, 0, "ran tasklist.exe"); } @@ -7672,9 +7484,9 @@ sub apply_security_templates { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module:: module object method"); - return; + return; } - + my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; @@ -7742,7 +7554,7 @@ sub apply_security_templates { notify($ERRORS{'DEBUG'}, 0, "copied file: $computer_node_name:$inf_target_path"); # Set permission on the copied file - if (!run_ssh_command($computer_node_name, $management_node_keys, "/usr/bin/chmod.exe -R 644 $inf_target_path", '', '', 0)) { + if (!$self->execute("/usr/bin/chmod.exe -R 644 $inf_target_path", 0)) { notify($ERRORS{'WARNING'}, 0, "could not set permissions on $inf_target_path"); } } @@ -7767,7 +7579,7 @@ sub apply_security_templates { # Task is completed. Warnings occurred for some attributes during this operation. It's ok to ignore. my $secedit_command = "$secedit_exe /configure /cfg \"$inf_target_path\" /db $secedit_db /log $secedit_log /overwrite /quiet"; - my ($secedit_exit_status, $secedit_output) = run_ssh_command($computer_node_name, $management_node_keys, $secedit_command, '', '', 0); + my ($secedit_exit_status, $secedit_output) = $self->execute($secedit_command, 0); if (defined($secedit_exit_status) && ($secedit_exit_status == 0 || $secedit_exit_status == 3)) { notify($ERRORS{'OK'}, 0, "ran secedit.exe to apply $inf_file_name"); } @@ -7808,19 +7620,17 @@ sub kill_process { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } # Get the task name pattern argument my $task_pattern = shift; unless ($task_pattern) { notify($ERRORS{'WARNING'}, 0, "task name pattern argument was not specified"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Typical output: # Task was killed, exit status = 0: @@ -7834,7 +7644,7 @@ sub kill_process { # Attempt to kill task my $taskkill_command = $system32_path . "/taskkill.exe /F /T /FI \"IMAGENAME eq $task_pattern\""; - my ($taskkill_exit_status, $taskkill_output) = run_ssh_command($computer_node_name, $management_node_keys, $taskkill_command, '', '', '1'); + my ($taskkill_exit_status, $taskkill_output) = $self->execute($taskkill_command, '1'); if (defined($taskkill_exit_status) && $taskkill_exit_status == 0 && (my @killed = grep(/SUCCESS/, @$taskkill_output))) { notify($ERRORS{'OK'}, 0, scalar @killed . "processe(s) killed matching pattern: $task_pattern\n" . join("\n", @killed)); } @@ -7871,12 +7681,9 @@ sub disable_ie_configuration_page { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<"EOF"; Windows Registry Editor Version 5.00 @@ -7924,7 +7731,7 @@ sub enable_rdp_audio { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } my $registry_string .= <<"EOF"; @@ -7975,7 +7782,7 @@ sub enable_client_compatible_rdp_color_d my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } my $registry_string .= <<"EOF"; @@ -8050,7 +7857,6 @@ sub set_computer_name { $new_computer_name .= "-$image_id" if $image_id; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $registry_string .= <<"EOF"; @@ -8072,7 +7878,8 @@ EOF notify($ERRORS{'WARNING'}, 0, "failed to set registry keys to change the computer name of $computer_node_name to $new_computer_name"); return; } - + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -8091,12 +7898,9 @@ sub disable_security_center_notification my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<'EOF'; Windows Registry Editor Version 5.00 @@ -8150,12 +7954,9 @@ sub disable_automatic_updates { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<'EOF'; Windows Registry Editor Version 5.00 @@ -8194,12 +7995,9 @@ sub disable_windows_defender { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_string .= <<'EOF'; Windows Registry Editor Version 5.00 @@ -8220,7 +8018,7 @@ EOF } # Check if WinDefend service exists - if ($self->service_exists('WinDefend')) { + if ($self->service_exists('WinDefend')) { # Stop the Windows Defender service if ($self->stop_service('WinDefend')) { notify($ERRORS{'DEBUG'}, 0, "stopped the Windows Defender service"); @@ -8263,19 +8061,17 @@ sub registry_query_value { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Get and check the arguments my $key_name = shift; my $value_name = shift; if (!$key_name) { notify($ERRORS{'WARNING'}, 0, "registry key name argument was not specified"); - return; + return; } # Assemble the query command string @@ -8300,7 +8096,7 @@ sub registry_query_value { } # Attempt to query the registry key - my ($reg_query_exit_status, $reg_query_output) = run_ssh_command($computer_node_name, $management_node_keys, $reg_query_command, '', '', 1); + my ($reg_query_exit_status, $reg_query_output) = $self->execute($reg_query_command, 1); if (defined($reg_query_output) && grep(/unable to find the specified registry/i, @$reg_query_output)) { notify($ERRORS{'OK'}, 0, "registry key or value does not exist"); return; @@ -8364,12 +8160,10 @@ sub set_static_public_address { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; my $computer_name = $self->data->get_computer_short_name(); @@ -8379,7 +8173,7 @@ sub set_static_public_address { # Make sure public IP configuration is static or this is a server request my $ip_configuration = $self->data->get_management_node_public_ip_configuration(); if ($ip_configuration !~ /static/i) { - if( !$server_request_fixedIP ) { + if ( !$server_request_fixedIP ) { notify($ERRORS{'WARNING'}, 0, "static public address can only be set if IP configuration is static, current value: $ip_configuration \nserver_request_fixedIP=$server_request_fixedIP"); return; } @@ -8417,9 +8211,9 @@ EOF notify($ERRORS{'OK'}, 0, "attempting to set static public IP address on $computer_name:\n$configuration_info_string"); } - #Try to ping address to make sure it's available - #FIXME -- need to add other tests for checking ip_address is or is not available. - if(_pingnode($computer_public_ip_address)) { + # Try to ping address to make sure it's available + # FIXME -- need to add other tests for checking ip_address is or is not available. + if (_pingnode($computer_public_ip_address)) { notify($ERRORS{'WARNING'}, 0, "ip_address $computer_public_ip_address is pingable, can not assign to $computer_name "); return; } @@ -8482,15 +8276,12 @@ sub delete_default_routes { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Delete all default routes my $route_delete_command = "route delete 0.0.0.0"; - my ($route_delete_exit_status, $route_delete_output) = run_ssh_command($computer_node_name, $management_node_keys, $route_delete_command); + my ($route_delete_exit_status, $route_delete_output) = $self->execute($route_delete_command); if (defined($route_delete_exit_status) && $route_delete_exit_status == 0) { notify($ERRORS{'OK'}, 0, "deleted all default routes"); } @@ -8522,7 +8313,7 @@ sub set_public_default_route { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } # Check the management node's DHCP IP configuration mode @@ -8551,15 +8342,12 @@ sub set_public_default_route { # Do this only after successfully retrieving default gateway address if (!$self->delete_default_routes()) { notify($ERRORS{'WARNING'}, 0, "unable to delete existing default routes"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Add a persistent route to the public default gateway my $route_add_command = "route -p ADD 0.0.0.0 MASK 0.0.0.0 $default_gateway METRIC 1"; - my ($route_add_exit_status, $route_add_output) = run_ssh_command($computer_node_name, $management_node_keys, $route_add_command); + my ($route_add_exit_status, $route_add_output) = $self->execute($route_add_command); if (!defined($route_add_output)) { notify($ERRORS{'WARNING'}, 0, "failed to execute command to add persistent route to public default gateway: $default_gateway"); return; @@ -8590,15 +8378,12 @@ sub get_volume_list { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Echo the diskpart script to a temp file on the node my $for_command = 'for i in `ls /cygdrive 2>/dev/null`; do echo $i; done;'; - my ($for_exit_status, $for_output) = run_ssh_command($computer_node_name, $management_node_keys, $for_command, '', '', 1); + my ($for_exit_status, $for_output) = $self->execute($for_command, 1); if (defined($for_exit_status) && $for_exit_status == 0) { notify($ERRORS{'OK'}, 0, "retrieved drive letter list under /cygdrive:\n" . join("\n", @$for_output)); } @@ -8639,45 +8424,38 @@ sub configure_time_synchronization { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; - - #get Throttle source value from database if set my $time_source; - my $variable_name = "timesource|" . $self->data->get_management_node_hostname(); - my $variable_name_global = "timesource|global"; - if(is_variable_set($variable_name)){ - #fetch variable - $time_source = get_variable($variable_name); - notify($ERRORS{'DEBUG'}, 0, "time_source is $time_source set for $variable_name"); - } - elsif(is_variable_set($variable_name_global) ) { - #fetch variable - $time_source = get_variable($variable_name_global); - notify($ERRORS{'DEBUG'}, 0, "time_source is $time_source set for $variable_name"); - } - else { - $time_source = "time.nist.gov time-a.nist.gov time-b.nist.gov time.windows.com"; - notify($ERRORS{'DEBUG'}, 0, "time_source is not set for $variable_name using hardcoded values of $time_source"); - } + my $variable_name = "timesource|" . $self->data->get_management_node_hostname(); + my $variable_name_global = "timesource|global"; + if (is_variable_set($variable_name)){ + $time_source = get_variable($variable_name); + notify($ERRORS{'DEBUG'}, 0, "time_source is $time_source set for $variable_name"); + } + elsif (is_variable_set($variable_name_global) ) { + $time_source = get_variable($variable_name_global); + notify($ERRORS{'DEBUG'}, 0, "time_source is $time_source set for $variable_name"); + } + else { + $time_source = "time.nist.gov time-a.nist.gov time-b.nist.gov time.windows.com"; + notify($ERRORS{'DEBUG'}, 0, "time_source is not set for $variable_name using hardcoded values of $time_source"); + } # Replace commas with single whitespace $time_source =~ s/,/ /g; my @time_array = split(/ /, $time_source); - #Update the registry - my $key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers'; - for my $i (0 .. $#time_array) { - my $value = $i+1; - if($self->reg_add($key,$value, "REG_SZ", $time_array[$i])){ - } - } - + # Update the registry + my $key = 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers'; + for my $i (0 .. $#time_array) { + my $value = $i+1; + $self->reg_add($key,$value, "REG_SZ", $time_array[$i]); + } + # Assemble the time command my $time_command; @@ -8696,7 +8474,7 @@ sub configure_time_synchronization { $time_command .= "$system32_path/w32tm.exe /resync /nowait"; # Run the assembled command - my ($time_exit_status, $time_output) = run_ssh_command($computer_node_name, $management_node_keys, $time_command); + my ($time_exit_status, $time_output) = $self->execute($time_command); if (defined($time_output) && @$time_output[-1] =~ /The command completed successfully/i) { notify($ERRORS{'DEBUG'}, 0, "configured and synchronized Windows time"); } @@ -8736,7 +8514,7 @@ sub is_64_bit { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } # Check if architecture has previously been determined @@ -8749,15 +8527,12 @@ sub is_64_bit { return 0; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $registry_key = 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'; my $registry_value = 'PROCESSOR_IDENTIFIER'; # Run reg.exe QUERY my $query_registry_command .= "reg.exe QUERY \"$registry_key\" /v \"$registry_value\""; - my ($query_registry_exit_status, $query_registry_output) = run_ssh_command($computer_node_name, $management_node_keys, $query_registry_command, '', '', 0); + my ($query_registry_exit_status, $query_registry_output) = $self->execute($query_registry_command, 0); if (!defined($query_registry_output)) { notify($ERRORS{'WARNING'}, 0, "failed to run SSH command to query registry key: $registry_key, value: $registry_value"); @@ -8853,7 +8628,7 @@ sub get_product_name { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } # Check if product name has previously been retrieved from registry @@ -8862,9 +8637,6 @@ sub get_product_name { return $self->{PRODUCT_NAME}; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Get the Windows product name from the registry my $product_name = $self->reg_query('HKLM/Software/Microsoft/Windows NT/CurrentVersion', 'ProductName'); if ($product_name) { @@ -8894,14 +8666,14 @@ sub format_path_unix { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } # Get the path argument my $path = shift; if (!$path) { notify($ERRORS{'WARNING'}, 0, "path argument was not specified"); - return; + return; } # Replace all forward slashes and backslashes with a single forward slash @@ -8932,14 +8704,14 @@ sub format_path_dos { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } # Get the path argument my $path = shift; if (!$path) { notify($ERRORS{'WARNING'}, 0, "path argument was not specified"); - return; + return; } # Replace all forward slashes with 2 backslashes @@ -8970,10 +8742,7 @@ sub disable_system_restore { notify($ERRORS{'CRITICAL'}, 0, "subroutine was called as a function, it must be called as a class method"); return; } - - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - + my $registry_string .= <<"EOF"; Windows Registry Editor Version 5.00 @@ -9828,9 +9597,6 @@ sub get_driver_inf_paths { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - # Check if a driver class argument was specified my $driver_class = shift; if ($driver_class) { @@ -9854,7 +9620,7 @@ sub get_driver_inf_paths { } $grep_command .= $drivers_directory; - my ($grep_exit_status, $grep_output) = run_ssh_command($computer_node_name, $management_node_keys, $grep_command, '', '', 1); + my ($grep_exit_status, $grep_output) = $self->execute($grep_command, 1); if (defined($grep_exit_status) && $grep_exit_status > 1) { notify($ERRORS{'WARNING'}, 0, "failed to find driver paths, exit status: $grep_exit_status, output:\n@{$grep_output}"); return; @@ -9897,9 +9663,6 @@ sub set_device_path_key { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $device_path_value; # Find the paths of .inf files in the drivers directory @@ -9955,16 +9718,15 @@ sub disable_hibernation { my $self = shift; unless (ref($self) && $self->isa('VCL::Module')) { notify($ERRORS{'CRITICAL'}, 0, "subroutine can only be called as a VCL::Module module object method"); - return; + return; } - my $management_node_keys = $self->data->get_management_node_keys(); my $computer_node_name = $self->data->get_computer_node_name(); my $system32_path = $self->get_system32_path() || return; # Run powercfg.exe to disable hibernation my $powercfg_command = "$system32_path/powercfg.exe -HIBERNATE OFF"; - my ($powercfg_exit_status, $powercfg_output) = run_ssh_command($computer_node_name, $management_node_keys, $powercfg_command, '', '', 1); + my ($powercfg_exit_status, $powercfg_output) = $self->execute($powercfg_command, 1); if (defined($powercfg_exit_status) && $powercfg_exit_status == 0) { notify($ERRORS{'OK'}, 0, "disabled hibernation"); } @@ -10084,7 +9846,7 @@ sub setup_get_menu { my $menu = { 'Windows Image Configuration' => { 'Activation' => { - 'Configure Multiple Activation Key (MAK) Activation' => \&setup_product_keys, + 'Configure Multiple Activation Key (MAK) Activation' => \&setup_product_keys, 'Configure Key Management Service (KMS) Activation' => \&setup_kms_servers, } }, @@ -10149,6 +9911,8 @@ sub setup_check { chomp $message; setup_print_wrap("*** $message ***\n\n"); } + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -10319,6 +10083,8 @@ sub setup_product_keys { } } } + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -10389,6 +10155,8 @@ sub setup_display_product_key_info { $product_key_info_string = "<not configured>\n" if !$product_key_info_string; print "$product_key_info_string"; + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -10527,6 +10295,8 @@ sub setup_kms_servers { } } } + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -10596,6 +10366,8 @@ sub setup_display_kms_server_info { $kms_server_info_string = "<not configured>\n" if !$kms_server_info_string; print "$kms_server_info_string"; + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -10755,9 +10527,7 @@ sub clear_event_log { my @logfile_names = @_; @logfile_names = ('Application', 'Security', 'System') if !@logfile_names; - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Assemble the command # Call wmic.exe - the WMI shell @@ -10771,7 +10541,7 @@ sub clear_event_log { # Remove the last ' ; ' added to the command $command =~ s/[\s;]*$//g; - my ($status, $output) = run_ssh_command($computer_node_name, $management_node_keys, $command); + my ($status, $output) = $self->execute($command); if (!defined($output)) { notify($ERRORS{'DEBUG'}, 0, "failed to run SSH command to clear the event log: @logfile_names"); return; @@ -11044,9 +10814,8 @@ sub check_connection_on_port { return; } - my $management_node_keys = $self->data->get_management_node_keys(); - my $computer_node_name = $self->data->get_computer_node_name(); - my $remote_ip = $self->data->get_reservation_remote_ip(); + my $computer_node_name = $self->data->get_computer_node_name(); + my $remote_ip = $self->data->get_reservation_remote_ip(); my $computer_public_ip_address = $self->data->get_computer_public_ip_address(); my $request_state_name = $self->data->get_request_state_name(); @@ -11401,13 +11170,13 @@ sub install_exe_update { notify($ERRORS{'WARNING'}, 0, "failed to execute command to install update on $computer_node_name: $command"); return; } - elsif ($exit_status eq 194) { + elsif ($exit_status eq '194') { # Exit status 194 - installed but reboot required notify($ERRORS{'DEBUG'}, 0, "installed update on $computer_node_name, exit status $exit_status indicates a reboot is required"); $self->data->set_imagemeta_postoption('reboot'); return 1; } - elsif ($exit_status eq 0) { + elsif ($exit_status eq '0') { notify($ERRORS{'DEBUG'}, 0, "installed update on $computer_node_name"); } else { @@ -11785,6 +11554,8 @@ sub check_image { $self->update_imagerevision_info($imagerevision_id, join(",", @image_user_names_report), $firewall_state); } + + return 1; } #///////////////////////////////////////////////////////////////////////////// @@ -11871,8 +11642,7 @@ sub get_firewall_state { return; } - my $computer_node_name = $self->data->get_computer_node_name(); - my $system32_path = $self->get_system32_path() || return; + my $system32_path = $self->get_system32_path() || return; # Run netsh.exe to get the state of the current firewall profile my $command = "$system32_path/netsh.exe firewall show state"; @@ -12027,7 +11797,6 @@ sub get_port_connection_info { my $computer_node_name = $self->data->get_computer_node_name(); - my $command = "netstat -ano"; my ($exit_status, $output) = $self->execute($command, 0); if (!defined($output)) {
