# class Chef::Provider::User::Pw

### Public Instance Methods

check_lock() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 51
    def check_lock
      case @current_resource.password
      when /^\*LOCKED\*/
        @locked = true
      else
        @locked = false
      end
      @locked
    end

create_user() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 31
    def create_user
      command = "pw useradd"
      command << set_options
      run_command(:command => command)
      modify_password
    end

load_current_resource() click to toggle source
Calls superclass method Chef::Provider::User#load_current_resource

    # File lib/chef/provider/user/pw.rb, line 26
    def load_current_resource
      super
      raise Chef::Exceptions::User, "Could not find binary /usr/sbin/pw for #{@new_resource}" unless ::File.exists?("/usr/sbin/pw")
    end

lock_user() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 61
    def lock_user
      run_command(:command => "pw lock #{@new_resource.username}")
    end

manage_user() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 38
    def manage_user
      command = "pw usermod"
      command << set_options
      run_command(:command => command)
      modify_password
    end

modify_password() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 95
    def modify_password
      if @current_resource.password != @new_resource.password
        Chef::Log.debug("#{new_resource} updating password")
        command = "pw usermod #{@new_resource.username} -H 0"
        status = popen4(command, :waitlast => true) do |pid, stdin, stdout, stderr|
          stdin.puts "#{@new_resource.password}"
        end

        unless status.exitstatus == 0
          raise Chef::Exceptions::User, "pw failed - #{status.inspect}!"
        end
      else
        Chef::Log.debug("#{new_resource} no change needed to password")
      end
    end

remove_user() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 45
    def remove_user
      command = "pw userdel #{@new_resource.username}"
      command << " -r" if @new_resource.supports[:manage_home]
      run_command(:command => command)
    end

set_options() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 69
    def set_options
      opts = " #{@new_resource.username}"

      field_list = {
        'comment' => "-c",
        'home' => "-d",
        'gid' => "-g",
        'uid' => "-u",
        'shell' => "-s"
      }
      field_list.sort{ |a,b| a[0] <=> b[0] }.each do |field, option|
        field_symbol = field.to_sym
        if @current_resource.send(field_symbol) != @new_resource.send(field_symbol)
          if @new_resource.send(field_symbol)
            Chef::Log.debug("#{@new_resource} setting #{field} to #{@new_resource.send(field_symbol)}")
            opts << " #{option} '#{@new_resource.send(field_symbol)}'"
          end
        end
      end
      if @new_resource.supports[:manage_home]
        Chef::Log.debug("#{@new_resource} is managing the users home directory")
        opts << " -m"
      end
      opts
    end

unlock_user() click to toggle source

    # File lib/chef/provider/user/pw.rb, line 65
    def unlock_user
      run_command(:command => "pw unlock #{@new_resource.username}")
    end