Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package yast2-firstboot for openSUSE:Factory 
checked in at 2021-07-02 13:26:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-firstboot (Old)
 and      /work/SRC/openSUSE:Factory/.yast2-firstboot.new.2625 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "yast2-firstboot"

Fri Jul  2 13:26:32 2021 rev:105 rq:903243 version:4.4.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-firstboot/yast2-firstboot.changes  
2021-05-20 19:23:15.538394182 +0200
+++ 
/work/SRC/openSUSE:Factory/.yast2-firstboot.new.2625/yast2-firstboot.changes    
    2021-07-02 13:26:48.101070357 +0200
@@ -1,0 +2,6 @@
+Thu Jun 17 07:43:12 UTC 2021 - David Diaz <dgonza...@suse.com>
+
+- Adapt code to Y2Users (part of jsc#PM-2620).
+- 4.4.2
+
+-------------------------------------------------------------------

Old:
----
  yast2-firstboot-4.4.1.tar.bz2

New:
----
  yast2-firstboot-4.4.2.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ yast2-firstboot.spec ++++++
--- /var/tmp/diff_new_pack.fn1gha/_old  2021-07-02 13:26:48.577066664 +0200
+++ /var/tmp/diff_new_pack.fn1gha/_new  2021-07-02 13:26:48.581066633 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-firstboot
-Version:        4.4.1
+Version:        4.4.2
 Release:        0
 Summary:        YaST2 - Initial System Configuration
 License:        GPL-2.0-only

++++++ yast2-firstboot-4.4.1.tar.bz2 -> yast2-firstboot-4.4.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-firstboot-4.4.1/README.md 
new/yast2-firstboot-4.4.2/README.md
--- old/yast2-firstboot-4.4.1/README.md 2021-05-19 17:22:27.000000000 +0200
+++ new/yast2-firstboot-4.4.2/README.md 2021-06-30 15:47:16.000000000 +0200
@@ -60,4 +60,4 @@
 
 If you have any question, feel free to ask at the [development mailing
 list](http://lists.opensuse.org/yast-devel/) or at the
-[#yast](https://webchat.freenode.net/?channels=%23yast) IRC channel on 
freenode.
+[#yast](https://web.libera.chat/#yast) IRC channel on libera.chat.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-firstboot-4.4.1/package/yast2-firstboot.changes 
new/yast2-firstboot-4.4.2/package/yast2-firstboot.changes
--- old/yast2-firstboot-4.4.1/package/yast2-firstboot.changes   2021-05-19 
17:22:27.000000000 +0200
+++ new/yast2-firstboot-4.4.2/package/yast2-firstboot.changes   2021-06-30 
15:47:16.000000000 +0200
@@ -1,4 +1,10 @@
 -------------------------------------------------------------------
+Thu Jun 17 07:43:12 UTC 2021 - David Diaz <dgonza...@suse.com>
+
+- Adapt code to Y2Users (part of jsc#PM-2620).
+- 4.4.2
+
+-------------------------------------------------------------------
 Sun May 16 08:11:46 UTC 2021 - Dirk M??ller <dmuel...@suse.com>
 
 - only list specific files installed in common directories (metainfo,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/yast2-firstboot-4.4.1/package/yast2-firstboot.spec 
new/yast2-firstboot-4.4.2/package/yast2-firstboot.spec
--- old/yast2-firstboot-4.4.1/package/yast2-firstboot.spec      2021-05-19 
17:22:27.000000000 +0200
+++ new/yast2-firstboot-4.4.2/package/yast2-firstboot.spec      2021-06-30 
15:47:16.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           yast2-firstboot
-Version:        4.4.1
+Version:        4.4.2
 Release:        0
 Summary:        YaST2 - Initial System Configuration
 License:        GPL-2.0-only
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-firstboot-4.4.1/src/lib/y2firstboot/clients/hostname.rb 
new/yast2-firstboot-4.4.2/src/lib/y2firstboot/clients/hostname.rb
--- old/yast2-firstboot-4.4.1/src/lib/y2firstboot/clients/hostname.rb   
2021-05-19 17:22:27.000000000 +0200
+++ new/yast2-firstboot-4.4.2/src/lib/y2firstboot/clients/hostname.rb   
2021-06-30 15:47:16.000000000 +0200
@@ -88,13 +88,17 @@
 
     private
 
+      def really_abort_inst
+        Popup.ConfirmAbort(:incomplete)
+      end
+
       def hostname_dialog
         @hn_settings = InitSettings()
 
         functions = {
           "init"  => fun_ref(method(:InitHnWidget), "void (string)"),
           "store" => fun_ref(method(:StoreHnWidget), "void (string, map)"),
-          :abort  => fun_ref(method(:ReallyAbortInst), "boolean ()")
+          :abort  => fun_ref(method(:really_abort_inst), "boolean ()")
         }
         contents = HSquash(
           # Frame label
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-firstboot-4.4.1/src/lib/y2firstboot/clients/root.rb 
new/yast2-firstboot-4.4.2/src/lib/y2firstboot/clients/root.rb
--- old/yast2-firstboot-4.4.1/src/lib/y2firstboot/clients/root.rb       
2021-05-19 17:22:27.000000000 +0200
+++ new/yast2-firstboot-4.4.2/src/lib/y2firstboot/clients/root.rb       
2021-06-30 15:47:16.000000000 +0200
@@ -21,17 +21,56 @@
 # To contact SUSE LLC about this file by physical or electronic mail, you may
 # find current contact information at www.suse.com.
 
-require "users/dialogs/inst_root_first"
-Yast.import "UsersSimple"
+require "y2users/password"
+require "y2users/linux/writer"
+require "y2users/config_manager"
+require "y2users/clients/inst_root_first"
 
 module Y2Firstboot
   module Clients
-    # Client to set the root password
-    class Root < Yast::Client
+    # Client for setting the root password
+    class Root < Y2Users::Clients::InstRootFirst
+      # Overload Y2Users::Clients::InstRootFirst#run to wipe the encrypted 
password
+      # @see #reset_password
       def run
-        dialog_result = Yast::InstRootFirstDialog.new.run
-        Yast::UsersSimple.Write if dialog_result == :next
-        dialog_result
+        reset_password
+
+        super
+      end
+
+    private
+
+      # Wipes encrypted password
+      #
+      # @note This method can be considered a sort of workaround for supporting
+      # as much as possible a "clean" navigation through the Firstboot dialogs
+      # when going back and forward (just in case the admin decides to offer
+      # such a feature), EVEN THOUGH is not the intended behavior since
+      # Firstboot clients perform changes in the running system right away.
+      def reset_password
+        return unless root_user.password&.value&.encrypted?
+
+        root_user.password = Y2Users::Password.create_plain("")
+      end
+
+      # Updates the target configuration and writes it to the system
+      #
+      # @see Y2Users::Clients::InstRootFirst#update_target_config
+      def update_target_config
+        super
+
+        writer = Y2Users::Linux::Writer.new(
+          Y2Users::ConfigManager.instance.target,
+          Y2Users::ConfigManager.instance.system
+        )
+        writer.write
+      end
+
+      # System config, which contains all the current users on the system
+      #
+      # @return [Y2Users::Config]
+      def config
+        @config ||= Y2Users::ConfigManager.instance.system(force_read: 
true).copy
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-firstboot-4.4.1/src/lib/y2firstboot/clients/user.rb 
new/yast2-firstboot-4.4.2/src/lib/y2firstboot/clients/user.rb
--- old/yast2-firstboot-4.4.1/src/lib/y2firstboot/clients/user.rb       
2021-05-19 17:22:27.000000000 +0200
+++ new/yast2-firstboot-4.4.2/src/lib/y2firstboot/clients/user.rb       
2021-06-30 15:47:16.000000000 +0200
@@ -21,34 +21,76 @@
 # To contact SUSE LLC about this file by physical or electronic mail, you may
 # find current contact information at www.suse.com.
 
+require "y2users/password"
+require "y2users/linux/writer"
+require "y2users/config_manager"
 require "users/dialogs/inst_user_first"
+
 Yast.import "Users"
-Yast.import "UsersSimple"
 Yast.import "Progress"
 
 module Y2Firstboot
   module Clients
-    # Client to set up the first user
+    # Client to set up the first user during the firstboot mode
     class User < Yast::Client
-      def initialize
-        Yast.include self, "users/routines.rb"
+      class << self
+        # @return [String, nil] the username of the created/edited user as a
+        # result of the execution of this client, if any. Needed for retrieving
+        # the user when going back and forward. See {#user}
+        attr_accessor :username
       end
 
       def run
-        dialog = Yast::InstUserFirstDialog.new
-        dialog_result = dialog.run
-        if dialog_result == :next && dialog.action == :new_user
-          # Change root password if needed
-          Yast::UsersSimple.Write
-          # Create user
-          if setup_all_users
-            # Do not mess with the progress indicator
-            orig = Yast::Progress.set(false)
-            Yast::Users.Write
-            Yast::Progress.set(orig)
-          end
-        end
-        dialog_result
+        reset_password
+
+        result = Yast::InstUserFirstDialog.new(config, user: user).run
+
+        write_config if result == :next
+
+        # Updates the username reference. See {#user}
+        self.class.username = user.attached? ? user.name : nil
+
+        result
+      end
+
+    private
+
+      # Wipes encrypted password
+      #
+      # @note This method can be considered a sort of workaround for supporting
+      # as much as possible a "clean" navigation through the Firstboot dialogs
+      # when going back and forward (just in case the admin decides to offer
+      # such a feature), EVEN THOUGH is not the intended behavior since
+      # Firstboot clients perform changes in the running system right away.
+      def reset_password
+        return unless user.password&.value&.encrypted?
+
+        user.password = Y2Users::Password.create_plain("")
+      end
+
+      # Writes config to the system
+      def write_config
+        writer = Y2Users::Linux::Writer.new(
+          config,
+          Y2Users::ConfigManager.instance.system
+        )
+
+        writer.write
+      end
+
+      # A copy of config holding all the users on the system
+      #
+      # @return [Y2Users::Config]
+      def config
+        @config ||= Y2Users::ConfigManager.instance.system(force_read: 
true).copy
+      end
+
+      # The user to be created/edited
+      #
+      # @return [Y2Users::User]
+      def user
+        @user ||= config.users.by_name(self.class.username) if 
self.class.username
+        @user ||= Y2Users::User.new("")
       end
     end
   end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-firstboot-4.4.1/test/y2firstboot/clients/root_test.rb 
new/yast2-firstboot-4.4.2/test/y2firstboot/clients/root_test.rb
--- old/yast2-firstboot-4.4.1/test/y2firstboot/clients/root_test.rb     
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-firstboot-4.4.2/test/y2firstboot/clients/root_test.rb     
2021-06-30 15:47:16.000000000 +0200
@@ -0,0 +1,111 @@
+#!/usr/bin/env rspec
+# Copyright (c) [2018] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require_relative "../../test_helper"
+require "y2firstboot/clients/root"
+
+describe Y2Firstboot::Clients::Root do
+  subject(:client) { described_class.new }
+
+  let(:inst_root_dialog) { instance_double(Yast::InstRootFirstDialog, run: 
result) }
+  let(:result)           { :next }
+
+  let(:writer) { instance_double(Y2Users::Linux::Writer, write: []) }
+
+  let(:target_config)      { Y2Users::Config.new }
+  let(:system_config)      { Y2Users::Config.new }
+  let(:system_config_copy) { Y2Users::Config.new }
+  let(:config_manager)     { Y2Users::ConfigManager.instance }
+  let(:root_user)          { Y2Users::User.create_root }
+  let(:root_password)      { nil }
+
+  before do
+    root_user.password = root_password
+    allow(Yast::InstRootFirstDialog).to 
receive(:new).and_return(inst_root_dialog)
+
+    allow(Y2Users::Linux::Writer).to receive(:new).and_return(writer)
+
+    system_config_copy.attach([root_user])
+    allow(system_config).to receive(:copy).and_return(system_config_copy)
+    allow(config_manager).to receive(:target).and_return(target_config)
+    allow(config_manager).to receive(:system).and_return(system_config)
+  end
+
+  describe "#run" do
+    context "when root user has an encrypted password" do
+      let(:root_password) { Y2Users::Password.create_encrypted("s3cr3t") }
+
+      it "resets the root password" do
+        expect(root_user.password.value).to be_encrypted
+
+        subject.run
+
+        expect(root_user.password.value).to_not be_encrypted
+        expect(root_user.password_content).to be_empty
+      end
+    end
+
+    context "when root user has a plain password" do
+      let(:root_password) { Y2Users::Password.create_plain("s3cr3t") }
+
+      it "does not reset the root password" do
+        expect(root_user.password_content).to eq("s3cr3t")
+
+        subject.run
+
+        expect(root_user.password_content).to eq("s3cr3t")
+      end
+    end
+
+    context "when inst_root_dialog result is :next" do
+      let(:result) { :next }
+
+      it "updates users target configuration" do
+        expect(config_manager).to receive(:target=).with(system_config_copy)
+
+        subject.run
+      end
+
+      it "writes the target users configuration" do
+        expect(Y2Users::Linux::Writer).to receive(:new).with(target_config, 
system_config)
+        expect(writer).to receive(:write)
+
+        subject.run
+      end
+    end
+
+    context "when inst_root_dialog result is not :next" do
+      let(:result) { :back }
+
+      it "does not update users target configuration" do
+        expect(config_manager).to_not receive(:target=)
+
+        subject.run
+      end
+
+      it "does not write users configuration" do
+        expect(Y2Users::Linux::Writer).to_not receive(:new)
+        expect(writer).to_not receive(:write)
+
+        subject.run
+      end
+    end
+  end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/yast2-firstboot-4.4.1/test/y2firstboot/clients/user_test.rb 
new/yast2-firstboot-4.4.2/test/y2firstboot/clients/user_test.rb
--- old/yast2-firstboot-4.4.1/test/y2firstboot/clients/user_test.rb     
1970-01-01 01:00:00.000000000 +0100
+++ new/yast2-firstboot-4.4.2/test/y2firstboot/clients/user_test.rb     
2021-06-30 15:47:16.000000000 +0200
@@ -0,0 +1,133 @@
+#!/usr/bin/env rspec
+# Copyright (c) [2018] SUSE LLC
+#
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of version 2 of the GNU General Public License as published
+# by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, contact SUSE LLC.
+#
+# To contact SUSE LLC about this file by physical or electronic mail, you may
+# find current contact information at www.suse.com.
+
+require_relative "../../test_helper"
+require "y2firstboot/clients/user"
+
+describe Y2Firstboot::Clients::User do
+  subject(:client) { described_class.new }
+
+  describe "#run" do
+    let(:dialog) { instance_double(Yast::InstUserFirstDialog, run: result) }
+    let(:result) { :next }
+
+    let(:user)     { Y2Users::User.new(username) }
+    let(:username) { "chamaleon" }
+    let(:password) { nil }
+    let(:attached) { false }
+
+    let(:system_config)      { Y2Users::Config.new }
+    let(:system_config_copy) { Y2Users::Config.new }
+    let(:config_manager)     { Y2Users::ConfigManager.instance }
+
+    let(:writer) { instance_double(Y2Users::Linux::Writer, write: []) }
+
+    before do
+      user.password = password
+      system_config_copy.attach([user])
+
+      allow(Yast::InstUserFirstDialog).to receive(:new).and_return(dialog)
+
+      allow(Y2Users::Linux::Writer).to receive(:new).and_return(writer)
+
+      allow(subject).to receive(:user).and_return(user)
+      allow(user).to receive(:attached?).and_return(attached)
+
+      allow(system_config).to receive(:copy).and_return(system_config_copy)
+      allow(config_manager).to receive(:system).and_return(system_config)
+    end
+
+    context "when user has an encrypted password" do
+      let(:password) { Y2Users::Password.create_encrypted("s3cr3t") }
+
+      it "resets the user password" do
+        expect(user.password.value).to be_encrypted
+
+        subject.run
+
+        expect(user.password.value).to_not be_encrypted
+        expect(user.password_content).to be_empty
+      end
+    end
+
+    context "when user has a plain password" do
+      let(:password) { Y2Users::Password.create_plain("s3cr3t") }
+
+      it "does not reset the user password" do
+        expect(user.password_content).to eq("s3cr3t")
+
+        subject.run
+
+        expect(user.password_content).to eq("s3cr3t")
+      end
+    end
+
+    it "executes the inst_user_first dialog" do
+      expect(Yast::InstUserFirstDialog).to 
receive(:new).with(system_config_copy, user: user)
+      expect(dialog).to receive(:run)
+
+      subject.run
+    end
+
+    it "returns the dialog result" do
+      expect(subject.run).to eq(result)
+    end
+
+    context "when dialog result is :next" do
+      it "writes the users configuration" do
+        expect(Y2Users::Linux::Writer).to 
receive(:new).with(system_config_copy, system_config)
+        expect(writer).to receive(:write)
+
+        subject.run
+      end
+    end
+
+    context "when dialog result is not :next" do
+      let(:result) { :back }
+
+      it "does not write the users configuration" do
+        expect(Y2Users::Linux::Writer).to_not receive(:new)
+        expect(writer).to_not receive(:write)
+
+        subject.run
+      end
+    end
+
+    context "if user is attached" do
+      let(:attached) { true }
+
+      it "saves the username for future reference" do
+        expect(described_class).to receive(:username=).with(username)
+
+        subject.run
+      end
+    end
+
+    context "if user is not attached" do
+      let(:attached) { false }
+
+      it "deletes username reference" do
+        expect(described_class).to receive(:username=).with(nil)
+
+        subject.run
+      end
+    end
+  end
+end

Reply via email to