void handle_nobody(session_t *sess) { set_nobody() ; set_bind_capabilities(); char cmd; while(1) { //不断的从proto进程读数据 cmd = priv_sock_recv_cmd(sess->nobody_fd); switch (cmd) { case PRIV_SOCK_GET_DATA_SOCK: privop_pasv_get_data_sock(sess); break; case PRIV_SOCK_PASV_ACTIVE: privop_pasv_active(sess); break; case PRIV_SOCK_PASV_LISTEN: privop_pasv_listen(sess); break; case PRIV_SOCK_PASV_ACCEPT: privop_pasv_accept(sess); break; default: fprintf(stderr, "Unkown command\n"); exit(EXIT_FAILURE); } } }
void handle_parent(session_t *sess) { minimize_privilege(); //使nobody用户进程的权限最小,仅仅获得绑定特权端口的权限 char cmd; while (1) { cmd = priv_sock_get_cmd(sess->parent_fd); // 解析内部命令 // 处理内部命令 switch (cmd) { case PRIV_SOCK_GET_DATA_SOCK: privop_pasv_get_data_sock(sess); break; case PRIV_SOCK_PASV_ACTIVE: privop_pasv_active(sess); break; case PRIV_SOCK_PASV_LISTEN: privop_pasv_listen(sess); break; case PRIV_SOCK_PASV_ACCEPT: privop_pasv_accept(sess); break; } } }
void handle_nobody(session_t* sess) { minimize_privilege(); char cmd; while (1) { // 获取ftp协议进程传递的消息 cmd = priv_sock_get_cmd(sess->nobody_fd); switch (cmd) { case PRIV_SOCK_GET_DATA_SOCK: privop_port_get_data_sock(sess); break; case PRIV_SOCK_PASV_ACTIVE: privop_pasv_active(sess); break; case PRIV_SOCK_PASV_LISTEN: privop_pasv_listen(sess); break; case PRIV_SOCK_PASV_ACCEPT: privop_pasv_accept(sess); break; } } }
void PrivPar::handle_parent(session_t *sess) { minimize_privace(); char cmd; while (1) { cmd = priv_sock_get_cmd(sess->parent_fd); // 处理内部命令 switch (cmd) { case PRIV_SOCK_GET_DATA_SOCK: privop_pasv_get_data_sock(sess); break; case PRIV_SOCK_PASV_ACTIVE: privop_pasv_active(sess); break; case PRIV_SOCK_PASV_LISTEN: privop_pasv_listen(sess); break; case PRIV_SOCK_PASV_ACCEPT: privop_pasv_accept(sess); break; } } }