diff options
| author | George Hazan <george.hazan@gmail.com> | 2013-11-10 21:43:18 +0000 | 
|---|---|---|
| committer | George Hazan <george.hazan@gmail.com> | 2013-11-10 21:43:18 +0000 | 
| commit | 530102b3b16fdc6f008cdf312e5977a878f295db (patch) | |
| tree | 3159eb3d5712151a33d796b7a0039ae9a4d00e09 /plugins/FTPFileYM/curl/lib/sslgen.c | |
| parent | e40ecc70a7db28bdf78dad5d804e07d08a77159c (diff) | |
libcurl update
git-svn-id: http://svn.miranda-ng.org/main/trunk@6864 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/FTPFileYM/curl/lib/sslgen.c')
| -rw-r--r-- | plugins/FTPFileYM/curl/lib/sslgen.c | 145 | 
1 files changed, 140 insertions, 5 deletions
diff --git a/plugins/FTPFileYM/curl/lib/sslgen.c b/plugins/FTPFileYM/curl/lib/sslgen.c index 48758742a2..d2d0e303ec 100644 --- a/plugins/FTPFileYM/curl/lib/sslgen.c +++ b/plugins/FTPFileYM/curl/lib/sslgen.c @@ -5,7 +5,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -31,6 +31,8 @@     Curl_ossl_ - prefix for OpenSSL ones     Curl_gtls_ - prefix for GnuTLS ones     Curl_nss_ - prefix for NSS ones +   Curl_qssl_ - prefix for QsoSSL ones +   Curl_gskit_ - prefix for GSKit ones     Curl_polarssl_ - prefix for PolarSSL ones     Curl_cyassl_ - prefix for CyaSSL ones     Curl_schannel_ - prefix for Schannel SSPI ones @@ -45,6 +47,16 @@  #include "curl_setup.h" +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif +  #include "urldata.h"  #define SSLGEN_C  #include "sslgen.h" /* generic SSL protos etc */ @@ -52,17 +64,24 @@  #include "gtls.h"   /* GnuTLS versions */  #include "nssg.h"   /* NSS versions */  #include "qssl.h"   /* QSOSSL versions */ +#include "gskit.h"  /* Global Secure ToolKit versions */  #include "polarssl.h" /* PolarSSL versions */  #include "axtls.h"  /* axTLS versions */  #include "cyassl.h"  /* CyaSSL versions */  #include "curl_schannel.h" /* Schannel SSPI version */  #include "curl_darwinssl.h" /* SecureTransport (Darwin) version */ +#include "slist.h"  #include "sendf.h"  #include "rawstr.h"  #include "url.h"  #include "curl_memory.h"  #include "progress.h"  #include "share.h" +#include "timeval.h" + +#define _MPRINTF_REPLACE /* use our functions only */ +#include <curl/mprintf.h> +  /* The last #include file should be: */  #include "memdebug.h" @@ -159,6 +178,62 @@ void Curl_free_ssl_config(struct ssl_config_data* sslc)    Curl_safefree(sslc->random_file);  } + +/* + * Curl_rand() returns a random unsigned integer, 32bit. + * + * This non-SSL function is put here only because this file is the only one + * with knowledge of what the underlying SSL libraries provide in terms of + * randomizers. + * + * NOTE: 'data' may be passed in as NULL when coming from external API without + * easy handle! + * + */ + +unsigned int Curl_rand(struct SessionHandle *data) +{ +  unsigned int r; +  static unsigned int randseed; +  static bool seeded = FALSE; + +#ifndef have_curlssl_random +  (void)data; +#else +  if(data) { +    Curl_ssl_random(data, (unsigned char *)&r, sizeof(r)); +    return r; +  } +#endif + +#ifdef RANDOM_FILE +  if(!seeded) { +    /* if there's a random file to read a seed from, use it */ +    int fd = open(RANDOM_FILE, O_RDONLY); +    if(fd > -1) { +      /* read random data into the randseed variable */ +      ssize_t nread = read(fd, &randseed, sizeof(randseed)); +      if(nread == sizeof(randseed)) +        seeded = TRUE; +      close(fd); +    } +  } +#endif + +  if(!seeded) { +    struct timeval now = curlx_tvnow(); +    randseed += (unsigned int)now.tv_usec + (unsigned int)now.tv_sec; +    randseed = randseed * 1103515245 + 12345; +    randseed = randseed * 1103515245 + 12345; +    randseed = randseed * 1103515245 + 12345; +    seeded = TRUE; +  } + +  /* Return an unsigned 32-bit pseudo-random number. */ +  r = randseed = randseed * 1103515245 + 12345; +  return (r << 16) | ((r >> 16) & 0xFFFF); +} +  #ifdef USE_SSL  /* "global" init done? */ @@ -518,17 +593,77 @@ void Curl_ssl_free_certinfo(struct SessionHandle *data)    }  } -#if defined(USE_SSLEAY) || defined(USE_GNUTLS) || defined(USE_NSS) || \ -    defined(USE_DARWINSSL) -/* these functions are only used by some SSL backends */ +int Curl_ssl_init_certinfo(struct SessionHandle * data, +                           int num) +{ +  struct curl_certinfo * ci = &data->info.certs; +  struct curl_slist * * table; + +  /* Initialize the certificate information structures. Return 0 if OK, else 1. +   */ +  Curl_ssl_free_certinfo(data); +  ci->num_of_certs = num; +  table = calloc((size_t) num, sizeof(struct curl_slist *)); +  if(!table) +    return 1; + +  ci->certinfo = table; +  return 0; +} + +CURLcode Curl_ssl_push_certinfo_len(struct SessionHandle *data, +                                    int certnum, +                                    const char *label, +                                    const char *value, +                                    size_t valuelen) +{ +  struct curl_certinfo * ci = &data->info.certs; +  char * output; +  struct curl_slist * nl; +  CURLcode res = CURLE_OK; + +  /* Add an information record for a particular certificate. */ +  output = curl_maprintf("%s:%.*s", label, valuelen, value); +  if(!output) +    return CURLE_OUT_OF_MEMORY; + +  nl = Curl_slist_append_nodup(ci->certinfo[certnum], output); +  if(!nl) { +    free(output); +    curl_slist_free_all(ci->certinfo[certnum]); +    res = CURLE_OUT_OF_MEMORY; +  } + +  ci->certinfo[certnum] = nl; +  return res; +} + +/* + * This is a convenience function for push_certinfo_len that takes a zero + * terminated value. + */ +CURLcode Curl_ssl_push_certinfo(struct SessionHandle *data, +                                int certnum, +                                const char *label, +                                const char *value) +{ +  size_t valuelen = strlen(value); + +  return Curl_ssl_push_certinfo_len(data, certnum, label, value, valuelen); +} + +/* these functions are only provided by some SSL backends */ +#ifdef have_curlssl_random  void Curl_ssl_random(struct SessionHandle *data,                       unsigned char *entropy,                       size_t length)  {    curlssl_random(data, entropy, length);  } +#endif +#ifdef have_curlssl_md5sum  void Curl_ssl_md5sum(unsigned char *tmp, /* input */                       size_t tmplen,                       unsigned char *md5sum, /* output */ @@ -536,6 +671,6 @@ void Curl_ssl_md5sum(unsigned char *tmp, /* input */  {    curlssl_md5sum(tmp, tmplen, md5sum, md5len);  } -#endif /* USE_SSLEAY || USE_GNUTLS || USE_NSS || USE_DARWINSSL */ +#endif  #endif /* USE_SSL */  | 
