1 // ========================================================================
2 // Copyright 2002-2005 Mort Bay Consulting Pty. Ltd.
3 // ------------------------------------------------------------------------
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 // ========================================================================
14 
15 package org.mortbay.setuid;
16 
17 import java.io.File;
18 
19 
20 /**
21  * Class is for changing user and groupId, it can also be use to retrieve user information by using getpwuid(uid) or getpwnam(username) of both linux and unix systems
22  * @author Greg Wilkins
23  * @author Leopoldo Lee Agdeppa III
24  */
25 
26 public class SetUID
27 {
28     public static final int OK = 0;
29     public static final int ERROR = -1;
30 
setumask(int mask)31     public static native int setumask(int mask);
setuid(int uid)32     public static native int setuid(int uid);
setgid(int gid)33     public static native int setgid(int gid);
34 
getpwnam(String name)35     public static native Passwd getpwnam(String name) throws SecurityException;
getpwuid(int uid)36     public static native Passwd getpwuid(int uid) throws SecurityException;
37 
getgrnam(String name)38     public static native Group getgrnam(String name) throws SecurityException;
getgrgid(int gid)39     public static native Group getgrgid(int gid) throws SecurityException;
40 
loadLibrary()41     private static void loadLibrary()
42     {
43         // load libjettysetuid.so ${jetty.libsetuid.path}
44         try
45         {
46             if(System.getProperty("jetty.libsetuid.path") != null)
47             {
48                 File lib = new File(System.getProperty("jetty.libsetuid.path"));
49                 if(lib.exists())
50                 {
51                     System.load(lib.getCanonicalPath());
52                 }
53                 return;
54             }
55 
56         }
57         catch (Throwable e)
58         {
59            //Ignorable if there is another way to find the lib
60         }
61 
62         try
63         {
64             System.loadLibrary("libsetuid");
65             return;
66         }
67         catch (Throwable e)
68         {
69            //Ignorable if ther eis another way to find the lib
70         }
71 
72         // try to load from usual path @ jetty.home/lib/ext
73         try
74         {
75             if(System.getProperty("jetty.home") != null)
76             {
77                 File lib = new File(System.getProperty("jetty.home") + "/lib/ext/libsetuid.so");
78                 if(lib.exists())
79                 {
80                     System.load(lib.getCanonicalPath());
81                 }
82                 return;
83             }
84 
85         }
86         catch (Throwable e)
87         {
88 
89         }
90 
91         // try to load from jetty.lib where rpm puts this file
92         try
93         {
94             if(System.getProperty("jetty.lib") != null)
95             {
96                 File lib = new File(System.getProperty("jetty.lib") + "/libsetuid.so");
97                 if(lib.exists())
98                 {
99                     System.load(lib.getCanonicalPath());
100                 }
101                 return;
102             }
103 
104         }
105         catch (Throwable e)
106         {
107         }
108 
109         System.err.println("Error: libsetuid.so could not be found");
110     }
111 
112 
113     static
114     {
loadLibrary()115     	loadLibrary();
116     }
117 
118 }
119