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
31 public static native int setumask(int mask);
32 public static native int setuid(int uid);
33 public static native int setgid(int gid);
34
35 public static native Passwd getpwnam(String name) throws SecurityException;
36 public static native Passwd getpwuid(int uid) throws SecurityException;
37
38 public static native Group getgrnam(String name) throws SecurityException;
39 public static native Group getgrgid(int gid) throws SecurityException;
40
41 public static native RLimit getrlimitnofiles();
42 public static native int setrlimitnofiles(RLimit rlimit);
43
44 private static void loadLibrary()
45 {
46 // load libjettysetuid.so ${jetty.libsetuid.path}
47 try
48 {
49 if(System.getProperty("jetty.libsetuid.path") != null)
50 {
51 File lib = new File(System.getProperty("jetty.libsetuid.path"));
52 if(lib.exists())
53 {
54 System.load(lib.getCanonicalPath());
55 }
56 return;
57 }
58
59 }
60 catch (Throwable e)
61 {
62 //Ignorable if there is another way to find the lib
63 if (Boolean.valueOf(System.getProperty("DEBUG")).booleanValue())
64 e.printStackTrace();
65 }
66
67 try
68 {
69 System.loadLibrary("setuid");
70 return;
71 }
72 catch (Throwable e)
73 {
74 //Ignorable if ther eis another way to find the lib
75 if (Boolean.valueOf(System.getProperty("DEBUG")).booleanValue())
76 e.printStackTrace();
77 }
78
79 // try to load from usual path @ jetty.home/lib/ext
80 try
81 {
82 if(System.getProperty("jetty.home") != null)
83 {
84 File lib = new File(System.getProperty("jetty.home") + "/lib/ext/libsetuid.so");
85 if(lib.exists())
86 {
87 System.load(lib.getCanonicalPath());
88 }
89 return;
90 }
91
92 }
93 catch (Throwable e)
94 {
95 if (Boolean.valueOf(System.getProperty("DEBUG")).booleanValue())
96 e.printStackTrace();
97 }
98
99 // try to load from jetty.lib where rpm puts this file
100 try
101 {
102 if(System.getProperty("jetty.lib") != null)
103 {
104 File lib = new File(System.getProperty("jetty.lib") + "/libsetuid.so");
105 if(lib.exists())
106 {
107 System.load(lib.getCanonicalPath());
108 }
109 return;
110 }
111
112 }
113 catch (Throwable e)
114 {
115 if (Boolean.valueOf(System.getProperty("DEBUG")).booleanValue())
116 e.printStackTrace();
117 }
118
119 System.err.println("Error: libsetuid.so could not be found");
120 }
121
122
123 static
124 {
125 loadLibrary();
126 }
127
128 }