1.1 加载ftp server


在 project 的下选择 network components->network protocols-> network filesystems->Ftp server 选项即可加载 ftp server 服务。此选项定义 INCLUDE_FTP_SERVER  使得系统启动时调用 ftpdInit ( 0 , 0 )来加载 ftp server 。



加载 ftp server 后,可以通过 ioDefPathSet ()来设定缺省的 IO 路径,例如目标机的 tffs 设备名为 tffs0 ,设定 ioDefPathSet ( “/tffs0/” );这样当登录到 ftp server 后就可以查看目标机 tffs0 上的内容了。


1.2 

权限设定


如果希望进行权限设定,则需要选择 network components->network protocols-> network filesystems->Ftp server securiy 选项,并在 network components->network protocols-> network applications 下选择 rlogin/telnet password protection  选项,然后在选项中设定用户登录名和密码即可。也可以在程序中通过     loginUserAdd ()来增加新的用户。



注意: loginUserAdd 使用的密码不是明码,而是经过加密的密码。用户可以调用 loginDefaultEncrypt ()来得到换算后的密码,例如,如果你要添加用户 guest, 密码 123456789 :

char pw[256];
 loginDefaultEncrypt("123456789",pw);


得到 pw = “SRSQQeQccc” ;



调用 loginUserAdd("guest","SRSQQeQccc");  就可以了。



登陆时使用  

    user:guest 

    pw:123456789


在  <host/hostOS/bin> 下也提供了一个工具 vxencrypt ,执行它可以计算加密后的密码:


vxencrypt
 please enter password: flintstone
 encrypted password is ScebRezb9c


用户也可以调用


void loginEncryptInstall
 (
     FUNCPTR rtn, /* function pointer to encryption routine */
     int     var  /* argument to the encryption routine (unused) */
 )


来安装自己的密码生成程序,其中用户自定义密码生成程序 rtn 必须符合下列格式:


STATUS encryptRoutine
 (
     char *password,               /* string to encrypt    */
     char *encryptedPassword       /* resulting encryption */
 )

1.3 

使用一个更好的 ftp server

T2.0.2 

中的 ftp server 只提供了很少的功能,通过安装 SPR79795 DOSFS2 包,在 <target/unsupported/src/netwrs> 提供了一个 ftpdlib.c 源文件,我们可以加载该文   件来生成一个功能更强大的 ftp server 。并且通过修改源码我们可以更方便的定制自己的 ftp server 。



首先我们需要从原来的库文件中卸载老的 ftpdLib.o ,以 ColdFire 5272 为例:


arcf  -d  <tornado>/target/lib/libMCF5200gnuvx.a ftpdLib.o


此处需要注意模块名称的大小写。



在成功移除 ftpdLib.o 后,通过修改 makefile

MACH_EXTRA = ftpdLib.o


将 ftpdlib.c  引入到工程中;也可以不修改 makefile ,编译新的 ftpdLib.o 后把它重新加入到原来的库文件中。


arcf  –r  <tornado>/target/lib/libMCF5200gnuvx.a ftpdLib.o



※   注  ar 的命令详见参见文档 GNU Toolkit User's Guide 中的 The GNU Binary Utilities 。




但这个文件关于 guest 的权限设置还有几处错误需要修改:



①  ftpdSessionAdd ()中 989 行处:



if(defaultHomeDir[0] == EOS )
    ioDefPathGet (pSlot->curDirName);
   else
    strcpy( defaultHomeDir, pSlot->curDirName);

改为:


if(defaultHomeDir[0] == EOS )
 ioDefPathGet (pSlot->curDirName);
   else
    strcpy( pSlot->curDirName,defaultHomeDir);


并增加 guestHomeDir 初始设置:



/* add */
 if (guestHomeDir[0]==EOS)
    strcpy(guestHomeDir, pSlot->curDirName);

②  ftpPathAccessVerify ()中 1091 行处应增加对 whrer 和 path 是否为空的判断:


/* add */
     if (*where==EOS || *path==EOS) goto deny;


③  ftpdWorkTask ()   中 1411 行处如果有权限设定则处理,否则按照 guest 处理,程序中缺少 “else” :



改为:


if ( pLoginVrfyFunc != (FUNCPTR)NULL )
 {
   ……
 }
 else if( guestHomeDir[0] != EOS )
 {
    ……
 
}