Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
2156f62d
Commit
2156f62d
authored
Sep 29, 2014
by
Sergei Golubchik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
portability: use getifaddrs()
instead of exec'ing /usr/sbin/ifconfig|grep|sed|awk
parent
edd1de3d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
25 additions
and
44 deletions
+25
-44
cmake/os/WindowsCache.cmake
cmake/os/WindowsCache.cmake
+1
-0
config.h.cmake
config.h.cmake
+1
-0
configure.cmake
configure.cmake
+1
-0
sql/wsrep_utils.cc
sql/wsrep_utils.cc
+22
-44
No files found.
cmake/os/WindowsCache.cmake
View file @
2156f62d
...
@@ -76,6 +76,7 @@ SET(HAVE_FSYNC CACHE INTERNAL "")
...
@@ -76,6 +76,7 @@ SET(HAVE_FSYNC CACHE INTERNAL "")
SET
(
HAVE_FTIME 1 CACHE INTERNAL
""
)
SET
(
HAVE_FTIME 1 CACHE INTERNAL
""
)
SET
(
HAVE_FTRUNCATE CACHE INTERNAL
""
)
SET
(
HAVE_FTRUNCATE CACHE INTERNAL
""
)
SET
(
HAVE_GETADDRINFO 1 CACHE INTERNAL
""
)
SET
(
HAVE_GETADDRINFO 1 CACHE INTERNAL
""
)
SET
(
HAVE_GETIFADDRS CACHE INTERNAL
""
)
SET
(
HAVE_GETCWD 1 CACHE INTERNAL
""
)
SET
(
HAVE_GETCWD 1 CACHE INTERNAL
""
)
SET
(
HAVE_GETHOSTBYADDR_R CACHE INTERNAL
""
)
SET
(
HAVE_GETHOSTBYADDR_R CACHE INTERNAL
""
)
SET
(
HAVE_GETHRTIME CACHE INTERNAL
""
)
SET
(
HAVE_GETHRTIME CACHE INTERNAL
""
)
...
...
config.h.cmake
View file @
2156f62d
...
@@ -163,6 +163,7 @@
...
@@ -163,6 +163,7 @@
#cmakedefine HAVE_FSYNC 1
#cmakedefine HAVE_FSYNC 1
#cmakedefine HAVE_FTIME 1
#cmakedefine HAVE_FTIME 1
#cmakedefine HAVE_GETADDRINFO 1
#cmakedefine HAVE_GETADDRINFO 1
#cmakedefine HAVE_GETIFADDRS 1
#cmakedefine HAVE_GETCWD 1
#cmakedefine HAVE_GETCWD 1
#cmakedefine HAVE_GETHOSTBYADDR_R 1
#cmakedefine HAVE_GETHOSTBYADDR_R 1
#cmakedefine HAVE_GETHRTIME 1
#cmakedefine HAVE_GETHRTIME 1
...
...
configure.cmake
View file @
2156f62d
...
@@ -371,6 +371,7 @@ CHECK_FUNCTION_EXISTS (getpassphrase HAVE_GETPASSPHRASE)
...
@@ -371,6 +371,7 @@ CHECK_FUNCTION_EXISTS (getpassphrase HAVE_GETPASSPHRASE)
CHECK_FUNCTION_EXISTS
(
getpwnam HAVE_GETPWNAM
)
CHECK_FUNCTION_EXISTS
(
getpwnam HAVE_GETPWNAM
)
CHECK_FUNCTION_EXISTS
(
getpwuid HAVE_GETPWUID
)
CHECK_FUNCTION_EXISTS
(
getpwuid HAVE_GETPWUID
)
CHECK_FUNCTION_EXISTS
(
getrlimit HAVE_GETRLIMIT
)
CHECK_FUNCTION_EXISTS
(
getrlimit HAVE_GETRLIMIT
)
CHECK_FUNCTION_EXISTS
(
getifaddrs HAVE_GETIFADDRS
)
CHECK_FUNCTION_EXISTS
(
getrusage HAVE_GETRUSAGE
)
CHECK_FUNCTION_EXISTS
(
getrusage HAVE_GETRUSAGE
)
CHECK_FUNCTION_EXISTS
(
getwd HAVE_GETWD
)
CHECK_FUNCTION_EXISTS
(
getwd HAVE_GETWD
)
CHECK_FUNCTION_EXISTS
(
gmtime_r HAVE_GMTIME_R
)
CHECK_FUNCTION_EXISTS
(
gmtime_r HAVE_GMTIME_R
)
...
...
sql/wsrep_utils.cc
View file @
2156f62d
...
@@ -34,6 +34,10 @@
...
@@ -34,6 +34,10 @@
#include <sys/socket.h>
#include <sys/socket.h>
#include <netdb.h> // getaddrinfo()
#include <netdb.h> // getaddrinfo()
#ifdef HAVE_GETIFADDRS
#include <ifaddrs.h>
#endif
extern
char
**
environ
;
// environment variables
extern
char
**
environ
;
// environment variables
static
wsp
::
string
wsrep_PATH
;
static
wsp
::
string
wsrep_PATH
;
...
@@ -371,7 +375,7 @@ size_t wsrep_guess_ip (char* buf, size_t buf_len)
...
@@ -371,7 +375,7 @@ size_t wsrep_guess_ip (char* buf, size_t buf_len)
{
{
size_t
ip_len
=
0
;
size_t
ip_len
=
0
;
if
(
my_bind_addr_str
&&
strlen
(
my_bind_addr_str
)
)
if
(
my_bind_addr_str
&&
my_bind_addr_str
[
0
]
!=
'\0'
)
{
{
unsigned
int
const
ip_type
=
wsrep_check_ip
(
my_bind_addr_str
);
unsigned
int
const
ip_type
=
wsrep_check_ip
(
my_bind_addr_str
);
...
@@ -405,55 +409,29 @@ size_t wsrep_guess_ip (char* buf, size_t buf_len)
...
@@ -405,55 +409,29 @@ size_t wsrep_guess_ip (char* buf, size_t buf_len)
return
ip_len
;
return
ip_len
;
}
}
// try to find the address of the first one
#if HAVE_GETIFADDRS
#if (TARGET_OS_LINUX == 1)
struct
ifaddrs
*
ifaddr
,
*
ifa
;
const
char
cmd
[]
=
"/sbin/ifconfig | "
if
(
getifaddrs
(
&
ifaddr
)
==
0
)
// "grep -m1 -1 -E '^[a-z]?eth[0-9]' | tail -n 1 | "
{
"grep -E '^[[:space:]]+inet addr:' | grep -m1 -v 'inet addr:127' | "
for
(
ifa
=
ifaddr
;
ifa
!=
NULL
;
ifa
=
ifa
->
ifa_next
)
"sed 's/:/ /' | awk '{ print $3 }'"
;
{
#elif defined(__sun__)
if
(
!
ifa
->
ifa_addr
||
ifa
->
ifa_addr
->
sa_family
!=
AF_INET
)
// TODO AF_INET6
const
char
cmd
[]
=
"/sbin/ifconfig -a | "
continue
;
"/usr/gnu/bin/grep -m1 -1 -E 'net[0-9]:' | tail -n 1 | awk '{ print $2 }'"
;
#elif defined(__APPLE__) || defined(__FreeBSD__)
const
char
cmd
[]
=
"/sbin/route -nv get 8.8.8.8 | tail -n1 | awk '{print $(NF)}'"
;
#else
char
*
cmd
;
#error "OS not supported"
#endif
wsp
::
process
proc
(
cmd
,
"r"
);
if
(
NULL
!=
proc
.
pipe
())
{
char
*
ret
;
ret
=
fgets
(
buf
,
buf_len
,
proc
.
pipe
());
if
(
vio_getnameinfo
(
ifa
->
ifa_addr
,
buf
,
buf_len
,
NULL
,
0
,
NI_NUMERICHOST
))
continue
;
if
(
proc
.
wait
())
return
0
;
if
(
strcmp
(
buf
,
"127.0.0.1"
)
==
0
)
// lame
continue
;
if
(
NULL
==
ret
)
{
freeifaddrs
(
ifaddr
);
WSREP_ERROR
(
"Failed to read output of: '%s'"
,
cmd
);
return
strlen
(
buf
);
return
0
;
}
}
else
{
WSREP_ERROR
(
"Failed to execute: '%s'"
,
cmd
);
return
0
;
}
// clear possible \n at the end of ip string left by fgets()
ip_len
=
strlen
(
buf
);
if
(
ip_len
>
0
&&
'\n'
==
buf
[
ip_len
-
1
])
{
ip_len
--
;
buf
[
ip_len
]
=
'\0'
;
}
if
(
INADDR_NONE
==
inet_addr
(
buf
))
{
if
(
strlen
(
buf
)
!=
0
)
{
WSREP_WARN
(
"Shell command returned invalid address: '%s'"
,
buf
);
}
}
return
0
;
freeifaddrs
(
ifaddr
)
;
}
}
#endif
return
ip_len
;
return
0
;
}
}
size_t
wsrep_guess_address
(
char
*
buf
,
size_t
buf_len
)
size_t
wsrep_guess_address
(
char
*
buf
,
size_t
buf_len
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment