From 936bb2161e56dcca5b93dab8bcfe579dc8cdf84a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20Gali=C4=87?= Date: Thu, 16 Oct 2014 13:59:25 +0200 Subject: [PATCH] replace su with Puppet::Util::Execution.execute `Puppet::Util::Execution` should be slightly more future-safe and platform independent than `su`. this should fix #80, in a more reliable way than #97 does. --- lib/puppet/provider/rbenvgem/default.rb | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/puppet/provider/rbenvgem/default.rb b/lib/puppet/provider/rbenvgem/default.rb index 347a0b9..3194c0f 100644 --- a/lib/puppet/provider/rbenvgem/default.rb +++ b/lib/puppet/provider/rbenvgem/default.rb @@ -1,8 +1,6 @@ Puppet::Type.type(:rbenvgem).provide :default do desc "Maintains gems inside an RBenv setup" - commands :su => 'su' - def install args = ['install', '--no-rdoc', '--no-ri'] args << "-v#{resource[:ensure]}" if !resource[:ensure].kind_of?(Symbol) @@ -30,8 +28,20 @@ def gem_name end def gem(*args) - exe = "RBENV_VERSION=#{resource[:ruby]} " + resource[:rbenv] + '/bin/gem' - su('-', resource[:user], '-c', [exe, *args].join(' ')) + require 'etc' + user = resource[:user] + home = Etc.getpwnam(user)[:dir] + + exe = "#{resource[:rbenv]}/bin/gem" + + Puppet::Util::Execution.execute([exe, *args].join(' '), + :uid => user, + :failonfail => true, + :custom_environment => { + 'HOME' => home, + 'RBENV_VERSION' => resource[:ruby], + } + ) end def list(where = :local)