Пример #1
0
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;
		}
		
	}
}
Пример #2
0
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;
		
		}
	}
}
Пример #3
0
void
vsf_priv_parent_postlogin(struct vsf_session* p_sess)
{
  minimize_privilege(p_sess);
  /* We're still here... */
  while (1)
  {
    process_post_login_req(p_sess);
  }
}
Пример #4
0
void
vsf_priv_parent_postlogin(struct vsf_session* p_sess)
{
  /* Kitsune */
	if (!kitsune_is_updating()) {
  	minimize_privilege(p_sess);
	} else {
    /* Set sigchld function pointer (normally done in twoprocess.c) */    
    vsf_sysutil_default_sig(kVSFSysUtilSigCHLD);
    vsf_sysutil_install_async_sighandler(kVSFSysUtilSigCHLD, twoproc_handle_sigchld);
  }
  /* End Kitsune */

  /* We're still here... */
  while (1)
  {
	  kitsune_update("postprivparent.c"); /**DSU updatepoint */
    process_post_login_req(p_sess);
  }
}