Author: ngn Date: Thu Nov 6 12:29:48 2008 New Revision: 711965 URL: http://svn.apache.org/viewvc?rev=711965&view=rev Log: Make sure PropertiesUserManager is volatile if the file is set to null (FTPSERVER-146)
Added: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/VolatilePropertiesUserManagerTest.java Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/UserManagerTestTemplate.java Modified: mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java?rev=711965&r1=711964&r2=711965&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java (original) +++ mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/usermanager/impl/PropertiesUserManager.java Thu Nov 6 12:29:48 2008 @@ -247,6 +247,10 @@ * @throws FtpException */ private void saveUserData() throws FtpException { + if(userDataFile == null) { + return; + } + File dir = userDataFile.getAbsoluteFile().getParentFile(); if (dir != null && !dir.exists() && !dir.mkdirs()) { String dirName = dir.getAbsolutePath(); Modified: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/UserManagerTestTemplate.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/UserManagerTestTemplate.java?rev=711965&r1=711964&r2=711965&view=diff ============================================================================== --- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/UserManagerTestTemplate.java (original) +++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/UserManagerTestTemplate.java Thu Nov 6 12:29:48 2008 @@ -250,6 +250,72 @@ userManager.save(user); + User actualUser = userManager.getUserByName("newuser"); + + assertEquals(user.getName(), actualUser.getName()); + assertNull(actualUser.getPassword()); + assertEquals(user.getHomeDirectory(), actualUser.getHomeDirectory()); + assertEquals(user.getEnabled(), actualUser.getEnabled()); + assertNotNull(user.authorize(new WriteRequest())); + assertEquals(getMaxDownloadRate(user), getMaxDownloadRate(actualUser)); + assertEquals(user.getMaxIdleTime(), actualUser.getMaxIdleTime()); + assertEquals(getMaxLoginNumber(user), getMaxLoginNumber(actualUser)); + assertEquals(getMaxLoginPerIP(user), getMaxLoginPerIP(actualUser)); + assertEquals(getMaxUploadRate(user), getMaxUploadRate(actualUser)); + + // verify the password + assertNotNull(userManager.authenticate(new UsernamePasswordAuthentication("newuser", "newpw"))); + + try { + userManager.authenticate(new UsernamePasswordAuthentication("newuser", "dummy")); + fail("Must throw AuthenticationFailedException"); + } catch(AuthenticationFailedException e) { + // ok + } + + // save without updating the users password (password==null) + userManager.save(user); + + assertNotNull(userManager.authenticate(new UsernamePasswordAuthentication("newuser", "newpw"))); + try { + userManager.authenticate(new UsernamePasswordAuthentication("newuser", "dummy")); + fail("Must throw AuthenticationFailedException"); + } catch(AuthenticationFailedException e) { + // ok + } + + + // save and update the users password + user.setPassword("newerpw"); + userManager.save(user); + + assertNotNull(userManager.authenticate(new UsernamePasswordAuthentication("newuser", "newerpw"))); + + try { + userManager.authenticate(new UsernamePasswordAuthentication("newuser", "newpw")); + fail("Must throw AuthenticationFailedException"); + } catch(AuthenticationFailedException e) { + // ok + } + + } + + public void testSavePersistent() throws Exception { + BaseUser user = new BaseUser(); + user.setName("newuser"); + user.setPassword("newpw"); + user.setHomeDirectory("newhome"); + user.setEnabled(false); + user.setMaxIdleTime(2); + + List<Authority> authorities = new ArrayList<Authority>(); + authorities.add(new WritePermission()); + authorities.add(new ConcurrentLoginPermission(3, 4)); + authorities.add(new TransferRatePermission(1, 5)); + user.setAuthorities(authorities); + + userManager.save(user); + UserManager newUserManager = createUserManagerFactory().createUserManager(); User actualUser = newUserManager.getUserByName("newuser"); @@ -304,6 +370,7 @@ } + public void testSaveWithExistingUser() throws Exception { BaseUser user = new BaseUser(); user.setName("user2"); @@ -330,9 +397,7 @@ user.setPassword("newpw"); userManager.save(user); - UserManager newUserManager = createUserManagerFactory().createUserManager(); - - User actualUser = newUserManager.getUserByName("newuser"); + User actualUser = userManager.getUserByName("newuser"); assertEquals(user.getName(), actualUser.getName()); assertNull(actualUser.getPassword()); Added: mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/VolatilePropertiesUserManagerTest.java URL: http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/VolatilePropertiesUserManagerTest.java?rev=711965&view=auto ============================================================================== --- mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/VolatilePropertiesUserManagerTest.java (added) +++ mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/usermanager/impl/VolatilePropertiesUserManagerTest.java Thu Nov 6 12:29:48 2008 @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +package org.apache.ftpserver.usermanager.impl; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.ftpserver.ftplet.Authority; +import org.apache.ftpserver.ftplet.FtpException; +import org.apache.ftpserver.usermanager.ClearTextPasswordEncryptor; +import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory; +import org.apache.ftpserver.usermanager.UserManagerFactory; + +/** +* +* @author The Apache MINA Project ([EMAIL PROTECTED]) +* @version $Rev$, $Date$ +* +*/ +public class VolatilePropertiesUserManagerTest extends UserManagerTestTemplate { + + protected UserManagerFactory createUserManagerFactory() throws FtpException { + PropertiesUserManagerFactory um = new PropertiesUserManagerFactory(); + + // set to null should make the user manager volatile, e.g. not use a file + um.setFile(null); + um.setPasswordEncryptor(new ClearTextPasswordEncryptor()); + + return um; + } + + protected void setUp() throws Exception { + super.setUp(); + + BaseUser user1 = new BaseUser(); + user1.setName("user1"); + user1.setPassword("pw1"); + user1.setHomeDirectory("home"); + + userManager.save(user1); + + BaseUser user2 = new BaseUser(); + user2.setName("user2"); + user2.setPassword("pw2"); + user2.setHomeDirectory("home"); + user2.setEnabled(false); + user2.setMaxIdleTime(2); + + List<Authority> authorities = new ArrayList<Authority>(); + authorities.add(new WritePermission()); + authorities.add(new TransferRatePermission(1, 5)); + authorities.add(new ConcurrentLoginPermission(3, 4)); + + user2.setAuthorities(authorities); + + userManager.save(user2); + + BaseUser user3 = new BaseUser(); + user3.setName("user3"); + user3.setPassword(""); + user3.setHomeDirectory("home"); + + userManager.save(user3); + + } + + // we do not save persistent in this case so this test is disabled + public void testSavePersistent() { + + } +}