Skip to content

Commit

Permalink
MDEV-11159 Add support for sending proxy protocol header
Browse files Browse the repository at this point in the history
  • Loading branch information
vaintroub committed Jun 13, 2017
1 parent dce70b6 commit 06d2490
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 3 deletions.
2 changes: 2 additions & 0 deletions include/ma_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ struct st_mysql_options_extension {
my_bool (*set_option)(MYSQL *mysql, const char *config_option, const char *config_value);
HASH userdata;
char *server_public_key;
char *proxy_header;
size_t proxy_header_len;
};

typedef struct st_connection_handler
Expand Down
3 changes: 2 additions & 1 deletion include/mysql.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,8 @@ extern const char *SQLSTATE_UNKNOWN;
MARIADB_OPT_FOUND_ROWS,
MARIADB_OPT_MULTI_RESULTS,
MARIADB_OPT_MULTI_STATEMENTS,
MARIADB_OPT_INTERACTIVE
MARIADB_OPT_INTERACTIVE,
MARIADB_OPT_PROXY_HEADER
};

enum mariadb_value {
Expand Down
22 changes: 21 additions & 1 deletion libmariadb/mariadb_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -657,10 +657,12 @@ struct st_default_options mariadb_defaults[] =
else \
(OPTS)->extension->KEY= NULL

#define OPT_SET_EXTENDED_VALUE_INT(OPTS, KEY, VAL) \
#define OPT_SET_EXTENDED_VALUE(OPTS, KEY, VAL) \
CHECK_OPT_EXTENSION_SET(OPTS) \
(OPTS)->extension->KEY= (VAL)

#define OPT_SET_EXTENDED_VALUE_INT(A,B,C) OPT_SET_EXTENDED_VALUE(A,B,C)

#define OPT_SET_VALUE_STR(OPTS, KEY, VAL) \
free((OPTS)->KEY); \
if((VAL)) \
Expand Down Expand Up @@ -1303,6 +1305,17 @@ MYSQL *mthd_my_real_connect(MYSQL *mysql, const char *host, const char *user,
goto error;
}

if (mysql->options.extension && mysql->options.extension->proxy_header)
{
char *hdr = mysql->options.extension->proxy_header;
size_t len = mysql->options.extension->proxy_header_len;
if (ma_pvio_write(pvio, hdr, len) <= 0)
{
ma_pvio_close(pvio);
goto error;
}
}

if (ma_net_init(net, pvio))
goto error;

Expand Down Expand Up @@ -2955,6 +2968,13 @@ mysql_optionsv(MYSQL *mysql,enum mysql_option option, ...)
case MARIADB_OPT_CONNECTION_READ_ONLY:
OPT_SET_EXTENDED_VALUE_INT(&mysql->options, read_only, *(my_bool *)arg1);
break;
case MARIADB_OPT_PROXY_HEADER:
{
size_t arg2 = va_arg(ap, size_t);
OPT_SET_EXTENDED_VALUE(&mysql->options, proxy_header, (char *)arg1);
OPT_SET_EXTENDED_VALUE(&mysql->options, proxy_header_len, arg2);
}
break;
default:
va_end(ap);
return(-1);
Expand Down
2 changes: 1 addition & 1 deletion libmariadb/secure/schannel.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ int ma_tls_verify_server_cert(MARIADB_TLS *ctls)
if (pszServerName && (sctx->mysql->client_flag & CLIENT_SSL_VERIFY_SERVER_CERT))
{
DWORD NameSize= 0;
char *p1, *p2;
char *p1;
SECURITY_STATUS sRet;

if ((sRet= QueryContextAttributes(&sctx->ctxt, SECPKG_ATTR_REMOTE_CERT_CONTEXT, (PVOID)&pServerCert)) != SEC_E_OK)
Expand Down

0 comments on commit 06d2490

Please sign in to comment.