[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.