Sha256: 33acafb74bb3156cc857fc35668f97df5e0aa83a2860427c5a5b090b0dbbf401

Contents?: true

Size: 1.53 KB

Versions: 3

Compression:

Stored size: 1.53 KB

Contents

require 'shellwords'

module NexusSW
  module LXD
    class Transport
      module Mixins
        module Helpers
          module UsersMixin
            def user(user_nameorid, options = {})
              return unless user_nameorid
              passwd = read_file options[:passwd_file] || '/etc/passwd'

              # rework into .split(':') if this gets more complicated
              @uid = user_nameorid.is_a?(String) ? passwd[/^#{user_nameorid}:[^:]*:([^:]*):/, 1] : user_nameorid
              @username = user_nameorid.is_a?(String) ? user_nameorid : passwd[/^([^:]*):[^:]*:#{user_nameorid}:/, 1]
              raise "User not found (#{user_nameorid}) while attempting to set transport identity" unless @uid && @username

              # gotcha: we're always setting the default group here, but it's changeable by the user, afterwards
              # so if `user` gets called again, and the caller wants an alternative gid, the caller will need to re-set the gid
              @gid = passwd[/^[^:]*:[^:]*:#{uid}:([^:]*):/, 1]
            end

            attr_accessor :file_mode, :gid
            attr_reader :uid, :username

            def reset_user
              @username = @uid = @gid = nil
            end

            private

            def runas_command(command, options = {})
              uname = options[:runas] || username
              return command unless uname
              command = command.shelljoin if command.is_a? Array
              ['su', uname, '-c', command]
            end
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lxd-common-0.9.8 lib/nexussw/lxd/transport/mixins/helpers/users.rb
lxd-common-0.9.7 lib/nexussw/lxd/transport/mixins/helpers/users.rb
lxd-common-0.9.6 lib/nexussw/lxd/transport/mixins/helpers/users.rb