]> code.delx.au - pulseaudio/blobdiff - polyp/caps.c
Make the whole stuff LGPL only
[pulseaudio] / polyp / caps.c
index db00c604b94f4f5014a855610bed3da089c3074e..daf0b91680a2e357fd3de1d9efdc9d2d930acca0 100644 (file)
@@ -4,7 +4,7 @@
   This file is part of polypaudio.
  
   polypaudio is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published
+  it under the terms of the GNU Lesser General Public License as published
   by the Free Software Foundation; either version 2 of the License,
   or (at your option) any later version.
  
@@ -13,7 +13,7 @@
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   General Public License for more details.
  
-  You should have received a copy of the GNU General Public License
+  You should have received a copy of the GNU Lesser General Public License
   along with polypaudio; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   USA.
 #include "caps.h"
 
 void pa_drop_root(void) {
-    if (getuid() != 0 && geteuid() == 0) {
-        pa_log(__FILE__": Started SUID root, dropping root rights.\n");
-        setuid(getuid());
-        seteuid(getuid());
-    }
+    uid_t uid = getuid();
+    
+    if (uid == 0 || geteuid() != 0)
+        return;
+    
+    pa_log(__FILE__": dropping root rights.\n");
+    
+    setreuid(uid, uid);
+/*    setuid(uid);
+    seteuid(uid);*/
 }
 
 #ifdef HAVE_SYS_CAPABILITY_H
+
 int pa_limit_caps(void) {
     int r = -1;
     cap_t caps;
@@ -53,14 +59,15 @@ int pa_limit_caps(void) {
     assert(caps);
 
     cap_clear(caps);
+
     cap_set_flag(caps, CAP_EFFECTIVE, 1, &nice_cap, CAP_SET);
     cap_set_flag(caps, CAP_PERMITTED, 1, &nice_cap, CAP_SET);
 
     if (cap_set_proc(caps) < 0)
         goto fail;
 
-    pa_log(__FILE__": Started SUID root, capabilities limited.\n");
-
+    pa_log(__FILE__": dropped capabilities successfully.\n");
+    
     r = 0;
 
 fail:
@@ -78,10 +85,10 @@ int pa_drop_caps(void) {
 
     cap_clear(caps);
 
-    if (cap_set_proc(caps) < 0)
+    if (cap_set_proc(caps) < 0) {
+        pa_log(__FILE__": failed to drop capabilities: %s\n", strerror(errno));
         goto fail;
-
-    pa_drop_root();
+    }
     
     r = 0;