Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Alexander_Naumov:SLE-12:Update
yast2-printer
replace_network_test_with_echo.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File replace_network_test_with_echo.diff of Package yast2-printer
Index: yast2-printer-3.1.1/src/modules/Printer.rb =================================================================== --- yast2-printer-3.1.1.orig/src/modules/Printer.rb +++ yast2-printer-3.1.1/src/modules/Printer.rb @@ -2345,321 +2345,25 @@ module Yast # Test whether or not a "client-only" server is accessible. # @param [String] server_name string of the "client-only" server name - # @param [Boolean] fail_if_executable_is_missing boolean which lets this function fail - # if netcat, ping, or host are not executable (e.g. because of not installed packages) + # # @return false if the "client-only" server is not accessible. - def TestClientOnlyServer(server_name, fail_if_executable_is_missing) - # because a local cupsd is needed if the server name is "localhost" or "127.0.0.1": - if "localhost" == Builtins.tolower(server_name) || - "127.0" == Builtins.substring(server_name, 0, 5) - # which makes it effectively a config with a local running cupsd. - # If a local cupsd is already accessible, exit successfully, otherwise start it: - return true if Printerlib.GetAndSetCupsdStatus("") + + def TestClientOnlyServer(server_name) + + if server_name.empty? + Popup.Error(_("Servername could not be empty.")) + return false + + elsif "localhost" == Builtins.tolower(server_name) || + "127.0" == Builtins.substring(server_name, 0, 5) return Printerlib.GetAndSetCupsdStatus("start") - end - # The tests here are the same (except verbosity) as in the cups_client_only tool. - # First do the most meaningful test and only if this works return true. - # The subsequent tests are only there to provide more info for the user - # what might be the reason why the server is not accessible via port 631. - netcat_test_fail_message = Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server '%1' is not accessible via port 631 (IPP/CUPS)."), - server_name - ) # Popup message - ping_test_good_message = Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server '%1' responds to a 'ping' in the network."), - server_name - ) # Popup message - ping_test_fail_message = Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server '%1' does not respond to a 'ping' in the network."), - server_name - ) # Popup message - host_test_good_message = Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server name '%1' is known in the network."), - server_name - ) # Popup message - host_test_fail_message = Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server name '%1' is not known in the network."), - server_name - ) # Popup message - separator = "\n===========================================================\n" - error_messages = "" - result_details = "" - netcat_test_failed = false - ping_test_failed = false - host_test_failed = false - # Only the netcat test provides a really meaningful result - # so that only this test returns immediately true if it was successful. - if !Printerlib.ExecuteBashCommand("type -P netcat") - # but in most cases TestClientOnlyServer is called - # indirectly without a button click by the user - # so that even the netcat test is silently skipped - # and no negative feedback is shown when netcat is not executable: - if fail_if_executable_is_missing - Popup.ErrorDetails( - _("Cannot execute the program 'netcat'."), - Ops.add( - Ops.add( - Ops.add( - # Popup::ErrorDetails details: - _( - "The RPM package 'netcat' is required for a meaningful test." - ) + "\n", - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ) - ) - return false - end - else - # Make netcat verbose, otherwise there would be no output at all - # but some output is needed for the Popup::ErrorDetails below: - if Printerlib.ExecuteBashCommand( - Ops.add(Ops.add("netcat -v -w 1 -z ", server_name), " 631") - ) - # because in most cases TestClientOnlyServer is called indirectly without a button click. - return true - end - # The netcat-test failed: - netcat_test_failed = true - error_messages = netcat_test_fail_message - result_details = Ops.add( - Ops.add(Ops.get_string(Printerlib.result, "stderr", ""), "\n"), - Ops.get_string(Printerlib.result, "stdout", "") - ) - end - # When the netcat-test failed or when netcat is not executable, do a less meaningful test: - if !Printerlib.ExecuteBashCommand("type -P ping") - # but it the less meaningful test is not really important - # so that the less meaningful test is silently skipped - # and no negative feedback is shown when ping is not executable: - if fail_if_executable_is_missing - Popup.ErrorDetails( - _("Cannot execute the program 'ping'."), - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - # Popup::ErrorDetails details: - _( - "The RPM package 'iputils' is required for a meaningful test." - ) + "\n", - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ), - separator - ), - error_messages - ), - "\n" - ), - result_details - ) - ) - return false - end - else - if Printerlib.ExecuteBashCommand( - Ops.add("ping -w 1 -c 1 ", server_name) - ) - if netcat_test_failed - # Show negative feedback: - Popup.ErrorDetails( - Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server '%1' is not accessible."), - server_name - ), # Popup::ErrorDetails message - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - # Popup::ErrorDetails details: - error_messages, - "\n" - ), - ping_test_good_message - ), - separator - ), - result_details - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ) - ) - return false - end - # netcat was not executable but at least the ping-test was successful. - # Don't show positive feedback because this would be annoying popups for the user - # because in most cases TestClientOnlyServer is called indirectly without a button click. - return true - end - # The ping-test failed: - ping_test_failed = true - error_messages = Ops.add( - Ops.add(error_messages, "\n"), - ping_test_fail_message - ) - result_details = Ops.add( - Ops.add( - Ops.add( - Ops.add(result_details, "\n"), - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ) - end - # When the netcat-test failed or when netcat is not executable - # and when the ping-test failed or when ping is not executable - # do a last test: - if !Printerlib.ExecuteBashCommand("type -P host") - # but it the last test is not really important - # so that the last test is silently skipped - # and no negative feedback is shown when host is not executable: - if fail_if_executable_is_missing - Popup.ErrorDetails( - _("Cannot execute the program 'host'."), - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - # Popup::ErrorDetails details: - _( - "The RPM package 'bind-utils' is required for a meaningful test." - ) + "\n", - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ), - separator - ), - error_messages - ), - "\n" - ), - result_details - ) - ) - return false - end + + elsif Printerlib.ExecuteBashCommand("( echo -n '' >/dev/tcp/"+ server_name +"/631 ) & ECHO_PID=$! ; sleep 2s ; kill $ECHO_PID &>/dev/null ; wait $ECHO_PID") + return true else - if Printerlib.ExecuteBashCommand(Ops.add("host -W 1 ", server_name)) - if netcat_test_failed || ping_test_failed - # Show negative feedback: - Popup.ErrorDetails( - Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server '%1' does not respond in the network."), - server_name - ), # Popup::ErrorDetails message - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - Ops.add( - # Popup::ErrorDetails details: - error_messages, - "\n" - ), - host_test_good_message - ), - separator - ), - result_details - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ) - ) - return false - end - # ping was not executable but at least the host-test was successful. - # Don't show positive feedback because this would be annoying popups for the user - # because in most cases TestClientOnlyServer is called indirectly without a button click. - return true - end - # The host-test failed: - host_test_failed = true - error_messages = Ops.add( - Ops.add(error_messages, "\n"), - host_test_fail_message - ) - result_details = Ops.add( - Ops.add( - Ops.add( - Ops.add(result_details, "\n"), - Ops.get_string(Printerlib.result, "stderr", "") - ), - "\n" - ), - Ops.get_string(Printerlib.result, "stdout", "") - ) - end - # When the netcat-test failed or when netcat is not executable - # and when the ping-test failed or when ping is not executable - # and when the host-test failed or when host is not executable: - if netcat_test_failed || ping_test_failed || host_test_failed - # Show negative feedback: - Popup.ErrorDetails( - Builtins.sformat( - # where %1 will be replaced by the server name. - _("The server '%1' is unknown."), - server_name - ), # Popup::ErrorDetails message - Ops.add( - Ops.add( - # Popup::ErrorDetails details: - error_messages, - separator - ), - result_details - ) - ) + Popup.Error(_("The server '" + server_name + "' is not available or not listening on port 631")) return false end - # Neither netcat nor ping nor host were executable. - # Don't show any kind of feedback because this would be annoying popups for the user - # because in most cases TestClientOnlyServer is called indirectly without a button click - # so that nothing else could be done in this case except a "hope-for-the-best" successful return: - true end # Run hp-setup: @@ -2785,7 +2489,7 @@ module Yast publish :function => :AddQueue, :type => "boolean (string, boolean, string)" publish :function => :DeleteQueue, :type => "boolean (string)" publish :function => :DriverOptionItems, :type => "list (string, string)" - publish :function => :TestClientOnlyServer, :type => "boolean (string, boolean)" + publish :function => :TestClientOnlyServer, :type => "boolean (string)" publish :function => :RunHpsetup, :type => "boolean ()" end Index: yast2-printer-3.1.1/src/include/printer/overview.rb =================================================================== --- yast2-printer-3.1.1.orig/src/include/printer/overview.rb +++ yast2-printer-3.1.1/src/include/printer/overview.rb @@ -190,10 +190,7 @@ module Yast end # A non-accessible client-only server leads to an endless sequence of weird further behaviour # of the module so that a non-accessible server is only accepted after insistent warning popups: - if !Printer.TestClientOnlyServer( - Printerlib.client_conf_server_name, - false - ) + if !Printer.TestClientOnlyServer(Printerlib.client_conf_server_name) if feedback_popup_exists Popup.ClearFeedback feedback_popup_exists = false Index: yast2-printer-3.1.1/src/include/printer/printingvianetwork.rb =================================================================== --- yast2-printer-3.1.1.orig/src/include/printer/printingvianetwork.rb +++ yast2-printer-3.1.1/src/include/printer/printingvianetwork.rb @@ -383,7 +383,7 @@ module Yast # Therefore the admin can force YaST to proceed here. # Do not show additional error messages here because Printer::TestClientOnlyServer() # shows sufficient popups to the user: - if !Printer.TestClientOnlyServer(current_client_conf_value, true) + if !Printer.TestClientOnlyServer(current_client_conf_value) if !Popup.ContinueCancelHeadline( Builtins.sformat( # when a client-only server is not accessible @@ -1137,7 +1137,7 @@ module Yast " " ) # No need for error popups because TestClientOnlyServer shows sufficient error popups: - if Printer.TestClientOnlyServer(server_name, true) + if Printer.TestClientOnlyServer(server_name) Popup.Message( Builtins.sformat( # where %1 will be replaced by the server name.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor