OSDN Git Service

Replaced mongrel with thin
[redminele/redminele.git] / ruby / lib / ruby / gems / 1.8 / gems / daemons-1.1.4 / lib / daemons / change_privilege.rb
diff --git a/ruby/lib/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/change_privilege.rb b/ruby/lib/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/change_privilege.rb
new file mode 100644 (file)
index 0000000..34f02e6
--- /dev/null
@@ -0,0 +1,19 @@
+require 'daemons/etc_extension'
+
+class CurrentProcess
+  def self.change_privilege(user, group=user)
+    puts "Changing process privilege to #{user}:#{group}"
+  
+    uid, gid = Process.euid, Process.egid
+    target_uid = Etc.getpwnam(user).uid
+    target_gid = Etc.getgrnam(group).gid
+
+    if uid != target_uid || gid != target_gid
+      Process.initgroups(user, target_gid)
+      Process::GID.change_privilege(target_gid)
+      Process::UID.change_privilege(target_uid)
+    end
+  rescue Errno::EPERM => e
+    raise "Couldn't change user and group to #{user}:#{group}: #{e}"
+  end
+end
\ No newline at end of file