1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-23 08:38:49 -05:00
curl/lib
Dan McNulty 8996300211 schannel: add support for CURLOPT_CAINFO
- Move verify_certificate functionality in schannel.c into a new
  file called schannel_verify.c. Additionally, some structure defintions
  from schannel.c have been moved to schannel.h to allow them to be
  used in schannel_verify.c.

- Make verify_certificate functionality for Schannel available on
  all versions of Windows instead of just Windows CE. verify_certificate
  will be invoked on Windows CE or when the user specifies
  CURLOPT_CAINFO and CURLOPT_SSL_VERIFYPEER.

- In verify_certificate, create a custom certificate chain engine that
  exclusively trusts the certificate store backed by the CURLOPT_CAINFO
  file.

- doc updates of --cacert/CAINFO support for schannel

- Use CERT_NAME_SEARCH_ALL_NAMES_FLAG when invoking CertGetNameString
  when available. This implements a TODO in schannel.c to improve
  handling of multiple SANs in a certificate. In particular, all SANs
  will now be searched instead of just the first name.

- Update tool_operate.c to not search for the curl-ca-bundle.crt file
  when using Schannel to maintain backward compatibility. Previously,
  any curl-ca-bundle.crt file found in that search would have been
  ignored by Schannel. But, with CAINFO support, the file found by
  that search would have been used as the certificate store and
  could cause issues for any users that have curl-ca-bundle.crt in
  the search path.

- Update url.c to not set the build time CURL_CA_BUNDLE if the selected
  SSL backend is Schannel. We allow setting CA location for schannel
  only when explicitly specified by the user via CURLOPT_CAINFO /
  --cacert.

- Add new test cases 3000 and 3001. These test cases check that the first
  and last SAN, respectively, matches the connection hostname. New test
  certificates have been added for these cases. For 3000, the certificate
  prefix is Server-localhost-firstSAN and for 3001, the certificate
  prefix is Server-localhost-secondSAN.

- Remove TODO 15.2 (Add support for custom server certificate
  validation), this commit addresses it.

Closes https://github.com/curl/curl/pull/1325
2018-04-18 03:59:47 -04:00
..
vauth ntlm_sspi: fix authentication using Credential Manager 2018-04-16 20:43:21 +02:00
vtls schannel: add support for CURLOPT_CAINFO 2018-04-18 03:59:47 -04:00
.gitattributes .gitattributes: force shell scripts to LF 2017-04-17 08:32:13 +02:00
.gitignore VC: remove the makefile.vc6 build infra 2017-01-23 14:27:32 +01:00
amigaos.c s/cURL/curl 2016-10-18 13:59:54 +02:00
amigaos.h
arpa_telnet.h
asyn-ares.c build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
asyn-thread.c threaded resolver: track resolver time and set suitable timeout values 2018-03-24 00:02:25 +01:00
asyn.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
base64.c base64: check for integer overflow on large input 2016-10-31 08:46:35 +01:00
checksrc.pl checksrc: Fix typo 2018-04-15 03:05:45 -04:00
CMakeLists.txt cmake: Export libcurl and curl targets to use by other cmake projects 2017-10-28 17:22:47 +02:00
config-amigaos.h config-amigaos.h: (embarrassed) made the line shorter 2016-12-18 23:46:17 +01:00
config-dos.h build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
config-mac.h
config-os400.h os400: add missing symbols in config file. 2017-10-19 18:48:21 +01:00
config-riscos.h
config-symbian.h build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
config-tpf.h build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
config-vxworks.h build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
config-win32.h curl_addrinfo.c: Allow Unix Domain Sockets to compile under Windows 2018-02-07 21:33:57 +00:00
config-win32ce.h build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
conncache.c conncache: fix a return code [regression] 2017-12-12 23:54:35 +01:00
conncache.h conncache: fix several lock issues 2017-12-05 23:21:02 +01:00
connect.c url: Add option CURLOPT_HAPPY_EYEBALLS_TIMEOUT 2018-02-20 17:51:43 -05:00
connect.h url: Add option CURLOPT_HAPPY_EYEBALLS_TIMEOUT 2018-02-20 17:51:43 -05:00
content_encoding.c all: Refactor malloc+memset to use calloc 2018-04-15 03:00:37 -04:00
content_encoding.h HTTP: support multiple Content-Encodings 2017-11-05 15:09:48 +01:00
cookie.c hash: calculate sizes with size_t instead of longs 2018-04-06 23:42:25 +02:00
cookie.h cookie: store cookies per top-level-domain-specific hash table 2018-04-02 10:48:53 +02:00
curl_addrinfo.c curl_setup: provide a CURL_SA_FAMILY_T type if none exists 2018-04-07 11:19:46 +02:00
curl_addrinfo.h unix_socket: add support for abstract unix domain socket 2017-01-13 16:25:20 +01:00
curl_base64.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
curl_config.h.cmake cmake: add support for brotli 2018-03-19 08:28:32 +01:00
curl_ctype.c curl_ctype: fix macro redefinition warnings 2018-03-03 19:52:43 +01:00
curl_ctype.h curl_ctype: private is*() type macros and functions 2018-01-29 22:56:43 +01:00
curl_des.c use *.sourceforge.io and misc URL updates 2017-02-06 19:21:05 +00:00
curl_des.h
curl_endian.c curl_endian: remove unused functions 2017-06-02 13:30:41 +02:00
curl_endian.h curl_endian: remove unused functions 2017-06-02 13:30:41 +02:00
curl_fnmatch.c fnmatch: optimize processing of consecutive *s and ?s pattern characters 2018-02-07 15:01:51 +01:00
curl_fnmatch.h
curl_gethostname.c checksrc: move open braces to comply with function declaration style 2016-11-24 23:58:22 +01:00
curl_gethostname.h
curl_gssapi.c curl_gssapi: make sure this file too uses our *printf() 2018-02-13 22:55:29 +01:00
curl_gssapi.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
curl_hmac.h checksrc: code style: use 'char *name' style 2016-11-24 23:58:22 +01:00
curl_ldap.h
curl_md4.h mbedtls: enable NTLM (& SMB) even if MD4 support is unavailable 2017-04-21 22:42:14 +02:00
curl_md5.h
curl_memory.h spelling fixes 2017-03-26 23:56:23 +02:00
curl_memrchr.c memdebug: Ensure curl/curl.h is included before curl_memory.h 2016-04-01 13:21:12 +01:00
curl_memrchr.h
curl_multibyte.c curl_multibyte: fix compiler error 2016-05-20 16:50:04 +02:00
curl_multibyte.h
curl_ntlm_core.c all: Refactor malloc+memset to use calloc 2018-04-15 03:00:37 -04:00
curl_ntlm_core.h ntlm: move NTLM_NEEDS_NSS_INIT define into core NTLM header 2017-09-23 13:58:14 -04:00
curl_ntlm_wb.c spelling fixes 2018-02-23 23:29:01 +00:00
curl_ntlm_wb.h
curl_path.c sftp: allow quoted commands to use relative paths 2017-12-09 13:38:38 +01:00
curl_path.h lib/curl_path.h: add #ifdef header guard 2018-03-20 15:00:09 +01:00
curl_printf.h
curl_range.c Curl_range: fix FTP-only and FILE-only builds 2018-03-11 20:33:04 +01:00
curl_range.h Curl_range: commonize FTP and FILE range handling 2018-01-30 17:23:26 +01:00
curl_rtmp.c curl_rtmp: fix a compiler warning 2017-07-28 16:41:29 +02:00
curl_rtmp.h
curl_sasl.c ntlm_sspi: fix authentication using Credential Manager 2018-04-16 20:43:21 +02:00
curl_sasl.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
curl_sec.h checksrc: stricter no-space-before-paren enforcement 2016-12-13 23:39:11 +01:00
curl_setup_once.h curl_ctype: private is*() type macros and functions 2018-01-29 22:56:43 +01:00
curl_setup.h curl_setup: provide a CURL_SA_FAMILY_T type if none exists 2018-04-07 11:19:46 +02:00
curl_sha256.h auth: add support for RFC7616 - HTTP Digest access authentication 2017-10-28 16:32:43 +02:00
curl_sspi.c curl_sspi.c: Updated function description comments 2016-08-31 11:57:28 +01:00
curl_sspi.h
curl_threads.c curl_threads: fix MSVC compiler warning 2017-08-01 17:22:30 +02:00
curl_threads.h checksrc: stricter no-space-before-paren enforcement 2016-12-13 23:39:11 +01:00
curlx.h curlx: the timeval functions are no longer provided as curlx_* 2017-10-30 16:41:44 +01:00
dict.c code style: use spaces around equals signs 2017-09-11 09:29:50 +02:00
dict.h
dotdot.c code style: use spaces around pluses 2017-09-11 09:29:50 +02:00
dotdot.h
easy.c duphandle: make sure CURLOPT_RESOLVE is duplicated fine too 2018-04-12 16:21:24 +02:00
easyif.h typedefs: use the full structs in internal code... 2016-06-22 10:28:41 +02:00
escape.c escape.c: error: pointer targets differ in signedness 2017-09-15 16:56:23 +02:00
escape.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
file.c time_t-fixes: remove typecasts to 'long' for info.filetime 2018-02-01 07:50:59 +01:00
file.h
fileinfo.c llist: no longer uses malloc 2017-04-22 11:25:27 +02:00
fileinfo.h llist: no longer uses malloc 2017-04-22 11:25:27 +02:00
firefox-db2pem.sh
formdata.c formdata: use the mime-content type function 2018-02-05 13:50:30 +01:00
formdata.h mime: unified to use the typedef'd mime structs everywhere 2017-09-05 17:33:16 +01:00
ftp.c FTP: allow PASV on IPv6 connections when a proxy is being used 2018-04-06 14:30:59 +02:00
ftp.h ftp: fix CWD when doing multicwd then nocwd on same connection 2017-08-17 10:08:11 +02:00
ftplistparser.c TODO fixed: Detect when called from within callbacks 2018-02-15 09:36:03 +01:00
ftplistparser.h
getenv.c win: Basic support for Universal Windows Platform apps 2016-08-21 13:56:22 +02:00
getinfo.c time: support > year 2038 time stamps for system with 32bit long 2018-01-30 08:29:59 +01:00
getinfo.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
gopher.c code style: use spaces around equals signs 2017-09-11 09:29:50 +02:00
gopher.h
hash.c hash: calculate sizes with size_t instead of longs 2018-04-06 23:42:25 +02:00
hash.h llist: no longer uses malloc 2017-04-22 11:25:27 +02:00
hmac.c checksrc: code style: use 'char *name' style 2016-11-24 23:58:22 +01:00
hostasyn.c resolvers: only include anything if needed 2017-10-27 13:20:13 +02:00
hostcheck.c schannel: add support for CURLOPT_CAINFO 2018-04-18 03:59:47 -04:00
hostcheck.h
hostip4.c resolvers: only include anything if needed 2017-10-27 13:20:13 +02:00
hostip6.c resolvers: only include anything if needed 2017-10-27 13:20:13 +02:00
hostip.c resolve: add CURLOPT_DNS_SHUFFLE_ADDRESSES 2018-03-17 20:44:14 +01:00
hostip.h resolve: add CURLOPT_DNS_SHUFFLE_ADDRESSES 2018-03-17 20:44:14 +01:00
hostsyn.c resolvers: only include anything if needed 2017-10-27 13:20:13 +02:00
http2.c http2: read pending frames (including GOAWAY) in connection-check 2018-03-22 00:09:15 +01:00
http2.h http2: fix OOM crash 2017-06-18 23:57:45 +02:00
http_chunks.c http_chunks: don't write chunks twice with CURLOPT_HTTP_TRANSFER_DECODING on 2018-02-12 03:47:36 +01:00
http_chunks.h
http_digest.c lib: fix MSVC compiler warnings 2016-12-21 11:07:26 +01:00
http_digest.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
http_negotiate.c cleanup: misc typos in strings and comments 2018-03-16 11:08:31 +01:00
http_negotiate.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
http_ntlm.c ntlm_sspi: fix authentication using Credential Manager 2018-04-16 20:43:21 +02:00
http_ntlm.h
http_proxy.c HTTP: allow "header;" to replace an internal header with a blank one 2018-03-11 11:46:10 +01:00
http_proxy.h http_proxy: fix build with http and proxy 2017-06-18 15:18:15 +02:00
http.c lib: silence null-dereference warnings 2018-04-09 15:54:52 +02:00
http.h cleanup: misc typos in strings and comments 2018-03-16 11:08:31 +01:00
idn_win32.c
if2ip.c code style: use spaces around pluses 2017-09-11 09:29:50 +02:00
if2ip.h ipv6_scope: support unique local addresses 2017-08-13 17:52:15 +02:00
imap.c smtp/pop3/imap_get_message: decrease the data length too... 2018-01-15 21:40:52 +01:00
imap.h imap: support PREAUTH 2017-08-23 23:58:49 +02:00
inet_ntop.c code style: use spaces around pluses 2017-09-11 09:29:50 +02:00
inet_ntop.h
inet_pton.c curl_setup_once: Remove ERRNO/SET_ERRNO macros 2017-07-10 02:09:27 -04:00
inet_pton.h inet_pton: fix include on windows to get prototype 2017-07-05 13:28:19 +02:00
krb5.c krb5: use nondeprecated functions 2018-03-04 22:21:46 +01:00
ldap.c ldap: silence clang warning 2017-10-15 15:59:43 +00:00
libcurl.plist
libcurl.rc *.rc: escape non-ASCII/non-UTF-8 character for clarity 2017-01-19 11:35:48 +00:00
libcurl.vers.in
llist.c Curl_llist_remove: fix potential NULL pointer deref 2017-11-21 09:02:40 +01:00
llist.h llist: no longer uses malloc 2017-04-22 11:25:27 +02:00
Makefile.am lib: don't export all symbols, just everything curl_* 2017-12-01 10:32:28 +01:00
makefile.amiga
Makefile.b32 spelling fixes 2017-03-26 23:56:23 +02:00
makefile.dj lib: fix the djgpp build 2017-06-21 07:46:21 +02:00
Makefile.inc schannel: add support for CURLOPT_CAINFO 2018-04-18 03:59:47 -04:00
Makefile.m32 Makefile.m32: allow to customize brotli libs 2017-11-05 23:02:05 +00:00
Makefile.netware build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
Makefile.vxworks
Makefile.Watcom lib/curl_setup.h: remove CURL_WANTS_CA_BUNDLE_ENV 2017-06-15 11:11:15 +02:00
md4.c MD(4|5): silence cast-align clang warning 2017-06-02 21:58:48 +02:00
md5.c MD(4|5): silence cast-align clang warning 2017-06-02 21:58:48 +02:00
memdebug.c memdebug: use send/recv signature for curl_dosend/curl_dorecv 2017-10-30 21:27:59 +01:00
memdebug.h memdebug: use send/recv signature for curl_dosend/curl_dorecv 2017-10-30 21:27:59 +01:00
mime.c build: add picky compiler warning flags for gcc 6 and 7 2018-04-07 11:18:58 +02:00
mime.h formdata: use the mime-content type function 2018-02-05 13:50:30 +01:00
mk-ca-bundle.pl scripts: allow all perl scripts to be run directly 2018-01-07 15:42:11 -05:00
mk-ca-bundle.vbs spelling fixes 2018-02-23 23:29:01 +00:00
mprintf.c code style: remove wrong uses of multiple spaces 2017-09-12 13:54:54 +02:00
multi.c add_handle/easy_perform: clear errorbuffer on start if set 2018-03-17 12:07:37 +01:00
multihandle.h TODO fixed: Detect when called from within callbacks 2018-02-15 09:36:03 +01:00
multiif.h multi: improved pending transfers handling => improved performance 2018-03-16 23:45:59 +01:00
netrc.c code style: use spaces around equals signs 2017-09-11 09:29:50 +02:00
netrc.h
non-ascii.c non-ascii: fix implicit declaration warning 2018-02-15 15:52:41 -05:00
non-ascii.h mime: new MIME API. 2017-09-02 17:47:10 +01:00
nonblock.c Improve code readbility 2017-03-13 23:11:45 +01:00
nonblock.h
nwlib.c all: Refactor malloc+memset to use calloc 2018-04-15 03:00:37 -04:00
nwos.c checksrc: stricter no-space-before-paren enforcement 2016-12-13 23:39:11 +01:00
objnames-test08.sh
objnames-test10.sh
objnames.inc spelling fixes 2018-02-23 23:29:01 +00:00
openldap.c openldap: fix for NULL return from ldap_get_attribute_ber() 2018-03-23 23:58:25 +01:00
parsedate.c parsedate: support UT timezone 2018-03-19 19:22:42 +01:00
parsedate.h
pingpong.c time: rename Curl_tvnow to Curl_now 2017-10-25 18:48:05 +02:00
pingpong.h time: rename Curl_tvnow to Curl_now 2017-10-25 18:48:05 +02:00
pipeline.c PIPELINING_SERVER_BL: cleanup the internal list use 2017-06-19 09:14:49 +02:00
pipeline.h llist: replace Curl_llist_alloc with Curl_llist_init 2017-04-04 15:27:45 +02:00
pop3.c smtp/pop3/imap_get_message: decrease the data length too... 2018-01-15 21:40:52 +01:00
pop3.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
progress.c rate-limit: use three second window to better handle high speeds 2018-03-16 11:10:06 +01:00
progress.h rate-limit: use three second window to better handle high speeds 2018-03-16 11:10:06 +01:00
rand.c rand: add a clang-analyzer work-around 2017-12-13 00:45:42 +01:00
rand.h rand: treat fake entropy the same regardless of endianness 2017-05-08 23:24:29 +02:00
rtsp.c HTTP: allow "header;" to replace an internal header with a blank one 2018-03-11 11:46:10 +01:00
rtsp.h handler: refactor connection checking 2017-06-30 10:17:27 +02:00
security.c build: remove HAVE_LIMITS_H check 2018-01-05 23:34:30 -05:00
select.c select: update comments 2017-10-30 16:40:28 +01:00
select.h select.h: avoid macro redefinition harder 2017-07-05 13:28:28 +02:00
sendf.c spelling fixes 2018-02-23 23:29:01 +00:00
sendf.h header callback: don't chop headers into smaller pieces 2018-02-16 22:54:08 +01:00
setopt.c urldata: make service names unconditional 2018-04-16 20:11:41 +02:00
setopt.h setopt: reintroduce non-static Curl_vsetopt() for OS400 support 2018-01-13 01:28:19 +01:00
setup-os400.h checksrc: code style: use 'char *name' style 2016-11-24 23:58:22 +01:00
setup-vms.h checksrc: move open braces to comply with function declaration style 2016-11-24 23:58:22 +01:00
sha256.c spelling fixes 2018-02-23 23:29:01 +00:00
share.c curl_share_setopt: va_end was not called if conncache errors 2017-11-10 15:02:11 +01:00
share.h share: add support for sharing the connection cache 2017-11-09 11:07:44 +01:00
sigpipe.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
slist.c memdebug: Ensure curl/curl.h is included before curl_memory.h 2016-04-01 13:21:12 +01:00
slist.h
smb.c get_posix_time: only check for overflows if they can happen! 2018-02-09 22:13:41 +01:00
smb.h SMB: fix numeric constant suffix and variable types 2018-01-16 22:21:59 +01:00
smtp.c smtp: fix processing of initial dot in data 2018-02-12 16:43:15 +01:00
smtp.h internals: rename the SessionHandle struct to Curl_easy 2016-06-22 10:28:41 +02:00
sockaddr.h
socks_gssapi.c code style: use spaces around pluses 2017-09-11 09:29:50 +02:00
socks_sspi.c code style: use spaces around pluses 2017-09-11 09:29:50 +02:00
socks.c Curl_timeleft: change return type to timediff_t 2017-10-28 10:40:51 +02:00
socks.h proxy: Support HTTPS proxy and SOCKS+HTTP(s) 2016-11-24 23:41:44 +01:00
speedcheck.c timediff: return timediff_t from the time diff functions 2017-10-25 09:54:37 +02:00
speedcheck.h timeval: struct curltime is a struct timeval replacement 2017-07-28 15:51:25 +02:00
splay.c code style: use spaces around equals signs 2017-09-11 09:29:50 +02:00
splay.h code style: remove wrong uses of multiple spaces 2017-09-12 13:54:54 +02:00
ssh-libssh.c TODO fixed: Detect when called from within callbacks 2018-02-15 09:36:03 +01:00
ssh.c ssh: show libSSH2 error code when closing fails 2018-04-16 16:46:08 +02:00
ssh.h libssh: added SFTP support 2017-12-01 17:38:37 +01:00
strcase.c strcase: corrected comment header for Curl_strcasecompare() 2017-08-31 11:37:36 +02:00
strcase.h proxy: Support HTTPS proxy and SOCKS+HTTP(s) 2016-11-24 23:41:44 +01:00
strdup.c code style: use spaces around pluses 2017-09-11 09:29:50 +02:00
strdup.h realloc: use Curl_saferealloc to avoid common mistakes 2016-11-11 10:03:48 +01:00
strerror.c TODO fixed: Detect when called from within callbacks 2018-02-15 09:36:03 +01:00
strerror.h idn: switch to libidn2 use and IDNA2008 support 2016-10-31 08:46:35 +01:00
strtok.c
strtok.h
strtoofft.c lib: silence null-dereference warnings 2018-04-09 15:54:52 +02:00
strtoofft.h progress: calculate transfer speed on milliseconds if possible 2018-01-08 23:45:09 +13:00
system_win32.c spelling fixes 2017-03-26 23:56:23 +02:00
system_win32.h win32: Introduced centralised verify windows version function 2016-06-04 21:24:09 +01:00
telnet.c spelling fixes 2018-02-23 23:29:01 +00:00
telnet.h
tftp.c curl_setup: provide a CURL_SA_FAMILY_T type if none exists 2018-04-07 11:19:46 +02:00
tftp.h
timeval.c build: add picky compiler warning flags for gcc 6 and 7 2018-04-07 11:18:58 +02:00
timeval.h timeval: make timediff_t also work on 32bit windows 2017-10-26 20:22:55 +02:00
transfer.c transfer: make HTTP without headers count correct body size 2018-03-15 10:56:27 +01:00
transfer.h HTTP: allow "header;" to replace an internal header with a blank one 2018-03-11 11:46:10 +01:00
url.c schannel: add support for CURLOPT_CAINFO 2018-04-18 03:59:47 -04:00
url.h setopt: reintroduce non-static Curl_vsetopt() for OS400 support 2018-01-13 01:28:19 +01:00
urldata.h ntlm_sspi: fix authentication using Credential Manager 2018-04-16 20:43:21 +02:00
version.c libssh: added SFTP support 2017-12-01 17:38:37 +01:00
warnless.c CURL_SIZEOF_LONG: removed, use only SIZEOF_LONG 2017-08-17 10:27:00 +02:00
warnless.h build: cleanup to fix clang warnings/errors 2018-04-08 13:59:30 +02:00
wildcard.c llist: replace Curl_llist_alloc with Curl_llist_init 2017-04-04 15:27:45 +02:00
wildcard.h llist: replace Curl_llist_alloc with Curl_llist_init 2017-04-04 15:27:45 +02:00
x509asn1.c x509asn1: fix implicit-fallthrough warning with GCC 7 2017-06-03 20:10:52 +02:00
x509asn1.h checksrc: code style: use 'char *name' style 2016-11-24 23:58:22 +01:00