Sha256: b6989c22f2e92db7acd266a8f08d7de1f9767e47637717b5e45e2a1448f7a768

Contents?: true

Size: 1.03 KB

Versions: 8

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

require 'fusuma/custom_process'
require 'etc'

module Fusuma
  module Plugin
    module Appmatcher
      class UserSwitcher
        include CustomProcess
        User = Struct.new(:username, :uid, :gid)
        def initialize
          username = ENV['SUDO_USER'] || Etc.getlogin
          uid = `id -u #{username}`.chomp.to_i
          gid = `id -g #{username}`.chomp.to_i
          @login_user = User.new(username, uid, gid)
        end

        # Drops privileges to that of the specified user
        def drop_priv(user)
          # Process.initgroups(user.username, user.gid)
          Process::Sys.setegid(user.gid)
          Process::Sys.setgid(user.gid)
          Process::Sys.setuid(user.uid)
        end

        # Execute the provided block in a child process as the specified user
        # The parent blocks until the child finishes.
        def as_user(user = @login_user)
          fork do
            drop_priv(user)
            yield(user) if block_given?
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
fusuma-plugin-appmatcher-0.1.6 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.5 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.4 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.3 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.2 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.1 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.0 lib/fusuma/plugin/appmatcher/user_switcher.rb
fusuma-plugin-appmatcher-0.1.0.pre2 lib/fusuma/plugin/appmatcher/user_switcher.rb