[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ossec-cvs] ossec-hids: dbmake.sh (NEW) Makefile (HEAD) alert.c (HEAD) config.c (HEAD) db_op.c (HEAD) db_op.h (HEAD) main.c (HEAD) server.c (HEAD) [dcid]
Module name: ossec-hids
Changes by: dcid 07/08/25 10:24:04
Modified files:
Makefile alert.c config.c db_op.c db_op.h main.c server.c
Added files:
dbmake.sh
Log message:
Description: Adding support for mysql logs (.err and .log). Adding support for PostgreSQL as a database output. A few more fixes for the hostinfo stuff... (yes, long morning -- you got to love
saturdays)
Reviewed by: dcid
Bug:
--- NEW FILE: dbmake.sh ---
#!/bin/sh
MI=""
ML=""
PI=""
PL=""
# Looking for mysql
ls "`which mysql`" > /dev/null 2>&1
if [ $? = 0 ]; then
for i in /usr /usr/local $1
do
for j in $i/include/mysql/mysql.h $i/include/mysql.h
do
ls $j > /dev/null 2>&1
if [ $? = 0 ]; then
MI=`dirname $j`;
break;
fi
done
for j in $i/lib/mysql
do
ls $j > /dev/null 2>&1
if [ $? = 0 ]; then
ML="$j -lmysqlclient";
break
fi
done
done
fi
# Looking for postgresql
ls "`which psql`" > /dev/null 2>&1
if [ $? = 0 ]; then
for i in /usr /usr/local /usr/pgsql /usr/postgresql $1
do
for j in $i/include/pgsql/libpq-fe.h $i/include/libpq-fe.h $i/include/postgresql/libpq-fe.h
do
ls $j > /dev/null 2>&1
if [ $? = 0 ]; then
PI=`dirname $j`;
break;
fi
done
for j in $i/lib/pgsql $i/lib/postgresql
do
ls $j > /dev/null 2>&1
if [ $? = 0 ]; then
PL="$j -lpq";
break
fi
done
done
fi
# Printing error if mysql is not found
if [ "X$1" = "Xmysql" -a "X$MI" = "X" -a "X$ML" = "X" ]; then
echo "" >&2
echo "Error: MySQL client libraries not installed." >&2
echo "" >&2
exit 1;
fi
# Printing error if postgresql is not found
if [ "X$1" = "Xpostgresql" -a "X$PI" = "X" -a "X$PL" = "X" ]; then
echo "" >&2
echo "Error: PostgreSQL client libraries not installed." >&2
echo "" >&2
exit 1;
fi
# Final cflags -- can not be empty.
if [ "X$MI" = "X" -o "X$ML" = "X" ]; then
MYSQL_FINAL=""
else
MYSQL_FINAL="-I$MI -L$ML -DDBD -DUMYSQL"
fi
# For postgresql
if [ "X$PI" = "X" -o "X$PL" = "X" ]; then
POSTGRES_FINAL=""
else
POSTGRES_FINAL="-I$PI -L$PL -DDBD -DUPOSTGRES"
fi
echo "${MYSQL_FINAL} ${POSTGRES_FINAL}"
exit 0;
Index: Makefile
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/Makefile,v
diff -u -r1.3 -r1.4
--- Makefile 22 Aug 2007 00:39:33 -0000 1.3
+++ Makefile 25 Aug 2007 13:24:04 -0000 1.4
@@ -15,7 +15,7 @@
# Getting database cflags
DBCHECK = `./dbmake.sh`
DBMYSQL = `./dbmake.sh mysql 2> /dev/null`
-DBPOSTGRES = `./dbmake.sh postgres 2> /dev/null`
+DBPOSTGRES = `./dbmake.sh postgresql 2> /dev/null`
OBJS = ${OS_CONFIG} ${OS_SHARED} ${OS_NET} ${OS_REGEX} ${OS_XML}
@@ -25,10 +25,12 @@
${CC} ${CFLAGS} ${DBFLAGS} ${DBCHECK} ${LOCAL} ${OBJS} -o ${NAME}
mysql:
@if [ "X${DBMYSQL}" = "X" ]; then ./dbmake.sh mysql; exit 1; fi;
- @echo "Compiling MySQL DB support with: ${DBVAL}"
- ${CC} ${CFLAGS} ${DBFLAGS} ${DBVAL} ${LOCAL} ${OBJS} -o ${NAME}
-postgres:
- ${CC} ${CFLAGS} ${DBFLAGS} -DDBD -DUPOSTGRES ${LOCAL} ${OBJS} -o ${NAME}
+ @echo "Compiling MySQL DB support with: ${DBMYSQL}"
+ ${CC} ${CFLAGS} ${DBFLAGS} ${DBMYSQL} ${LOCAL} ${OBJS} -o ${NAME}
+postgresql:
+ @if [ "X${DBPOSTGRES}" = "X" ]; then ./dbmake.sh postgresql; exit 1; fi;
+ @echo "Compiling PostgreSQL DB support with: ${DBPOSTGRES}"
+ ${CC} ${CFLAGS} ${DBFLAGS} ${DBPOSTGRES} ${LOCAL} ${OBJS} -o ${NAME}
clean:
${CLEAN}
build:
Index: alert.c
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/alert.c,v
diff -u -r1.1 -r1.2
--- alert.c 18 Aug 2007 03:38:34 -0000 1.1
+++ alert.c 25 Aug 2007 13:24:04 -0000 1.2
@@ -184,7 +184,7 @@
"alert(id,server_id,rule_id,timestamp,location_id,src_ip) "
"VALUES ('%u', '%u', '%u','%u', '%u', '%lu')",
db_config->alert_id, db_config->server_id, al_data->rule,
- time(0), *loc_id, (unsigned long)ntohl(s_ip));
+ (unsigned int)time(0), *loc_id, (unsigned long)ntohl(s_ip));
/* Inserting into the db */
Index: config.c
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/config.c,v
diff -u -r1.3 -r1.4
--- config.c 23 Aug 2007 00:01:44 -0000 1.3
+++ config.c 25 Aug 2007 13:24:04 -0000 1.4
@@ -1,12 +1,15 @@
/* @(#) $Id$ */
-/* Copyright (C) 2003-2006 Daniel B. Cid <dcid@xxxxxxxxx>
+/* Copyright (C) 2003-2007 Daniel B. Cid <dcid@xxxxxxxxx>
* All rights reserved.
*
* This program is a free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
* License (version 3) as published by the FSF - Free Software
- * Foundation
+ * Foundation.
+ *
+ * License details at the LICENSE file included with OSSEC or
+ * online at: http://www.ossec.net/en/licensing.html
*/
@@ -15,6 +18,9 @@
#include "config/config.h"
+/** int OS_ReadDBConf(int test_config, char *cfgfile, DBConfig *db_config)
+ * Reads database configuration.
+ */
int OS_ReadDBConf(int test_config, char *cfgfile, DBConfig *db_config)
{
int modules = 0;
@@ -73,8 +79,37 @@
merror(DB_MISS_CONFIG, ARGV0);
return(OS_INVALID);
}
-
+
+ osdb_connect = NULL;
+
+ /* Assigning the proper location for the function calls */
+ #ifdef UMYSQL
+ if(db_config->db_type == MYSQLDB)
+ {
+ osdb_connect = mysql_osdb_connect;
+ osdb_query_insert = mysql_osdb_query_insert;
+ osdb_query_select = mysql_osdb_query_select;
+ osdb_close = mysql_osdb_close;
+ }
+ #endif
+
+ #ifdef UPOSTGRES
+ if(db_config->db_type == POSTGDB)
+ {
+ osdb_connect = postgresql_osdb_connect;
+ osdb_query_insert = postgresql_osdb_query_insert;
+ osdb_query_select = postgresql_osdb_query_select;
+ osdb_close = postgresql_osdb_close;
+ }
+ #endif
+
+ if(osdb_connect == NULL)
+ {
+ merror("%s: Invalid DB configuration (Internal error?). ", ARGV0);
+ return(OS_INVALID);
+ }
+
return(1);
}
Index: db_op.c
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/db_op.c,v
diff -u -r1.5 -r1.6
--- db_op.c 22 Aug 2007 00:39:33 -0000 1.5
+++ db_op.c 25 Aug 2007 13:24:04 -0000 1.6
@@ -24,6 +24,12 @@
#include <mysql.h>
#endif
+/* Using PostgreSQL */
+#ifdef UPOSTGRES
+#include <libpq-fe.h>
+#endif
+
+
/** void osdb_escapestr
* Escapes a null terminated string before inserting into the database.
@@ -53,14 +59,15 @@
}
+
/** MySQL calls **/
#ifdef UMYSQL
-/* Create the tree
- * Return NULL on error
+/* Create the database connection.
+ * Returns NULL on error
*/
-void *osdb_connect(char *host, char *user, char *pass, char *db)
+void *mysql_osdb_connect(char *host, char *user, char *pass, char *db)
{
MYSQL *conn;
conn = mysql_init(NULL);
@@ -80,16 +87,21 @@
}
-void osdb_close(void *db_conn)
+
+/* Closes the database connection.
+ */
+void *mysql_osdb_close(void *db_conn)
{
mysql_close(db_conn);
+ return(NULL);
}
-/** int osdb_query_insert(void *db_conn, char *query)
+
+/** int mysql_osdb_query_insert(void *db_conn, char *query)
* Sends insert query to database.
*/
-int osdb_query_insert(void *db_conn, char *query)
+int mysql_osdb_query_insert(void *db_conn, char *query)
{
if(mysql_query(db_conn, query) != 0)
{
@@ -103,11 +115,11 @@
-/** int osdb_query_select(void *db_conn, char *query)
+/** int mysql_osdb_query_select(void *db_conn, char *query)
* Sends a select query to database. Returns the value of it.
* Returns 0 on error (not found).
*/
-int osdb_query_select(void *db_conn, char *query)
+int mysql_osdb_query_select(void *db_conn, char *query)
{
int result_int = 0;
MYSQL_RES *result_data;
@@ -146,24 +158,114 @@
return(result_int);
}
+#endif
/** End of MYSQL calls **/
+
+
/** PostGRES Calls **/
-#elif defined UPOSTGRES
+#if defined UPOSTGRES
+
+
+/** void *postgresql_osdb_connect(char *host, char *user, char *pass, char *db)
+ * Create the PostgreSQL database connection.
+ * Return NULL on error
+ */
+void *postgresql_osdb_connect(char *host, char *user, char *pass, char *db)
+{
+ PGconn *conn;
+
+
+ conn = PQsetdbLogin(host, NULL, NULL, NULL,db,user,pass);
+ if(PQstatus(conn) == CONNECTION_BAD)
+ {
+ merror(DBCONN_ERROR, ARGV0, host, db, PQerrorMessage(conn));
+ PQfinish(conn);
+ return(NULL);
+ }
+
+ return(conn);
+}
+
+
+
+/** void postgresql_osdb_close(void *db_conn)
+ * Terminates db connection.
+ */
+void *postgresql_osdb_close(void *db_conn)
+{
+ PQfinish(db_conn);
+ return(NULL);
+}
+
+
+
+/** int postgresql_osdb_query_insert(void *db_conn, char *query)
+ * Sends insert query to database.
+ */
+int postgresql_osdb_query_insert(void *db_conn, char *query)
+{
+ PGresult *result;
+
+
+ result = PQexec(db_conn,query);
+ if(PQresultStatus(result) != PGRES_COMMAND_OK)
+ {
+ merror(DBQUERY_ERROR, ARGV0, query, PQerrorMessage(db_conn));
+ PQclear(result);
+ return(0);
+ }
+
+ PQclear(result);
+ return(1);
+}
+
+/** int postgresql_osdb_query_select(void *db_conn, char *query)
+ * Sends a select query to database. Returns the value of it.
+ * Returns 0 on error (not found).
+ */
+int postgresql_osdb_query_select(void *db_conn, char *query)
+{
+ int result_int = 0;
+ PGresult *result;
+
+ result = PQexec(db_conn,query);
+ if((PQresultStatus(result) == PGRES_TUPLES_OK))
+ {
+ if(PQntuples(result) == 1)
+ {
+ result_int = atoi(PQgetvalue(result,0,0));
+ }
+ }
+
+
+ /* Report error */
+ if(result_int == 0)
+ {
+ merror(DBQUERY_ERROR, ARGV0, query, PQerrorMessage(db_conn));
+ }
+
+
+ PQclear(result);
+
+
+ return(result_int);
+}
/** End of PostGRES calls **/
+#endif
/* Everything else when db is not defined. */
-#else
+#if !defined(UPOSTGRES) && !defined(UMYSQL)
-void *osdb_connect(char *host, char *user, char *pass, char *db)
+void *none_osdb_connect(char *host, char *user, char *pass, char *db)
{
char *tmp;
@@ -175,15 +277,15 @@
merror("%s: ERROR: Database support not enabled. Exiting.", ARGV0);
return(NULL);
}
-void osdb_close(void *db_conn)
+void *none_osdb_close(void *db_conn)
{
void *tmp;
tmp = db_conn;
merror("%s: ERROR: Database support not enabled. Exiting.", ARGV0);
- return;
+ return(NULL);
}
-int osdb_query_insert(void *db_conn, char *query)
+void *none_osdb_query_insert(void *db_conn, char *query)
{
void *tmp;
@@ -192,7 +294,7 @@
merror("%s: ERROR: Database support not enabled. Exiting.", ARGV0);
return(0);
}
-int osdb_query_select(void *db_conn, char *query)
+void *none_osdb_query_select(void *db_conn, char *query)
{
void *tmp;
Index: db_op.h
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/db_op.h,v
diff -u -r1.3 -r1.4
--- db_op.h 18 Aug 2007 01:07:49 -0000 1.3
+++ db_op.h 25 Aug 2007 13:24:04 -0000 1.4
@@ -20,13 +20,25 @@
/* Connects to the database */
-void *osdb_connect(char *host, char *user, char *pass, char *db);
+void *(*osdb_connect)(char *host, char *user, char *pass, char *db);
+void *mysql_osdb_connect(char *host, char *user, char *pass, char *db);
+void *postgresql_osdb_connect(char *host, char *user, char *pass, char *db);
/* Sends insert query to the database */
-int osdb_query_insert(void *db_conn, char *query);
+int (* osdb_query_insert)(void *db_conn, char *query);
+int mysql_osdb_query_insert(void *db_conn, char *query);
+int postgresql_osdb_query_insert(void *db_conn, char *query);
/* Sends select query to the database */
-int osdb_query_select(void *db_conn, char *query);
+int (* osdb_query_select)(void *db_conn, char *query);
+int mysql_osdb_query_select(void *db_conn, char *query);
+int postgresql_osdb_query_select(void *db_conn, char *query);
+
+/* Closes connection to the database */
+void *(*osdb_close)(void *db_conn);
+void *mysql_osdb_close(void *db_conn);
+void *postgresql_osdb_close(void *db_conn);
+
/* escape strings before inserting. */
void osdb_escapestr(char *str);
Index: main.c
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/main.c,v
diff -u -r1.4 -r1.5
--- main.c 23 Aug 2007 00:01:44 -0000 1.4
+++ main.c 25 Aug 2007 13:24:04 -0000 1.5
@@ -65,6 +65,7 @@
/* Database Structure */
DBConfig db_config;
+ db_config.error_count = 0;
/* Setting the name */
Index: server.c
===================================================================
RCS file: /usr/cvsroot/ossec-hids/src/os_dbd/server.c,v
diff -u -r1.2 -r1.3
--- server.c 18 Aug 2007 03:38:34 -0000 1.2
+++ server.c 25 Aug 2007 13:24:04 -0000 1.3
@@ -59,7 +59,8 @@
"server(id, last_contact, version, hostname, information) "
"VALUES (NULL, '%u', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE "
"last_contact='%u',version='%s',information='%s'",
- time(0), __version, server, info, time(0), __version, info);
+ (unsigned int)time(0), __version, server, info,
+ (unsigned int)time(0), __version, info);
/* Checking return code. */
OSSEC home |
Main Index |
Thread Index
OSSEC project: www.ossec.net.
Mailling list information: http://www.ossec.net/en/mailing_lists.html.