Exemplo n.º 1
0
static int
ssl_cert_digest(SSL* p_ssl, struct vsf_session* p_sess, struct mystr* p_str)
{
  X509* p_cert = SSL_get_peer_certificate(p_ssl);
  unsigned int num_bytes = 0;
  if (p_cert == NULL)
  {
    return 0;
  }
  str_reserve(p_str, EVP_MAX_MD_SIZE);
  str_empty(p_str);
  str_rpad(p_str, EVP_MAX_MD_SIZE);
  if (!X509_digest(p_cert, EVP_sha256(), (unsigned char*) str_getbuf(p_str),
                   &num_bytes))
  {
    die("X509_digest failed");
  }
  X509_free(p_cert);
  if (tunable_debug_ssl)
  {
    unsigned int i;
    str_alloc_text(&debug_str, "Cert digest:");
    for (i = 0; i < num_bytes; ++i)
    { 
      str_append_char(&debug_str, ' ');
      str_append_ulong(
        &debug_str, (unsigned long) (unsigned char) str_get_char_at(p_str, i));
    }
    vsf_log_line(p_sess, kVSFLogEntryDebug, &debug_str);
  }
  str_trunc(p_str, num_bytes);
  return 1;
}
Exemplo n.º 2
0
static void
build_dir_line(struct mystr* p_str, const struct mystr* p_filename_str,
               const struct vsf_sysutil_statbuf* p_stat, long curr_time)
{
    static struct mystr s_tmp_str;
    char *tmp_filename=NULL;
    filesize_t size = vsf_sysutil_statbuf_get_size(p_stat);
    /* Permissions */
    str_alloc_text(p_str, vsf_sysutil_statbuf_get_perms(p_stat));
    str_append_char(p_str, ' ');
    /* Hard link count */
    str_alloc_ulong(&s_tmp_str, vsf_sysutil_statbuf_get_links(p_stat));
    str_lpad(&s_tmp_str, 4);
    str_append_str(p_str, &s_tmp_str);
    str_append_char(p_str, ' ');
    /* User */
    if (tunable_hide_ids)
    {
        str_alloc_text(&s_tmp_str, "ftp");
    }
    else
    {
        int uid = vsf_sysutil_statbuf_get_uid(p_stat);
        struct vsf_sysutil_user* p_user = 0;
        if (tunable_text_userdb_names)
        {
            p_user = vsf_sysutil_getpwuid(uid);
        }
        if (p_user == 0)
        {
            str_alloc_ulong(&s_tmp_str, (unsigned long) uid);
        }
        else
        {
            str_alloc_text(&s_tmp_str, vsf_sysutil_user_getname(p_user));
        }
    }
    str_rpad(&s_tmp_str, 8);
    str_append_str(p_str, &s_tmp_str);
    str_append_char(p_str, ' ');
    /* Group */
    if (tunable_hide_ids)
    {
        str_alloc_text(&s_tmp_str, "ftp");
    }
    else
    {
        int gid = vsf_sysutil_statbuf_get_gid(p_stat);
        struct vsf_sysutil_group* p_group = 0;
        if (tunable_text_userdb_names)
        {
            p_group = vsf_sysutil_getgrgid(gid);
        }
        if (p_group == 0)
        {
            str_alloc_ulong(&s_tmp_str, (unsigned long) gid);
        }
        else
        {
            str_alloc_text(&s_tmp_str, vsf_sysutil_group_getname(p_group));
        }
    }
    str_rpad(&s_tmp_str, 8);
    str_append_str(p_str, &s_tmp_str);
    str_append_char(p_str, ' ');
    /* Size in bytes */
    str_alloc_filesize_t(&s_tmp_str, size);
    str_lpad(&s_tmp_str, 8);
    str_append_str(p_str, &s_tmp_str);
    str_append_char(p_str, ' ');
    /* Date stamp */
    str_append_text(p_str, vsf_sysutil_statbuf_get_date(p_stat,
                    tunable_use_localtime,
                    curr_time));
    str_append_char(p_str, ' ');
    /* Filename */
    tmp_filename = local2remote(str_getbuf(p_filename_str));
    if (tmp_filename == NULL)
        str_append_str(p_str, p_filename_str);
    else {
        str_append_text(p_str, tmp_filename);
        vsf_sysutil_free(tmp_filename);
    }
    str_append_text(p_str, "\r\n");
}