On Wed, Jun 15, 2011 at 08:47:50AM -0000, [email protected] wrote:
> Author: locilka
> Date: Wed Jun 15 10:47:50 2011
> New Revision: 64378
> 
> URL: http://svn.opensuse.org/viewcvs/yast?rev=64378&view=rev
> Log:
> Added possibility to manage the sshd service (#556535)
> 
> 
> Modified:
>     trunk/sshd/VERSION
>     trunk/sshd/package/yast2-sshd.changes
>     trunk/sshd/src/Sshd.ycp
>     trunk/sshd/src/dialogs.ycp
>     trunk/sshd/src/wizards.ycp
> 
> Modified: trunk/sshd/VERSION
> URL: 
> http://svn.opensuse.org/viewcvs/yast/trunk/sshd/VERSION?rev=64378&r1=64377&r2=64378&view=diff
> ==============================================================================
> --- trunk/sshd/VERSION (original)
> +++ trunk/sshd/VERSION Wed Jun 15 10:47:50 2011
> @@ -1 +1 @@
> -2.18.0
> +2.21.0
> 
> Modified: trunk/sshd/package/yast2-sshd.changes
> URL: 
> http://svn.opensuse.org/viewcvs/yast/trunk/sshd/package/yast2-sshd.changes?rev=64378&r1=64377&r2=64378&view=diff
> ==============================================================================
> --- trunk/sshd/package/yast2-sshd.changes (original)
> +++ trunk/sshd/package/yast2-sshd.changes Wed Jun 15 10:47:50 2011
> @@ -1,4 +1,10 @@
>  -------------------------------------------------------------------
> +Wed Jun 15 10:45:10 CEST 2011 - [email protected]
> +
> +- Added possibility to manage the sshd service (#556535).

s/#556535/bnc#556535/

> +- 2.21.0
> +
> +-------------------------------------------------------------------
>  Wed Jan 13 18:56:03 CET 2010 - [email protected]
>  
>  - Adjusted .desktop file(s) to wrap /sbin/yast2/ calls in xdg-su
> 
> Modified: trunk/sshd/src/Sshd.ycp
> URL: 
> http://svn.opensuse.org/viewcvs/yast/trunk/sshd/src/Sshd.ycp?rev=64378&r1=64377&r2=64378&view=diff
> ==============================================================================
> --- trunk/sshd/src/Sshd.ycp (original)
> +++ trunk/sshd/src/Sshd.ycp Wed Jun 15 10:47:50 2011
> @@ -30,7 +30,7 @@
>  /**
>   * Sleep time between Read or Write steps
>   */
> -integer sl = 200;
> +integer sl = 150;

WTF?

>  
>  /**
>   * Returns whether the configuration has been modified.
> @@ -46,6 +46,40 @@
>      modified = true;
>  }
>  
> +string service_name = "sshd";
> +
> +boolean start_service = nil;
> +
> +global boolean GetStartService () {
> +    return start_service;
> +}
> +
> +global void SetStartService (boolean new_state) {
> +    if (new_state == nil) {
> +     y2error ("Cannot set 'StartService' to %1", new_state);
> +     return;
> +    } else if (start_service == new_state) {
> +     y2warning ("'StartService' unchanged");
> +     return;
> +    }
> +
> +    start_service = new_state;
> +    SetModified();
> +}
> +
> +/**
> + * Describes whether the daemon is running
> + */
> +boolean Running () {
> +    return (Service::Status(service_name) == 0);
> +}
> +
> +boolean ReadStartService () {
> +    start_service = Running();
> +
> +    return (start_service != nil);
> +}
> +
>  /**
>  * map of SSHD settings
>  */
> @@ -129,26 +163,6 @@
>  }
>  
>  /**
> - * Describes whether the daemon is running
> - */
> -boolean sshd_is_running = false;
> -
> -/**
> - * Reads current sshd status
> - */
> -boolean ReadSSHDService () {
> -    if (Service::Status("sshd") == 0) {
> -     sshd_is_running = true;
> -    } else {
> -     sshd_is_running = false;
> -    }
> -
> -    y2milestone((sshd_is_running ? "SSH is running":"SSH is not running"));
> -
> -    return true;
> -}
> -
> -/**
>   * Exports the current configuration.
>   *
>   * @return map of a current configuration
> @@ -161,7 +175,7 @@
>  global map Export () {
>      return $[
>       "config" : SETTINGS,
> -     "status" : sshd_is_running,
> +     "status" : Running(),
>      ];
>  }
>  
> @@ -170,29 +184,13 @@
>   */
>  global boolean Import (map import_map) {
>      SETTINGS = (map <string, list<string> >) import_map["config"]:$[];
> -    sshd_is_running = (import_map["status"]:false == true);
> +    SetStartService (import_map["status"]:false == true);
>      SetModified();
>      y2milestone ("Configuration has been imported");
>      return true;
>  }
>  
>  /**
> - * Restarts the sshd when the daemon was running when starting the 
> configuration
> - */
> -boolean WriteSSHDService () {
> -    boolean all_ok = true;
> -
> -    if (sshd_is_running) {
> -     y2milestone("Restarting sshd daemon");
> -     all_ok = Service::Restart("sshd");
> -    } else {
> -     y2milestone("Sshd is not running - leaving...");
> -    }
> -
> -    return all_ok;
> -}
> -
> -/**
>    Returns a confirmation popup dialog whether user wants to really abort.
>   */
>  global boolean Abort() {
> @@ -225,7 +223,7 @@
>      /* SSHD read dialog caption */
>      string caption = _("Initializing the SSHD Configuration");
>  
> -    integer steps = 3;
> +    integer steps = 4;

aaah, so "integer sl = 600 / steps" above, right?
8-]

This Progress stuff is so... er... useful?

>  
>      Progress::New( caption, " ", steps, [
>           /* Progress stage 1 */
> @@ -233,15 +231,18 @@
>           /* Progress stage 2 */
>           _("Read the current SSHD state"),
>           /* Progress stage 3 */
> -         _("Read firewall settings")
> +         _("Read firewall settings"),
> +         /* Progress stage 4 */
> +         _("Read service status"),
>       ], [
>           /* Progress step 1 */
>           _("Reading the current SSHD configuration..."),
>           /* Progress step 2 */
> -         _("Reading the current SSHD state..."),
> +         _("Reading the current SSHD state"),
>           /* Progress step 3 */
>           _("Reading firewall settings..."),
> -         /* Progress finished */
> +         /* Progress step 4 */
> +         _("Reading service status..."),
>           Message::Finished()
>       ],
>       ""
> @@ -251,14 +252,12 @@
>  
>      if (PollAbort()) return false;
>      Progress::NextStage();
> -    /* Error message */
>      if(!ReadSSHDSettings()) 
> Report::Error(Message::CannotReadCurrentSettings());
>      sleep(sl);
>  
>      if (PollAbort()) return false;
> -    Progress::NextStep();
> -    /* Error message */
> -    if(!ReadSSHDService()) Report::Error(_("Cannot read the current SSHD 
> state."));
> +    Progress::NextStage();
> +    if (!ReadStartService()) 
> Report::Error(Message::CannotReadCurrentSettings());
>      sleep(sl);
>  
>      if (PollAbort()) return false;
> @@ -273,10 +272,61 @@
>      Progress::NextStage ();
>      sleep(sl);
>  
> +    if (PollAbort()) return false;
> +    Progress::NextStage ();
> +    start_service = Service::Enabled (service_name);
> +    sleep(sl);
> +
>      modified = false;
>      return true;
>  }
>  
> +boolean AdjustSSHDService () {
> +    boolean enable_and_start = GetStartService();
> +    boolean enabled = Service::Enabled (service_name);
> +    boolean running = (Service::Status (service_name) == 0);
> +
> +    if (enable_and_start == nil) {
> +     y2error ("Configuration error: Cannot start/stop service %1", 
> service_name);
> +     return false;
> +    }
> +
> +    // Service enable/disable
> +    if (enable_and_start == enabled) {
> +     y2milestone ("Service '%1' is already in the desired state", 
> service_name);
> +    } else {
> +     if (enable_and_start && !Service::Enable (service_name)) {
> +         y2error ("Cannot enable service %1", service_name);
> +         return false;
> +     } else if (!enable_and_start && !Service::Disable (service_name)) {
> +         y2error ("Cannot disable service %1", service_name);
> +         return false;
> +     }
> +    }
> +
> +    // Start / restart service
> +    if (enable_and_start) {
> +     if (Running()) {
> +         if (!Service::Restart(service_name)) {
> +             y2error ("Cannot restart service %1", service_name);
> +             return false;
> +         }
> +     } else {
> +         if (!Service::Start (service_name)) {
> +             y2error ("Cannot start service %1", service_name);
> +             return false;
> +         }
> +     }
> +    // Stop a running service
> +    } else if (Running()) {
> +     if (!Service::Stop (service_name)) {
> +         return false;
> +     }
> +    }
> +
> +    return true;
> +}
> +
>  /**
>   * Write all SSHD settings
>   * @return true on success
> @@ -286,22 +336,22 @@
>      /* SSHD read dialog caption */
>      string caption = _("Saving the SSHD Configuration");
>  
> -    integer steps = 3;
> -    
> +    integer steps = 4;
> +
>      Progress::New(caption, " ", steps, [
>           /* Progress stage 1 */
>           _("Write the SSHD settings"),
>           /* Progress stage 2 */
> -         _("Adjust the SSHD service"),
> +         _("Write firewall settings"),
>           /* Progress stage 3 */
> -         _("Write firewall settings")
> +         _("Adjust SSHD service"),
>       ], [
>           /* Progress step 1 */
>           _("Writing the SSHD settings..."),
>           /* Progress step 2 */
> -         _("Adjusting the SSHD service..."),
> -         /* Progress step 3 */
>           _("Writing firewall settings..."),
> +         /* Progress step 3 */
> +         _("Adjusting SSHD service..."),
>           Message::Finished()
>       ],
>       ""
> @@ -317,16 +367,15 @@
>  
>      if(PollAbort()) return false;
>      Progress::NextStage ();
> +    boolean progress_state = Progress::set (false);
>      /* Error message */
> -    if(!WriteSSHDService()) Report::Error 
> (Message::CannotAdjustService("sshd"));
> +    if(!SuSEFirewall::Write()) Report::Error(_("Cannot write firewall 
> settings."));
> +    Progress::set (progress_state);
>      sleep(sl);
>  
>      if(PollAbort()) return false;
>      Progress::NextStage ();
> -    boolean progress_state = Progress::set (false);
> -    /* Error message */
> -    if(!SuSEFirewall::Write()) Report::Error(_("Cannot write firewall 
> settings."));
> -    Progress::set (progress_state);
> +    AdjustSSHDService();
>      sleep(sl);
>  
>      Progress::NextStage ();
> 
> Modified: trunk/sshd/src/dialogs.ycp
> URL: 
> http://svn.opensuse.org/viewcvs/yast/trunk/sshd/src/dialogs.ycp?rev=64378&r1=64377&r2=64378&view=diff
> ==============================================================================
> --- trunk/sshd/src/dialogs.ycp (original)
> +++ trunk/sshd/src/dialogs.ycp Wed Jun 15 10:47:50 2011
> @@ -28,6 +28,15 @@
>      mbox_y = 0;
>  }
>  
> +term ServiceConfigurationDialogContent () {
> +    return `VBox (
> +     "start_stop",
> +     `VSpacing(1),
> +     "auto_start_up",
> +     `VStretch()
> +    );
> +}
> +
>  term ServerConfigurationDialogContent () {
>      return `VBox (
>       `Left(`Label(_("SSHD TCP Ports"))),
> @@ -45,7 +54,7 @@
>                   /* a push button */
>                   `PushButton(`id("delete_port"), _("&Delete"))
>               )),
> -             `VSpacing(1),
> +             `VSpacing (1),
>               `Frame (
>                   /* a dialog frame caption */
>                   _("Server Features"),
> 
> Modified: trunk/sshd/src/wizards.ycp
> URL: 
> http://svn.opensuse.org/viewcvs/yast/trunk/sshd/src/wizards.ycp?rev=64378&r1=64377&r2=64378&view=diff
> ==============================================================================
> --- trunk/sshd/src/wizards.ycp (original)
> +++ trunk/sshd/src/wizards.ycp Wed Jun 15 10:47:50 2011
> @@ -14,10 +14,20 @@
>  import "CWM";
>  import "CWMTab";
>  import "CWMFirewallInterfaces";
> +import "CWMServiceStart";
> +import "Sshd";
>  
>  include "sshd/complex.ycp";
>  include "sshd/dialogs.ycp";
>  
> +void SaveAndRestart () {
> +    Wizard::CreateDialog ();
> +    Wizard::RestoreHelp (HELPS["write"]:"");
> +    Sshd::Write ();
> +    sleep (1000);
> +    UI::CloseDialog ();
> +}
> +
>  /**
>   * Main workflow of the sshd configuration
>   * @return sequence result
> @@ -52,9 +62,49 @@
>           "services" : [ "service:sshd" ],
>           "display_details" : true,
>       ]),
> +     "start_stop" : CWMServiceStart::CreateStartStopWidget ($[
> +         "service_id" : "sshd",
> +         // label - service status, informative text
> +         "service_running_label" : _("SSH server is running"),
> +         // label - service status, informative text
> +         "service_not_running_label" : _("SSH server is not running"),
> +         // push button (SSH service handling)
> +         "start_now_button" : _("&Start SSH Server Now"),
> +         // push button (SSH service handling)
> +         "stop_now_button" : _("S&top SSH Server Now"),
> +         "save_now_action" : SaveAndRestart,
> +         // push button (SSH service handling)
> +         "save_now_button" : _("Save Settings and Reload SSH Server &Now"),
> +         "help" : sformat (CWMServiceStart::StartStopHelpTemplate (true),
> +         // part of help text, used to describe pusbuttons (matching SSH 
> service handling but without "&")
> +         _("Start SSH Server Now"),
> +         // part of help text, used to describe pusbuttons (matching SSH 
> service handling but without "&")
> +         _("Stop SSH Server Now"),
> +         // part of help text, used to describe pusbuttons (matching SSH 
> service handling but without "&")
> +         _("Save Settings and Reload SSH Server Now")),
> +     ]),
> +     "auto_start_up" : CWMServiceStart::CreateAutoStartWidget ($[
> +         "get_service_auto_start" : Sshd::GetStartService,
> +         "set_service_auto_start" : Sshd::SetStartService,
> +         // radio button (starting SSH service - option 1)
> +         "start_auto_button" : _("Now and When &Booting"),
> +         // radio button (starting SSH service - option 2)
> +         "start_manual_button" : _("&Manually"),
> +         "help" : sformat (CWMServiceStart::AutoStartHelpTemplate (),
> +             // part of help text, used to describe radiobuttons (matching 
> starting SSH service but without "&")
> +             _("Now and When Booting"),
> +             // part of help text, used to describe radiobuttons (matching 
> starting SSH service but without "&")
> +             _("Manually")
> +         ),
> +     ]),

Hmm, when I saw 'import "CWMServiceStart"' above, I thought "good,
that will save us so much repetitive code" :-/

Overall... God, so much code for a stupid totally standard sysvinit
service?! I want a simple declaration to replace this *entire*
patch:

  service :name => _("SSH Server"), :sysvinit => "sshd"

We really should make better libraries.

>      ];
>  
>      map <string, any> tabs = $[
> +     "service_configuration" : $[
> +         "header" : _("&Start-Up"),
> +         "widget_names" : ["start_stop", "auto_start_up"],
> +         "contents" : ServiceConfigurationDialogContent(),
> +     ],
>       "server_configuration" : $[
>           "header" : _("&General"),
>           "widget_names" : ["sc", "fw"],
> @@ -74,7 +124,7 @@
>  
>      map <string, any> wd = $[
>       "tab" : CWMTab::CreateWidget ($[
> -         "tab_order" : ["server_configuration", "login_settings", 
> "proto_and_cipher"],
> +         "tab_order" : ["service_configuration", "server_configuration", 
> "login_settings", "proto_and_cipher"],
>           "tabs" : tabs,
>           "widget_descr" : widgets,
>           "initial_tab" : "server_configuration",
> 
> -- 
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
-- 
Martin Vidner, YaST developer
http://en.opensuse.org/User:Mvidner

Kuracke oddeleni v restauraci je jako fekalni oddeleni v bazenu

Attachment: pgpJoZSjfuRw6.pgp
Description: PGP signature

Reply via email to