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 )
{
……
}