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 "")
SET
(
HAVE_FTIME 1 CACHE INTERNAL
""
)
SET
(
HAVE_FTRUNCATE CACHE INTERNAL
""
)
SET
(
HAVE_GETADDRINFO 1 CACHE INTERNAL
""
)
SET
(
HAVE_GETIFADDRS CACHE INTERNAL
""
)
SET
(
HAVE_GETCWD 1 CACHE INTERNAL
""
)
SET
(
HAVE_GETHOSTBYADDR_R CACHE INTERNAL
""
)
SET
(
HAVE_GETHRTIME CACHE INTERNAL
""
)
...
...
config.h.cmake
View file @
2156f62d
...
...
@@ -163,6 +163,7 @@
#cmakedefine HAVE_FSYNC 1
#cmakedefine HAVE_FTIME 1
#cmakedefine HAVE_GETADDRINFO 1
#cmakedefine HAVE_GETIFADDRS 1
#cmakedefine HAVE_GETCWD 1
#cmakedefine HAVE_GETHOSTBYADDR_R 1
#cmakedefine HAVE_GETHRTIME 1
...
...
configure.cmake
View file @
2156f62d
...
...
@@ -371,6 +371,7 @@ CHECK_FUNCTION_EXISTS (getpassphrase HAVE_GETPASSPHRASE)
CHECK_FUNCTION_EXISTS
(
getpwnam HAVE_GETPWNAM
)
CHECK_FUNCTION_EXISTS
(
getpwuid HAVE_GETPWUID
)
CHECK_FUNCTION_EXISTS
(
getrlimit HAVE_GETRLIMIT
)
CHECK_FUNCTION_EXISTS
(
getifaddrs HAVE_GETIFADDRS
)
CHECK_FUNCTION_EXISTS
(
getrusage HAVE_GETRUSAGE
)
CHECK_FUNCTION_EXISTS
(
getwd HAVE_GETWD
)
CHECK_FUNCTION_EXISTS
(
gmtime_r HAVE_GMTIME_R
)
...
...
sql/wsrep_utils.cc
View file @
2156f62d
...
...
@@ -34,6 +34,10 @@
#include <sys/socket.h>
#include <netdb.h> // getaddrinfo()
#ifdef HAVE_GETIFADDRS
#include <ifaddrs.h>
#endif
extern
char
**
environ
;
// environment variables
static
wsp
::
string
wsrep_PATH
;
...
...
@@ -371,7 +375,7 @@ size_t wsrep_guess_ip (char* buf, size_t buf_len)
{
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
);
...
...
@@ -405,55 +409,29 @@ size_t wsrep_guess_ip (char* buf, size_t buf_len)
return
ip_len
;
}
// try to find the address of the first one
#if (TARGET_OS_LINUX == 1)
const
char
cmd
[]
=
"/sbin/ifconfig | "
// "grep -m1 -1 -E '^[a-z]?eth[0-9]' | tail -n 1 | "
"grep -E '^[[:space:]]+inet addr:' | grep -m1 -v 'inet addr:127' | "
"sed 's/:/ /' | awk '{ print $3 }'"
;
#elif defined(__sun__)
const
char
cmd
[]
=
"/sbin/ifconfig -a | "
"/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
;
#if HAVE_GETIFADDRS
struct
ifaddrs
*
ifaddr
,
*
ifa
;
if
(
getifaddrs
(
&
ifaddr
)
==
0
)
{
for
(
ifa
=
ifaddr
;
ifa
!=
NULL
;
ifa
=
ifa
->
ifa_next
)
{
if
(
!
ifa
->
ifa_addr
||
ifa
->
ifa_addr
->
sa_family
!=
AF_INET
)
// TODO AF_INET6
continue
;
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
)
{
WSREP_ERROR
(
"Failed to read output of: '%s'"
,
cmd
);
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
);
freeifaddrs
(
ifaddr
);
return
strlen
(
buf
);
}
return
0
;
freeifaddrs
(
ifaddr
)
;
}
#endif
return
ip_len
;
return
0
;
}
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