summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.in14
-rwxr-xr-xdo7
-rwxr-xr-xgo6
-rw-r--r--include/sysinc.h4
-rw-r--r--m4/libcurl.m4239
-rw-r--r--src/zabbix_server/Makefile.am4
-rw-r--r--src/zabbix_server/server.c95
7 files changed, 343 insertions, 26 deletions
diff --git a/configure.in b/configure.in
index 2be0810e..3ac20011 100644
--- a/configure.in
+++ b/configure.in
@@ -70,14 +70,14 @@ dnl AC_CHECK_LIB(pthread, main)
dnl Check for socklen_t
AC_MSG_CHECKING(for socklen_t)
-AC_TRY_COMPILE(
-[#include <sys/types.h>
+AC_TRY_COMPILE([
+#include <sys/types.h>
#include <unistd.h>
-#include <sys/socket.h>],
-[socklen_t s;],
+#include <sys/socket.h>
+],[socklen_t s;],
AC_MSG_RESULT(yes),
-AC_DEFINE(socklen_t, int, [Define socklen_t type])
-AC_MSG_RESULT(no))
+[AC_DEFINE(socklen_t, int, [Define socklen_t type])
+AC_MSG_RESULT(no)])
dnl Check for /proc filesystem
AC_MSG_CHECKING(for /proc filesystem)
@@ -806,6 +806,8 @@ AC_SUBST(SNMP_INCLUDE)
AC_SUBST(SNMP_LFLAGS)
AC_SUBST(SNMP_LIBS)
+LIBCURL_CHECK_CONFIG([yes], [7.15.1], [],[])
+
AC_MSG_CHECKING(for UCD-SNMP support)
AC_ARG_WITH(ucd-snmp,
[ --with-ucd-snmp[=DIR] Include SNMP support. DIR is the UCD-SNMP
diff --git a/do b/do
index d5384484..d8477096 100755
--- a/do
+++ b/do
@@ -103,7 +103,7 @@ if [ "$premake" = "yes" ]
then
echo "Pre-making..."
echo "Pre-making..." >> WARNINGS
- aclocal 2>> WARNINGS
+ aclocal -I m4 2>> WARNINGS
autoconf 2>> WARNINGS
autoheader 2>> WARNINGS
automake -a 2>> WARNINGS
@@ -129,14 +129,15 @@ then
echo "Configuring..." >> WARNINGS
#export CFLAGS="-Wall"
#export CFLAGS="-Wall -pedantic"
- ./configure $config_param 2>>WARNINGS
+ ./configure $config_param 2>> WARNINGS
+ ./create/schema/gen.pl c 2>> WARNINGS > ./include/dbsync.h
fi
if [ "$domake" = "yes" ]
then
echo "Cleaning..."
echo "Cleaning..." >> WARNINGS
- make clean 2>>WARNINGS
+ make clean 2>> WARNINGS
echo "Making..."
echo "Making..." >> WARNINGS
make 2>>WARNINGS
diff --git a/go b/go
index 31484818..e8ad5f76 100755
--- a/go
+++ b/go
@@ -5,7 +5,7 @@ clear
rm -f WARNINGS
echo Pre-making...
-aclocal
+aclocal -I m4
autoconf
autoheader
automake -a
@@ -32,8 +32,8 @@ cd create/schema
cd -
#export CFLAGS="-Wall -pedantic"
#./configure --enable-agent --enable-server --with-sqlite3 --with-net-snmp --prefix=`pwd` 2>>WARNINGS >/dev/null
-./configure --enable-agent --enable-server --with-pgsql --with-net-snmp --prefix=`pwd` 2>>WARNINGS >/dev/null
-#./configure --enable-agent --enable-server --with-mysql --with-net-snmp --prefix=`pwd` 2>>WARNINGS >/dev/null
+#./configure --enable-agent --enable-server --with-pgsql --with-net-snmp --prefix=`pwd` 2>>WARNINGS >/dev/null
+./configure --enable-agent --enable-server --with-libcurl --with-mysql --with-net-snmp --prefix=`pwd` 2>>WARNINGS >/dev/null
#./configure --enable-agent --enable-server --with-oracle=/home/zabbix/sqlora8 --with-net-snmp --prefix=`pwd` 2>>WARNINGS >/dev/null
echo Cleaning...
make clean 2>>WARNINGS >/dev/null
diff --git a/include/sysinc.h b/include/sysinc.h
index cd4613e4..02199417 100644
--- a/include/sysinc.h
+++ b/include/sysinc.h
@@ -326,4 +326,8 @@
# include <procinfo.h>
#endif
+#ifdef HAVE_LIBCURL
+# include <curl/curl.h>
+#endif
+
#endif
diff --git a/m4/libcurl.m4 b/m4/libcurl.m4
new file mode 100644
index 00000000..a9bfa2e2
--- /dev/null
+++ b/m4/libcurl.m4
@@ -0,0 +1,239 @@
+# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION],
+# [ACTION-IF-YES], [ACTION-IF-NO])
+# ----------------------------------------------------------
+# David Shaw <dshaw@jabberwocky.com> May-09-2006
+#
+# Checks for libcurl. DEFAULT-ACTION is the string yes or no to
+# specify whether to default to --with-libcurl or --without-libcurl.
+# If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the
+# minimum version of libcurl to accept. Pass the version as a regular
+# version number like 7.10.1. If not supplied, any version is
+# accepted. ACTION-IF-YES is a list of shell commands to run if
+# libcurl was successfully found and passed the various tests.
+# ACTION-IF-NO is a list of shell commands that are run otherwise.
+# Note that using --without-libcurl does run ACTION-IF-NO.
+#
+# This macro #defines HAVE_LIBCURL if a working libcurl setup is
+# found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary
+# values. Other useful defines are LIBCURL_FEATURE_xxx where xxx are
+# the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy
+# where yyy are the various protocols supported by libcurl. Both xxx
+# and yyy are capitalized. See the list of AH_TEMPLATEs at the top of
+# the macro for the complete list of possible defines. Shell
+# variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also
+# defined to 'yes' for those features and protocols that were found.
+# Note that xxx and yyy keep the same capitalization as in the
+# curl-config list (e.g. it's "HTTP" and not "http").
+#
+# Users may override the detected values by doing something like:
+# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure
+#
+# For the sake of sanity, this macro assumes that any libcurl that is
+# found is after version 7.7.2, the first version that included the
+# curl-config script. Note that it is very important for people
+# packaging binary versions of libcurl to include this script!
+# Without curl-config, we can only guess what protocols are available,
+# or use curl_version_info to figure it out at runtime.
+
+AC_DEFUN([LIBCURL_CHECK_CONFIG],
+[
+ AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL])
+ AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4])
+ AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6])
+ AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz])
+ AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS])
+ AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN])
+ AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI])
+ AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM])
+
+ AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT])
+ AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP])
+
+ AC_ARG_WITH(libcurl,
+ AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]),
+ [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])])
+
+ if test "$_libcurl_with" != "no" ; then
+
+ AC_PROG_AWK
+
+ _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"
+
+ _libcurl_try_link=yes
+
+ if test -d "$_libcurl_with" ; then
+ LIBCURL_CPPFLAGS="-I$withval/include"
+ _libcurl_ldflags="-L$withval/lib"
+ AC_PATH_PROG([_libcurl_config],["$withval/bin/curl-config"])
+ else
+ AC_PATH_PROG([_libcurl_config],[curl-config])
+ fi
+
+ if test x$_libcurl_config != "x" ; then
+ AC_CACHE_CHECK([for the version of libcurl],
+ [libcurl_cv_lib_curl_version],
+ [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`])
+
+ _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse`
+ _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse`
+
+ if test $_libcurl_wanted -gt 0 ; then
+ AC_CACHE_CHECK([for libcurl >= version $2],
+ [libcurl_cv_lib_version_ok],
+ [
+ if test $_libcurl_version -ge $_libcurl_wanted ; then
+ libcurl_cv_lib_version_ok=yes
+ else
+ libcurl_cv_lib_version_ok=no
+ fi
+ ])
+ fi
+
+ if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then
+ if test x"$LIBCURL_CPPFLAGS" = "x" ; then
+ LIBCURL_CPPFLAGS=`$_libcurl_config --cflags`
+ fi
+ if test x"$LIBCURL" = "x" ; then
+ LIBCURL=`$_libcurl_config --libs`
+
+ # This is so silly, but Apple actually has a bug in their
+ # curl-config script. Fixed in Tiger, but there are still
+ # lots of Panther installs around.
+ case "${host}" in
+ powerpc-apple-darwin7*)
+ LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'`
+ ;;
+ esac
+ fi
+
+ # All curl-config scripts support --feature
+ _libcurl_features=`$_libcurl_config --feature`
+
+ # Is it modern enough to have --protocols? (7.12.4)
+ if test $_libcurl_version -ge 461828 ; then
+ _libcurl_protocols=`$_libcurl_config --protocols`
+ fi
+ else
+ _libcurl_try_link=no
+ fi
+
+ unset _libcurl_wanted
+ fi
+
+ if test $_libcurl_try_link = yes ; then
+
+ # we didn't find curl-config, so let's see if the user-supplied
+ # link line (or failing that, "-lcurl") is enough.
+ LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"}
+
+ AC_CACHE_CHECK([whether libcurl is usable],
+ [libcurl_cv_lib_curl_usable],
+ [
+ _libcurl_save_cppflags=$CPPFLAGS
+ CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS"
+ _libcurl_save_libs=$LIBS
+ LIBS="$LIBCURL $LIBS"
+
+ AC_LINK_IFELSE(AC_LANG_PROGRAM([#include <curl/curl.h>],[
+/* Try and use a few common options to force a failure if we are
+ missing symbols or can't link. */
+int x;
+curl_easy_setopt(NULL,CURLOPT_URL,NULL);
+x=CURL_ERROR_SIZE;
+x=CURLOPT_WRITEFUNCTION;
+x=CURLOPT_FILE;
+x=CURLOPT_ERRORBUFFER;
+x=CURLOPT_STDERR;
+x=CURLOPT_VERBOSE;
+]),libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
+
+ CPPFLAGS=$_libcurl_save_cppflags
+ LIBS=$_libcurl_save_libs
+ unset _libcurl_save_cppflags
+ unset _libcurl_save_libs
+ ])
+
+ if test $libcurl_cv_lib_curl_usable = yes ; then
+
+ # Does curl_free() exist in this version of libcurl?
+ # If not, fake it with free()
+
+ _libcurl_save_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS"
+ _libcurl_save_libs=$LIBS
+ LIBS="$LIBS $LIBCURL"
+
+ AC_CHECK_FUNC(curl_free,,
+ AC_DEFINE(curl_free,free,
+ [Define curl_free() as free() if our version of curl lacks curl_free.]))
+
+ CPPFLAGS=$_libcurl_save_cppflags
+ LIBS=$_libcurl_save_libs
+ unset _libcurl_save_cppflags
+ unset _libcurl_save_libs
+
+ AC_DEFINE(HAVE_LIBCURL,1,
+ [Define to 1 if you have a functional curl library.])
+ AC_SUBST(LIBCURL_CPPFLAGS)
+ AC_SUBST(LIBCURL)
+
+ for _libcurl_feature in $_libcurl_features ; do
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1])
+ eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes
+ done
+
+ if test "x$_libcurl_protocols" = "x" ; then
+
+ # We don't have --protocols, so just assume that all
+ # protocols are available
+ _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT"
+
+ if test x$libcurl_feature_SSL = xyes ; then
+ _libcurl_protocols="$_libcurl_protocols HTTPS"
+
+ # FTPS wasn't standards-compliant until version
+ # 7.11.0
+ if test $_libcurl_version -ge 461568; then
+ _libcurl_protocols="$_libcurl_protocols FTPS"
+ fi
+ fi
+ fi
+
+ for _libcurl_protocol in $_libcurl_protocols ; do
+ AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1])
+ eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes
+ done
+ else
+ unset LIBCURL
+ unset LIBCURL_CPPFLAGS
+ fi
+ fi
+
+ unset _libcurl_try_link
+ unset _libcurl_version_parse
+ unset _libcurl_config
+ unset _libcurl_feature
+ unset _libcurl_features
+ unset _libcurl_protocol
+ unset _libcurl_protocols
+ unset _libcurl_version
+ unset _libcurl_ldflags
+ fi
+
+ if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then
+ # This is the IF-NO path
+ ifelse([$4],,:,[$4])
+ else
+ # This is the IF-YES path
+ ifelse([$3],,:,[$3])
+ fi
+
+ unset _libcurl_with
+])dnl
diff --git a/src/zabbix_server/Makefile.am b/src/zabbix_server/Makefile.am
index 8307a404..2fb0c1d3 100644
--- a/src/zabbix_server/Makefile.am
+++ b/src/zabbix_server/Makefile.am
@@ -1,5 +1,5 @@
SUBDIRS = alerter housekeeper pinger poller timer trapper nodewatcher utils
-INCLUDES=-I@top_srcdir@/include @MYSQL_INCLUDE@ @ORACLE_INCLUDE@ @SNMP_INCLUDE@ @PGSQL_INCLUDE@ @SQLITE3_INCLUDE@
+INCLUDES=-I@top_srcdir@/include @MYSQL_INCLUDE@ @ORACLE_INCLUDE@ @SNMP_INCLUDE@ @PGSQL_INCLUDE@ @SQLITE3_INCLUDE@ @LIBCURL_CPPFLAGS@
bin_PROGRAMS = zabbix_server
zabbix_server_SOURCES = evalfunc.c expression.c actions.c events.c zlog.c functions.c server.c
@@ -10,5 +10,5 @@ zabbix_server_LDADD = ../libs/zbxsysinfo/libzbxsysinfo.a ../libs/zbxsysinfo/@ARC
alerter/libzbxalerter.a timer/libzbxtimer.a trapper/libzbxtrapper.a nodewatcher/libzbxnodewatcher.a \
../libs/zbxemail/libzbxemail.a utils/libzbxutils.a \
../libs/zbxsms/libzbxsms.a ../libs/zbxdbhigh/libzbxdbhigh.a ../libs/zbxcommon/libzbxcommon.a \
-../libs/zbxcrypto/libzbxcrypto.a @MYSQL_LIBS@ @PGSQL_LIBS@ @ORACLE_LIBS@ @SQLITE3_LIBS@ @LDAP_LIBS@ @SNMP_LIBS@
+../libs/zbxcrypto/libzbxcrypto.a @MYSQL_LIBS@ @PGSQL_LIBS@ @ORACLE_LIBS@ @SQLITE3_LIBS@ @LDAP_LIBS@ @SNMP_LIBS@ @LIBCURL@
zabbix_server_LDFLAGS=@MYSQL_LFLAGS@ @PGSQL_LFLAGS@ @ORACLE_LFLAGS@ @SQLITE3_LFLAGS@ @LDAP_LFLAGS@ @SNMP_LFLAGS@
diff --git a/src/zabbix_server/server.c b/src/zabbix_server/server.c
index 640e632a..b84f5b9b 100644
--- a/src/zabbix_server/server.c
+++ b/src/zabbix_server/server.c
@@ -323,31 +323,102 @@ int tcp_listen(const char *host, int port, socklen_t *addrlenp)
* *
******************************************************************************/
-/* #define TEST */
+#define TEST
#ifdef TEST
-#include "zbxsock.h"
+#define ZBX_LIM_PRINT(msg, str_len, str, limit) \
+ printf(msg "(%i): %." #limit "s<br/>\n", str_len, str, str_len > limit ? "..." : "")
+
+//#define ZBX_LIM_PRINT(msg, str_len, str, limit)
+
+size_t HEADERFUNCTION( void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ ZBX_LIM_PRINT("HEADERFUNCTION", size*nmemb, ptr, 300);
+
+ return size*nmemb;
+}
+
+size_t WRITEFUNCTION( void *ptr, size_t size, size_t nmemb, void *stream)
+{
+ size_t s = size*nmemb + 1;
+ char *str_dat = calloc(1, s);
+
+ zbx_snprintf(str_dat,s,ptr);
+ ZBX_LIM_PRINT("WRITEFUNCTION", s, str_dat, 65535);
+
+ return size*nmemb;
+}
+
+#define XBX_CURL_ERR(msg) \
+ printf("ERROR: " msg " [%s]\n", curl_easy_strerror(err))
+
+#define ZBX_CURL_SET_OPT(opt_name, opt_val) \
+ if(CURLE_OK != (err = curl_easy_setopt(easyhandle, opt_name, opt_val))) \
+ XBX_CURL_ERR("curl_easy_setopt(" #opt_name ")")
+
+typedef struct s_zbx_step
+{
+ char *url;
+ char *post;
+} zbx_step;
void test()
{
- char err[0xFF];
- struct hostent *host;
+ int err = CURLE_OK;
+ CURL *easyhandle = NULL;
+ zbx_step *stp = NULL;
+ zbx_step steps[] = {
+ /* URL POST */
+ {"http://www.zabbix.com/forum/", NULL},
+ {"http://www.zabbix.com/forum/login.php", "vb_login_username=Eugene"
+ "&cookieuser="
+ "&vb_login_password="
+ "&s="
+ "&do=login"
+ "&forceredirect=1"
+ "&vb_login_md5password=ec5287c45f0e70ec22d52e8bcbeeb640"
+ "&vb_login_md5password_utf=ec5287c45f0e70ec22d52e8bcbeeb640"},
+ {"http://www.zabbix.com/forum/", NULL},
+ {"http://www.zabbix.com/forum/usercp.php?", NULL},
+ {"http://www.zabbix.com/forum/login.php?do=logout", NULL},
+ {"http://www.zabbix.com/forum/", NULL},
+ {NULL, NULL}
+ };
+
printf("-= Test Started =-\n");
- host = zbx_gethost("www.zabbix.com");
+ if(NULL != (easyhandle = curl_easy_init()))
+ {
+ ZBX_CURL_SET_OPT(CURLOPT_COOKIEFILE, "");
+ ZBX_CURL_SET_OPT(CURLOPT_FOLLOWLOCATION, 1);
+ ZBX_CURL_SET_OPT(CURLOPT_HEADERFUNCTION, HEADERFUNCTION);
+ ZBX_CURL_SET_OPT(CURLOPT_WRITEFUNCTION, WRITEFUNCTION);
+
+ for(stp=&steps[0];(*stp).url; stp++)
+ {
+ printf("****************************************************************\n");
+ printf("{{ %s }}\n", stp->url);
+ printf("****************************************************************\n");
+
+ if(stp->post) ZBX_CURL_SET_OPT(CURLOPT_POSTFIELDS, stp->post);
+
+ ZBX_CURL_SET_OPT(CURLOPT_URL, stp->url);
+
+ if(CURLE_OK != curl_easy_perform(easyhandle)) /* post away! */
+ XBX_CURL_ERR("curl_easy_perform()");
- if(host)
+ fflush(stdout);
+ }
+ (void)curl_easy_cleanup(easyhandle);
+ }
+ else
{
- SDI2("HOST: %s", host->h_name);
- SDI2("HADDR: %i", host->h_addr[0] & 0xFF);
- SDI2("HADDR: %i", host->h_addr[1] & 0xFF);
- SDI2("HADDR: %i", host->h_addr[2] & 0xFF);
- SDI2("HADDR: %i", host->h_addr[3] & 0xFF);
+ XBX_CURL_ERR("curl_easy_init()");
}
- printf("-= Test completed =-\n");
+ printf("\n-= Test completed =-\n");
}
#endif /* TEST */