From 745384649f89a67a42894e66cdc8c2e23773b358 Mon Sep 17 00:00:00 2001 From: ddpbsd Date: Sat, 2 May 2020 12:54:36 -0400 Subject: [PATCH 1/5] Cleanup some variables. In issue #1871 @rseichter brings up that gcc 10 switches to '-fno-common' by default. This killed builds of the agent. Switch agt to os_net_agt in os_net. Shuffle around the variable in client-agent (I think gcc had issues with agt being declared in agentd.h which gets included everywhere). Shuffle around willchroot in manage_agents. --- src/addagent/main.c | 1 + src/addagent/manage_agents.c | 2 ++ src/addagent/manage_agents.h | 2 +- src/addagent/manage_keys.c | 2 ++ src/client-agent/agentd.c | 2 ++ src/client-agent/agentd.h | 4 ++-- src/client-agent/event-forward.c | 3 +++ src/client-agent/main.c | 5 ++++- src/client-agent/notify.c | 2 ++ src/client-agent/receiver-win.c | 1 + src/client-agent/receiver.c | 2 ++ src/client-agent/sendmsg.c | 3 +++ src/client-agent/start_agent.c | 7 +++++++ src/os_net/os_net.c | 20 ++++++++++---------- src/os_net/os_net.h | 2 +- 15 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/addagent/main.c b/src/addagent/main.c index 587a8a3d8..ab12f0326 100644 --- a/src/addagent/main.c +++ b/src/addagent/main.c @@ -17,6 +17,7 @@ static void print_banner(void); static void manage_shutdown(int sig) __attribute__((noreturn)); #endif +int willchroot; #if defined(__MINGW32__) static int setenv(const char *name, const char *val, __attribute__((unused)) int overwrite) diff --git a/src/addagent/manage_agents.c b/src/addagent/manage_agents.c index ac39c1e66..4f9c266ff 100644 --- a/src/addagent/manage_agents.c +++ b/src/addagent/manage_agents.c @@ -85,6 +85,8 @@ int add_agent(int json_output) char authfile[257]; + extern int willchroot; + if(willchroot > 0) { snprintf(authfile, 256, "%s", AUTH_FILE); //XXX } else { diff --git a/src/addagent/manage_agents.h b/src/addagent/manage_agents.h index 4812dba43..f2962e80b 100644 --- a/src/addagent/manage_agents.h +++ b/src/addagent/manage_agents.h @@ -147,4 +147,4 @@ extern fpos_t fp_pos; #define GMF_UNKN_ERROR ARGV0 ": Could not run GetModuleFileName which returned (%ld).\n" -int willchroot; +//int willchroot; diff --git a/src/addagent/manage_keys.c b/src/addagent/manage_keys.c index 146b48326..ffb9a1f21 100644 --- a/src/addagent/manage_keys.c +++ b/src/addagent/manage_keys.c @@ -336,6 +336,8 @@ int k_bulkload(const char *cmdbulk) char delims[] = ","; char *token = NULL; + extern int willchroot; + /* Check if we can open the input file */ printf("Opening: [%s]\n", cmdbulk); infp = fopen(cmdbulk, "r"); diff --git a/src/client-agent/agentd.c b/src/client-agent/agentd.c index c09cf87d3..67828e79c 100644 --- a/src/client-agent/agentd.c +++ b/src/client-agent/agentd.c @@ -23,6 +23,8 @@ void AgentdStart(const char *dir, int uid, int gid, const char *user, const char fd_set fdset; struct timeval fdtimeout; + extern agent *agt; + available_server = 0; /* Initial random numbers must happen before chroot */ diff --git a/src/client-agent/agentd.h b/src/client-agent/agentd.h index 0246a5457..a362ff9a3 100644 --- a/src/client-agent/agentd.h +++ b/src/client-agent/agentd.h @@ -81,9 +81,9 @@ void os_agent_cb(int fd, short ev, void *arg); extern time_t available_server; extern int run_foreground; extern keystore keys; -extern agent *agt; +//extern agent *agt; #ifndef WIN32 -struct imsgbuf server_ibuf; +//struct imsgbuf server_ibuf; #endif //WIN32 #endif /* __AGENTD_H */ diff --git a/src/client-agent/event-forward.c b/src/client-agent/event-forward.c index 2e81f0c90..22ed0beb9 100644 --- a/src/client-agent/event-forward.c +++ b/src/client-agent/event-forward.c @@ -19,6 +19,9 @@ /* Receive a message locally on the agent and forward it to the manager */ void *EventForward(void) { + + extern agent *agt; + ssize_t recv_b; char msg[OS_MAXSTR + 1]; diff --git a/src/client-agent/main.c b/src/client-agent/main.c index 5f85cfb73..01c18970c 100644 --- a/src/client-agent/main.c +++ b/src/client-agent/main.c @@ -16,7 +16,8 @@ #define ARGV0 "ossec-agentd" #endif -extern struct imsgbuf server_ibuf; +//extern struct imsgbuf server_ibuf; +struct imsgbuf server_ibuf; /* Prototypes */ @@ -112,6 +113,8 @@ int main(int argc, char **argv) debug1(STARTED_MSG, ARGV0); + extern agent *agt; + agt = (agent *)calloc(1, sizeof(agent)); if (!agt) { ErrorExit(MEM_ERROR, ARGV0, errno, strerror(errno)); diff --git a/src/client-agent/notify.c b/src/client-agent/notify.c index 1b239f26c..93fec325c 100644 --- a/src/client-agent/notify.c +++ b/src/client-agent/notify.c @@ -68,6 +68,8 @@ void run_notify() os_md5 md5sum; time_t curr_time; + extern agent *agt; + keep_alive_random[0] = '\0'; curr_time = time(0); diff --git a/src/client-agent/receiver-win.c b/src/client-agent/receiver-win.c index 859bdf7f9..4ab62ee77 100644 --- a/src/client-agent/receiver-win.c +++ b/src/client-agent/receiver-win.c @@ -19,6 +19,7 @@ /* Receive events from the server */ void *receiver_thread(__attribute__((unused)) void *none) { + extern agent *agt; int recv_b; char file[OS_SIZE_1024 + 1]; diff --git a/src/client-agent/receiver.c b/src/client-agent/receiver.c index fde64c282..5286e60dc 100644 --- a/src/client-agent/receiver.c +++ b/src/client-agent/receiver.c @@ -29,6 +29,8 @@ void *receive_msg() char cleartext[OS_MAXSTR + 1]; char *tmp_msg; + extern agent *agt; + memset(cleartext, '\0', OS_MAXSTR + 1); memset(buffer, '\0', OS_MAXSTR + 1); diff --git a/src/client-agent/sendmsg.c b/src/client-agent/sendmsg.c index 454c2e714..3076dfcf9 100644 --- a/src/client-agent/sendmsg.c +++ b/src/client-agent/sendmsg.c @@ -15,6 +15,9 @@ /* Send a message to the server */ int send_msg(int agentid, const char *msg) { + + extern agent *agt; + size_t msg_size; char crypt_msg[OS_MAXSTR + 1]; diff --git a/src/client-agent/start_agent.c b/src/client-agent/start_agent.c index 51670cee5..f1df43715 100644 --- a/src/client-agent/start_agent.c +++ b/src/client-agent/start_agent.c @@ -24,6 +24,9 @@ int connect_server(int initial_id) #ifdef WIN32 unsigned int attempts = 2; #endif //WIN32 + + extern agent *agt; + int rc = initial_id; /* Checking if the initial is zero, meaning we have to @@ -139,6 +142,8 @@ void start_agent(int is_startup) char cleartext[OS_MAXSTR + 1]; char fmsg[OS_MAXSTR + 1]; + extern agent *agt; + memset(msg, '\0', OS_MAXSTR + 2); memset(buffer, '\0', OS_MAXSTR + 1); memset(cleartext, '\0', OS_MAXSTR + 1); @@ -241,6 +246,8 @@ void os_agent_cb(int fd, short ev, void *arg) { struct imsg imsg; struct imsgbuf *ibuf = (struct imsgbuf *)arg; + extern agent *agt; + if (ev & EV_READ) { if ((n = imsg_read(ibuf) == -1 && errno != EAGAIN)) { ErrorExit("%s: ERROR: imsg_read() failed: %s", ARGV0, strerror(errno)); diff --git a/src/os_net/os_net.c b/src/os_net/os_net.c index f18e3be77..756e9fac8 100644 --- a/src/os_net/os_net.c +++ b/src/os_net/os_net.c @@ -14,7 +14,7 @@ #include #include "shared.h" #include "os_net.h" -agent *agt; +agent *os_net_agt; /* Prototypes */ static OSNetInfo *OS_Bindport(char *_port, unsigned int _proto, const char *_ip); @@ -346,11 +346,11 @@ int OS_Connect(char *_port, unsigned int protocol, const char *_ip) return(OS_INVALID); } - if (agt) { - if (agt->lip) { + if (os_net_agt) { + if (os_net_agt->lip) { memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_flags = AI_NUMERICHOST; - s = getaddrinfo(agt->lip, NULL, &hints, &result); + s = getaddrinfo(os_net_agt->lip, NULL, &hints, &result); if (s != 0) { verbose("getaddrinfo: %s", gai_strerror(s)); } @@ -363,8 +363,8 @@ int OS_Connect(char *_port, unsigned int protocol, const char *_ip) memset(&hints, 0, sizeof(struct addrinfo)); /* Allow IPv4 or IPv6 if local_ip isn't specified */ hints.ai_family = AF_UNSPEC; - if (agt) { - if (agt->lip) { + if (os_net_agt) { + if (os_net_agt->lip) { hints.ai_family = local_ai->ai_family; } } @@ -398,13 +398,13 @@ int OS_Connect(char *_port, unsigned int protocol, const char *_ip) continue; } - if (agt) { - if (agt->lip) { + if (os_net_agt) { + if (os_net_agt->lip) { if (bind(ossock, local_ai->ai_addr, local_ai->ai_addrlen)) { verbose("Unable to bind to local address %s. Ignoring. (%s)", - agt->lip, strerror(errno)); + os_net_agt->lip, strerror(errno)); } - else verbose("Connecting from local address %s", agt->lip); + else verbose("Connecting from local address %s", os_net_agt->lip); } } diff --git a/src/os_net/os_net.h b/src/os_net/os_net.h index 9b7250928..3aaf00429 100644 --- a/src/os_net/os_net.h +++ b/src/os_net/os_net.h @@ -13,7 +13,7 @@ #include "headers/shared.h" #include "config/client-config.h" -extern agent *agt; +extern agent *os_net_agt; #ifdef WIN32 #ifndef AI_ADDRCONFIG #define AI_ADDRCONFIG 0x0400 From 940198e914db65a7133784d25964aa0e11354233 Mon Sep 17 00:00:00 2001 From: ddpbsd Date: Sat, 2 May 2020 14:08:33 -0400 Subject: [PATCH 2/5] extern agt --- src/win32/win_agent.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/win32/win_agent.c b/src/win32/win_agent.c index 40a37e621..a2ec784f2 100644 --- a/src/win32/win_agent.c +++ b/src/win32/win_agent.c @@ -124,6 +124,7 @@ int local_start() WSADATA wsaData; DWORD threadID; DWORD threadID2; + extern agent *agt; /* Start agent */ agt = (agent *)calloc(1, sizeof(agent)); @@ -271,6 +272,7 @@ int SendMSG(__attribute__((unused)) int queue, const char *message, const char * char tmpstr[OS_MAXSTR + 2]; char crypt_msg[OS_MAXSTR + 2]; DWORD dwWaitResult; + extern agent *agt; tmpstr[OS_MAXSTR + 1] = '\0'; crypt_msg[OS_MAXSTR + 1] = '\0'; @@ -468,6 +470,8 @@ void send_win32_info(time_t curr_time) tmp_msg[OS_MAXSTR + 1] = '\0'; crypt_msg[OS_MAXSTR + 1] = '\0'; + extern agent *agt; + debug1("%s: DEBUG: Sending keep alive message.", ARGV0); /* Fix time */ From f8405753edbf1fd478ba75e6f7c770e63fa1e126 Mon Sep 17 00:00:00 2001 From: ddpbsd Date: Mon, 25 May 2020 12:23:16 -0400 Subject: [PATCH 3/5] Shuffle around variable declarations to make -fno-common happy. --- src/analysisd/analysisd.c | 1 + src/analysisd/syscheck-sqlite.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/analysisd/analysisd.c b/src/analysisd/analysisd.c index a220f4421..2e89b7967 100644 --- a/src/analysisd/analysisd.c +++ b/src/analysisd/analysisd.c @@ -43,6 +43,7 @@ #ifdef SQLITE_ENABLED #include "syscheck-sqlite.h" +sqlite3 *conn; #endif /** Prototypes **/ diff --git a/src/analysisd/syscheck-sqlite.h b/src/analysisd/syscheck-sqlite.h index 526cab26e..3a68ca816 100644 --- a/src/analysisd/syscheck-sqlite.h +++ b/src/analysisd/syscheck-sqlite.h @@ -1,5 +1,5 @@ #ifdef SQLITE_ENABLED #include -sqlite3 *conn; +//sqlite3 *conn; #endif From 1d54a2cca3241bd80781a615e4f6f97ce2c1569e Mon Sep 17 00:00:00 2001 From: ddpbsd Date: Mon, 25 May 2020 12:24:47 -0400 Subject: [PATCH 4/5] garbage collect syscheck-sqlite.h since it's blank now. --- src/analysisd/analysisd.c | 1 - src/analysisd/decoders/syscheck.c | 4 ---- src/analysisd/syscheck-sqlite.h | 5 ----- 3 files changed, 10 deletions(-) delete mode 100644 src/analysisd/syscheck-sqlite.h diff --git a/src/analysisd/analysisd.c b/src/analysisd/analysisd.c index 2e89b7967..db762a90d 100644 --- a/src/analysisd/analysisd.c +++ b/src/analysisd/analysisd.c @@ -42,7 +42,6 @@ #endif #ifdef SQLITE_ENABLED -#include "syscheck-sqlite.h" sqlite3 *conn; #endif diff --git a/src/analysisd/decoders/syscheck.c b/src/analysisd/decoders/syscheck.c index a6d675892..7c6745166 100644 --- a/src/analysisd/decoders/syscheck.c +++ b/src/analysisd/decoders/syscheck.c @@ -15,10 +15,6 @@ #include "alerts/alerts.h" #include "decoder.h" -#ifdef SQLITE_ENABLED -#include "syscheck-sqlite.h" -#endif - typedef struct __sdb { char buf[OS_MAXSTR + 1]; char comment[OS_MAXSTR + 1]; diff --git a/src/analysisd/syscheck-sqlite.h b/src/analysisd/syscheck-sqlite.h deleted file mode 100644 index 3a68ca816..000000000 --- a/src/analysisd/syscheck-sqlite.h +++ /dev/null @@ -1,5 +0,0 @@ -#ifdef SQLITE_ENABLED -#include - -//sqlite3 *conn; -#endif From 5d6f21e31dab30e34f1713f6cfe1b2e0108f77f5 Mon Sep 17 00:00:00 2001 From: ddpbsd Date: Mon, 25 May 2020 14:38:08 -0400 Subject: [PATCH 5/5] Shuffle around sqlite and geoip variables to make -fno-common happy --- src/analysisd/analysisd.c | 5 +++++ src/analysisd/config.h | 3 +++ src/analysisd/decoders/geoip.c | 1 + src/analysisd/decoders/syscheck.c | 4 ++++ src/analysisd/makelists.c | 4 ++++ src/analysisd/testrule.c | 1 + 6 files changed, 18 insertions(+) diff --git a/src/analysisd/analysisd.c b/src/analysisd/analysisd.c index db762a90d..0a81971de 100644 --- a/src/analysisd/analysisd.c +++ b/src/analysisd/analysisd.c @@ -42,9 +42,14 @@ #endif #ifdef SQLITE_ENABLED +#include sqlite3 *conn; #endif +#ifdef LIBGEOIP_ENABLED +GeoIP *geoipdb; +#endif + /** Prototypes **/ void OS_ReadMSG(int m_queue); RuleInfo *OS_CheckIfRuleMatch(Eventinfo *lf, RuleNode *curr_node); diff --git a/src/analysisd/config.h b/src/analysisd/config.h index 8d74c756e..976d1942e 100644 --- a/src/analysisd/config.h +++ b/src/analysisd/config.h @@ -12,6 +12,7 @@ #include "config/config.h" #include "config/global-config.h" + #ifdef LIBGEOIP_ENABLED #include "GeoIP.h" #endif @@ -20,9 +21,11 @@ extern long int __crt_ftell; /* Global ftell pointer */ extern _Config Config; /* Global Config structure */ +/* #ifdef LIBGEOIP_ENABLED GeoIP *geoipdb; #endif +*/ int GlobalConf(const char *cfgfile); diff --git a/src/analysisd/decoders/geoip.c b/src/analysisd/decoders/geoip.c index 464e4bb71..9816b4c81 100644 --- a/src/analysisd/decoders/geoip.c +++ b/src/analysisd/decoders/geoip.c @@ -30,6 +30,7 @@ char *GetGeoInfobyIP(char *ip_addr) GeoIPRecord *geoiprecord; char *geodata = NULL; char geobuffer[256 +1]; + extern GeoIP *geoipdb; if(!geoipdb) { diff --git a/src/analysisd/decoders/syscheck.c b/src/analysisd/decoders/syscheck.c index 7c6745166..30339a00d 100644 --- a/src/analysisd/decoders/syscheck.c +++ b/src/analysisd/decoders/syscheck.c @@ -15,6 +15,10 @@ #include "alerts/alerts.h" #include "decoder.h" +#ifdef SQLITE_ENABLED +#include +#endif + typedef struct __sdb { char buf[OS_MAXSTR + 1]; char comment[OS_MAXSTR + 1]; diff --git a/src/analysisd/makelists.c b/src/analysisd/makelists.c index 06c90db70..dfbe6a4a3 100644 --- a/src/analysisd/makelists.c +++ b/src/analysisd/makelists.c @@ -32,6 +32,10 @@ time_t c_time; char __shost[512]; OSDecoderInfo *NULL_Decoder; +#ifdef LIBGEOIP_ENABLED +GeoIP *geoipdb; +#endif + /* print help statement */ __attribute__((noreturn)) static void help_makelists(void) diff --git a/src/analysisd/testrule.c b/src/analysisd/testrule.c index c08fb4885..b1aa928f7 100644 --- a/src/analysisd/testrule.c +++ b/src/analysisd/testrule.c @@ -83,6 +83,7 @@ int main(int argc, char **argv) memset(prev_month, '\0', 4); #ifdef LIBGEOIP_ENABLED + extern GeoIP *geoipdb; geoipdb = NULL; #endif