Marc,

Tried out your code snippet, changed the user file to just
"user.properties" so that it would be relative to the where code was
actually run.  I tested with maven, so I created an empty file called
"user.properties" in the same directory as the pom.xml [project root]. I
made the user home to be "/tmp/bin/ftp/tmpHome".

It worked.  The user home directory was in the /tmp directory. I set the
permissions to 777 on that tree, and wrote a file via ftp.

I changed the user home directory to be a relative path, it also worked.
The user home directory was created in the project root.

I am suspecting that your problem is that the user.properties did not
exist. Create it in a known location, just make it an empty file.

Here is the code:

public class FtpTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FtpException {

        FtpServerFactory serverFactory = new FtpServerFactory();

        ListenerFactory factory = new ListenerFactory();
        factory.setPort(2221);
        serverFactory.addListener("default",
                                   factory.createListener());

        FtpServer server = serverFactory.createServer();

        PropertiesUserManagerFactory userFactory =
             new PropertiesUserManagerFactory();
        File userFile = new File("users.properties");
        File userHome = new File("tmp/ftp/tmpHome/");
        userHome.mkdirs();
        userFactory.setFile(userFile);

        UserManager um = userFactory.createUserManager();
        BaseUser user = new BaseUser();
        user.setName("unittest");
        user.setPassword("unittest");
        user.setHomeDirectory(userHome.getAbsolutePath());
        um.save(user);
        System.out.println(user.getHomeDirectory());
        serverFactory.setUserManager(um);
        System.out.println(Arrays.toString(um.getAllUserNames()));
        server.start();
    }
}

Andy

On 05/22/2010 10:47 AM, Marc Esher wrote:
> Greetings all,
>   Please pardon what is surely something very simple I'm missing. I
> need to spin up an ftp server solely for the purpose of a unit test,
> and Apache FtpServer seems like exactly what I need. Except... I'm
> having a bit of trouble with the user's permissions and home
> directory.
> 
>   The server starts fine, and I can log in with the user I'm creating,
> but the I get a "550 no such directory" problem on login. As I said, I
> know this is a complete "duh" thing, but I can't figure it out.
> 
> Here's my sample code:
> 
> 
> FtpServerFactory factory = new FtpServerFactory();
>               FtpServer server = factory.createServer();
>               
>               PropertiesUserManagerFactory userFactory = new 
> PropertiesUserManagerFactory();
>               File userFile = new File("bin/ftp/users.properties");
>               File userHome = new File("bin/ftp/tmpHome/");
>               userHome.mkdirs();
>               userFactory.setFile(userFile);
>               UserManager um = userFactory.createUserManager();
>               
>               BaseUser user = new BaseUser();
>               user.setName("unittest");
>               user.setPassword("unittest");
>               user.setHomeDirectory(userHome.getAbsolutePath());//tried both
> relative and full paths... no luck
>               um.save(user);
>               System.out.println(user.getHomeDirectory());
>               
>               
>               factory.setUserManager(um);
>               System.out.println( Arrays.toString(um.getAllUserNames())   );
>               
>               
>               server.start();
> 
> The directory exists and has some other files and directories in
> there. I thought that by logging in with a client (I'm using FileZill
> and FireFTP) I'd land in the home directory I specified in
> baseUser.setHomeDirectory().
> 
> I've tried passing relative and full paths to setHomeDirectory, each
> with the same result.
> 
> Can anyone tell me the very simple thing I'm missing?  Again, this is
> simply for a unit test, so I'm looking for the absolute minimum amount
> of effort to get an ftp server running for a few seconds with a single
> user to log in, CWD, and read some file attributes, and that's about
> it.
> 
> Thanks so much!
> 
> Marc
> 

Reply via email to