// ======================================================================== // Copyright 2002-2005 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ======================================================================== /** * JUnit test for SetUID Class, used to check if native code is working. * @author Leopoldo Lee Agdeppa III */ package org.mortbay.setuid; import junit.framework.TestCase; import org.mortbay.setuid.SetUID; import java.io.File; import org.mortbay.setuid.Passwd; import org.mortbay.setuid.Group; public class TestSetuid extends TestCase { public void testSetuid() throws Exception { try { File lib = new File("../../modules/native/target/libsetuid.so"); String libPath = lib.getCanonicalPath(); System.setProperty("jetty.libsetuid.path", libPath); try { SetUID.getpwnam("TheQuickBrownFoxJumpsOverToTheLazyDog"); assertTrue(false); } catch(SecurityException se) { assertTrue(true); } try { SetUID.getpwuid(-9999); assertTrue(false); } catch(SecurityException se) { assertTrue(true); } // get the passwd info of root Passwd passwd1 = SetUID.getpwnam("root"); // get the roots passwd info using the aquired uid Passwd passwd2 = SetUID.getpwuid(passwd1.getPwUid()); assertEquals(passwd1.getPwName(), passwd2.getPwName()); assertEquals(passwd1.getPwPasswd(), passwd2.getPwPasswd()); assertEquals(passwd1.getPwUid(), passwd2.getPwUid()); assertEquals(passwd1.getPwGid(), passwd2.getPwGid()); assertEquals(passwd1.getPwGecos(), passwd2.getPwGecos()); assertEquals(passwd1.getPwDir(), passwd2.getPwDir()); assertEquals(passwd1.getPwShell(), passwd2.getPwShell()); try { SetUID.getgrnam("TheQuickBrownFoxJumpsOverToTheLazyDog"); assertTrue(false); } catch(SecurityException se) { assertTrue(true); } try { SetUID.getgrgid(-9999); assertTrue(false); } catch(SecurityException se) { assertTrue(true); } // get the group using the roots groupid Group gr1 = SetUID.getgrgid(passwd1.getPwGid()); // get the group name using the aquired name Group gr2 = SetUID.getgrnam(gr1.getGrName()); assertEquals(gr1.getGrName(), gr2.getGrName()); assertEquals(gr1.getGrPasswd(), gr2.getGrPasswd()); assertEquals(gr1.getGrGid(), gr2.getGrGid()); // search and check through membership lists if(gr1.getGrMem() != null) { assertEquals(gr1.getGrMem().length, gr2.getGrMem().length); for(int i=0; i<gr1.getGrMem().length; i++) { assertEquals(gr1.getGrMem()[i], gr2.getGrMem()[i]); } } } catch(Throwable e) { e.printStackTrace(); assertTrue(false); } } }