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