Commit efc7c1d8 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

typecheck-gcc.h: check CURLINFO_CERTINFO

... and update the certinfo.c example accordingly.

Fixes https://github.com/curl/curl/issues/846
parent 4eafc6c2
Loading
Loading
Loading
Loading
+0 −9
Original line number Original line Diff line number Diff line
@@ -49,7 +49,6 @@ problems may have been fixed or changed somewhat since this was written!
 5.7 Visual Studio project gaps
 5.7 Visual Studio project gaps
 5.8 configure finding libs in wrong directory
 5.8 configure finding libs in wrong directory
 5.9 Utilize Requires.private directives in libcurl.pc
 5.9 Utilize Requires.private directives in libcurl.pc
 5.10 Fix the gcc typechecks


 6. Authentication
 6. Authentication
 6.1 NTLM authentication and unicode
 6.1 NTLM authentication and unicode
@@ -364,14 +363,6 @@ problems may have been fixed or changed somewhat since this was written!


 https://github.com/curl/curl/issues/864
 https://github.com/curl/curl/issues/864


5.10 Fix the gcc typechecks

 Issue #846 identifies a problem with the gcc-typechecks and how the types are
 documented and checked for CURLINFO_CERTINFO but our attempts to fix the
 issue were futile and needs more attention.

 https://github.com/curl/curl/issues/846

6. Authentication
6. Authentication


6.1 NTLM authentication and unicode
6.1 NTLM authentication and unicode
+7 −12
Original line number Original line Diff line number Diff line
@@ -5,7 +5,7 @@
 *                            | (__| |_| |  _ <| |___
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *                             \___|\___/|_| \_\_____|
 *
 *
 * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 *
 * This software is licensed as described in the file COPYING, which
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * you should have received as part of this distribution. The terms
@@ -56,24 +56,19 @@ int main(void)
    res = curl_easy_perform(curl);
    res = curl_easy_perform(curl);


    if(!res) {
    if(!res) {
      union {
      struct curl_certinfo *certinfo;
        struct curl_slist    *to_info;
        struct curl_certinfo *to_certinfo;
      } ptr;


      ptr.to_info = NULL;
      res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &certinfo);


      res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ptr.to_info);
      if(!res && certinfo) {

      if(!res && ptr.to_info) {
        int i;
        int i;


        printf("%d certs!\n", ptr.to_certinfo->num_of_certs);
        printf("%d certs!\n", certinfo->num_of_certs);


        for(i = 0; i < ptr.to_certinfo->num_of_certs; i++) {
        for(i = 0; i < certinfo->num_of_certs; i++) {
          struct curl_slist *slist;
          struct curl_slist *slist;


          for(slist = ptr.to_certinfo->certinfo[i]; slist; slist = slist->next)
          for(slist = certinfo->certinfo[i]; slist; slist = slist->next)
            printf("%s\n", slist->data);
            printf("%s\n", slist->data);


        }
        }
+9 −0
Original line number Original line Diff line number Diff line
@@ -127,6 +127,9 @@ __extension__ ({ \
    if(_curl_is_tlssessioninfo_info(_curl_info))                              \
    if(_curl_is_tlssessioninfo_info(_curl_info))                              \
      if(!_curl_is_arr((arg), struct curl_tlssessioninfo *))                  \
      if(!_curl_is_arr((arg), struct curl_tlssessioninfo *))                  \
        _curl_easy_getinfo_err_curl_tlssesssioninfo();                        \
        _curl_easy_getinfo_err_curl_tlssesssioninfo();                        \
    if(_curl_is_certinfo_info(_curl_info))                                    \
      if(!_curl_is_arr((arg), struct curl_certinfo *))                        \
        _curl_easy_getinfo_err_curl_certinfo();                               \
   if(_curl_is_socket_info(_curl_info))                                       \
   if(_curl_is_socket_info(_curl_info))                                       \
      if(!_curl_is_arr((arg), curl_socket_t))                                 \
      if(!_curl_is_arr((arg), curl_socket_t))                                 \
        _curl_easy_getinfo_err_curl_socket();                                 \
        _curl_easy_getinfo_err_curl_socket();                                 \
@@ -210,6 +213,9 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
_CURL_WARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo,
_CURL_WARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo,
              "curl_easy_getinfo expects a pointer to "
              "curl_easy_getinfo expects a pointer to "
              "'struct curl_tlssessioninfo *' for this info")
              "'struct curl_tlssessioninfo *' for this info")
_CURL_WARNING(_curl_easy_getinfo_err_curl_certinfo,
              "curl_easy_getinfo expects a pointer to "
              "'struct curl_certinfo *' for this info")
_CURL_WARNING(_curl_easy_getinfo_err_curl_socket,
_CURL_WARNING(_curl_easy_getinfo_err_curl_socket,
  "curl_easy_getinfo expects a pointer to curl_socket_t for this info")
  "curl_easy_getinfo expects a pointer to curl_socket_t for this info")


@@ -380,6 +386,9 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_socket,
#define _curl_is_tlssessioninfo_info(info)                              \
#define _curl_is_tlssessioninfo_info(info)                              \
  (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION))
  (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION))


/* true if info expects a pointer to struct curl_certinfo * argument */
#define _curl_is_certinfo_info(info) ((info) == CURLINFO_CERTINFO)

/* true if info expects a pointer to struct curl_socket_t argument */
/* true if info expects a pointer to struct curl_socket_t argument */
#define _curl_is_socket_info(info)                                            \
#define _curl_is_socket_info(info)                                            \
  (CURLINFO_SOCKET < (info))
  (CURLINFO_SOCKET < (info))