用户鉴权登录功能的实现
1、USER
实现代码如下:
static void do_user(session_t *sess)
{
//USER naruto
struct passwd *pw = getpwnam(sess->arg);
if(pw == NULL)
{
//用户不存在
//writen(sess->ctrl_fd, "530 Login incorrect.\r\n",strlen("530 Login incorrect.\r\n"));
ftp_reply(sess, FTP_LOGINERR, "Login incorrect.");
return;
}
sess->uid = pw->pw_uid;
//writen(sess->ctrl_fd, "331 Please specify the password.\r\n", strlen("331 Please specify the password.\r\n"));
ftp_reply(sess, FTP_GIVEPWORD, "Please specify the password.");
}
通过将用户名传给getpwnam函数,获取对应用户的密码:
- 若密码为空,则说明用户不存在,返回登录失败响应;
- 若密码不为空,则将用户ID存放在session结构体中,并返回验证密码响应。
2、PASS
实现代码如下: