aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ConfigureChecks.cmake1
-rw-r--r--config.h.cmake3
-rw-r--r--libssh/connect.c15
3 files changed, 17 insertions, 2 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index 0b1629e..14abf09 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -34,6 +34,7 @@ else (WIN32)
check_function_exists(gethostbyname HAVE_GETHOSTBYNAME)
check_function_exists(poll HAVE_POLL)
check_function_exists(select HAVE_SELECT)
+ check_function_exists(regcomp HAVE_REGCOMP)
endif (WIN32)
# LIBRARIES
diff --git a/config.h.cmake b/config.h.cmake
index e941d10..e86f692 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -46,6 +46,9 @@
/* Define to 1 if you have the `select' function. */
#cmakedefine HAVE_SELECT 1
+/* Define to 1 if you have the `regcomp' function. */
+#cmakedefine HAVE_REGCOMP 1
+
/*************************** LIBRARIES ***************************/
/* Define to 1 if you have the `crypto' library (-lcrypto). */
diff --git a/libssh/connect.c b/libssh/connect.c
index 2a7e82c..52c48c8 100644
--- a/libssh/connect.c
+++ b/libssh/connect.c
@@ -56,12 +56,13 @@
#error "Your system must have getaddrinfo()"
#endif
+#ifdef HAVE_REGCOMP
/* don't declare gnu extended regexp's */
#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE
#endif
#include <regex.h>
-
+#endif /* HAVE_REGCOMP */
#ifdef _WIN32
static void sock_set_nonblocking(socket_t sock) {
@@ -94,7 +95,7 @@ static void sock_set_blocking(socket_t sock) {
}
#endif /* _WIN32 */
-
+#ifdef HAVE_REGCOMP
static regex_t *ip_regex = NULL;
/** @internal
@@ -130,6 +131,14 @@ void ssh_regex_finalize(){
}
}
+#else /* HAVE_REGCOMP */
+int ssh_regex_init(){
+ return 0;
+}
+void ssh_regex_finalize(){
+}
+#endif
+
static int getai(SSH_SESSION *session, const char *host, int port, struct addrinfo **ai) {
const char *service = NULL;
struct addrinfo hints;
@@ -148,11 +157,13 @@ static int getai(SSH_SESSION *session, const char *host, int port, struct addrin
service = s_port;
hints.ai_flags=AI_NUMERICSERV;
}
+#ifdef HAVE_REGCOMP
if(regexec(ip_regex,host,0,NULL,0) == 0){
/* this is an IP address */
ssh_log(session,SSH_LOG_PACKET,"host %s matches an IP address",host);
hints.ai_flags |= AI_NUMERICHOST;
}
+#endif
return getaddrinfo(host, service, &hints, ai);
}