View Javadoc

    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      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     {
    115     	loadLibrary();
    116     }
    117
    118 }