Commit 9d7d92d9 authored by unknown's avatar unknown

Merge work:/home/bk/mysql-4.0 into hundin.mysql.fi:/my/bk/mysql-4.0


BitKeeper/etc/logging_ok:
  auto-union
include/my_sys.h:
  Auto merged
libmysql/Makefile.shared:
  Auto merged
sql/sql_parse.cc:
  Auto merged
parents e59d0778 2085b195
#! /bin/sh
path=`dirname $0`
. "$path/SETUP.sh"
extra_flags="$pentium_cflags $debug_cflags"
c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings="$cxx_warnings $debug_extra_warnings"
extra_configs="$pentium_configs $debug_configs"
extra_configs="$extra_configs --with-debug=full --with-vio --with-openssl"
. "$path/FINISH.sh"
heikki@donna.mysql.fi
jani@janikt.pp.saunalahti.fi jani@janikt.pp.saunalahti.fi
monty@hundin.mysql.fi monty@hundin.mysql.fi
monty@work.mysql.com monty@work.mysql.com
......
...@@ -44926,7 +44926,9 @@ table for a different site you are working on, but the table is just a ...@@ -44926,7 +44926,9 @@ table for a different site you are working on, but the table is just a
bit different (that is - fields in different order, etc.). bit different (that is - fields in different order, etc.).
By Steve Shreeve. By Steve Shreeve.
@item @uref{http://www.mysql.com/Downloads/Contrib/oracledump, oracledump} @item @uref{http://www.mysql.com/Downloads/Contrib/oracledump, oracledump}
Perl program to convert Oracle databases to @strong{MySQL}. By Johan Andersson. Perl program to convert Oracle databases to @strong{MySQL}. Has same
output format as mysqldump. By Johan Andersson.
@item @uref{http://www.mysql.com/Downloads/Contrib/excel2mysql, excel2mysql} @item @uref{http://www.mysql.com/Downloads/Contrib/excel2mysql, excel2mysql}
Perl program to import Excel spreadsheets into a @strong{MySQL} database. By Stephen Hurd @email{shurd@@sk.sympatico.ca} Perl program to import Excel spreadsheets into a @strong{MySQL} database. By Stephen Hurd @email{shurd@@sk.sympatico.ca}
...@@ -22,7 +22,7 @@ TAR = gtar ...@@ -22,7 +22,7 @@ TAR = gtar
EXTRA_DIST = INSTALL-SOURCE README \ EXTRA_DIST = INSTALL-SOURCE README \
COPYING COPYING.LIB MIRRORS COPYING COPYING.LIB MIRRORS
SUBDIRS = include @docs_dirs@ @readline_dir@ \ SUBDIRS = include @docs_dirs@ @readline_dir@ \
@thread_dirs@ @pstack_dirs@ @sql_client_dirs@ \ @thread_dirs@ @pstack_dirs@ vio @sql_client_dirs@ \
@sql_server_dirs@ @libmysqld_dirs@ scripts tests man \ @sql_server_dirs@ @libmysqld_dirs@ scripts tests man \
@bench_dirs@ support-files @fs_dirs@ @bench_dirs@ support-files @fs_dirs@
......
/* DO NOT EDIT: automatically built by dist/s_include. */
#ifndef _rpc_server_ext_h_
#define _rpc_server_ext_h_
#if defined(__cplusplus)
extern "C" {
#endif
void __db_stats_freelist __P((__db_stat_statsreplist **));
void __dbsrv_settimeout __P((ct_entry *, u_int32_t));
void __dbsrv_timeout __P((int));
void __dbclear_ctp __P((ct_entry *));
void __dbdel_ctp __P((ct_entry *));
ct_entry *new_ct_ent __P((u_int32_t *));
ct_entry *get_tableent __P((long));
void __dbsrv_active __P((ct_entry *));
int __dbc_close_int __P((ct_entry *));
int __dbenv_close_int __P((long, int));
char *get_home __P((char *));
#if defined(__cplusplus)
}
#endif
#endif /* _rpc_server_ext_h_ */
...@@ -20,7 +20,7 @@ INCLUDES = -I$(srcdir)/../include \ ...@@ -20,7 +20,7 @@ INCLUDES = -I$(srcdir)/../include \
-I../include -I$(srcdir)/.. -I$(top_srcdir) \ -I../include -I$(srcdir)/.. -I$(top_srcdir) \
-I.. -I..
LIBS = @CLIENT_LIBS@ LIBS = @CLIENT_LIBS@
LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysql/libmysqlclient.la LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysql/libmysqlclient.la ../vio/libvio.a
bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow mysqldump mysqlimport mysqltest bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow mysqldump mysqlimport mysqltest
noinst_PROGRAMS = insert_test select_test thread_test noinst_PROGRAMS = insert_test select_test thread_test
noinst_HEADERS = sql_string.h completion_hash.h my_readline.h noinst_HEADERS = sql_string.h completion_hash.h my_readline.h
......
...@@ -386,6 +386,8 @@ extern int my_realpath(char *to, const char *filename, myf MyFlags); ...@@ -386,6 +386,8 @@ extern int my_realpath(char *to, const char *filename, myf MyFlags);
extern File my_create_with_symlink(const char *linkname, const char *filename, extern File my_create_with_symlink(const char *linkname, const char *filename,
int createflags, int access_flags, int createflags, int access_flags,
myf MyFlags); myf MyFlags);
extern int my_delete_with_symlink(const char *name, myf MyFlags);
extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags);
extern int my_symlink(const char *content, const char *linkname, myf MyFlags); extern int my_symlink(const char *content, const char *linkname, myf MyFlags);
extern uint my_read(File Filedes,byte *Buffer,uint Count,myf MyFlags); extern uint my_read(File Filedes,byte *Buffer,uint Count,myf MyFlags);
extern uint my_pread(File Filedes,byte *Buffer,uint Count,my_off_t offset, extern uint my_pread(File Filedes,byte *Buffer,uint Count,my_off_t offset,
......
...@@ -101,15 +101,8 @@ enum enum_server_command {COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY, ...@@ -101,15 +101,8 @@ enum enum_server_command {COM_SLEEP,COM_QUIT,COM_INIT_DB,COM_QUERY,
#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ #define NET_WRITE_TIMEOUT 60 /* Timeout on write */
#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ #define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */
#ifndef Vio_defined
#define Vio_defined
#ifdef HAVE_VIO
class Vio; /* Fill Vio class in C++ */
#else
struct st_vio; /* Only C */ struct st_vio; /* Only C */
typedef struct st_vio Vio; typedef struct st_vio Vio;
#endif
#endif
typedef struct st_net { typedef struct st_net {
Vio* vio; Vio* vio;
...@@ -227,9 +220,6 @@ my_bool check_scramble(const char *, const char *message, ...@@ -227,9 +220,6 @@ my_bool check_scramble(const char *, const char *message,
unsigned long *salt,my_bool old_ver); unsigned long *salt,my_bool old_ver);
char *get_tty_password(char *opt_message); char *get_tty_password(char *opt_message);
void hash_password(unsigned long *result, const char *password); void hash_password(unsigned long *result, const char *password);
#ifdef __cplusplus
}
#endif
/* Some other useful functions */ /* Some other useful functions */
...@@ -237,6 +227,10 @@ void my_init(void); ...@@ -237,6 +227,10 @@ void my_init(void);
void load_defaults(const char *conf_file, const char **groups, void load_defaults(const char *conf_file, const char **groups,
int *argc, char ***argv); int *argc, char ***argv);
#ifdef __cplusplus
}
#endif
#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ #define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
#ifdef __WIN__ #ifdef __WIN__
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* We implement virtual IO by trapping needed vio_* calls and mapping
* them to different function pointers by type
*/
/*
* Purpose: include file for st_vio that will work with C and C++
*/
#ifndef vio_violite_h_
#define vio_violite_h_
#include "my_net.h" /* needed because of struct in_addr */
/* Simple vio interface in C; The functions are implemented in violite.c */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
enum enum_vio_type { VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET,
VIO_TYPE_NAMEDPIPE, VIO_TYPE_SSL};
#ifndef st_vio_defined
#define st_vio_defined
struct st_vio; /* Only C */
typedef struct st_vio st_vio;
#endif
st_vio* vio_new(my_socket sd,
enum enum_vio_type type,
my_bool localhost);
#ifdef __WIN__
st_vio* vio_new_win32pipe(HANDLE hPipe);
#endif
void vio_delete(st_vio* vio);
#ifdef EMBEDDED_LIBRARY
void vio_reset(st_vio *vio);
#endif
/*
* vio_read and vio_write should have the same semantics
* as read(2) and write(2).
*/
int vio_read( st_vio* vio,
gptr buf, int size);
int vio_write( st_vio* vio,
const gptr buf,
int size);
/*
* Whenever the socket is set to blocking mode or not.
*/
int vio_blocking( st_vio* vio,
my_bool onoff);
my_bool vio_is_blocking( st_vio* vio);
/*
* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible.
*/
int vio_fastsend( st_vio* vio);
/*
* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible.
*/
int vio_keepalive( st_vio* vio,
my_bool onoff);
/*
* Whenever we should retry the last read/write operation.
*/
my_bool vio_should_retry( st_vio* vio);
/*
* When the workday is over...
*/
int vio_close(st_vio* vio);
/*
* Short text description of the socket for those, who are curious..
*/
const char* vio_description( st_vio* vio);
/* Return the type of the connection */
enum enum_vio_type vio_type(st_vio* vio);
/* Return last error number */
int vio_errno(st_vio *vio);
/* Get socket number */
my_socket vio_fd(st_vio *vio);
/*
* Remote peer's address and name in text form.
*/
my_bool vio_peer_addr(st_vio * vio, char *buf);
/* Remotes in_addr */
void vio_in_addr(st_vio *vio, struct in_addr *in);
/* Return 1 if there is data to be read */
my_bool vio_poll_read(st_vio *vio,uint timeout);
#ifdef __cplusplus
}
#endif
#endif /* vio_violite_h_ */
#ifdef HAVE_VIO
#ifndef DONT_MAP_VIO
#define vio_delete(vio) (vio)->viodelete(vio)
#define vio_errno(vio) (vio)->vioerrno(vio)
#define vio_read(vio, buf, size) (vio)->read(vio,buf,size)
#define vio_write(vio, buf, size) (vio)->write(vio, buf, size)
#define vio_blocking(vio, set_blocking_mode) (vio)->vioblocking(vio, set_blocking_mode)
#define vio_is_blocking(vio) (vio)->is_blocking(vio)
#define vio_fastsend(vio) (vio)->fastsend(vio)
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
#define vio_should_retry(vio) (vio)->should_retry(vio)
#define vio_close(vio) ((vio)->vioclose)(vio)
#define vio_peer_addr(vio, buf) (vio)->peer_addr(vio, buf)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
#define vio_poll_read(vio,timeout) (vio)->poll_read(vio,timeout)
#endif /* !DONT_MAP_VIO */
#endif /* HAVE_VIO */
#ifdef HAVE_OPENSSL
#include <openssl/x509.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/asn1.h>
#include "my_net.h" /* needed because of struct in_addr */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef st_vio_defined
#define st_vio_defined
struct st_vio; /* Only C */
typedef struct st_vio st_vio;
#endif
void vio_ssl_delete(st_vio* vio);
#ifdef EMBEDDED_LIBRARY
void vio_reset(st_vio *vio);
#endif
int vio_ssl_read(st_vio* vio,gptr buf, int size);
int vio_ssl_write(st_vio* vio,const gptr buf,int size);
int vio_ssl_blocking(st_vio* vio,my_bool onoff);
my_bool vio_ssl_is_blocking(st_vio* vio);
/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible. */
int vio_ssl_fastsend(st_vio* vio);
/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible. */
int vio_ssl_keepalive(st_vio* vio, my_bool onoff);
/* Whenever we should retry the last read/write operation. */
my_bool vio_ssl_should_retry(st_vio* vio);
/* When the workday is over... */
int vio_ssl_close(st_vio* vio);
/* Return last error number */
int vio_ssl_errno(st_vio *vio);
my_bool vio_ssl_peer_addr(st_vio * vio, char *buf);
void vio_ssl_in_addr(st_vio *vio, struct in_addr *in);
/* Return 1 if there is data to be read */
my_bool vio_ssl_poll_read(st_vio *vio,uint timeout);
#ifdef HAVE_OPENSSL
/* Single copy for server */
struct st_VioSSLAcceptorFd
{
SSL_CTX* ssl_context_;
SSL_METHOD* ssl_method_;
struct st_VioSSLAcceptorFd* session_id_context_;
enum {
state_connect = 1,
state_accept = 2
};
BIO* bio_;
char *ssl_cip_;
char desc_[100];
st_vio* sd_;
/* function pointers which are only once for SSL server */
// struct st_vio *(*sslaccept)(struct st_VioSSLAcceptorFd*,st_vio*);
};
/* One copy for client */
struct st_VioSSLConnectorFd
{
BIO* bio_;
gptr ssl_;
SSL_CTX* ssl_context_;
SSL_METHOD* ssl_method_;
/* function pointers which are only once for SSL client */
};
struct st_vio *sslaccept(struct st_VioSSLAcceptorFd*, struct st_vio*);
struct st_vio *sslconnect(struct st_VioSSLConnectorFd*, struct st_vio*);
#else /* HAVE_OPENSSL */
/* This dummy is required to maintain proper size of st_mysql in mysql.h */
struct st_VioSSLConnectorFd {};
#endif /* HAVE_OPENSSL */
struct st_VioSSLConnectorFd *new_VioSSLConnectorFd(
const char* key_file,const char* cert_file,const char* ca_file,const char* ca_path);
struct st_VioSSLAcceptorFd *new_VioSSLAcceptorFd(
const char* key_file,const char* cert_file,const char* ca_file,const char* ca_path);
struct st_vio* new_VioSSL(struct st_VioSSLAcceptorFd* fd, struct st_vio * sd,int state);
static int
init_bio_(struct st_VioSSLAcceptorFd* fd, struct st_vio* sd, int state, int bio_flags);
static void
report_errors();
#ifdef __cplusplus
}
#endif
#endif /* HAVE_OPENSSL */
#ifndef __WIN__
#define HANDLE void *
#endif
/* This structure is for every connection on both sides */
struct st_vio
{
my_socket sd; /* my_socket - real or imaginary */
HANDLE hPipe;
my_bool localhost; /* Are we from localhost? */
int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */
struct sockaddr_in local; /* Local internet address */
struct sockaddr_in remote; /* Remote internet address */
enum enum_vio_type type; /* Type of connection */
char desc[30]; /* String description */
#ifdef HAVE_VIO
/* function pointers. They are similar for socket/SSL/whatever */
void (*viodelete)(st_vio *);
int(*vioerrno)(st_vio*);
int(*read)(st_vio*, gptr, int);
int(*write)(st_vio*, gptr, int);
int(*vioblocking)(st_vio*, my_bool);
my_bool(*is_blocking)(st_vio*);
int(*viokeepalive)(st_vio *, my_bool);
int(*fastsend)(st_vio *);
my_bool(*peer_addr)(st_vio*, gptr);
void(*in_addr)(st_vio*, struct in_addr*);
my_bool(*should_retry)(st_vio *);
int(*vioclose)(st_vio *);
my_bool(*poll_read)(st_vio *,uint);
#ifdef HAVE_OPENSSL
BIO* bio_;
SSL* ssl_;
my_bool open_;
#endif /* HAVE_OPENSSL */
#endif /* HAVE_VIO */
};
...@@ -25,9 +25,6 @@ ...@@ -25,9 +25,6 @@
#include "my_net.h" /* needed because of struct in_addr */ #include "my_net.h" /* needed because of struct in_addr */
#ifdef HAVE_VIO
#include <Vio.h> /* Full VIO interface */
#else
/* Simple vio interface in C; The functions are implemented in violite.c */ /* Simple vio interface in C; The functions are implemented in violite.c */
...@@ -35,14 +32,8 @@ ...@@ -35,14 +32,8 @@
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#ifndef Vio_defined
#define Vio_defined
struct st_vio; /* Only C */
typedef struct st_vio Vio;
#endif
enum enum_vio_type { VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET, enum enum_vio_type { VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET,
VIO_TYPE_NAMEDPIPE, VIO_TYPE_SSL}; VIO_TYPE_NAMEDPIPE, VIO_TYPE_SSL};
Vio* vio_new(my_socket sd, Vio* vio_new(my_socket sd,
enum enum_vio_type type, enum enum_vio_type type,
...@@ -87,7 +78,7 @@ my_bool vio_should_retry( Vio* vio); ...@@ -87,7 +78,7 @@ my_bool vio_should_retry( Vio* vio);
/* /*
* When the workday is over... * When the workday is over...
*/ */
int vio_close( Vio* vio); int vio_close(Vio* vio);
/* /*
* Short text description of the socket for those, who are curious.. * Short text description of the socket for those, who are curious..
*/ */
...@@ -97,15 +88,15 @@ const char* vio_description( Vio* vio); ...@@ -97,15 +88,15 @@ const char* vio_description( Vio* vio);
enum enum_vio_type vio_type(Vio* vio); enum enum_vio_type vio_type(Vio* vio);
/* Return last error number */ /* Return last error number */
int vio_errno(Vio *vio); int vio_errno(Vio*vio);
/* Get socket number */ /* Get socket number */
my_socket vio_fd(Vio *vio); my_socket vio_fd(Vio*vio);
/* /*
* Remote peer's address and name in text form. * Remote peer's address and name in text form.
*/ */
my_bool vio_peer_addr(Vio * vio, char *buf); my_bool vio_peer_addr(Vio* vio, char *buf);
/* Remotes in_addr */ /* Remotes in_addr */
...@@ -117,5 +108,154 @@ my_bool vio_poll_read(Vio *vio,uint timeout); ...@@ -117,5 +108,154 @@ my_bool vio_poll_read(Vio *vio,uint timeout);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* HAVE_VIO */
#endif /* vio_violite_h_ */ #endif /* vio_violite_h_ */
#ifdef HAVE_VIO
#ifndef DONT_MAP_VIO
#define vio_delete(vio) (vio)->viodelete(vio)
#define vio_errno(vio) (vio)->vioerrno(vio)
#define vio_read(vio, buf, size) (vio)->read(vio,buf,size)
#define vio_write(vio, buf, size) (vio)->write(vio, buf, size)
#define vio_blocking(vio, set_blocking_mode) (vio)->vioblocking(vio, set_blocking_mode)
#define vio_is_blocking(vio) (vio)->is_blocking(vio)
#define vio_fastsend(vio) (vio)->fastsend(vio)
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
#define vio_should_retry(vio) (vio)->should_retry(vio)
#define vio_close(vio) ((vio)->vioclose)(vio)
#define vio_peer_addr(vio, buf) (vio)->peer_addr(vio, buf)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
#define vio_poll_read(vio,timeout) (vio)->poll_read(vio,timeout)
#endif /* !DONT_MAP_VIO */
#endif /* HAVE_VIO */
#ifdef HAVE_OPENSSL
#include <openssl/x509.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/asn1.h>
#include "my_net.h" /* needed because of struct in_addr */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
void vio_ssl_delete(Vio* vio);
#ifdef EMBEDDED_LIBRARY
void vio_reset(Vio *vio);
#endif
int vio_ssl_read(Vio* vio,gptr buf, int size);
int vio_ssl_write(Vio* vio,const gptr buf,int size);
int vio_ssl_blocking(Vio* vio,my_bool onoff);
my_bool vio_ssl_is_blocking(Vio* vio);
/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible. */
int vio_ssl_fastsend(Vio* vio);
/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible. */
int vio_ssl_keepalive(Vio* vio, my_bool onoff);
/* Whenever we should retry the last read/write operation. */
my_bool vio_ssl_should_retry(Vio* vio);
/* When the workday is over... */
int vio_ssl_close(Vio* vio);
/* Return last error number */
int vio_ssl_errno(Vio *vio);
my_bool vio_ssl_peer_addr(Vio* vio, char *buf);
void vio_ssl_in_addr(Vio *vio, struct in_addr *in);
/* Return 1 if there is data to be read */
my_bool vio_ssl_poll_read(Vio *vio,uint timeout);
#ifdef HAVE_OPENSSL
/* Single copy for server */
struct st_VioSSLAcceptorFd
{
SSL_CTX* ssl_context_;
SSL_METHOD* ssl_method_;
struct st_VioSSLAcceptorFd* session_id_context_;
enum {
state_connect = 1,
state_accept = 2
};
BIO* bio_;
char *ssl_cip_;
char desc_[100];
Vio* sd_;
/* function pointers which are only once for SSL server
Vio*(*sslaccept)(struct st_VioSSLAcceptorFd*,Vio*); */
};
/* One copy for client */
struct st_VioSSLConnectorFd
{
BIO* bio_;
gptr ssl_;
SSL_CTX* ssl_context_;
SSL_METHOD* ssl_method_;
/* function pointers which are only once for SSL client */
};
Vio *sslaccept(struct st_VioSSLAcceptorFd*, Vio*);
Vio *sslconnect(struct st_VioSSLConnectorFd*, Vio*);
#else /* HAVE_OPENSSL */
/* This dummy is required to maintain proper size of st_mysql in mysql.h */
struct st_VioSSLConnectorFd {};
#endif /* HAVE_OPENSSL */
struct st_VioSSLConnectorFd *new_VioSSLConnectorFd(
const char* key_file,const char* cert_file,const char* ca_file,const char* ca_path);
struct st_VioSSLAcceptorFd *new_VioSSLAcceptorFd(
const char* key_file,const char* cert_file,const char* ca_file,const char* ca_path);
Vio* new_VioSSL(struct st_VioSSLAcceptorFd* fd, Vio* sd,int state);
//static int
//init_bio_(struct st_VioSSLAcceptorFd* fd, Vio* sd, int state, int bio_flags);
//void report_errors();
#ifdef __cplusplus
}
#endif
#endif /* HAVE_OPENSSL */
#ifndef __WIN__
#define HANDLE void *
#endif
/* This structure is for every connection on both sides */
struct st_vio
{
my_socket sd; /* my_socket - real or imaginary */
HANDLE hPipe;
my_bool localhost; /* Are we from localhost? */
int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */
struct sockaddr_in local; /* Local internet address */
struct sockaddr_in remote; /* Remote internet address */
enum enum_vio_type type; /* Type of connection */
char desc[30]; /* String description */
#ifdef HAVE_VIO
/* function pointers. They are similar for socket/SSL/whatever */
void (*viodelete)(Vio*);
int(*vioerrno)(Vio*);
int(*read)(Vio*, gptr, int);
int(*write)(Vio*, gptr, int);
int(*vioblocking)(Vio*, my_bool);
my_bool(*is_blocking)(Vio*);
int(*viokeepalive)(Vio*, my_bool);
int(*fastsend)(Vio*);
my_bool(*peer_addr)(Vio*, gptr);
void(*in_addr)(Vio*, struct in_addr*);
my_bool(*should_retry)(Vio*);
int(*vioclose)(Vio*);
my_bool(*poll_read)(Vio*,uint);
#ifdef HAVE_OPENSSL
BIO* bio_;
SSL* ssl_;
my_bool open_;
#endif /* HAVE_OPENSSL */
#endif /* HAVE_VIO */
};
...@@ -94,10 +94,12 @@ mutex_test_and_set( ...@@ -94,10 +94,12 @@ mutex_test_and_set(
/* In assembly we use the so-called AT & T syntax where /* In assembly we use the so-called AT & T syntax where
the order of operands is inverted compared to the ordinary Intel the order of operands is inverted compared to the ordinary Intel
syntax. The 'l' after the mnemonics denotes a 32-bit operation. */ syntax. The 'l' after the mnemonics denotes a 32-bit operation.
The line after the code tells which values come out of the asm
code, and the second line tells the input to the asm code. */
asm volatile("movl $1, %%eax; xchgl (%%ecx), %%eax" : asm volatile("movl $1, %%eax; xchgl (%%ecx), %%eax" :
"=eax" (res): "=eax" (res), "=m" (*lw) :
"ecx" (lw)); "ecx" (lw));
return(res); return(res);
#else #else
...@@ -132,12 +134,26 @@ mutex_reset_lock_word( ...@@ -132,12 +134,26 @@ mutex_reset_lock_word(
__asm MOV EDX, 0 __asm MOV EDX, 0
__asm MOV ECX, lw __asm MOV ECX, lw
__asm XCHG EDX, DWORD PTR [ECX] __asm XCHG EDX, DWORD PTR [ECX]
#elif defined(__GNUC__) && defined(UNIV_INTEL_X86)
ulint* lw;
lw = &(mutex->lock_word);
/* In assembly we use the so-called AT & T syntax where
the order of operands is inverted compared to the ordinary Intel
syntax. The 'l' after the mnemonics denotes a 32-bit operation. */
asm volatile("movl $0, %%eax; xchgl (%%ecx), %%eax" :
"=m" (*lw) :
"ecx" (lw) :
"eax"); /* gcc does not seem to understand
that our asm code resets eax: tell it
explicitly that after the third ':' */
#else #else
mutex->lock_word = 0; mutex->lock_word = 0;
#if !(defined(__GNUC__) && defined(UNIV_INTEL_X86))
os_fast_mutex_unlock(&(mutex->os_fast_mutex)); os_fast_mutex_unlock(&(mutex->os_fast_mutex));
#endif #endif
#endif
} }
/********************************************************************** /**********************************************************************
......
...@@ -34,9 +34,6 @@ LTCHARSET_OBJS= ${CHARSET_OBJS:.o=.lo} ...@@ -34,9 +34,6 @@ LTCHARSET_OBJS= ${CHARSET_OBJS:.o=.lo}
target_sources = libmysql.c net.c password.c \ target_sources = libmysql.c net.c password.c \
get_password.c errmsg.c get_password.c errmsg.c
#quick easy dirty hack to make it work after Tonu's changes
#In my opinion, violite.c really belongs into mysys - Sasha
sqlobjects = violite.lo
mystringsobjects = strmov.lo strxmov.lo strnmov.lo strmake.lo strend.lo \ mystringsobjects = strmov.lo strxmov.lo strnmov.lo strmake.lo strend.lo \
strnlen.lo strfill.lo is_prefix.lo \ strnlen.lo strfill.lo is_prefix.lo \
int2str.lo str2int.lo strinstr.lo strcont.lo \ int2str.lo str2int.lo strinstr.lo strcont.lo \
......
...@@ -1070,13 +1070,15 @@ mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, ...@@ -1070,13 +1070,15 @@ mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert,
mysql->options.ssl_cert = cert==0 ? 0 : my_strdup(cert,MYF(0)); mysql->options.ssl_cert = cert==0 ? 0 : my_strdup(cert,MYF(0));
mysql->options.ssl_ca = ca==0 ? 0 : my_strdup(ca,MYF(0)); mysql->options.ssl_ca = ca==0 ? 0 : my_strdup(ca,MYF(0));
mysql->options.ssl_capath = capath==0 ? 0 : my_strdup(capath,MYF(0)); mysql->options.ssl_capath = capath==0 ? 0 : my_strdup(capath,MYF(0));
mysql->options.use_ssl = true; mysql->options.use_ssl = TRUE;
mysql->connector_fd = new_VioSSLConnectorFd(key, cert, ca, capath); mysql->connector_fd = (gptr)new_VioSSLConnectorFd(key, cert, ca, capath);
DBUG_PRINT("info",("mysql_ssl_set, context: %p",((struct st_VioSSLConnectorFd *)(mysql->connector_fd))->ssl_context_));
return 0; return 0;
} }
/************************************************************************** /**************************************************************************
**************************************************************************/ **************************************************************************
char * STDCALL char * STDCALL
mysql_ssl_cipher(MYSQL *mysql) mysql_ssl_cipher(MYSQL *mysql)
...@@ -1085,10 +1087,10 @@ mysql_ssl_cipher(MYSQL *mysql) ...@@ -1085,10 +1087,10 @@ mysql_ssl_cipher(MYSQL *mysql)
} }
/************************************************************************** **************************************************************************
** Free strings in the SSL structure and clear 'use_ssl' flag. ** Free strings in the SSL structure and clear 'use_ssl' flag.
** NB! Errors are not reported until you do mysql_real_connect. ** NB! Errors are not reported until you do mysql_real_connect.
**************************************************************************/ **************************************************************************
int STDCALL int STDCALL
mysql_ssl_clear(MYSQL *mysql) mysql_ssl_clear(MYSQL *mysql)
...@@ -1105,7 +1107,7 @@ mysql_ssl_clear(MYSQL *mysql) ...@@ -1105,7 +1107,7 @@ mysql_ssl_clear(MYSQL *mysql)
mysql->connector_fd->delete(); mysql->connector_fd->delete();
mysql->connector_fd = 0; mysql->connector_fd = 0;
return 0; return 0;
} }*/
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
/************************************************************************** /**************************************************************************
...@@ -1496,11 +1498,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -1496,11 +1498,9 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
goto error; goto error;
/* Do the SSL layering. */ /* Do the SSL layering. */
DBUG_PRINT("info", ("IO layer change in progress...")); DBUG_PRINT("info", ("IO layer change in progress..."));
VioSSLConnectorFd* connector_fd = (VioSSLConnectorFd*) DBUG_PRINT("info", ("IO context %p",((struct st_VioSSLConnectorFd*)mysql->connector_fd)->ssl_context_));
(mysql->connector_fd); mysql->net.vio = sslconnect((struct st_VioSSLConnectorFd*)(mysql->connector_fd),mysql->net.vio);
VioSocket* vio_socket = (VioSocket*)(mysql->net.vio); DBUG_PRINT("info", ("IO layer change done!"));
VioSSL* vio_ssl = connector_fd->connect(vio_socket);
mysql->net.vio = (NetVio*)(vio_ssl);
} }
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
...@@ -1680,8 +1680,8 @@ mysql_close(MYSQL *mysql) ...@@ -1680,8 +1680,8 @@ mysql_close(MYSQL *mysql)
bzero((char*) &mysql->options,sizeof(mysql->options)); bzero((char*) &mysql->options,sizeof(mysql->options));
mysql->net.vio = 0; mysql->net.vio = 0;
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
((VioConnectorFd*)(mysql->connector_fd))->delete(); /* ((VioConnectorFd*)(mysql->connector_fd))->delete();
mysql->connector_fd = 0; mysql->connector_fd = 0;*/
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
if (mysql->free_me) if (mysql->free_me)
my_free((gptr) mysql,MYF(0)); my_free((gptr) mysql,MYF(0));
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <winsock.h> #include <winsock.h>
#endif #endif
#include <global.h> #include <global.h>
#include <mysql_com.h>
#include <violite.h> #include <violite.h>
#include <my_sys.h> #include <my_sys.h>
#include <m_string.h> #include <m_string.h>
......
...@@ -33,7 +33,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\ ...@@ -33,7 +33,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
my_alloc.c safemalloc.c my_fopen.c my_fstream.c \ my_alloc.c safemalloc.c my_fopen.c my_fstream.c \
my_error.c errors.c my_div.c my_messnc.c \ my_error.c errors.c my_div.c my_messnc.c \
mf_format.c mf_same.c mf_dirname.c mf_fn_ext.c \ mf_format.c mf_same.c mf_dirname.c mf_fn_ext.c \
my_symlink.c \ my_symlink.c my_symlink2.c \
mf_pack.c mf_pack2.c mf_unixpath.c mf_stripp.c \ mf_pack.c mf_pack2.c mf_unixpath.c mf_stripp.c \
mf_casecnv.c mf_soundex.c mf_wcomp.c mf_wfile.c \ mf_casecnv.c mf_soundex.c mf_wcomp.c mf_wfile.c \
mf_qsort.c mf_qsort2.c mf_sort.c \ mf_qsort.c mf_qsort2.c mf_sort.c \
......
...@@ -20,19 +20,22 @@ ...@@ -20,19 +20,22 @@
#include "mysys_priv.h" #include "mysys_priv.h"
#include <m_string.h> #include <m_string.h>
/* Formaterar ett filnamn i avsende p} ett annat namn */ /*
/* Klarar {ven to = name */ Copy directory and/or extension between filenames.
/* Denna funktion r|r inte p} utg}ngsnamnet */ (For the meaning of 'flag', check mf_format.c)
'to' may be equal to 'name'.
Returns 'to'.
*/
my_string fn_same(my_string toname, const char *name, int flag) my_string fn_same(char *to, const char *name, int flag)
{ {
char dev[FN_REFLEN]; char dev[FN_REFLEN];
const char *ext; const char *ext;
DBUG_ENTER("fn_same"); DBUG_ENTER("fn_same");
DBUG_PRINT("mfunkt",("to: %s name: %s flag: %d",toname,name,flag)); DBUG_PRINT("enter",("to: %s name: %s flag: %d",to,name,flag));
if ((ext=strrchr(name+dirname_part(dev,name),FN_EXTCHAR)) == 0) if ((ext=strrchr(name+dirname_part(dev,name),FN_EXTCHAR)) == 0)
ext=""; ext="";
DBUG_RETURN(fn_format(toname,toname,dev,ext,flag)); DBUG_RETURN(fn_format(to,to,dev,ext,flag));
} /* fn_same */ } /* fn_same */
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "mysys_priv.h" #include "mysys_priv.h"
#include "mysys_err.h" #include "mysys_err.h"
#include <m_string.h> #include <m_string.h>
#include <errno.h>
#ifdef HAVE_REALPATH #ifdef HAVE_REALPATH
#include <sys/param.h> #include <sys/param.h>
#include <sys/stat.h> #include <sys/stat.h>
...@@ -26,13 +27,16 @@ ...@@ -26,13 +27,16 @@
/* /*
Reads the content of a symbolic link Reads the content of a symbolic link
If the file is not a symbolic link, return the original file name in to. If the file is not a symbolic link, return the original file name in to.
Returns: 0 if table was a symlink,
1 if table was a normal file
-1 on error.
*/ */
int my_readlink(char *to, const char *filename, myf MyFlags) int my_readlink(char *to, const char *filename, myf MyFlags)
{ {
#ifndef HAVE_READLINK #ifndef HAVE_READLINK
strmov(to,filename); strmov(to,filename);
return 0; return 1;
#else #else
int result=0; int result=0;
int length; int length;
...@@ -43,6 +47,7 @@ int my_readlink(char *to, const char *filename, myf MyFlags) ...@@ -43,6 +47,7 @@ int my_readlink(char *to, const char *filename, myf MyFlags)
/* Don't give an error if this wasn't a symlink */ /* Don't give an error if this wasn't a symlink */
if ((my_errno=errno) == EINVAL) if ((my_errno=errno) == EINVAL)
{ {
result= 1;
strmov(to,filename); strmov(to,filename);
} }
else else
...@@ -81,44 +86,6 @@ int my_symlink(const char *content, const char *linkname, myf MyFlags) ...@@ -81,44 +86,6 @@ int my_symlink(const char *content, const char *linkname, myf MyFlags)
#endif /* HAVE_READLINK */ #endif /* HAVE_READLINK */
} }
/*
Create a file and a symbolic link that points to this file
If linkname is a null pointer or equal to filename, we don't
create a link.
*/
File my_create_with_symlink(const char *linkname, const char *filename,
int createflags, int access_flags, myf MyFlags)
{
File file;
int tmp_errno;
DBUG_ENTER("my_create_with_symlink");
if ((file=my_create(filename, createflags, access_flags, MyFlags)) >= 0)
{
/* Test if we should create a link */
if (linkname && strcmp(linkname,filename))
{
/* Delete old link/file */
if (MyFlags & MY_DELETE_OLD)
my_delete(linkname, MYF(0));
/* Create link */
if (my_symlink(filename, linkname, MyFlags))
{
/* Fail, remove everything we have done */
tmp_errno=my_errno;
my_close(file,MYF(0));
my_delete(filename, MYF(0));
file= -1;
my_errno=tmp_errno;
}
}
}
DBUG_RETURN(file);
}
/* /*
Resolve all symbolic links in path Resolve all symbolic links in path
'to' may be equal to 'filename' 'to' may be equal to 'filename'
...@@ -162,7 +129,7 @@ int my_realpath(char *to, const char *filename, myf MyFlags) ...@@ -162,7 +129,7 @@ int my_realpath(char *to, const char *filename, myf MyFlags)
result= -1; result= -1;
} }
} }
return result; DBUG_RETURN(result);
#else #else
if (to != filename) if (to != filename)
strmov(to,filename); strmov(to,filename);
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*
Advanced symlink handling.
This is used in MyISAM to let users symlinks tables to different disk.
The main idea with these functions is to automaticly create, delete and
rename files and symlinks like they would be one unit.
*/
#include "mysys_priv.h"
#include <m_string.h>
File my_create_with_symlink(const char *linkname, const char *filename,
int createflags, int access_flags, myf MyFlags)
{
File file;
int tmp_errno;
DBUG_ENTER("my_create_with_symlink");
if ((file=my_create(filename, createflags, access_flags, MyFlags)) >= 0)
{
/* Test if we should create a link */
if (linkname && strcmp(linkname,filename))
{
/* Delete old link/file */
if (MyFlags & MY_DELETE_OLD)
my_delete(linkname, MYF(0));
/* Create link */
if (my_symlink(filename, linkname, MyFlags))
{
/* Fail, remove everything we have done */
tmp_errno=my_errno;
my_close(file,MYF(0));
my_delete(filename, MYF(0));
file= -1;
my_errno=tmp_errno;
}
}
}
DBUG_RETURN(file);
}
/*
If the file was a symlink, delete both symlink and the file which the
symlink pointed to.
*/
int my_delete_with_symlink(const char *name, myf MyFlags)
{
char link_name[FN_REFLEN];
int was_symlink= !my_readlink(link_name, name, MYF(0));
int result;
DBUG_ENTER("my_delete_with_symlink");
if (!(result=my_delete(name, MyFlags)))
{
if (was_symlink)
result=my_delete(link_name, MyFlags);
}
DBUG_RETURN(result);
}
/*
If the file is a normal file, just rename it.
If the file is a symlink:
- Create a new file with the name 'to' that points at
symlink_dir/basename(to)
- Rename the symlinked file to symlink_dir/basename(to)
- Delete 'from'
If something goes wrong, restore everything.
*/
int my_rename_with_symlink(const char *from, const char *to, myf MyFlags)
{
#ifdef HAVE_READLINK
return my_rename(from, to, MyFlags);
#else
char link_name[FN_REFLEN], tmp_name[FN_REFLEN];
int was_symlink= !my_readlink(link_name, name, MYF(0));
int result;
DBUG_ENTER("my_rename_with_symlink");
if (!was_symlink)
DBUG_RETURN(my_rename(from, to, MyFlags));
/* Change filename that symlink pointed to */
strmov(tmp_name, to);
fn_same(tmp_name,link_name,1); /* Copy dir */
/* Create new symlink */
if (my_symlink(tmp_name, to, MyFlags))
DBUG_RETURN(-1);
/*
Rename symlinked file if the base name didn't change.
This can happen if you use this function where 'from' and 'to' has
the same basename and different directories.
*/
if (strcmp(link_name, tmp_name) && my_rename(link_name, tmp_name, MyFlags))
{
my_delete(to, MyFlags); /* Remove created symlink */
DBUG_RETURN(-1);
}
/* Remove original symlink */
if (my_delete(from, MyFlags))
{
/* Remove created link */
my_delete(to, MyFlags);
/* Rename file back */
if (strcmp(link_name, tmp_name))
(void) my_rename(tmp_name, link_name, MyFlags);
}
DBUG_RETURN(result);
#endif /* HAVE_READLINK */
}
...@@ -39,8 +39,8 @@ LDADD = ../isam/libnisam.a \ ...@@ -39,8 +39,8 @@ LDADD = ../isam/libnisam.a \
../mysys/libmysys.a \ ../mysys/libmysys.a \
../dbug/libdbug.a \ ../dbug/libdbug.a \
../regex/libregex.a \ ../regex/libregex.a \
../strings/libmystrings.a ../strings/libmystrings.a \
#../vio/libvio.a ../vio/libvio.a
mysqld_LDADD = @MYSQLD_EXTRA_LDFLAGS@ \ mysqld_LDADD = @MYSQLD_EXTRA_LDFLAGS@ \
@bdb_libs@ @innodb_libs@ @pstack_libs@ \ @bdb_libs@ @innodb_libs@ @pstack_libs@ \
...@@ -64,7 +64,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \ ...@@ -64,7 +64,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \ item_cmpfunc.cc item_strfunc.cc item_timefunc.cc \
thr_malloc.cc item_create.cc \ thr_malloc.cc item_create.cc \
field.cc key.cc sql_class.cc sql_list.cc \ field.cc key.cc sql_class.cc sql_list.cc \
net_serv.cc violite.c net_pkg.cc lock.cc my_lock.c \ net_serv.cc net_pkg.cc lock.cc my_lock.c \
sql_string.cc sql_manager.cc sql_map.cc \ sql_string.cc sql_manager.cc sql_map.cc \
mysqld.cc password.c hash_filo.cc hostname.cc \ mysqld.cc password.c hash_filo.cc hostname.cc \
convert.cc sql_parse.cc sql_yacc.yy \ convert.cc sql_parse.cc sql_yacc.yy \
...@@ -86,7 +86,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \ ...@@ -86,7 +86,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc \
md5.c stacktrace.c md5.c stacktrace.c
gen_lex_hash_SOURCES = gen_lex_hash.cc gen_lex_hash_SOURCES = gen_lex_hash.cc
gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS) gen_lex_hash_LDADD = $(LDADD) $(CXXLDFLAGS)
mysqlbinlog_SOURCES = mysqlbinlog.cc mini_client.cc net_serv.cc violite.c \ mysqlbinlog_SOURCES = mysqlbinlog.cc mini_client.cc net_serv.cc \
mini_client_errors.c password.c mini_client_errors.c password.c
mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) $(mysqld_LDADD) mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS) $(mysqld_LDADD)
......
...@@ -28,6 +28,8 @@ ...@@ -28,6 +28,8 @@
#include <odbcinst.h> #include <odbcinst.h>
#endif #endif
#include <global.h> #include <global.h>
#include <mysql_com.h>
#include <violite.h>
#include <my_sys.h> #include <my_sys.h>
#include <mysys_err.h> #include <mysys_err.h>
#include <m_string.h> #include <m_string.h>
...@@ -37,7 +39,6 @@ ...@@ -37,7 +39,6 @@
#include "mysql_version.h" #include "mysql_version.h"
#include "mysqld_error.h" #include "mysqld_error.h"
#include "errmsg.h" #include "errmsg.h"
#include <violite.h>
extern "C" { // Because of SCO 3.2V4.2 extern "C" { // Because of SCO 3.2V4.2
#include <sys/stat.h> #include <sys/stat.h>
...@@ -748,18 +749,18 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -748,18 +749,18 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
/* Oops.. are we careful enough to not send ANY information */ /* Oops.. are we careful enough to not send ANY information */
/* without encryption? */ /* without encryption? */
if (client_flag & CLIENT_SSL) /* if (client_flag & CLIENT_SSL)
{ {
if (my_net_write(net,buff,(uint) (2)) || net_flush(net)) if (my_net_write(net,buff,(uint) (2)) || net_flush(net))
goto error; goto error;*/
/* Do the SSL layering. */ /* Do the SSL layering. */
DBUG_PRINT("info", ("IO layer change in progress...")); /* DBUG_PRINT("info", ("IO layer change in progress..."));
VioSSLConnectorFd* connector_fd = (VioSSLConnectorFd*) VioSSLConnectorFd* connector_fd = (VioSSLConnectorFd*)
(mysql->connector_fd); (mysql->connector_fd);
VioSocket* vio_socket = (VioSocket*)(mysql->net.vio); VioSocket* vio_socket = (VioSocket*)(mysql->net.vio);
VioSSL* vio_ssl = connector_fd->connect(vio_socket); VioSSL* vio_ssl = connector_fd->connect(vio_socket);
mysql->net.vio = (NetVio*)(vio_ssl); mysql->net.vio = (NetVio*)(vio_ssl);
} }*/
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
int3store(buff+2,max_allowed_packet); int3store(buff+2,max_allowed_packet);
...@@ -829,8 +830,8 @@ mc_mysql_close(MYSQL *mysql) ...@@ -829,8 +830,8 @@ mc_mysql_close(MYSQL *mysql)
bzero((char*) &mysql->options,sizeof(mysql->options)); bzero((char*) &mysql->options,sizeof(mysql->options));
mysql->net.vio = 0; mysql->net.vio = 0;
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
((VioConnectorFd*)(mysql->connector_fd))->delete(); /* ((VioConnectorFd*)(mysql->connector_fd))->delete();
mysql->connector_fd = 0; mysql->connector_fd = 0;*/
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
if (mysql->free_me) if (mysql->free_me)
my_free((gptr) mysql,MYF(0)); my_free((gptr) mysql,MYF(0));
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <thr_lock.h> #include <thr_lock.h>
#include <my_base.h> /* Needed by field.h */ #include <my_base.h> /* Needed by field.h */
#include <my_bitmap.h> #include <my_bitmap.h>
#include <violite.h>
#undef write // remove pthread.h macro definition for EMX #undef write // remove pthread.h macro definition for EMX
...@@ -35,6 +34,7 @@ typedef ulong key_map; /* Used for finding keys */ ...@@ -35,6 +34,7 @@ typedef ulong key_map; /* Used for finding keys */
typedef ulong key_part_map; /* Used for finding key parts */ typedef ulong key_part_map; /* Used for finding key parts */
#include "mysql_com.h" #include "mysql_com.h"
#include <violite.h>
#include "unireg.h" #include "unireg.h"
void init_sql_alloc(MEM_ROOT *root, uint block_size, uint pre_alloc_size); void init_sql_alloc(MEM_ROOT *root, uint block_size, uint pre_alloc_size);
......
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include <nisam.h> #include <nisam.h>
#include <thr_alarm.h> #include <thr_alarm.h>
#include <ft_global.h> #include <ft_global.h>
#include "vio.h"
#ifndef DBUG_OFF #ifndef DBUG_OFF
#define ONE_THREAD #define ONE_THREAD
...@@ -245,7 +244,7 @@ static char *opt_ssl_key = 0; ...@@ -245,7 +244,7 @@ static char *opt_ssl_key = 0;
static char *opt_ssl_cert = 0; static char *opt_ssl_cert = 0;
static char *opt_ssl_ca = 0; static char *opt_ssl_ca = 0;
static char *opt_ssl_capath = 0; static char *opt_ssl_capath = 0;
static struct st_VioSSLAcceptorFd * ssl_acceptor_fd = 0; struct st_VioSSLAcceptorFd * ssl_acceptor_fd = 0;
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <winsock.h> #include <winsock.h>
#endif #endif
#include <global.h> #include <global.h>
#include <mysql_com.h>
#include <violite.h> #include <violite.h>
#include <my_sys.h> #include <my_sys.h>
#include <m_string.h> #include <m_string.h>
...@@ -39,7 +40,6 @@ ...@@ -39,7 +40,6 @@
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include <violite.h>
#include <assert.h> #include <assert.h>
extern "C" { extern "C" {
......
...@@ -963,36 +963,37 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len) ...@@ -963,36 +963,37 @@ static int exec_event(THD* thd, NET* net, MASTER_INFO* mi, int event_len)
// sanity check to make sure the master did not get a really bad // sanity check to make sure the master did not get a really bad
// error on the query // error on the query
if(!check_expected_error(thd, (expected_error = qev->error_code))) if (!check_expected_error(thd, (expected_error = qev->error_code)))
{
mysql_parse(thd, thd->query, q_len);
if (expected_error !=
(actual_error = thd->net.last_errno) && expected_error)
{ {
mysql_parse(thd, thd->query, q_len); const char* errmsg = "Slave: did not get the expected error\
if (expected_error != running query from master - expected: '%s'(%d), got '%s'(%d)";
(actual_error = thd->net.last_errno) && expected_error) sql_print_error(errmsg, ER_SAFE(expected_error),
{ expected_error,
const char* errmsg = "Slave: did not get the expected error\ actual_error ? thd->net.last_error:"no error",
running query from master - expected: '%s', got '%s'"; actual_error);
sql_print_error(errmsg, ER(expected_error), thd->query_error = 1;
actual_error ? thd->net.last_error:"no error"
);
thd->query_error = 1;
}
else if (expected_error == actual_error)
{
thd->query_error = 0;
*last_slave_error = 0;
last_slave_errno = 0;
}
} }
else // master could be inconsistent, abort and tell DBA to else if (expected_error == actual_error)
// check/fix it
{ {
thd->db = thd->query = 0; thd->query_error = 0;
thd->convert_set = 0; *last_slave_error = 0;
close_thread_tables(thd); last_slave_errno = 0;
free_root(&thd->mem_root,0);
delete ev;
return 1;
} }
}
else
{
// master could be inconsistent, abort and tell DBA to check/fix it
thd->db = thd->query = 0;
thd->convert_set = 0;
close_thread_tables(thd);
free_root(&thd->mem_root,0);
delete ev;
return 1;
}
} }
thd->db = 0; // prevent db from being freed thd->db = 0; // prevent db from being freed
thd->query = 0; // just to be sure thd->query = 0; // just to be sure
......
...@@ -60,7 +60,7 @@ const char *command_name[]={ ...@@ -60,7 +60,7 @@ const char *command_name[]={
bool volatile abort_slave = 0; bool volatile abort_slave = 0;
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
extern VioSSLAcceptorFd* ssl_acceptor_fd; extern struct st_VioSSLAcceptorFd * ssl_acceptor_fd;
#endif /* HAVE_OPENSSL */ #endif /* HAVE_OPENSSL */
#ifdef __WIN__ #ifdef __WIN__
...@@ -424,9 +424,7 @@ check_connections(THD *thd) ...@@ -424,9 +424,7 @@ check_connections(THD *thd)
DBUG_PRINT("info", ("Agreed to change IO layer to SSL") ); DBUG_PRINT("info", ("Agreed to change IO layer to SSL") );
/* Do the SSL layering. */ /* Do the SSL layering. */
DBUG_PRINT("info", ("IO layer change in progress...")); DBUG_PRINT("info", ("IO layer change in progress..."));
VioSocket* vio_socket = my_reinterpret_cast(VioSocket*)(net->vio); net->vio = sslaccept(ssl_acceptor_fd, net->vio);
VioSSL* vio_ssl = ssl_acceptor_fd->accept(vio_socket);
net->vio = my_reinterpret_cast(NetVio*) (vio_ssl);
DBUG_PRINT("info", ("Reading user information over SSL layer")); DBUG_PRINT("info", ("Reading user information over SSL layer"));
if ((pkt_len=my_net_read(net)) == packet_error || if ((pkt_len=my_net_read(net)) == packet_error ||
pkt_len < NORMAL_HANDSHAKE_SIZE) pkt_len < NORMAL_HANDSHAKE_SIZE)
......
...@@ -764,14 +764,18 @@ int change_master(THD* thd) ...@@ -764,14 +764,18 @@ int change_master(THD* thd)
// if we change host or port, we must reset the postion // if we change host or port, we must reset the postion
glob_mi.log_file_name[0] = 0; glob_mi.log_file_name[0] = 0;
glob_mi.pos = 4; // skip magic number glob_mi.pos = 4; // skip magic number
glob_mi.pending = 0;
} }
if(lex_mi->log_file_name) if(lex_mi->log_file_name)
strmake(glob_mi.log_file_name, lex_mi->log_file_name, strmake(glob_mi.log_file_name, lex_mi->log_file_name,
sizeof(glob_mi.log_file_name)); sizeof(glob_mi.log_file_name));
if(lex_mi->pos) if(lex_mi->pos)
{
glob_mi.pos = lex_mi->pos; glob_mi.pos = lex_mi->pos;
glob_mi.pending = 0;
}
if(lex_mi->host) if(lex_mi->host)
{ {
strmake(glob_mi.host, lex_mi->host, sizeof(glob_mi.host)); strmake(glob_mi.host, lex_mi->host, sizeof(glob_mi.host));
......
...@@ -38,6 +38,8 @@ ...@@ -38,6 +38,8 @@
#endif #endif
#define ER(X) errmesg[(X)-1000] #define ER(X) errmesg[(X)-1000]
#define ER_SAFE(X) (((X) >= 1000 && (X) < ER_ERROR_MESSAGES + 1000) ? ER(X) : "Invalid error code")
#define ERRMAPP 1 /* Errormap f|r my_error */ #define ERRMAPP 1 /* Errormap f|r my_error */
#define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */ #define LIBLEN FN_REFLEN-FN_LEN /* Max l{ngd p} dev */
......
...@@ -14,20 +14,12 @@ ...@@ -14,20 +14,12 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
INCLUDES = -I$(srcdir)/../include -I../include \ INCLUDES = -I$(srcdir)/../include -I../include $(openssl_includes)
@OPENSSL_INCLUDES@ LDADD = libvio.a $(openssl_libs)
LDADD = libvio.la pkglib_LIBRARIES = libvio.a
pkglib_LTLIBRARIES = libvio.la
noinst_PROGRAMS = noinst_PROGRAMS =
noinst_HEADERS = noinst_HEADERS =
libvio_la_SOURCES = \ libvio_a_SOURCES = vio.c viosocket.c viossl.c viosslfactories.c
Vio.cc VioAcceptorFd.cc \
VioConnectorFd.cc VioFd.cc \
VioHandle.cc VioSSL.cc \
VioSSLFactoriesFd.cc VioSocket.cc \
auto.cc hostnamexx.cc \
vdbug.cc version.cc \
vmem.cc violitexx.cc
OMIT_DEPENDENCIES = pthread.h stdio.h __stdio.h stdlib.h __stdlib.h math.h\ OMIT_DEPENDENCIES = pthread.h stdio.h __stdio.h stdlib.h __stdlib.h math.h\
__math.h time.h __time.h unistd.h __unistd.h types.h \ __math.h time.h __time.h unistd.h __unistd.h types.h \
......
...@@ -23,10 +23,11 @@ ...@@ -23,10 +23,11 @@
#define DONT_MAP_VIO #define DONT_MAP_VIO
#include <global.h> #include <global.h>
#include <mysql_com.h>
#include <violite.h>
#include <errno.h> #include <errno.h>
#include <assert.h> #include <assert.h>
#include <vio.h>
#include <my_sys.h> #include <my_sys.h>
#include <my_net.h> #include <my_net.h>
#include <m_string.h> #include <m_string.h>
...@@ -58,14 +59,14 @@ ...@@ -58,14 +59,14 @@
/* /*
* Helper to fill most of the st_vio* with defaults. * Helper to fill most of the Vio* with defaults.
*/ */
void vio_reset(st_vio* vio, enum enum_vio_type type, void vio_reset(Vio* vio, enum enum_vio_type type,
my_socket sd, HANDLE hPipe, my_socket sd, HANDLE hPipe,
my_bool localhost) my_bool localhost)
{ {
bzero((char*) vio, sizeof(st_vio)); bzero((char*) vio, sizeof(Vio));
vio->type = type; vio->type = type;
vio->sd = sd; vio->sd = sd;
vio->hPipe = hPipe; vio->hPipe = hPipe;
...@@ -102,12 +103,12 @@ if(type == VIO_TYPE_SSL){ ...@@ -102,12 +103,12 @@ if(type == VIO_TYPE_SSL){
/* Open the socket or TCP/IP connection and read the fnctl() status */ /* Open the socket or TCP/IP connection and read the fnctl() status */
st_vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost) Vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost)
{ {
st_vio *vio; Vio *vio;
DBUG_ENTER("vio_new"); DBUG_ENTER("vio_new");
DBUG_PRINT("enter", ("sd=%d", sd)); DBUG_PRINT("enter", ("sd=%d", sd));
if ((vio = (st_vio*) my_malloc(sizeof(*vio),MYF(MY_WME)))) if ((vio = (Vio*) my_malloc(sizeof(*vio),MYF(MY_WME))))
{ {
vio_reset(vio, type, sd, 0, localhost); vio_reset(vio, type, sd, 0, localhost);
sprintf(vio->desc, sprintf(vio->desc,
...@@ -134,11 +135,11 @@ st_vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost) ...@@ -134,11 +135,11 @@ st_vio *vio_new(my_socket sd, enum enum_vio_type type, my_bool localhost)
#ifdef __WIN__ #ifdef __WIN__
st_vio *vio_new_win32pipe(HANDLE hPipe) Vio *vio_new_win32pipe(HANDLE hPipe)
{ {
st_vio *vio; Vio *vio;
DBUG_ENTER("vio_new_handle"); DBUG_ENTER("vio_new_handle");
if ((vio = (st_vio*) my_malloc(sizeof(st_vio),MYF(MY_WME)))) if ((vio = (Vio*) my_malloc(sizeof(Vio),MYF(MY_WME))))
{ {
vio_reset(vio, VIO_TYPE_NAMEDPIPE, 0, hPipe, TRUE); vio_reset(vio, VIO_TYPE_NAMEDPIPE, 0, hPipe, TRUE);
strmov(vio->desc, "named pipe"); strmov(vio->desc, "named pipe");
......
...@@ -24,10 +24,11 @@ ...@@ -24,10 +24,11 @@
#define DONT_MAP_VIO #define DONT_MAP_VIO
#include <global.h> #include <global.h>
#include <mysql_com.h>
#include <errno.h> #include <errno.h>
#include <assert.h> #include <assert.h>
#include <vio.h> #include <violite.h>
#include <my_sys.h> #include <my_sys.h>
#include <my_net.h> #include <my_net.h>
#include <m_string.h> #include <m_string.h>
...@@ -61,7 +62,7 @@ ...@@ -61,7 +62,7 @@
#define HANDLE void * #define HANDLE void *
#endif #endif
void vio_delete(st_vio* vio) void vio_delete(Vio* vio)
{ {
/* It must be safe to delete null pointers. */ /* It must be safe to delete null pointers. */
/* This matches the semantics of C++'s delete operator. */ /* This matches the semantics of C++'s delete operator. */
...@@ -73,13 +74,13 @@ void vio_delete(st_vio* vio) ...@@ -73,13 +74,13 @@ void vio_delete(st_vio* vio)
} }
} }
int vio_errno(st_vio *vio __attribute__((unused))) int vio_errno(Vio *vio __attribute__((unused)))
{ {
return errno; /* On Win32 this mapped to WSAGetLastError() */ return errno; /* On Win32 this mapped to WSAGetLastError() */
} }
int vio_read(st_vio * vio, gptr buf, int size) int vio_read(Vio * vio, gptr buf, int size)
{ {
int r; int r;
DBUG_ENTER("vio_read"); DBUG_ENTER("vio_read");
...@@ -108,7 +109,7 @@ int vio_read(st_vio * vio, gptr buf, int size) ...@@ -108,7 +109,7 @@ int vio_read(st_vio * vio, gptr buf, int size)
} }
int vio_write(st_vio * vio, const gptr buf, int size) int vio_write(Vio * vio, const gptr buf, int size)
{ {
int r; int r;
DBUG_ENTER("vio_write"); DBUG_ENTER("vio_write");
...@@ -136,7 +137,7 @@ int vio_write(st_vio * vio, const gptr buf, int size) ...@@ -136,7 +137,7 @@ int vio_write(st_vio * vio, const gptr buf, int size)
} }
int vio_blocking(st_vio * vio, my_bool set_blocking_mode) int vio_blocking(Vio * vio, my_bool set_blocking_mode)
{ {
int r=0; int r=0;
DBUG_ENTER("vio_blocking"); DBUG_ENTER("vio_blocking");
...@@ -181,7 +182,7 @@ int vio_blocking(st_vio * vio, my_bool set_blocking_mode) ...@@ -181,7 +182,7 @@ int vio_blocking(st_vio * vio, my_bool set_blocking_mode)
} }
my_bool my_bool
vio_is_blocking(st_vio * vio) vio_is_blocking(Vio * vio)
{ {
my_bool r; my_bool r;
DBUG_ENTER("vio_is_blocking"); DBUG_ENTER("vio_is_blocking");
...@@ -191,7 +192,7 @@ vio_is_blocking(st_vio * vio) ...@@ -191,7 +192,7 @@ vio_is_blocking(st_vio * vio)
} }
int vio_fastsend(st_vio * vio __attribute__((unused))) int vio_fastsend(Vio * vio __attribute__((unused)))
{ {
int r=0; int r=0;
DBUG_ENTER("vio_fastsend"); DBUG_ENTER("vio_fastsend");
...@@ -217,7 +218,7 @@ int vio_fastsend(st_vio * vio __attribute__((unused))) ...@@ -217,7 +218,7 @@ int vio_fastsend(st_vio * vio __attribute__((unused)))
DBUG_RETURN(r); DBUG_RETURN(r);
} }
int vio_keepalive(st_vio* vio, my_bool set_keep_alive) int vio_keepalive(Vio* vio, my_bool set_keep_alive)
{ {
int r=0; int r=0;
uint opt = 0; uint opt = 0;
...@@ -236,14 +237,14 @@ int vio_keepalive(st_vio* vio, my_bool set_keep_alive) ...@@ -236,14 +237,14 @@ int vio_keepalive(st_vio* vio, my_bool set_keep_alive)
my_bool my_bool
vio_should_retry(st_vio * vio __attribute__((unused))) vio_should_retry(Vio * vio __attribute__((unused)))
{ {
int en = errno; int en = errno;
return en == EAGAIN || en == EINTR || en == EWOULDBLOCK; return en == EAGAIN || en == EINTR || en == EWOULDBLOCK;
} }
int vio_close(st_vio * vio) int vio_close(Vio * vio)
{ {
int r; int r;
DBUG_ENTER("vio_close"); DBUG_ENTER("vio_close");
...@@ -276,23 +277,23 @@ int vio_close(st_vio * vio) ...@@ -276,23 +277,23 @@ int vio_close(st_vio * vio)
} }
const char *vio_description(st_vio * vio) const char *vio_description(Vio * vio)
{ {
return vio->desc; return vio->desc;
} }
enum enum_vio_type vio_type(st_vio* vio) enum enum_vio_type vio_type(Vio* vio)
{ {
return vio->type; return vio->type;
} }
my_socket vio_fd(st_vio* vio) my_socket vio_fd(Vio* vio)
{ {
return vio->sd; return vio->sd;
} }
my_bool vio_peer_addr(st_vio * vio, char *buf) my_bool vio_peer_addr(Vio * vio, char *buf)
{ {
DBUG_ENTER("vio_peer_addr"); DBUG_ENTER("vio_peer_addr");
DBUG_PRINT("enter", ("sd=%d", vio->sd)); DBUG_PRINT("enter", ("sd=%d", vio->sd));
...@@ -317,7 +318,7 @@ my_bool vio_peer_addr(st_vio * vio, char *buf) ...@@ -317,7 +318,7 @@ my_bool vio_peer_addr(st_vio * vio, char *buf)
} }
void vio_in_addr(st_vio *vio, struct in_addr *in) void vio_in_addr(Vio *vio, struct in_addr *in)
{ {
DBUG_ENTER("vio_in_addr"); DBUG_ENTER("vio_in_addr");
if (vio->localhost) if (vio->localhost)
...@@ -330,7 +331,7 @@ void vio_in_addr(st_vio *vio, struct in_addr *in) ...@@ -330,7 +331,7 @@ void vio_in_addr(st_vio *vio, struct in_addr *in)
/* Return 0 if there is data to be read */ /* Return 0 if there is data to be read */
my_bool vio_poll_read(st_vio *vio,uint timeout) my_bool vio_poll_read(Vio *vio,uint timeout)
{ {
#ifndef HAVE_POLL #ifndef HAVE_POLL
return 0; return 0;
......
...@@ -23,10 +23,11 @@ ...@@ -23,10 +23,11 @@
*/ */
#include <global.h> #include <global.h>
#include <mysql_com.h>
#include <errno.h> #include <errno.h>
#include <assert.h> #include <assert.h>
#include <vio.h> #include <violite.h>
#include <my_sys.h> #include <my_sys.h>
#include <my_net.h> #include <my_net.h>
#include <m_string.h> #include <m_string.h>
...@@ -62,7 +63,7 @@ ...@@ -62,7 +63,7 @@
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
void vio_ssl_delete(st_vio * vio) void vio_ssl_delete(Vio * vio)
{ {
/* It must be safe to delete null pointers. */ /* It must be safe to delete null pointers. */
/* This matches the semantics of C++'s delete operator. */ /* This matches the semantics of C++'s delete operator. */
...@@ -74,13 +75,13 @@ void vio_ssl_delete(st_vio * vio) ...@@ -74,13 +75,13 @@ void vio_ssl_delete(st_vio * vio)
} }
} }
int vio_ssl_errno(st_vio *vio __attribute__((unused))) int vio_ssl_errno(Vio *vio __attribute__((unused)))
{ {
return errno; /* On Win32 this mapped to WSAGetLastError() */ return errno; /* On Win32 this mapped to WSAGetLastError() */
} }
int vio_ssl_read(st_vio * vio, gptr buf, int size) int vio_ssl_read(Vio * vio, gptr buf, int size)
{ {
int r; int r;
DBUG_ENTER("vio_ssl_read"); DBUG_ENTER("vio_ssl_read");
...@@ -96,7 +97,7 @@ int vio_ssl_read(st_vio * vio, gptr buf, int size) ...@@ -96,7 +97,7 @@ int vio_ssl_read(st_vio * vio, gptr buf, int size)
} }
int vio_ssl_write(st_vio * vio, const gptr buf, int size) int vio_ssl_write(Vio * vio, const gptr buf, int size)
{ {
int r; int r;
DBUG_ENTER("vio_ssl_write"); DBUG_ENTER("vio_ssl_write");
...@@ -112,7 +113,7 @@ int vio_ssl_write(st_vio * vio, const gptr buf, int size) ...@@ -112,7 +113,7 @@ int vio_ssl_write(st_vio * vio, const gptr buf, int size)
} }
int vio_ssl_fastsend(st_vio * vio __attribute__((unused))) int vio_ssl_fastsend(Vio * vio __attribute__((unused)))
{ {
int r=0; int r=0;
DBUG_ENTER("vio_ssl_fastsend"); DBUG_ENTER("vio_ssl_fastsend");
...@@ -138,7 +139,7 @@ int vio_ssl_fastsend(st_vio * vio __attribute__((unused))) ...@@ -138,7 +139,7 @@ int vio_ssl_fastsend(st_vio * vio __attribute__((unused)))
DBUG_RETURN(r); DBUG_RETURN(r);
} }
int vio_ssl_keepalive(st_vio* vio, my_bool set_keep_alive) int vio_ssl_keepalive(Vio* vio, my_bool set_keep_alive)
{ {
int r=0; int r=0;
uint opt = 0; uint opt = 0;
...@@ -157,14 +158,14 @@ int vio_ssl_keepalive(st_vio* vio, my_bool set_keep_alive) ...@@ -157,14 +158,14 @@ int vio_ssl_keepalive(st_vio* vio, my_bool set_keep_alive)
my_bool my_bool
vio_ssl_should_retry(st_vio * vio __attribute__((unused))) vio_ssl_should_retry(Vio * vio __attribute__((unused)))
{ {
int en = errno; int en = errno;
return en == EAGAIN || en == EINTR || en == EWOULDBLOCK; return en == EAGAIN || en == EINTR || en == EWOULDBLOCK;
} }
int vio_ssl_close(st_vio * vio) int vio_ssl_close(Vio * vio)
{ {
int r; int r;
DBUG_ENTER("vio_ssl_close"); DBUG_ENTER("vio_ssl_close");
...@@ -191,23 +192,23 @@ int vio_ssl_close(st_vio * vio) ...@@ -191,23 +192,23 @@ int vio_ssl_close(st_vio * vio)
} }
const char *vio_ssl_description(st_vio * vio) const char *vio_ssl_description(Vio * vio)
{ {
return vio->desc; return vio->desc;
} }
enum enum_vio_type vio_ssl_type(st_vio* vio) enum enum_vio_type vio_ssl_type(Vio* vio)
{ {
return vio->type; return vio->type;
} }
my_socket vio_ssl_fd(st_vio* vio) my_socket vio_ssl_fd(Vio* vio)
{ {
return vio->sd; return vio->sd;
} }
my_bool vio_ssl_peer_addr(st_vio * vio, char *buf) my_bool vio_ssl_peer_addr(Vio * vio, char *buf)
{ {
DBUG_ENTER("vio_ssl_peer_addr"); DBUG_ENTER("vio_ssl_peer_addr");
DBUG_PRINT("enter", ("sd=%d", vio->sd)); DBUG_PRINT("enter", ("sd=%d", vio->sd));
...@@ -232,7 +233,7 @@ my_bool vio_ssl_peer_addr(st_vio * vio, char *buf) ...@@ -232,7 +233,7 @@ my_bool vio_ssl_peer_addr(st_vio * vio, char *buf)
} }
void vio_ssl_in_addr(st_vio *vio, struct in_addr *in) void vio_ssl_in_addr(Vio *vio, struct in_addr *in)
{ {
DBUG_ENTER("vio_ssl_in_addr"); DBUG_ENTER("vio_ssl_in_addr");
if (vio->localhost) if (vio->localhost)
...@@ -245,7 +246,7 @@ void vio_ssl_in_addr(st_vio *vio, struct in_addr *in) ...@@ -245,7 +246,7 @@ void vio_ssl_in_addr(st_vio *vio, struct in_addr *in)
/* Return 0 if there is data to be read */ /* Return 0 if there is data to be read */
my_bool vio_ssl_poll_read(st_vio *vio,uint timeout) my_bool vio_ssl_poll_read(Vio *vio,uint timeout)
{ {
#ifndef HAVE_POLL #ifndef HAVE_POLL
return 0; return 0;
...@@ -286,7 +287,7 @@ report_errors() ...@@ -286,7 +287,7 @@ report_errors()
/* FIXME: There are some duplicate code in /* FIXME: There are some duplicate code in
* sslaccept()/sslconnect() which maybe can be eliminated * sslaccept()/sslconnect() which maybe can be eliminated
*/ */
struct st_vio *sslaccept(struct st_VioSSLAcceptorFd* ptr, struct st_vio* sd) Vio *sslaccept(struct st_VioSSLAcceptorFd* ptr, Vio* sd)
{ {
DBUG_ENTER("sslaccept"); DBUG_ENTER("sslaccept");
DBUG_PRINT("enter", ("sd=%s ptr=%p", sd->desc,ptr)); DBUG_PRINT("enter", ("sd=%s ptr=%p", sd->desc,ptr));
...@@ -319,7 +320,7 @@ struct st_vio *sslaccept(struct st_VioSSLAcceptorFd* ptr, struct st_vio* sd) ...@@ -319,7 +320,7 @@ struct st_vio *sslaccept(struct st_VioSSLAcceptorFd* ptr, struct st_vio* sd)
DBUG_RETURN(sd); DBUG_RETURN(sd);
} }
struct st_vio *sslconnect(struct st_VioSSLConnectorFd* ptr, struct st_vio* sd) Vio *sslconnect(struct st_VioSSLConnectorFd* ptr, Vio* sd)
{ {
DBUG_ENTER("sslconnect"); DBUG_ENTER("sslconnect");
DBUG_PRINT("enter", ("sd=%s ptr=%p ctx: %p", sd->desc,ptr,ptr->ssl_context_)); DBUG_PRINT("enter", ("sd=%s ptr=%p ctx: %p", sd->desc,ptr,ptr->ssl_context_));
......
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
#include <global.h> #include <global.h>
#include <my_sys.h> #include <my_sys.h>
#include <vio.h> #include <mysql_com.h>
#include <violite.h>
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment