Thanks for the help, Andy!

Please note that the current recommended way of creating users is
using org.apache.ftpserver.usermanager.UserFactory if available, this
way you can create users in an OSGI environment.  I just updated the
ManagingUsers example :)


2010/5/23 Marc Esher <[email protected]>:
> Andy,
>  Thanks! Everything is working fine now.
>
> Regards,
>
> Marc
>
> On Sat, May 22, 2010 at 7:56 PM, Andy Thomson <[email protected]> wrote:
>> 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