diff options
author | unknown <konstantin@mysql.com> | 2005-03-26 01:21:52 +0300 |
---|---|---|
committer | unknown <konstantin@mysql.com> | 2005-03-26 01:21:52 +0300 |
commit | 3fd639493aea5c340acc2e28617e8d917d54ff7d (patch) | |
tree | 9ac46b7e6cf08e07fbf355f33e45cc2dcc24d17a /sql-common/client.c | |
parent | 0310e2a770680593de3b4724d08d6836455b3d91 (diff) | |
download | mariadb-git-3fd639493aea5c340acc2e28617e8d917d54ff7d.tar.gz |
A fix for Bug#8226 "Cannot connect via shared memory":
provide created shared memory objects with proper
access rights to make them usable when client and server
are running under different accounts.
Post review fixes.
VC++Files/mysys/mysys.dsp:
Add my_windac.c to mysys.lib
include/my_sys.h:
Declarations for SECURITY_ATTRIBUTES create/destroy functions.
mysys/Makefile.am:
Add my_windac.c to the list of compiled files.
sql-common/client.c:
Lower requested access rights for events as the server won't
provide clients with ALL access in order to prevent denial
of service attack.
sql/mysqld.cc:
Set proper security attributes for the kernel objects to make them
usable when mysqld is running as a Windows service.
Diffstat (limited to 'sql-common/client.c')
-rw-r--r-- | sql-common/client.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sql-common/client.c b/sql-common/client.c index 3de2483ef75..1a41ba5e5ed 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -408,6 +408,7 @@ HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout) char *suffix_pos; DWORD error_allow = 0; DWORD error_code = 0; + DWORD event_access_rights= SYNCHRONIZE | EVENT_MODIFY_STATE; char *shared_memory_base_name = mysql->options.shared_memory_base_name; /* @@ -419,13 +420,13 @@ HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout) */ suffix_pos = strxmov(tmp,shared_memory_base_name,"_",NullS); strmov(suffix_pos, "CONNECT_REQUEST"); - if (!(event_connect_request= OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp))) + if (!(event_connect_request= OpenEvent(event_access_rights, FALSE, tmp))) { error_allow = CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR; goto err; } strmov(suffix_pos, "CONNECT_ANSWER"); - if (!(event_connect_answer= OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp))) + if (!(event_connect_answer= OpenEvent(event_access_rights,FALSE,tmp))) { error_allow = CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR; goto err; @@ -487,35 +488,35 @@ HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout) } strmov(suffix_pos, "SERVER_WROTE"); - if ((event_server_wrote = OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp)) == NULL) + if ((event_server_wrote = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) { error_allow = CR_SHARED_MEMORY_EVENT_ERROR; goto err2; } strmov(suffix_pos, "SERVER_READ"); - if ((event_server_read = OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp)) == NULL) + if ((event_server_read = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) { error_allow = CR_SHARED_MEMORY_EVENT_ERROR; goto err2; } strmov(suffix_pos, "CLIENT_WROTE"); - if ((event_client_wrote = OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp)) == NULL) + if ((event_client_wrote = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) { error_allow = CR_SHARED_MEMORY_EVENT_ERROR; goto err2; } strmov(suffix_pos, "CLIENT_READ"); - if ((event_client_read = OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp)) == NULL) + if ((event_client_read = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) { error_allow = CR_SHARED_MEMORY_EVENT_ERROR; goto err2; } strmov(suffix_pos, "CONNECTION_CLOSED"); - if ((event_conn_closed = OpenEvent(EVENT_ALL_ACCESS,FALSE,tmp)) == NULL) + if ((event_conn_closed = OpenEvent(event_access_rights,FALSE,tmp)) == NULL) { error_allow = CR_SHARED_MEMORY_EVENT_ERROR; goto err2; |