projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Deprecate SYSerr, add new FUNCerr macro
[openssl.git]
/
crypto
/
bio
/
b_addr.c
diff --git
a/crypto/bio/b_addr.c
b/crypto/bio/b_addr.c
index a2ef94414da9a09fedee8975543869ed535c34f3..e2354e3421531a3a5861def4be0c42f400e6d898 100644
(file)
--- a/
crypto/bio/b_addr.c
+++ b/
crypto/bio/b_addr.c
@@
-1,7
+1,7
@@
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
/*
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
*
- * Licensed under the
OpenSSL license
(the "License"). You may not use
+ * Licensed under the
Apache License 2.0
(the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
@@
-66,18
+66,18
@@
void BIO_ADDR_clear(BIO_ADDR *ap)
int BIO_ADDR_make(BIO_ADDR *ap, const struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
int BIO_ADDR_make(BIO_ADDR *ap, const struct sockaddr *sa)
{
if (sa->sa_family == AF_INET) {
-
ap->s_in = *(const struct sockaddr_in *)sa
;
+
memcpy(&(ap->s_in), sa, sizeof(struct sockaddr_in))
;
return 1;
}
#ifdef AF_INET6
if (sa->sa_family == AF_INET6) {
return 1;
}
#ifdef AF_INET6
if (sa->sa_family == AF_INET6) {
-
ap->s_in6 = *(const struct sockaddr_in6 *)sa
;
+
memcpy(&(ap->s_in6), sa, sizeof(struct sockaddr_in6))
;
return 1;
}
#endif
#ifdef AF_UNIX
if (sa->sa_family == AF_UNIX) {
return 1;
}
#endif
#ifdef AF_UNIX
if (sa->sa_family == AF_UNIX) {
-
ap->s_un = *(const struct sockaddr_un *)sa
;
+
memcpy(&(ap->s_un), sa, sizeof(struct sockaddr_un))
;
return 1;
}
#endif
return 1;
}
#endif
@@
-207,7
+207,7
@@
static int addr_strings(const BIO_ADDR *ap, int numeric,
flags)) != 0) {
# ifdef EAI_SYSTEM
if (ret == EAI_SYSTEM) {
flags)) != 0) {
# ifdef EAI_SYSTEM
if (ret == EAI_SYSTEM) {
-
SYSerr(SYS_F_GETNAMEINFO
, get_last_socket_error());
+
FUNCerr("getnameinfo"
, get_last_socket_error());
BIOerr(BIO_F_ADDR_STRINGS, ERR_R_SYS_LIB);
} else
# endif
BIOerr(BIO_F_ADDR_STRINGS, ERR_R_SYS_LIB);
} else
# endif
@@
-603,7
+603,8
@@
static int addrinfo_wrap(int family, int socktype,
DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init)
{
DEFINE_RUN_ONCE_STATIC(do_bio_lookup_init)
{
- OPENSSL_init_crypto(0, NULL);
+ if (!OPENSSL_init_crypto(0, NULL))
+ return 0;
bio_lookup_lock = CRYPTO_THREAD_lock_new();
return bio_lookup_lock != NULL;
}
bio_lookup_lock = CRYPTO_THREAD_lock_new();
return bio_lookup_lock != NULL;
}
@@
-682,6
+683,12
@@
int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
hints.ai_family = family;
hints.ai_socktype = socktype;
hints.ai_protocol = protocol;
hints.ai_family = family;
hints.ai_socktype = socktype;
hints.ai_protocol = protocol;
+#ifdef AI_ADDRCONFIG
+#ifdef AF_UNSPEC
+ if (family == AF_UNSPEC)
+#endif
+ hints.ai_flags |= AI_ADDRCONFIG;
+#endif
if (lookup_type == BIO_LOOKUP_SERVER)
hints.ai_flags |= AI_PASSIVE;
if (lookup_type == BIO_LOOKUP_SERVER)
hints.ai_flags |= AI_PASSIVE;
@@
-689,16
+696,30
@@
int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
/* Note that |res| SHOULD be a 'struct addrinfo **' thanks to
* macro magic in bio_lcl.h
*/
/* Note that |res| SHOULD be a 'struct addrinfo **' thanks to
* macro magic in bio_lcl.h
*/
+ retry:
switch ((gai_ret = getaddrinfo(host, service, &hints, res))) {
# ifdef EAI_SYSTEM
case EAI_SYSTEM:
switch ((gai_ret = getaddrinfo(host, service, &hints, res))) {
# ifdef EAI_SYSTEM
case EAI_SYSTEM:
-
SYSerr(SYS_F_GETADDRINFO
, get_last_socket_error());
+
FUNCerr("getaddrinfo"
, get_last_socket_error());
BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB);
break;
# endif
case 0:
ret = 1; /* Success */
break;
BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB);
break;
# endif
case 0:
ret = 1; /* Success */
break;
+# if (defined(EAI_FAMILY) || defined(EAI_ADDRFAMILY)) && defined(AI_ADDRCONFIG)
+# ifdef EAI_FAMILY
+ case EAI_FAMILY:
+# endif
+# ifdef EAI_ADDRFAMILY
+ case EAI_ADDRFAMILY:
+# endif
+ if (hints.ai_flags & AI_ADDRCONFIG) {
+ hints.ai_flags &= ~AI_ADDRCONFIG;
+ goto retry;
+ }
+# endif
+ /* fall through */
default:
BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB);
ERR_add_error_data(1, gai_strerror(gai_ret));
default:
BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB);
ERR_add_error_data(1, gai_strerror(gai_ret));
@@
-781,9
+802,14
@@
int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
* anyway [above getaddrinfo/gai_strerror is]. We just let
* system administrator figure this out...
*/
* anyway [above getaddrinfo/gai_strerror is]. We just let
* system administrator figure this out...
*/
- SYSerr(SYS_F_GETHOSTBYNAME, 1000 + h_errno);
+# if defined(OPENSSL_SYS_VXWORKS)
+ /* h_errno doesn't exist on VxWorks */
+ FUNCerr("gethostbyname", 1000 );
+# else
+ FUNCerr("gethostbyname", 1000 + h_errno);
+# endif
#else
#else
-
SYSerr(SYS_F_GETHOSTBYNAME, WSAGetLastE
rror());
+
FUNCerr("gethostbyname", get_last_socket_e
rror());
#endif
ret = 0;
goto err;
#endif
ret = 0;
goto err;
@@
-829,11
+855,7
@@
int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
se = getservbyname(service, proto);
if (se == NULL) {
se = getservbyname(service, proto);
if (se == NULL) {
-#ifndef OPENSSL_SYS_WINDOWS
- SYSerr(SYS_F_GETSERVBYNAME, errno);
-#else
- SYSerr(SYS_F_GETSERVBYNAME, WSAGetLastError());
-#endif
+ FUNCerr("getservbyname", get_last_socket_error());
goto err;
}
} else {
goto err;
}
} else {