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