summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-05-18 14:27:31 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2006-05-18 14:27:31 +0000
commit1c3253c2dddc63349e34e38d681bedeede2da8a7 (patch)
tree9f9b6109a8bde5ac2e3e126285fbd13e64d81477 /src
parentc7bc0f193a9c9d590781f150494f18a31b7e2df9 (diff)
- fixed 'EventLog' monitoring for Win32 ZABBIX agent (Eugene)
- fixed Win32 ZABBIX agent crash (Eugene) git-svn-id: svn://svn.zabbix.com/trunk@2857 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src')
-rwxr-xr-xsrc/zabbix_agent_win32/Debug/ZabbixW32.exebin368716 -> 372812 bytes
-rwxr-xr-xsrc/zabbix_agent_win32/Release/ZabbixW32.exebin114688 -> 114688 bytes
-rw-r--r--src/zabbix_agent_win32/ZabbixW32.dsp4
-rwxr-xr-xsrc/zabbix_agent_win32/active.cpp96
-rw-r--r--src/zabbix_agent_win32/collect.cpp6
-rw-r--r--src/zabbix_agent_win32/comm.cpp294
-rwxr-xr-xsrc/zabbix_agent_win32/eventlog.cpp334
-rw-r--r--src/zabbix_agent_win32/log.cpp7
-rwxr-xr-xsrc/zabbix_agent_win32/logfiles.cpp112
-rw-r--r--src/zabbix_agent_win32/messages.mc20
-rw-r--r--src/zabbix_agent_win32/resource.h2
-rw-r--r--src/zabbix_agent_win32/sysinfo.cpp14
-rw-r--r--src/zabbix_agent_win32/util.cpp3
-rw-r--r--src/zabbix_agent_win32/zabbixw32.h5
14 files changed, 399 insertions, 498 deletions
diff --git a/src/zabbix_agent_win32/Debug/ZabbixW32.exe b/src/zabbix_agent_win32/Debug/ZabbixW32.exe
index a749cd83..7dc35b47 100755
--- a/src/zabbix_agent_win32/Debug/ZabbixW32.exe
+++ b/src/zabbix_agent_win32/Debug/ZabbixW32.exe
Binary files differ
diff --git a/src/zabbix_agent_win32/Release/ZabbixW32.exe b/src/zabbix_agent_win32/Release/ZabbixW32.exe
index 20117b57..d294927b 100755
--- a/src/zabbix_agent_win32/Release/ZabbixW32.exe
+++ b/src/zabbix_agent_win32/Release/ZabbixW32.exe
Binary files differ
diff --git a/src/zabbix_agent_win32/ZabbixW32.dsp b/src/zabbix_agent_win32/ZabbixW32.dsp
index c8930341..24a174af 100644
--- a/src/zabbix_agent_win32/ZabbixW32.dsp
+++ b/src/zabbix_agent_win32/ZabbixW32.dsp
@@ -239,5 +239,9 @@ BuildCmds= \
# End Source File
# End Group
+# Begin Source File
+
+SOURCE=..\..\..\tmp\EventLog.asp
+# End Source File
# End Target
# End Project
diff --git a/src/zabbix_agent_win32/active.cpp b/src/zabbix_agent_win32/active.cpp
index c03ef01f..1aed96a0 100755
--- a/src/zabbix_agent_win32/active.cpp
+++ b/src/zabbix_agent_win32/active.cpp
@@ -79,16 +79,19 @@ METRIC *metrics=NULL;
static void InitMetrics()
{
+LOG_DEBUG_INFO("s","In InitMetrics()");
if(metrics==NULL)
{
metrics=(METRIC *)malloc(sizeof(METRIC));
metrics[0].key=NULL;
}
+LOG_DEBUG_INFO("s","End of InitMetrics()");
}
static void FreeMetrics(void)
{
int i;
+LOG_DEBUG_INFO("s","In FreeMetrics()");
for(i=0;;i++)
{
if(metrics[i].key == NULL) break;
@@ -96,21 +99,22 @@ static void FreeMetrics(void)
metrics[i].status = ITEM_STATUS_NOTSUPPORTED;
}
free(metrics);
+LOG_DEBUG_INFO("s","End of FreeMetrics()");
}
void disable_all_metrics()
{
int i;
+LOG_DEBUG_INFO("s","In disable_all_metrics()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s","disable_all_metrics: start");
for(i=0;;i++)
{
if(metrics[i].key == NULL) break;
metrics[i].status = ITEM_STATUS_NOTSUPPORTED;
}
-// LOG_DEBUG_INFO("s","disable_all_metrics: end");
CHECK_MEMORY(main,"disable_all_metrics","end");
+LOG_DEBUG_INFO("s","End of disable_all_metrics()");
}
int get_min_nextcheck()
@@ -119,10 +123,9 @@ int get_min_nextcheck()
int min=-1;
int nodata=0;
+LOG_DEBUG_INFO("s","In get_min_nextcheck()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s","get_min_nextcheck: start");
-
for(i=0;;i++)
{
if(metrics[i].key == NULL) break;
@@ -141,6 +144,7 @@ INIT_CHECK_MEMORY(main);
}
CHECK_MEMORY(main,"add_check","end");
+LOG_DEBUG_INFO("s","End of get_min_nextcheck()");
return min;
}
@@ -148,7 +152,7 @@ void add_check(char *key, int refresh, int lastlogsize)
{
int i;
-// LOG_DEBUG_INFO("s","add_check: start");
+LOG_DEBUG_INFO("s","In add_check()");
for(i=0;;i++)
{
@@ -176,7 +180,7 @@ void add_check(char *key, int refresh, int lastlogsize)
break;
}
}
-// LOG_DEBUG_INFO("s","add_check: end");
+LOG_DEBUG_INFO("s","End of add_check()");
}
// Return position of Nth delimiter from right size, 0 - otherwise
@@ -185,17 +189,17 @@ int strnrchr(char *str, int num, char delim)
int i=0;
int n=0;
+LOG_DEBUG_INFO("s","In strnrchr()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s","strnrchr: start");
for(i=strlen(str)-1;i>=0;i--)
{
if(str[i]==delim) n++;
if(n==num) break;
}
if(i==-1) i=0;
-// LOG_DEBUG_INFO("s","strnrchr: end");
CHECK_MEMORY(main,"strnrchr","end");
+LOG_DEBUG_INFO("s","End of strnrchr()");
return i;
}
@@ -212,7 +216,7 @@ int parse_list_of_checks(char *str)
char *str_copy;
int p1,p2;
-// LOG_DEBUG_INFO("s","parse_list_of_checks: start");
+LOG_DEBUG_INFO("s","In parse_list_of_checks()");
disable_all_metrics();
str_copy=str;
@@ -257,7 +261,7 @@ int parse_list_of_checks(char *str)
pos=strchr(str_copy,'\n');
}
-// LOG_DEBUG_INFO("s","parse_list_of_checks: end");
+LOG_DEBUG_INFO("s","End of parse_list_of_checks()");
return SUCCEED;
}
@@ -272,6 +276,7 @@ int get_active_checks(char *server, int port, char *error, int max_error_len)
struct sockaddr_in servaddr_in;
+LOG_DEBUG_INFO("s","In get_active_checks()");
// zabbix_log( LOG_LEVEL_DEBUG, "get_active_checks: host[%s] port[%d]", server, port);
servaddr_in.sin_family=AF_INET;
@@ -419,6 +424,7 @@ int get_active_checks(char *server, int port, char *error, int max_error_len)
}
// LOG_DEBUG_INFO("s","get_active_checks: end");
+LOG_DEBUG_INFO("s","End of get_active_checks()");
return SUCCEED;
}
@@ -441,6 +447,7 @@ int send_value(char *server,int port,char *host, char *key,char *value,char *las
//LOG_DEBUG_INFO("s","send_value: value");
//LOG_DEBUG_INFO("s",value);
+LOG_DEBUG_INFO("s","In send_value()");
INIT_CHECK_MEMORY(main);
servaddr_in.sin_family=AF_INET;
@@ -552,16 +559,13 @@ sprintf(tmp,"Error in sendto()");
lbl_End:
CHECK_MEMORY(main, "send_value", "end");
+LOG_DEBUG_INFO("s","End of send_value()");
return ret;
}
int process_active_checks(char *server, int port)
{
- REQUEST rq;
- HANDLE hThread=NULL;
- unsigned int tid;
-
-
+ REQUEST rq;
char value[MAX_STRING_LEN];
char lastlogsize[MAX_STRING_LEN];
char timestamp[MAX_STRING_LEN];
@@ -574,11 +578,10 @@ int process_active_checks(char *server, int port)
char c[MAX_STRING_LEN];
char *filename;
+LOG_DEBUG_INFO("s","In process_active_checks()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s","pac: start");
now=time(NULL);
-
for(i=0;;i++)
{
if(metrics[i].key == NULL) break;
@@ -599,10 +602,10 @@ INIT_CHECK_MEMORY(main);
count=0;
while(process_log(filename,&metrics[i].lastlogsize,value) == 0)
{
-LOG_DEBUG_INFO("s","Active check: log[*]");
-LOG_DEBUG_INFO("s",filename);
-LOG_DEBUG_INFO("s","Active check: value");
-LOG_DEBUG_INFO("s",value);
+//LOG_DEBUG_INFO("s","Active check: log[*]");
+//LOG_DEBUG_INFO("s",filename);
+//LOG_DEBUG_INFO("s","Active check: value");
+//LOG_DEBUG_INFO("s",value);
sprintf(lastlogsize,"%d",metrics[i].lastlogsize);
if(send_value(server,port,confHostname,metrics[i].key, value, lastlogsize,timestamp,source,severity) == FAIL)
{
@@ -624,15 +627,12 @@ LOG_DEBUG_INFO("s",value);
/* Special processing for log files */
else if(strncmp(metrics[i].key,"eventlog[",9) == 0)
{
-// LOG_DEBUG_INFO("s","process_active_checks: 1");
-
strscpy(c,metrics[i].key);
filename=strtok(c,"[]");
filename=strtok(NULL,"[]");
-// LOG_DEBUG_INFO("s","process_active_checks: 2");
count=0;
- while(process_eventlog_new(filename,&metrics[i].lastlogsize, timestamp, source, severity, value) == 0)
+ while(process_eventlog(filename,&metrics[i].lastlogsize, timestamp, source, severity, value) == 0)
{
// sprintf(shortname, "%s:%s",confHostname,metrics[i].key);
// zabbix_log( LOG_LEVEL_DEBUG, "%s",shortname);
@@ -657,10 +657,8 @@ LOG_DEBUG_INFO("s",value);
break;
}
count++;
-// LOG_DEBUG_INFO("s","pac: end of loop()");
/* Do not flood ZABBIX server if file grows too fast */
if(count >= MAX_LINES_PER_SECOND*metrics[i].refresh) break;
-// LOG_DEBUG_INFO("s","pac: 4");
}
}
else
@@ -670,25 +668,15 @@ LOG_DEBUG_INFO("s",value);
source[0]=0;
severity[0]=0;
+ // Init REQUEST
+ memset(&rq, 0, sizeof(REQUEST));
strcpy(rq.cmd,metrics[i].key);
-
- hThread=(HANDLE)_beginthreadex(NULL,0,ProcessingThread,(void *)&rq,0,&tid);
-
- if (WaitForSingleObject(hThread,confTimeout)==WAIT_TIMEOUT)
- {
- strcpy(rq.result,"ZBX_ERROR\n");
- statTimedOutRequests++;
- }
- CloseHandle(hThread);
-
- //send(sock,rq.result,strlen(rq.result),0);
+ ProcessCommand(rq.cmd,rq.result);
- //process(metrics[i].key, value);
+ ret = send_value(server,port,confHostname,metrics[i].key,rq.result,lastlogsize,timestamp,source,severity) ;
- //sprintf(shortname,"%s:%s",confHostname,metrics[i].key);
-// zabbix_log( LOG_LEVEL_DEBUG, "%s",shortname);
- if(send_value(server,port,confHostname,metrics[i].key,rq.result,lastlogsize,timestamp,source,severity) == FAIL)
+ if(ret == FAIL)
{
ret = FAIL;
break;
@@ -697,30 +685,29 @@ LOG_DEBUG_INFO("s",value);
if(strcmp(value,"ZBX_NOTSUPPORTED\n")==0)
{
metrics[i].status=ITEM_STATUS_NOTSUPPORTED;
-// zabbix_log( LOG_LEVEL_WARNING, "Active check [%s] is not supported. Disabled.", metrics[i].key);
+LOG_DEBUG_INFO("s","Active check is not supported. Disabled");
}
}
metrics[i].nextcheck=time(NULL)+metrics[i].refresh;
}
-//LOG_DEBUG_INFO("s","process_active_checks: end");
CHECK_MEMORY(main, "process_active_checks", "end");
+LOG_DEBUG_INFO("s","End of process_active_checks()");
return ret;
}
void refresh_metrics(char *server, int port, char *error, int max_error_len)
{
-// LOG_DEBUG_INFO("s","refresh_metrics: start");
-// zabbix_log( LOG_LEVEL_DEBUG, "In refresh_metrics()");
+LOG_DEBUG_INFO("s","In refresh_metrics()");
while(get_active_checks(server, port, error, max_error_len) != SUCCEED)
{
-// zabbix_log( LOG_LEVEL_WARNING, "Getting list of active checks failed. Will retry after 60 seconds");
+LOG_DEBUG_INFO("s","Getting list of active checks failed. Will retry after 60 seconds");
#ifdef HAVE_FUNCTION_SETPROCTITLE
setproctitle("poller [sleeping for %d seconds]", 60*1000);
#endif
Sleep(60*1000);
}
-// LOG_DEBUG_INFO("s","refresh_metrics: end");
+LOG_DEBUG_INFO("s","Out of refresh_metrics()");
}
void ActiveChecksThread(void *)
@@ -729,12 +716,9 @@ void ActiveChecksThread(void *)
int sleeptime, nextcheck;
int nextrefresh;
+LOG_DEBUG_INFO("s","In ActiveChecksThread()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s", "ActiveChecksThread start");
-
-// LOG_DEBUG_INFO("d",confServerPort);
-
InitMetrics();
refresh_metrics(confServer, confServerPort, error, MAX_STRING_LEN);
@@ -743,7 +727,6 @@ INIT_CHECK_MEMORY(main);
for(;;)
{
INIT_CHECK_MEMORY(for);
-//LOG_DEBUG_INFO("s","ActiveChecksThread: loop 1");
if(process_active_checks(confServer, confServerPort) == FAIL)
{
Sleep(60*1000);
@@ -764,16 +747,12 @@ CHECK_MEMORY(for, "ActiveChecksThread", "end for 1");
sleeptime=0;
}
}
-//LOG_DEBUG_INFO("s","sleeptime");
-//LOG_DEBUG_INFO("d",sleeptime);
if(sleeptime>0)
{
if(sleeptime > 60)
{
sleeptime = 60;
}
-// zabbix_log( LOG_LEVEL_DEBUG, "Sleeping for %d seconds",
-// sleeptime );
Sleep( sleeptime*1000 );
}
@@ -788,14 +767,13 @@ CHECK_MEMORY(for, "ActiveChecksThread", "end for 1");
nextrefresh=time(NULL)+300;
}
-// LOG_DEBUG_INFO("s","ActiveChecksThread: loop 2");
CHECK_MEMORY(for, "ActiveChecksThread", "end for");
}
/**/
FreeMetrics();
CHECK_MEMORY(main, "ActiveChecksThread", "end");
-//LOG_DEBUG_INFO("s", "ActiveChecksThread end");
+LOG_DEBUG_INFO("s","End of ActiveChecksThread()");
_endthread();
}
diff --git a/src/zabbix_agent_win32/collect.cpp b/src/zabbix_agent_win32/collect.cpp
index 7e77f828..43abac5b 100644
--- a/src/zabbix_agent_win32/collect.cpp
+++ b/src/zabbix_agent_win32/collect.cpp
@@ -275,8 +275,10 @@ INIT_CHECK_MEMORY(do);
// Calculate time spent on sample processing and issue warning if it exceeds threshold
dwTicksElapsed=GetTickCount()-dwTicksStart;
if (dwTicksElapsed>confMaxProcTime)
- WriteLog(MSG_BIG_PROCESSING_TIME,EVENTLOG_WARNING_TYPE,"dd",
- confMaxProcTime,dwTicksElapsed);
+ {
+ LOG_DEBUG_INFO("s","Processing took too many time.");
+ LOG_DEBUG_INFO("d",dwTicksElapsed);
+ }
// Save processing time to history buffer
collectorTimesHistory[collectorTimesIdx++]=dwTicksElapsed;
diff --git a/src/zabbix_agent_win32/comm.cpp b/src/zabbix_agent_win32/comm.cpp
index ee965e85..0bdcdc16 100644
--- a/src/zabbix_agent_win32/comm.cpp
+++ b/src/zabbix_agent_win32/comm.cpp
@@ -22,13 +22,6 @@
#include "zabbixw32.h"
-
-//
-// Request structure
-//
-
-
-
//
// Global data
//
@@ -59,78 +52,120 @@ CHECK_MEMORY(main, "IsValidServerAddr", "end");
//
-// Request processing thread
-//
-
-unsigned int __stdcall ProcessingThread(void *arg)
-{
-INIT_CHECK_MEMORY(main);
- ProcessCommand(((REQUEST *)arg)->cmd,((REQUEST *)arg)->result);
-CHECK_MEMORY(main, "ProcessingThread", "end");
-
- _endthreadex(0);
- return 0;
-}
-
-
-//
-// Client communication thread
+// Client communication
//
-static void CommThread(void *param)
+void Communicate(SOCKET sock)
{
- SOCKET sock;
- int rc;
- REQUEST rq;
- struct timeval timeout;
- FD_SET rdfs;
- HANDLE hThread=NULL;
- unsigned int tid;
+ TIMEVAL timeout = {0,0};
+ FD_SET rdfs;
+ REQUEST rq;
-//LOG_DEBUG_INFO("CommThread start");
+ int rc = 0;
+LOG_DEBUG_INFO("s","In Communicate()");
INIT_CHECK_MEMORY(main);
- sock=(SOCKET)param;
- // Wait for command from server
+ // Wait for command from server
FD_ZERO(&rdfs);
- FD_SET(sock,&rdfs); // ignore WARNING
- timeout.tv_sec=COMMAND_TIMEOUT;
- timeout.tv_usec=0;
- if (select(sock+1,&rdfs,NULL,NULL,&timeout)==0)
+ FD_SET(sock,&rdfs); // ignore WARNING '...whle(0)'
+
+ timeout.tv_sec = COMMAND_TIMEOUT;
+ timeout.tv_usec = 0;
+ rc = select(sock+1, &rdfs, (fd_set *)NULL, (fd_set *)NULL, &timeout);
+ if (rc == SOCKET_ERROR)
+ {
+ WriteLog(MSG_SELECT_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError());
+ goto end_session;
+ }
+ if(rc == 0)
{
WriteLog(MSG_COMMAND_TIMEOUT,EVENTLOG_WARNING_TYPE,NULL);
- goto end_session;
+ goto end_session;
}
- rc=recv(sock,rq.cmd,MAX_ZABBIX_CMD_LEN,0);
- if (rc<=0)
- {
- WriteLog(MSG_RECV_ERROR,EVENTLOG_ERROR_TYPE,"s",strerror(errno));
- goto end_session;
- }
+ // Init REQUEST
+ memset(&rq, 0, sizeof(REQUEST));
+ rc = recv(sock,rq.cmd,MAX_ZABBIX_CMD_LEN-1,0);
- rq.cmd[rc-1]=0;
+ if(rc <= 0)
+ {
+ WriteLog(MSG_RECV_ERROR,EVENTLOG_ERROR_TYPE,"s",strerror(errno));
+ goto end_session;
+ }
+ rq.cmd[rc-1]=0;
- hThread=(HANDLE)_beginthreadex(NULL,0,ProcessingThread,(void *)&rq,0,&tid);
+ ProcessCommand(rq.cmd,rq.result);
+ goto send_result;
- if (WaitForSingleObject(hThread,confTimeout)==WAIT_TIMEOUT)
- {
- strcpy(rq.result,"ZBX_ERROR\n");
- WriteLog(MSG_REQUEST_TIMEOUT,EVENTLOG_WARNING_TYPE,"s",rq.cmd);
- statTimedOutRequests++;
- }
- CloseHandle(hThread);
+end_session:
+ sprintf(rq.result,"ERROR\n");
- send(sock,rq.result,strlen(rq.result),0);
+send_result:
+ send(sock,rq.result,strlen(rq.result),0);
- // Terminate session
-end_session:
- shutdown(sock,2);
- closesocket(sock);
- _endthread();
+CHECK_MEMORY(main, "Communicate", "end");
+LOG_DEBUG_INFO("s","End of Communicate()");
+}
+
+//
+// Client connector thread
+//
+
+unsigned int __stdcall AcceptThread(void *arg)
+{
+ SOCKET sock = (SOCKET)arg;
+ struct sockaddr_in servAddr;
+ int iSize=0,errorCount=0;
+
+ LOG_DEBUG_INFO("s", "In AcceptThread()");
+ INIT_CHECK_MEMORY(main);
+
+ // Wait for connection requests
+ for(;;)
+ {
+ INIT_CHECK_MEMORY(while);
+ SOCKET sockClient;
+
+ iSize = sizeof(struct sockaddr_in);
+ if ((sockClient=accept(sock,(struct sockaddr *)&servAddr,&iSize)) < 0)
+ {
+ int error = WSAGetLastError();
+
+ if (error!=WSAEINTR)
+ WriteLog(MSG_ACCEPT_ERROR,EVENTLOG_ERROR_TYPE,"e",error);
+
+ errorCount++;
+ statAcceptErrors++;
+ if (errorCount>1000)
+ {
+ WriteLog(MSG_TOO_MANY_ERRORS,EVENTLOG_WARNING_TYPE,NULL);
+ errorCount=0;
+ }
+ Sleep(500);
+ continue;
+ }
+
+ errorCount=0; /* Reset consecutive errors counter */
+
+ if (IsValidServerAddr(servAddr.sin_addr.S_un.S_addr))
+ {
+ statAcceptedRequests++;
+ Communicate(sockClient);
+ } else {
+ statRejectedRequests++;
+ }
+
+ shutdown(sockClient,2);
+ closesocket(sockClient);
+
+ CHECK_MEMORY(while, "AcceptThread", "while");
+ }
+ CHECK_MEMORY(main, "AcceptThread", "end");
+ LOG_DEBUG_INFO("s", "End of AcceptThread()");
-CHECK_MEMORY(main, "CommThread", "end");
+ _endthreadex(0);
+ return 0;
}
@@ -140,81 +175,70 @@ CHECK_MEMORY(main, "CommThread", "end");
void ListenerThread(void *)
{
- SOCKET sock,sockClient;
- struct sockaddr_in servAddr;
- int iSize,errorCount=0;
+#define MAX_LISTENERS_COUNT 10
-INIT_CHECK_MEMORY(main);
-//LOG_DEBUG_INFO("s", "ListenerThread start");
-
- // Create socket
- if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1)
- {
- WriteLog(MSG_SOCKET_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError());
- _endthread();
- exit(1);
- }
-
- // Fill in local address structure
- memset(&servAddr,0,sizeof(struct sockaddr_in));
- servAddr.sin_family=AF_INET;
- servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
- servAddr.sin_port=htons(confListenPort);
-
- // Bind socket
- if (bind(sock,(struct sockaddr *)&servAddr,sizeof(struct sockaddr_in))!=0)
- {
- WriteLog(MSG_BIND_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError());
- _endthread();
- exit(1);
- }
-
- // Set up queue
- listen(sock,SOMAXCONN);
-
- // Wait for connection requests
- for(;;)
- {
-//LOG_DEBUG_INFO("s","ListenerThread while 1");
-INIT_CHECK_MEMORY(while);
-
- iSize=sizeof(struct sockaddr_in);
- if ((sockClient=accept(sock,(struct sockaddr *)&servAddr,&iSize))==-1)
- {
- int error=WSAGetLastError();
-
- if (error!=WSAEINTR)
- WriteLog(MSG_ACCEPT_ERROR,EVENTLOG_ERROR_TYPE,"e",error);
- errorCount++;
- statAcceptErrors++;
- if (errorCount>1000)
- {
- WriteLog(MSG_TOO_MANY_ERRORS,EVENTLOG_WARNING_TYPE,NULL);
- errorCount=0;
- }
- Sleep(500);
- }
-
- errorCount=0; // Reset consecutive errors counter
-
- if (IsValidServerAddr(servAddr.sin_addr.S_un.S_addr))
- {
- statAcceptedRequests++;
-
- _beginthread(CommThread,0,(void *)sockClient);
-
- }
- else // Unauthorized connection
- {
- statRejectedRequests++;
- shutdown(sockClient,2);
- closesocket(sockClient);
- }
-CHECK_MEMORY(while, "ListenerThread", "while");
- }
-
-CHECK_MEMORY(main, "ListenerThread", "end");
-//WriteLog(MSG_SOCKET_ERROR,EVENTLOG_ERROR_TYPE,"s","ListenerThread end");
+ HANDLE hThread[MAX_LISTENERS_COUNT];
+ unsigned int tid[MAX_LISTENERS_COUNT];
+
+ SOCKET sock;
+ struct sockaddr_in servAddr;
+ //int iSize=0, errorCount=0;
+
+ int i=0;
+
+ LOG_DEBUG_INFO("s", "In ListenerThread()");
+ INIT_CHECK_MEMORY(main);
+
+ // Create socket
+ if ((sock=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
+ {
+ WriteLog(MSG_SOCKET_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError());
+ LOG_DEBUG_INFO("s", "End of ListenerThread() Error: 1");
+ _endthread();
+ exit(1);
+ }
+
+ // Fill in local address structure
+ memset(&servAddr,0,sizeof(struct sockaddr_in));
+ servAddr.sin_family = AF_INET;
+ servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
+ servAddr.sin_port = htons(confListenPort);
+
+ // Bind socket
+ if (bind(sock,(struct sockaddr *)&servAddr,sizeof(struct sockaddr_in)) == SOCKET_ERROR)
+ {
+ WriteLog(MSG_BIND_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError());
+ LOG_DEBUG_INFO("s", "End of ListenerThread() Error: 2");
+ _endthread();
+ exit(1);
+ }
+
+ // Set up queue
+ if(listen(sock,SOMAXCONN) == SOCKET_ERROR)
+ {
+ WriteLog(MSG_LISTEN_ERROR,EVENTLOG_ERROR_TYPE,"e",WSAGetLastError());
+ LOG_DEBUG_INFO("s", "End of ListenerThread() Error: 2");
+ _endthread();
+ exit(1);
+ }
+
+ for(i = 0; i < MAX_LISTENERS_COUNT; i++)
+ {
+ hThread[i] = (HANDLE)_beginthreadex(NULL,0,AcceptThread,(void *)sock,0,&(tid[i]));
+ if(hThread[i] >=0 )
+ WriteLog(MSG_INFORMATION,EVENTLOG_INFORMATION_TYPE,"ds", tid[i], ": Listen thread is Started.");
+ }
+
+ for(i = 0; i < MAX_LISTENERS_COUNT; i++)
+ {
+ if(WaitForSingleObject(hThread[i], INFINITE) == WAIT_OBJECT_0)
+ WriteLog(MSG_INFORMATION,EVENTLOG_INFORMATION_TYPE,"ds", tid[i], ": Listen thread is Terminated.");
+
+ CloseHandle( hThread );
+ }
+
+ CHECK_MEMORY(main, "ListenerThread", "end");
+ LOG_DEBUG_INFO("s", "End of ListenerThread()");
_endthread();
}
diff --git a/src/zabbix_agent_win32/eventlog.cpp b/src/zabbix_agent_win32/eventlog.cpp
index a08e856a..2525a4a7 100755
--- a/src/zabbix_agent_win32/eventlog.cpp
+++ b/src/zabbix_agent_win32/eventlog.cpp
@@ -12,60 +12,70 @@ DllExport long MyGetAEventLog(char *pAppName,HANDLE hAppLog,long
which,double *pTime,char *pSource,char *pMessage,DWORD *pType,WORD
*pCategory, DWORD *timestamp);
-int process_eventlog_new(char *source,int *lastlogsize, char *timestamp, char *src, char *severity, char *message)
+int process_eventlog(
+ char *source,
+ int *lastlogsize,
+ char *timestamp,
+ char *src,
+ char *severity,
+ char *message)
{
HANDLE hAppLog;
- long nRecords,Latest=1;
+ long FirstID;
+ long LastID;
long i;
double time;
DWORD t,type;
WORD category;
int ret = 1;
+LOG_DEBUG_INFO("s","In process_eventlog()");
INIT_CHECK_MEMORY(main);
- if (!MyOpenEventLog(source,&hAppLog,&nRecords,&Latest))
+ if (!MyOpenEventLog(source,&hAppLog,&LastID,&FirstID))
{
- for (i = 0; i<nRecords;i++)
+ LastID += FirstID;
+ FirstID = ((*lastlogsize) >= FirstID) ? (*lastlogsize)+1 : FirstID;
+
+ for (i = FirstID; i < LastID; i++)
{
- if(*lastlogsize <= i)
+ if(MyGetAEventLog(source,hAppLog,i,&time,src,message,&type,&category,&t) == 0)
{
-
- if(0 == MyGetAEventLog(source,hAppLog,Latest,&time,src,message,&type,&category,&t))
- {
- sprintf(timestamp,"%ld",t);
-
- if(type==EVENTLOG_ERROR_TYPE) type=4;
- else if(type==EVENTLOG_AUDIT_FAILURE) type=7;
- else if(type==EVENTLOG_AUDIT_SUCCESS) type=8;
- else if(type==EVENTLOG_INFORMATION_TYPE) type=1;
- else if(type==EVENTLOG_WARNING_TYPE) type=2;
- sprintf(severity,"%d",type);
- *lastlogsize = Latest;
- ret = 0;
- break;
- }
+ sprintf(timestamp,"%ld",t);
+
+ if(type==EVENTLOG_ERROR_TYPE) type=4;
+ else if(type==EVENTLOG_AUDIT_FAILURE) type=7;
+ else if(type==EVENTLOG_AUDIT_SUCCESS) type=8;
+ else if(type==EVENTLOG_INFORMATION_TYPE) type=1;
+ else if(type==EVENTLOG_WARNING_TYPE) type=2;
+ sprintf(severity,"%d",type);
+ *lastlogsize = i;
+ ret = 0;
+ break;
}
- Latest++;
}
MyCloseEventLog(hAppLog);
}
-CHECK_MEMORY(main, "process_eventlog_new","end");
+
+CHECK_MEMORY(main, "process_eventlog","end");
+LOG_DEBUG_INFO("s","End of process_eventlog()");
return ret;
}
// open event logger and return number of records
-DllExport long MyOpenEventLog(char *pAppName,HANDLE
-*pEventHandle,long *pNumRecords,long *pLatestRecord)
+DllExport long MyOpenEventLog(
+ char *pAppName,
+ HANDLE *pEventHandle,
+ long *pNumRecords,
+ long *pLatestRecord)
{
- HANDLE hAppLog; /* handle to the
-application log */
+ HANDLE hAppLog; /* handle to the application log */
+LOG_DEBUG_INFO("s","In MyOpenEventLog()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s","MyOpenEventLog: start");
*pEventHandle = 0;
*pNumRecords = 0;
hAppLog = OpenEventLog(NULL,pAppName); // open log file
@@ -77,231 +87,193 @@ INIT_CHECK_MEMORY(main);
GetNumberOfEventLogRecords(hAppLog,(unsigned long*)pNumRecords);// get number of records
GetOldestEventLogRecord(hAppLog,(unsigned long*)pLatestRecord);
*pEventHandle = hAppLog;
-// LOG_DEBUG_INFO("s","MyOpenEventLog: end");
- CHECK_MEMORY(main, "MyOpenEventLog", "end");
+
+CHECK_MEMORY(main, "MyOpenEventLog", "end");
+LOG_DEBUG_INFO("s","End of MyOpenEventLog()");
return(0);
}
// close event logger
-DllExport long MyCloseEventLog(HANDLE hAppLog)
+DllExport long MyCloseEventLog(
+ HANDLE hAppLog
+ )
{
+LOG_DEBUG_INFO("s","In MyCloseEventLog()");
INIT_CHECK_MEMORY(main);
-// LOG_DEBUG_INFO("s","MyCloseEventLog: start");
- if (hAppLog)
- CloseEventLog(hAppLog);
-// LOG_DEBUG_INFO("s","MyCloseEventLog: end");
- CHECK_MEMORY(main, "MyCloseEventLog", "end");
+
+ if (hAppLog) CloseEventLog(hAppLog);
+
+CHECK_MEMORY(main, "MyCloseEventLog", "end");
+LOG_DEBUG_INFO("s","End of MyCloseEventLog()");
return(0);
}
// clear event log
-DllExport long MyClearEventLog(HANDLE hAppLog)
+DllExport long MyClearEventLog(
+ HANDLE hAppLog
+ )
{
+LOG_DEBUG_INFO("s","In MyClearEventLog()");
INIT_CHECK_MEMORY(main);
-LOG_DEBUG_INFO("s","MyClearEventLog: start");
+
if (!(ClearEventLog(hAppLog,0)))
{
-LOG_DEBUG_INFO("s","MyClearEventLog: end1");
+LOG_DEBUG_INFO("s","MyClearEventLog: error exit");
return(GetLastError());
}
-LOG_DEBUG_INFO("s","MyClearEventLog: end2");
+
CHECK_MEMORY(main, "MyClearEventLog", "end");
+LOG_DEBUG_INFO("s","End of MyClearEventLog()");
return(0);
}
// get Nth error from event log. 1 is the first.
-DllExport long MyGetAEventLog(char *pAppName,HANDLE hAppLog,long
-which,double *pTime,char *pSource,char *pMessage,DWORD *pType,WORD *pCategory, DWORD *timestamp)
+DllExport long MyGetAEventLog(
+ char *pAppName,
+ HANDLE hAppLog,
+ long which,
+ double *pTime,
+ char *pSource,
+ char *pMessage,
+ DWORD *pType,
+ WORD *pCategory,
+ DWORD *timestamp
+ )
{
EVENTLOGRECORD *pELR = NULL;
- BYTE bBuffer[1024]; /* hold the event
-log record raw data */
+ BYTE bBuffer[1024]; /* hold the event log record raw data */
DWORD dwRead, dwNeeded;
- BOOL bSuccess;
char temp[MAX_PATH];
- char MsgDll[MAX_PATH]; /* the name of the
-message DLL */
+ char MsgDll[MAX_PATH]; /* the name of the message DLL */
HKEY hk = NULL;
DWORD Data;
DWORD Type;
- HINSTANCE hLib = NULL; /* handle to the
-messagetable DLL */
+ HINSTANCE hLib = NULL; /* handle to the messagetable DLL */
char *pCh = NULL, *pFile = NULL, *pNextFile = NULL;
char *aInsertStrs[MAX_INSERT_STRS]; // array of pointers to insert
long i;
LPTSTR msgBuf = NULL; // hold text of the error message that we
long err = 0;
+LOG_DEBUG_INFO("s","In MyGetAEventLog()");
INIT_CHECK_MEMORY(main);
-//LOG_DEBUG_INFO("s","MyGetAEventLog: start");
- if (!hAppLog)
- {
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 1");
- return(0);
- }
+ if (!hAppLog) return(0);
+
+ pMessage[0] = '\0';
- bSuccess = ReadEventLog(hAppLog, /* event-log handle */
+ if(!ReadEventLog(hAppLog, /* event-log handle */
EVENTLOG_SEEK_READ | /* read forward */
EVENTLOG_FORWARDS_READ, /* sequential read */
which, /* which record to read 1 is first */
bBuffer, /* address of buffer */
sizeof(bBuffer), /* size of buffer */
&dwRead, /* count of bytes read */
- &dwNeeded); /* bytes in next record */
-
- if (!bSuccess)
+ &dwNeeded)) /* bytes in next record */
{
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 2");
- err = GetLastError();
- if(err==0) err = 1;
+ return GetLastError();
}
+ pELR = (EVENTLOGRECORD*)bBuffer; // point to data
- if(err == 0)
- {
- pELR = (EVENTLOGRECORD*)bBuffer; // point to data
-
- strcpy(pSource,((char*)pELR + sizeof(EVENTLOGRECORD)));// copy source name
- // build path to message dll
- strcpy(temp,"SYSTEM\\CurrentControlSet\\Services\\EventLog\\");
- strcat(temp,pAppName);
- strcat(temp,"\\");
- strcat(temp,((char*)pELR + sizeof(EVENTLOGRECORD)));
- if (RegOpenKey(HKEY_LOCAL_MACHINE, temp, &hk))
- {
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 3");
- err = GetLastError();
- if(err==0) err = 1;
- }
- }
+ *pTime = (double)pELR->TimeGenerated; // return double timestamp
+ *pType = pELR->EventType; // return event type
+ *pCategory = pELR->EventCategory; // return category
+ *timestamp = pELR->TimeGenerated; // return timestamp
+
+ strcpy(pSource,((char*)pELR + sizeof(EVENTLOGRECORD)));// copy source name
- if(err == 0)
+// Get path to message dll
+ strcpy(temp,"SYSTEM\\CurrentControlSet\\Services\\EventLog\\");
+ strcat(temp,pAppName);
+ strcat(temp,"\\");
+ strcat(temp,((char*)pELR + sizeof(EVENTLOGRECORD)));
+
+ pFile = NULL;
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, temp, 0, KEY_READ, &hk) == ERROR_SUCCESS)
{
+ pFile = temp;
Data = MAX_PATH;
- if (RegQueryValueEx(hk, /* handle of key to query */
+ err = RegQueryValueEx(
+ hk, /* handle of key to query */
"EventMessageFile", /* value name */
NULL, /* must be NULL */
&Type, /* address of type value */
- (UCHAR*)temp, /* address of value data */
- &Data)) /* length of value data */
- {
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 4");
- err = GetLastError();
- if(err==0) err = 1;
- }
+ (UCHAR*)pFile, /* address of value data */
+ &Data); /* length of value data */
+ RegCloseKey(hk);
- pFile = temp;
+ if(err != ERROR_SUCCESS)
+ pFile = NULL;
}
-
- if(err == 0)
+
+ err = 1;
+ while(pFile)
{
- for (;;)
+ pNextFile = strchr(pFile,';');
+ if(pNextFile)
{
-//LOG_DEBUG_INFO("s","MyGetAEventLog: for 1");
-//LOG_DEBUG_INFO("s",pFile);
-//LOG_DEBUG_INFO("s","MyGetAEventLog: for 1.1");
-
-
- pNextFile = strchr(pFile,';');
- if (pNextFile)
- {
- *pNextFile = 0;
- }
-//LOG_DEBUG_INFO("s","MyGetAEventLog: for 1.3");
+ *pNextFile = '\0';
+ pNextFile++;
+ }
- if (!ExpandEnvironmentStrings(pFile, MsgDll, MAX_PATH))
- {
- err = GetLastError();
- if(err==0) err = 1;
- break;
- }
-//LOG_DEBUG_INFO("s","MyGetAEventLog: for 2.1");
+ if (ExpandEnvironmentStrings(pFile, MsgDll, MAX_PATH))
+ {
hLib = LoadLibraryEx(MsgDll, NULL, LOAD_LIBRARY_AS_DATAFILE);
- if (!hLib)
+ if(hLib)
{
- err = 1;
- break;
- }
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 4");
-
-/* prepare the array of insert strings for FormatMessage - the
- insert strings are in the log entry. */
- pCh = (char *)((LPBYTE)pELR + pELR->StringOffset);
+ /* prepare the array of insert strings for FormatMessage - the
+ insert strings are in the log entry. */
+ for (
+ i = 0, pCh = (char *)((LPBYTE)pELR + pELR->StringOffset);
+ i < pELR->NumStrings && i < MAX_INSERT_STRS;
+ i++, pCh += strlen(pCh) + 1) /* point to next string */
+ {
+ aInsertStrs[i] = pCh;
+ }
- for (i = 0; i < pELR->NumStrings && i < MAX_INSERT_STRS; i++)
- {
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 5");
- aInsertStrs[i] = pCh;
- pCh += strlen(pCh) + 1; /* point to next string */
- }
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 6");
-
-
-/* Format the message from the message DLL with the insert strings */
- if (FormatMessage(
- FORMAT_MESSAGE_FROM_HMODULE | /* get the message from the DLL */
- FORMAT_MESSAGE_ALLOCATE_BUFFER | /* allocate the msg buffer for us */
- FORMAT_MESSAGE_ARGUMENT_ARRAY | /* lpArgs is an array of pointers */
- //60,
- /* line length for the mesages */
- FORMAT_MESSAGE_FROM_SYSTEM,
- hLib, /* the messagetable DLL handle */
- pELR->EventID, /* message ID */
- MAKELANGID(LANG_NEUTRAL, SUBLANG_ENGLISH_US), /* language ID */
- (LPTSTR) &msgBuf, /* address of pointer to buffer for message */
- MAX_MSG_LENGTH, /* maximum size of the message buffer */
- aInsertStrs)) /* array of insert strings for the message */
- {
+ /* Format the message from the message DLL with the insert strings */
+ FormatMessage(
+ FORMAT_MESSAGE_FROM_HMODULE |
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_ARGUMENT_ARRAY |
+ FORMAT_MESSAGE_FROM_SYSTEM,
+ hLib, /* the messagetable DLL handle */
+ pELR->EventID, /* message ID */
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_ENGLISH_US), /* language ID */
+ (LPTSTR) &msgBuf, /* address of pointer to buffer for message */
+ MAX_MSG_LENGTH, /* maximum size of the message buffer */
+ aInsertStrs); /* array of insert strings for the message */
+
+ strcpy(pMessage,msgBuf); // copy message
err = 0;
- break;
- }
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 9");
- if (!pNextFile) /* more files to read ? */
- {
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 10");
- RegCloseKey(hk);
- err = GetLastError();
- if(err == 0) err = 1;
- break;
+ /* Free the buffer that FormatMessage allocated for us. */
+ if(msgBuf) LocalFree((HLOCAL) msgBuf);
+ FreeLibrary(hLib);
}
- pFile = ++pNextFile;
-
- LocalFree((HLOCAL) msgBuf);
- msgBuf = NULL;
- FreeLibrary(hLib);
- hLib = NULL;
}
- }
-
- if(err == 0)
- {
- strcpy(pMessage,msgBuf); // copy message
- *pTime = (double)pELR->TimeGenerated;
+ if(err == 0) break;
- *pType = pELR->EventType; // return event type
- *pCategory = pELR->EventCategory; // return category
-
- *timestamp=pELR->TimeGenerated;
-
-//LOG_DEBUG_INFO("s","MyGetAEventLog: 11");
+ pFile = pNextFile;
}
-/* Free the buffer that FormatMessage allocated for us. */
- if(msgBuf) LocalFree((HLOCAL) msgBuf);
-/* free the message DLL since we don't know if we'll need it again */
- if(hLib) FreeLibrary(hLib);
- if(hk) RegCloseKey(hk);
-
-//LOG_DEBUG_INFO("s","Y");
-//LOG_DEBUG_INFO("d",*pType);
-//LOG_DEBUG_INFO("s","MyGetAEventLog: pMessage");
-//LOG_DEBUG_INFO("s",pMessage);
+ if(err)
+ {
+ for (
+ i = 0, pCh = (char *)((LPBYTE)pELR + pELR->StringOffset);
+ i < pELR->NumStrings && i < MAX_INSERT_STRS;
+ i++, pCh += strlen(pCh) + 1) /* point to next string */
+ {
+ if(i > 0) strcat(pMessage,",");
+ strcat(pMessage,pCh);
+ }
+ }
CHECK_MEMORY(main, "MyGetAEventLog", "end");
- return err;
+LOG_DEBUG_INFO("s","End of MyGetAEventLog()");
+ return 0;
} \ No newline at end of file
diff --git a/src/zabbix_agent_win32/log.cpp b/src/zabbix_agent_win32/log.cpp
index 1c75ffbe..5b948c38 100644
--- a/src/zabbix_agent_win32/log.cpp
+++ b/src/zabbix_agent_win32/log.cpp
@@ -149,6 +149,7 @@ void WriteLog(DWORD msg,WORD wType,char *format...)
{
va_list args;
char *strings[16],*msgBuf;
+ char *ptmp;
int numStrings=0;
DWORD error;
@@ -166,7 +167,11 @@ void WriteLog(DWORD msg,WORD wType,char *format...)
switch(format[numStrings])
{
case 's':
- strings[numStrings]=strdup(va_arg(args,char *));
+ ptmp = va_arg(args,char *);
+ if(ptmp)
+ strings[numStrings] = strdup(ptmp);
+ else
+ strings[numStrings] = 0;
break;
case 'd':
strings[numStrings]=(char *)malloc(16);
diff --git a/src/zabbix_agent_win32/logfiles.cpp b/src/zabbix_agent_win32/logfiles.cpp
index 8a7bb75c..b12e7448 100755
--- a/src/zabbix_agent_win32/logfiles.cpp
+++ b/src/zabbix_agent_win32/logfiles.cpp
@@ -51,16 +51,11 @@ CHECK_MEMORY(main, "process_log", "fopen");
return 1;
}
-LOG_DEBUG_INFO("d",_filelength(_fileno(f)));
-LOG_DEBUG_INFO("d",*lastlogsize);
-
if(_filelength(_fileno(f)) < *lastlogsize)
{
*lastlogsize=0;
}
-LOG_DEBUG_INFO("d",*lastlogsize);
-
if(-1 == fseek(f,*lastlogsize,SEEK_SET))
{
// zabbix_log( LOG_LEVEL_WARNING, "Cannot set postition to [%d] for [%s] [%s]", *lastlogsize, filename, strerror(errno));
@@ -85,110 +80,3 @@ CHECK_MEMORY(main, "process_log", "end");
LOG_DEBUG_INFO("s","End of process_log()");
return 0;
}
-
-int process_eventlog(char *source,int *lastlogsize, int *timestamp, char *value)
-{
- HANDLE h;
- EVENTLOGRECORD *pevlr;
- BYTE bBuffer[1024*64];
- DWORD dwRead, dwNeeded, dwThisRecord;
-
-LOG_DEBUG_INFO("s","Lastlogsize:");
-LOG_DEBUG_INFO("d",*lastlogsize);
-
-
-INIT_CHECK_MEMORY(main);
-
- // Open the Application event log.
-
- h = OpenEventLog( NULL, // use local computer
- source); // source name
- if (h == NULL)
- {
- sprintf(value,"%s","ZBX_NOTSUPPORTED\n");
- LOG_DEBUG_INFO("s","Could not open event log");
-CHECK_MEMORY(main, "process_eventlog", "OpenEventLog");
- return 1;
- }
-
- pevlr = (EVENTLOGRECORD *) &bBuffer;
-
- // Get the record number of the oldest event log record.
-
- GetOldestEventLogRecord(h, &dwThisRecord);
-// LOG_DEBUG_INFO("d", dwThisRecord);
-
- // Opening the event log positions the file pointer for this
- // handle at the beginning of the log. Read the event log records
- // sequentially until the last record has been read.
-
-// while (ReadEventLog(h, // event log handle
- while(ReadEventLog(h, // event log handle
- EVENTLOG_FORWARDS_READ|EVENTLOG_SEEK_READ,
- dwThisRecord,
- pevlr, // pointer to buffer
- 1024*64, // size of buffer
- &dwRead, // number of bytes read
- &dwNeeded)) // bytes in next record
- {
- //while (dwRead > 0)
-// LOG_DEBUG_INFO("d", dwRead);
- if (dwRead > 0)
- {
- // Print the record number, event identifier, type,
- // and source name.
-
- // LOG_DEBUG_INFO("d",dwThisRecord);
- if((dwThisRecord++) >= ((DWORD)(*lastlogsize)))
- {
- sprintf(value, "%03d Event ID 0x%08X Event type ",
- dwThisRecord, pevlr->EventID);
- WriteLog(MSG_ACTIVE_CHECKS,EVENTLOG_ERROR_TYPE,"s",value);
-
- *lastlogsize=dwThisRecord;
-
- break;
- }
-
-
-
- switch(pevlr->EventType)
- {
- case EVENTLOG_ERROR_TYPE:
-// printf("EVENTLOG_ERROR_TYPE\t ");
- break;
- case EVENTLOG_WARNING_TYPE:
- // printf("EVENTLOG_WARNING_TYPE\t ");
- break;
- case EVENTLOG_INFORMATION_TYPE:
- // printf("EVENTLOG_INFORMATION_TYPE ");
- break;
- case EVENTLOG_AUDIT_SUCCESS:
- // printf("EVENTLOG_AUDIT_SUCCESS\t ");
- break;
- case EVENTLOG_AUDIT_FAILURE:
- // printf("EVENTLOG_AUDIT_FAILURE\t ");
- break;
- default:
- // printf("Unknown ");
- break;
- }
-
-// printf("Event source: %s\n",
-// (LPSTR) ((LPBYTE) pevlr + sizeof(EVENTLOGRECORD)));
-
- dwRead -= pevlr->Length;
- pevlr = (EVENTLOGRECORD *)
- ((LPBYTE) pevlr + pevlr->Length);
- }
-
- pevlr = (EVENTLOGRECORD *) &bBuffer;
- }
-
-
- CloseEventLog(h);
-
-CHECK_MEMORY(main, "process_eventlog", "end");
-
- return 0;
-} \ No newline at end of file
diff --git a/src/zabbix_agent_win32/messages.mc b/src/zabbix_agent_win32/messages.mc
index d9174970..c61f59f8 100644
--- a/src/zabbix_agent_win32/messages.mc
+++ b/src/zabbix_agent_win32/messages.mc
@@ -87,6 +87,18 @@ Unable to bind socket: %1
.
MessageId=
+SymbolicName=MSG_LISTEN_ERROR
+Language=English
+Error listening on socket: %1
+.
+
+MessageId=
+SymbolicName=MSG_SELECT_ERROR
+Language=English
+Unable to select socket: %1
+.
+
+MessageId=
SymbolicName=MSG_ACCEPT_ERROR
Language=English
Unable to accept incoming connection: %1
@@ -215,7 +227,13 @@ PdhLookupPerfNameByIndex failed: %1
MessageId=
SymbolicName=MSG_DEBUG_INFO
Language=English
-Debug Info: %1
+%1 Debug Info: %2
+.
+
+MessageId=
+SymbolicName=MSG_INFORMATION
+Language=English
+Information: %1 %2
.
;#endif
diff --git a/src/zabbix_agent_win32/resource.h b/src/zabbix_agent_win32/resource.h
index 8d31792e..c02c661a 100644
--- a/src/zabbix_agent_win32/resource.h
+++ b/src/zabbix_agent_win32/resource.h
@@ -7,7 +7,7 @@
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 103
+#define _APS_NEXT_RESOURCE_VALUE 104
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
diff --git a/src/zabbix_agent_win32/sysinfo.cpp b/src/zabbix_agent_win32/sysinfo.cpp
index ed5c2b80..62ab9145 100644
--- a/src/zabbix_agent_win32/sysinfo.cpp
+++ b/src/zabbix_agent_win32/sysinfo.cpp
@@ -945,6 +945,7 @@ static LONG H_SystemUname(char *cmd,char *arg,char **value)
SYSTEM_INFO sysInfo;
OSVERSIONINFO versionInfo;
+LOG_DEBUG_INFO("s","In H_SystemUname()");
INIT_CHECK_MEMORY(main);
dwSize=MAX_COMPUTERNAME_LENGTH+1;
@@ -1008,6 +1009,7 @@ INIT_CHECK_MEMORY(main);
*value=strdup(buffer);
CHECK_MEMORY(main, "H_SystemUname","end");
+LOG_DEBUG_INFO("s","End of H_SystemUname()");
return SYSINFO_RC_SUCCESS;
}
@@ -1107,6 +1109,10 @@ void ProcessCommand(char *received_cmd,char *result)
SUBAGENT *sbi;
BOOL isSubagentCommand=FALSE;
+assert(received_cmd);
+assert(result);
+
+LOG_DEBUG_INFO("s","In ProcessCommand()");
INIT_CHECK_MEMORY(main);
for(i=0; received_cmd[i]!='\0'; i++)
@@ -1116,7 +1122,7 @@ INIT_CHECK_MEMORY(main);
received_cmd[i] = '\0';
break;
}
- }
+ }
ExpandAlias(received_cmd,cmd);
@@ -1200,7 +1206,8 @@ finish_cmd_processing:;
free(strResult);
}
- CHECK_MEMORY(main, "ProcessCommand","end");
+CHECK_MEMORY(main, "ProcessCommand","end");
+LOG_DEBUG_INFO("s","End of ProcessCommand()");
}
char *test_cmd = NULL;
@@ -1210,6 +1217,8 @@ int TestCommand()
char result[MAX_STRING_LEN];
int i = 0;
+LOG_DEBUG_INFO("s","In TestCommand()");
+ result[0] = 0;
ProcessCommand(test_cmd, result);
for(i=0; result[i]!='\0'; i++)
@@ -1222,5 +1231,6 @@ int TestCommand()
}
printf("%-35s [%s]\n",test_cmd, result);
+LOG_DEBUG_INFO("s","End of TestCommand()");
return 0;
} \ No newline at end of file
diff --git a/src/zabbix_agent_win32/util.cpp b/src/zabbix_agent_win32/util.cpp
index 4987e358..bbb8b4e6 100644
--- a/src/zabbix_agent_win32/util.cpp
+++ b/src/zabbix_agent_win32/util.cpp
@@ -83,12 +83,12 @@ INIT_CHECK_MEMORY(main);
{
i++;
strcpy(confFile,argv[i]); // Next word should contain name of the config file
+ ret = TRUE;
}
else if (!strcmp(argv[i],"standalone")) // Run in standalone mode
{
dwFlags|=AF_STANDALONE;
ret = TRUE;
- goto lbl_end;
}
else if ((!strcmp(argv[i],"install"))||
(!strcmp(argv[i],"install-events")))
@@ -131,6 +131,7 @@ INIT_CHECK_MEMORY(main);
i++;
test_cmd = argv[i];
dwFlags|=AF_STANDALONE;
+ ret = TRUE;
}
else if (!strcmp(argv[i],"check-config"))
{
diff --git a/src/zabbix_agent_win32/zabbixw32.h b/src/zabbix_agent_win32/zabbixw32.h
index 658caa7a..cc199dcf 100644
--- a/src/zabbix_agent_win32/zabbixw32.h
+++ b/src/zabbix_agent_win32/zabbixw32.h
@@ -43,7 +43,7 @@
#else
#define DEBUG_SUFFIX
#endif
-#define AGENT_VERSION "1.1beta9" DEBUG_SUFFIX
+#define AGENT_VERSION "1.1beta10" DEBUG_SUFFIX
#define ZABBIX_SERVICE_NAME "ZabbixAgentdW32"
#define ZABBIX_EVENT_SOURCE "Zabbix Win32 Agent"
@@ -215,8 +215,7 @@ void ExpandAlias(char *orig,char *expanded);
unsigned int __stdcall ProcessingThread(void *arg);
int process_log(char *filename,int *lastlogsize, char *value);
-//int process_eventlog(char *source,int *lastlogsize, char *value);
-int process_eventlog_new(char *source,int *lastlogsize, char *timestamp, char *src, char *severity, char *message);
+int process_eventlog(char *source,int *lastlogsize, char *timestamp, char *src, char *severity, char *message);
void str_base64_encode(char *p_str, char *p_b64str, int in_size);
void str_base64_decode(char *p_b64str, char *p_str, int *p_out_size);