コード例 #1
0
ファイル: main.c プロジェクト: kitsune-dsu/kitsune-vsftpd
static void
session_init(struct vsf_session* p_sess)
{
  /* Get the addresses of the control connection */
  vsf_sysutil_getpeername(VSFTP_COMMAND_FD, &p_sess->p_remote_addr);
  vsf_sysutil_getsockname(VSFTP_COMMAND_FD, &p_sess->p_local_addr);
  /* If anonymous mode is active, fetch the uid of the anonymous user */
  if (tunable_anonymous_enable)
  {
    const struct vsf_sysutil_user* p_user =
      vsf_sysutil_getpwnam(tunable_ftp_username);
    if (p_user == 0)
    {
      die("vsftpd: cannot locate user specified in 'ftp_username'");
    }
    p_sess->anon_ftp_uid = vsf_sysutil_user_getuid(p_user);

    if (tunable_chown_uploads)
    {
      p_user = vsf_sysutil_getpwnam(tunable_chown_username);
      if (p_user == 0)
      {
        die("vsftpd: cannot locate user specified in 'chown_username'");
      }
      p_sess->anon_upload_chown_uid = vsf_sysutil_user_getuid(p_user);
    }
  }
}
コード例 #2
0
ファイル: sysstr.c プロジェクト: kitsune-dsu/kitsune-vsftpd
struct vsf_sysutil_user*
str_getpwnam(const struct mystr* p_user_str)
{
  return vsf_sysutil_getpwnam(str_getbuf(p_user_str));
}
コード例 #3
0
ファイル: sysdeputil.c プロジェクト: AllardJ/Tomato
int
vsf_sysdep_check_auth(struct mystr* p_user_str,
                      const struct mystr* p_pass_str,
                      const struct mystr* p_remote_host)
{
  const char* p_crypted;
  const struct passwd* p_pwd = (struct passwd*) vsf_sysutil_getpwnam(str_getbuf(p_user_str));
  (void) p_remote_host;
  if (p_pwd == NULL)
  {
    return 0;
  }
  #ifdef VSF_SYSDEP_HAVE_USERSHELL
  if (tunable_check_shell)
  {
    const char* p_shell;
    while ((p_shell = getusershell()) != NULL)
    {
      if (!vsf_sysutil_strcmp(p_shell, p_pwd->pw_shell))
      {
        break;
      }
    }
    endusershell();
    if (p_shell == NULL)
    {
      return 0;
    }
  }
  #endif
  #ifdef VSF_SYSDEP_HAVE_SHADOW
  {
    const struct spwd* p_spwd = getspnam(str_getbuf(p_user_str));
    if (p_spwd != NULL)
    {
      long curr_time = vsf_sysutil_get_time_sec();
      int days;
      days = curr_time / (60 * 60 * 24);
      if (p_spwd->sp_expire > 0 && p_spwd->sp_expire < days)
      {
        return 0;
      }
      if (p_spwd->sp_lstchg > 0 && p_spwd->sp_max > 0 &&
          p_spwd->sp_lstchg + p_spwd->sp_max < days)
      {
        return 0;
      }
      p_crypted = crypt(str_getbuf(p_pass_str), p_spwd->sp_pwdp);
      if (!vsf_sysutil_strcmp(p_crypted, p_spwd->sp_pwdp))
      {
        return 1;
      }
    }
  }
  #endif /* VSF_SYSDEP_HAVE_SHADOW */
  p_crypted = crypt(str_getbuf(p_pass_str), p_pwd->pw_passwd);
  if (!vsf_sysutil_strcmp(p_crypted, p_pwd->pw_passwd))
  {
    return 1;
  }
  return 0;
}