# | Line 1 | Line 1 | |
---|---|---|
1 | /* | |
2 | * i-scream central monitoring system | |
3 | + | * http://www.i-scream.org.uk |
4 | * Copyright (C) 2000-2002 i-scream | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or | |
# | Line 17 | Line 18 | |
18 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
19 | */ | |
20 | ||
21 | + | #ifdef HAVE_CONFIG_H |
22 | + | #include "config.h" |
23 | + | #endif |
24 | + | |
25 | #include <stdio.h> | |
26 | #include <stdlib.h> | |
27 | #include <sys/types.h> | |
# | Line 29 | Line 34 | |
34 | #include "statgrab.h" | |
35 | #include <time.h> | |
36 | #include <sys/socket.h> | |
32 | – | #include <netinet/in.h> |
37 | #include <arpa/inet.h> | |
38 | #include <syslog.h> | |
39 | ||
36 | – | #define versionNo 0.8 |
40 | #define RECONFIGURE_RETURN_CODE 2 | |
38 | – | #define UDP_MAX_PACKET_SIZE 8192 |
39 | – | #define PID_FILE "/var/tmp/.ihost.pid" |
41 | ||
42 | #define logmessage(level, ...) do { cur_level = level; errf(__VA_ARGS__); } while (0) | |
43 | ||
# | Line 73 | Line 74 | void log_errors(const char *message){ | |
74 | ||
75 | char* sock_comm(FILE *f_r, FILE *f_w, char *sendString){ | |
76 | char *reply; | |
77 | + | logmessage(LOG_DEBUG, "Sending %s",sendString); |
78 | fprintf(f_w, "%s\n", sendString); | |
79 | fflush(f_w); | |
80 | reply=fpgetline(f_r); | |
81 | + | if (reply!=NULL) logmessage(LOG_DEBUG, "Received %s", reply); |
82 | /* Returns pointer to static buffer */ | |
83 | return reply; | |
84 | } | |
# | Line 137 | Line 140 | int ihost_configure(ihost_state_t *ihost_state){ | |
140 | logmessage(LOG_ERR, "sa family is wrong type"); | |
141 | return -1; | |
142 | } | |
143 | < | |
144 | < | if((ihost_state->my_ip=inet_ntoa(((struct sockaddr_in *)&ip)->sin_addr))==NULL){ |
143 | > | |
144 | > | if(ihost_state->my_ip!=NULL) free(ihost_state->my_ip); |
145 | > | if((ihost_state->my_ip=strdup(inet_ntoa(((struct sockaddr_in *)&ip)->sin_addr)))==NULL){ |
146 | logmessage(LOG_ERR, "Failed to get IP (%m)"); | |
147 | return -1; | |
148 | } | |
149 | ||
146 | – | logmessage(LOG_DEBUG, "Sending STARTCONIG"); |
150 | reply=sock_comm(fm_fd_r, fm_fd_w, "STARTCONFIG"); | |
151 | if ((reply==NULL) || (strncasecmp(reply, "OK", 2) != 0) ) { | |
152 | logmessage(LOG_ERR, "Server error on STARTCONFIG"); | |
153 | return -1; | |
154 | } | |
155 | ||
153 | – | logmessage(LOG_DEBUG, "Sending LASTMODIFIED"); |
156 | reply=sock_comm(fm_fd_r, fm_fd_w, "LASTMODIFIED"); | |
157 | if((reply== NULL) || (strncasecmp(reply, "ERROR", 5) ==0)){ | |
158 | logmessage(LOG_ERR, "Server error on LASTMODIFIED (%m)"); | |
# | Line 161 | Line 163 | int ihost_configure(ihost_state_t *ihost_state){ | |
163 | return -1; | |
164 | } | |
165 | ||
164 | – | logmessage(LOG_DEBUG, "Sending FILELIST"); |
166 | reply=sock_comm(fm_fd_r, fm_fd_w, "FILELIST"); | |
167 | if((reply== NULL) || (strncasecmp(reply, "ERROR", 5) ==0)){ | |
168 | logmessage(LOG_ERR, "Server error on FILELIST (%m)"); | |
# | Line 172 | Line 173 | int ihost_configure(ihost_state_t *ihost_state){ | |
173 | return -1; | |
174 | } | |
175 | ||
175 | – | logmessage(LOG_DEBUG, "Sending FQDN"); |
176 | reply=sock_comm(fm_fd_r, fm_fd_w, "FQDN"); | |
177 | if((reply== NULL) || (strncasecmp(reply, "ERROR", 5)==0)){ | |
178 | logmessage(LOG_ERR, "Server error on FQDN (%m)"); | |
# | Line 183 | Line 183 | int ihost_configure(ihost_state_t *ihost_state){ | |
183 | return -1; | |
184 | } | |
185 | ||
186 | – | logmessage(LOG_DEBUG, "Sending FQDN"); |
186 | reply=sock_comm(fm_fd_r, fm_fd_w, "UDPUpdateTime"); | |
187 | if(reply== NULL){ | |
188 | logmessage(LOG_ERR, "Server error (%m)"); | |
# | Line 193 | Line 192 | int ihost_configure(ihost_state_t *ihost_state){ | |
192 | ihost_state->udp_update_time=atoi(reply); | |
193 | } | |
194 | ||
196 | – | logmessage(LOG_DEBUG, "Sending TCPUpdateTime"); |
195 | reply=sock_comm(fm_fd_r, fm_fd_w, "TCPUpdateTime"); | |
196 | if(reply== NULL){ | |
197 | logmessage(LOG_ERR, "Server error on TCPUpdateTime (%m)"); | |
# | Line 203 | Line 201 | int ihost_configure(ihost_state_t *ihost_state){ | |
201 | ihost_state->tcp_update_time=atoi(reply); | |
202 | } | |
203 | ||
206 | – | logmessage(LOG_DEBUG, "Sending ENDCONFIG"); |
204 | reply=sock_comm(fm_fd_r, fm_fd_w, "ENDCONFIG"); | |
205 | if(reply== NULL){ | |
206 | logmessage(LOG_ERR, "Server error on ENDCONFIG (%m)"); | |
207 | return -1; | |
208 | } | |
209 | ||
213 | – | logmessage(LOG_DEBUG, "Sending FILTER"); |
210 | reply=sock_comm(fm_fd_r, fm_fd_w, "FILTER"); | |
211 | if((reply== NULL) || (strncasecmp(reply, "ERROR", 5)==0)){ | |
212 | logmessage(LOG_ERR, "Server error FILTER failed (%m)"); | |
# | Line 241 | Line 237 | int ihost_configure(ihost_state_t *ihost_state){ | |
237 | return -1; | |
238 | } | |
239 | ||
244 | – | logmessage(LOG_DEBUG, "Sending END"); |
240 | reply=sock_comm(fm_fd_r, fm_fd_w, "END"); | |
241 | if((reply== NULL) || (strncasecmp(reply, "ERROR", 5) ==0 )){ | |
242 | logmessage(LOG_ERR, "Server error on END (%m)"); | |
# | Line 300 | Line 295 | int heartbeat(ihost_state_t *ihost_state){ | |
295 | return -1; | |
296 | } | |
297 | ||
303 | – | logmessage(LOG_DEBUG, "Sending HEARTBEAT"); |
298 | reply=sock_comm(fm_fd_r, fm_fd_w, "HEARTBEAT"); | |
299 | if ((reply==NULL) || (strncasecmp(reply, "ERROR", 5) == 0) ) { | |
300 | logmessage(LOG_ERR, "Server error on HEARTBEAT"); | |
301 | return -1; | |
302 | } | |
303 | ||
310 | – | logmessage(LOG_DEBUG, "Sending CONFIG"); |
304 | reply=sock_comm(fm_fd_r, fm_fd_w, "CONFIG"); | |
305 | if ((reply==NULL) || (strncasecmp(reply, "ERROR", 5) == 0) ) { | |
306 | logmessage(LOG_ERR, "Server error on CONFIG"); | |
307 | return -1; | |
308 | } | |
309 | ||
317 | – | logmessage(LOG_DEBUG, "Sending %s", ihost_state->files_list); |
310 | reply=sock_comm(fm_fd_r, fm_fd_w, ihost_state->files_list); | |
311 | if ((reply==NULL) || (strncasecmp(reply, "OK", 2) != 0) ) { | |
312 | logmessage(LOG_ERR, "Server error on fileslist"); | |
313 | return -1; | |
314 | } | |
315 | ||
324 | – | logmessage(LOG_DEBUG, "Sending %s", ihost_state->last_modified); |
316 | reply=sock_comm(fm_fd_r, fm_fd_w, ihost_state->last_modified); | |
317 | if (reply==NULL) { | |
318 | logmessage(LOG_ERR, "Server error NULL recieved on lastmodified"); | |
# | Line 333 | Line 324 | int heartbeat(ihost_state_t *ihost_state){ | |
324 | exitcode=RECONFIGURE_RETURN_CODE; | |
325 | } | |
326 | ||
336 | – | logmessage(LOG_DEBUG,"Sending KEY"); |
327 | reply=sock_comm(fm_fd_r, fm_fd_w, "KEY"); | |
328 | if ((reply==NULL) || (strncasecmp(reply, "ERROR", 5) == 0) ) { | |
329 | logmessage(LOG_ERR, "Server error on KEY"); | |
# | Line 346 | Line 336 | int heartbeat(ihost_state_t *ihost_state){ | |
336 | return -1; | |
337 | } | |
338 | ||
349 | – | logmessage(LOG_DEBUG,"Sending ENDHEARTBEAT"); |
339 | reply=sock_comm(fm_fd_r, fm_fd_w, "ENDHEARTBEAT"); | |
340 | if((reply== NULL) || (strncasecmp(reply, "ERROR", 5) ==0 )){ | |
341 | logmessage(LOG_ERR, "Server error on ENDHEARTBEAT (%m)"); | |
# | Line 404 | Line 393 | char *stat_grab(ihost_state_t *ihost_state, int counte | |
393 | xml_size+=strlen(stats[x]); | |
394 | } | |
395 | ||
396 | < | xml_data=malloc(xml_size); |
396 | > | xml_data=malloc(xml_size+1); |
397 | xml_data=strcpy(xml_data, stats[0]); | |
398 | < | |
398 | > | free(stats[0]); |
399 | for(x=1;x<NUM_STATS;x++){ | |
400 | strcat(xml_data, stats[x]); | |
401 | + | free(stats[x]); |
402 | } | |
403 | ||
404 | xml_data_p=xml_data; | |
# | Line 436 | Line 426 | int send_stats(ihost_state_t *ihost_state, char *data_ | |
426 | logmessage(LOG_ERR, "Failed to resolve address %s (%m)", ihost_state->server_fqdn); | |
427 | return -1; | |
428 | } | |
429 | < | logmessage(LOG_DEBUG,"Creating UDP connection to %s on %d",ihost_state->server_fqdn, ihost_state->server_udp_port); |
429 | > | logmessage(LOG_DEBUG,"Creating UDP socket to %s on %d",ihost_state->server_fqdn, ihost_state->server_udp_port); |
430 | if((sd=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0){ | |
431 | logmessage(LOG_ERR, "failed to create UDP socket (%m)"); | |
432 | return -1; | |
# | Line 497 | Line 487 | int main(int argc, char **argv){ | |
487 | ihost_state.last_modified=NULL; | |
488 | ihost_state.files_list=NULL; | |
489 | ihost_state.key=NULL; | |
490 | + | ihost_state.my_ip=NULL; |
491 | ||
492 | errf_set_progname(argv[0]); | |
493 | ||
# | Line 522 | Line 513 | int main(int argc, char **argv){ | |
513 | break; | |
514 | ||
515 | case 'V': | |
516 | < | errf("%s version %f",argv[0], versionNo); |
516 | > | errf("%s version %s",argv[0], VERSION); |
517 | break; | |
518 | ||
519 | default: | |
# | Line 589 | Line 580 | int main(int argc, char **argv){ | |
580 | logmessage(LOG_DEBUG,"Writing PID FILE"); | |
581 | pid=getpid(); | |
582 | if((f=fopen(PID_FILE,"w")) == NULL){ | |
583 | < | logmessage(LOG_WARNING, "Failed to write PID file"); |
583 | > | logmessage(LOG_WARNING, "Failed to write PID file (%m)"); |
584 | }else{ | |
585 | < | if((fprintf(f,"%d",(int)pid)) != sizeof(pid)){ |
586 | < | logmessage(LOG_WARNING, "Failed to write PID file"); |
585 | > | if((fprintf(f,"%d",(int)pid)) <= 0 ){ |
586 | > | logmessage(LOG_WARNING, "Failed to write PID file (%m)"); |
587 | } | |
588 | if((fclose(f))!=0){ | |
589 | logmessage(LOG_ERR, "failed to close PID file"); | |
# | Line 627 | Line 618 | int main(int argc, char **argv){ | |
618 | ||
619 | if(cur_time>=udp_time){ | |
620 | logmessage(LOG_DEBUG,"Sending udp data"); | |
621 | < | |
621 | > | /* Work out how long it takes to get the stats for next time round |
622 | > | so the sleep time can be adjusted accordingly */ |
623 | stat_grab_time=time(NULL); | |
624 | if((xml_stats=stat_grab(&ihost_state, counter++)) == NULL){ | |
625 | logmessage(LOG_ERR,"Failed to get stats (%m)"); |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |