MSVC fixes
PATCH 1/1 MSVC fixes
Fixes to allow compilation with Microsoft Visual Studio 2008
* Fixed several instances of declarations after statements.
* In socket.c, fixed issue where uninitialized value (err) is being passed to to gai_strerror.
* ssl.c is trying to access multi_output_peer_info_env function in multi.c, causing an undefined symbol warning at compile time. ssl.c is strictly a client of multi.c (but not the other way around), therefore ssl.c does not include multi.h and should not depend on multi.h API. To fix, moved validate_peer_info_line and multi_output_peer_info_env from multi.c to misc.c.
* MSVC doesn't support %z as a printf format specifier for size_t
* MSVC doesn't support a const variable being used to dimension an array.
* Explicitly cast the third parameter to setsockopt to const void *
--- src/openvpn/init.c | 10 ++++---- src/openvpn/misc.c | 56 +++++++++++++++++++++++++++++++++++++++++++++ src/openvpn/misc.h | 7 ++++++ src/openvpn/multi.c | 52 ----------------------------------------- src/openvpn/multi.h | 3 --- src/openvpn/socket.c | 5 ++-- src/openvpn/socket.h | 2 +- src/openvpn/ssl.c | 2 +- src/openvpn/ssl_openssl.c | 7 +++--- src/openvpn/win32.c | 6 ++--- 10 files changed, 79 insertions(+), 71 deletions(-)
src/openvpn/init.c +6 -4
@@ -183,10 +183,12 @@ ce_management_query_proxy (struct context *c)if (management) { gc =gc_new (); -struct buffer out =alloc_buf_gc (256 , &gc); -buf_printf (&out,">PROXY:%u,%s,%s" , (l ? l->current :0 ) +1 , - (proto_is_udp (ce->proto) ?"UDP" :"TCP" ),np (ce->remote)); -management_notify_generic (management,BSTR (&out)); + { +struct buffer out =alloc_buf_gc (256 , &gc); +buf_printf (&out,">PROXY:%u,%s,%s" , (l ? l->current :0 ) +1 , + (proto_is_udp (ce->proto) ?"UDP" :"TCP" ),np (ce->remote)); +management_notify_generic (management,BSTR (&out)); + } ce->flags |=CE_MAN_QUERY_PROXY ;while (ce->flags &CE_MAN_QUERY_PROXY ) {
src/openvpn/misc.c +56 -0
59 lines not on this page · raw message
src/openvpn/misc.h +7 -0
@@ -369,4 +369,11 @@ void argv_printf_cat (struct argv *a, const char *format, ...)#define COMPAT_NO_NAME_REMAPPING (1<<2)/** compat flag: --compat-names without char remapping */ bool compat_flag (unsigned int flag); +#if P2MP_SERVER +/* helper to parse peer_info received from multi client, validate +* (this is untrusted data) and put into environment */ +bool validate_peer_info_line (char *line); +void output_peer_info_env (struct env_set *es,const char * peer_info); +#endif /* P2MP_SERVER */ +#endif
src/openvpn/multi.c +0 -52
58 lines not on this page · raw message
src/openvpn/multi.h +0 -3
@@ -312,9 +312,6 @@ void multi_close_instance_on_signal (struct multi_context *m, struct multi_instavoid init_management_callback_multi (struct multi_context *m);void uninit_management_callback_multi (struct multi_context *m); -bool validate_peer_info_line (char *line); -void multi_output_peer_info_env (struct env_set *es,const char * peer_info); -/* * Return true if our output queue is not full */
src/openvpn/socket.c +2 -3
@@ -1158,7 +1158,6 @@ resolve_bind_local (struct link_socket *sock)case AF_INET6 : {int status; -int err;CLEAR (sock->info.lsa->local.addr.in6);if (sock->local_host) {
@@ -1181,7 +1180,7 @@ resolve_bind_local (struct link_socket *sock) {msg (M_FATAL ,"getaddr6() failed for local \"%s\": %s" , sock->local_host, -gai_strerror (err)); +gai_strerror (status)); } sock->info.lsa->local.addr.in6.sin6_port =htons (sock->local_port); }
@@ -1235,6 +1234,7 @@ resolve_remote (struct link_socket *sock,unsigned int flags =sf2gaf (GETADDR_RESOLVE |GETADDR_UPDATE_MANAGEMENT_STATE , sock->sockflags);int retry =0 ;int status =-1 ; +struct addrinfo * ai;if (sock->connection_profiles_defined && sock->resolve_retry_seconds ==RESOLV_RETRY_INFINITE ) {
@@ -1271,7 +1271,6 @@ resolve_remote (struct link_socket *sock,ASSERT (0 ); } -struct addrinfo * ai;/* Temporary fix, this need to be changed for dual stack */ status =openvpn_getaddrinfo (flags, sock->remote_host, retry, signal_received, af, &ai);
src/openvpn/socket.h +1 -1
@@ -1023,7 +1023,7 @@ static inline void link_socket_set_tos (struct link_socket *ls) {if (ls && ls->ptos_defined) -setsockopt (ls->sd,IPPROTO_IP ,IP_TOS , &ls->ptos,sizeof (ls->ptos)); +setsockopt (ls->sd,IPPROTO_IP ,IP_TOS , (const void *)&ls->ptos,sizeof (ls->ptos)); }#endif
src/openvpn/ssl.c +1 -1
@@ -2062,7 +2062,7 @@ key_method_2_read (struct buffer *buf, struct tls_multi *multi, struct tls_sessifree (multi->peer_info); multi->peer_info =read_string_alloc (buf);if ( multi->peer_info ) -multi_output_peer_info_env (session->opt->es, multi->peer_info); +output_peer_info_env (session->opt->es, multi->peer_info);#endif if (verify_user_pass_enabled (session))
src/openvpn/ssl_openssl.c +3 -4
@@ -242,8 +242,7 @@ tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char *ciphers)const tls_cipher_name_pair *cipher_pair; -const size_t openssl_ciphers_size =4096 ; -char openssl_ciphers[openssl_ciphers_size]; +char openssl_ciphers[4096 ];size_t openssl_ciphers_len =0 ; openssl_ciphers[0 ] ='\0' ;
@@ -282,8 +281,8 @@ tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char *ciphers) }// Make sure new cipher name fits in cipher string -if (((openssl_ciphers_size-1 ) - openssl_ciphers_len) < current_cipher_len) { -msg (M_SSLERR ,"Failed to set restricted TLS cipher list, too long (>%zu)." , openssl_ciphers_size-1 ); +if (((sizeof (openssl_ciphers)-1 ) - openssl_ciphers_len) < current_cipher_len) { +msg (M_SSLERR ,"Failed to set restricted TLS cipher list, too long (>%d)." , (int )sizeof (openssl_ciphers)-1 ); }// Concatenate cipher name to OpenSSL cipher string
src/openvpn/win32.c +3 -3
@@ -870,6 +870,9 @@ openvpn_execve (const struct argv *a, const struct env_set *es, const unsigned iWCHAR *cl =wide_cmd_line (a, &gc);WCHAR *cmd =wide_string (a->argv[0 ], &gc); +/* this allows console programs to run, and is ignored otherwise */ +DWORD proc_flags =CREATE_NO_WINDOW ; +CLEAR (start_info);CLEAR (proc_info);
@@ -879,9 +882,6 @@ openvpn_execve (const struct argv *a, const struct env_set *es, const unsigned i start_info.dwFlags =STARTF_USESHOWWINDOW ; start_info.wShowWindow =SW_HIDE ; -/* this allows console programs to run, and is ignored otherwise */ -DWORD proc_flags =CREATE_NO_WINDOW ; -if (CreateProcessW (cmd, cl,NULL ,NULL , FALSE, proc_flags, env,NULL , &start_info, &proc_info)) {DWORD exit_status =0 ;
Signature · 1 line
1.7.9.5
Hi,
patch has been applied to the master branch (not to release/2.3, as it's fixing code that does not exist in 2.3). Sorry for making a mess with the multi_output_peer_info_env() stuff... still trying to find my way.
commit 46e02127a44270c7199f458f43807bff2ddb11f3
Author: James Yonan Date: Sun Jul 28 16:05:35 2013 -0600
MSVC fixes
Acked-by: Gert Doering <[email protected]...>
Message-Id: <[email protected]...>
URL: http://article.gmane.org/gmane.network.openvpn.devel/7777
Signed-off-by: Gert Doering <[email protected]...>--
kind regards,
Gert Doering