nrpe_check_control.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4. #define MAX_CHARS 1024
  5. #define SERVICE_COUNT 12
  6. #define COMMAND_FILE "/usr/local/nagios/var/rw/nagios.cmd"
  7. #define SERVICES_FILE "/usr/local/nagios/etc/services.cfg"
  8. int main(int argc, char *argv[])
  9. {
  10. char check_name[MAX_CHARS];
  11. char ent_type[MAX_CHARS];
  12. char input_buffer[MAX_CHARS];
  13. char host_name[MAX_CHARS];
  14. char service_name[MAX_CHARS];
  15. char state[MAX_CHARS];
  16. char state_type[MAX_CHARS];
  17. char temp_input[MAX_CHARS];
  18. char temp_string[MAX_CHARS];
  19. char test_host[MAX_CHARS];
  20. char *temp_var;
  21. FILE *command_fp;
  22. FILE *services_fp;
  23. int attempt;
  24. int i;
  25. time_t current_time;
  26. strcpy(state,argv[1]);
  27. strcpy(state_type,argv[2]);
  28. attempt=atoi(argv[3]);
  29. strcpy(host_name,argv[4]);
  30. if(strcmp(state,"OK") == 0)
  31. {
  32. services_fp=fopen(SERVICES_FILE,"r");
  33. command_fp=fopen(COMMAND_FILE,"a");
  34. while((fgets(input_buffer,MAX_CHARS-1,services_fp)) != NULL)
  35. {
  36. if(input_buffer[0]=='#' || input_buffer[0]=='\x0' || input_buffer[0]=='\n' || input_buffer[0]=='\r')
  37. {
  38. continue;
  39. }
  40. else
  41. {
  42. strcpy(temp_input,input_buffer);
  43. strcpy(temp_string,strtok(temp_input,"="));
  44. strcpy(ent_type,strtok(temp_string,"["));
  45. if(strcmp(ent_type,"service") == 0)
  46. {
  47. strcpy(test_host,strtok(NULL,"]"));
  48. if(strcmp(test_host,host_name) == 0)
  49. {
  50. temp_var=strtok(input_buffer,"=");
  51. strcpy(service_name,strtok(NULL,";"));
  52. for(i=1;i<=SERVICE_COUNT;i++)
  53. {
  54. temp_var=strtok(NULL,";");
  55. }
  56. strcpy(check_name,strtok(temp_var,"!"));
  57. if(strcmp(check_name,"check_nrpe") == 0)
  58. {
  59. time(&current_time);
  60. fprintf(command_fp,"[%lu] ENABLE_SVC_CHECK;%s;%s\n",current_time,host_name,service_name);
  61. }
  62. }
  63. }
  64. }
  65. }
  66. fclose(command_fp);
  67. fclose(services_fp);
  68. }
  69. else if(strcmp(state,"CRITICAL") == 0)
  70. {
  71. if(attempt == 3)
  72. {
  73. services_fp=fopen(SERVICES_FILE,"r");
  74. command_fp=fopen(COMMAND_FILE,"a");
  75. while((fgets(input_buffer,MAX_CHARS-1,services_fp)) != NULL)
  76. {
  77. if(input_buffer[0]=='#' || input_buffer[0]=='\x0' || input_buffer[0]=='\n' || input_buffer[0]=='\r')
  78. {
  79. continue;
  80. }
  81. else
  82. {
  83. strcpy(temp_input,input_buffer);
  84. strcpy(temp_string,strtok(temp_input,"="));
  85. strcpy(ent_type,strtok(temp_string,"["));
  86. if(strcmp(ent_type,"service") == 0)
  87. {
  88. strcpy(test_host,strtok(NULL,"]"));
  89. if(strcmp(test_host,host_name) == 0)
  90. {
  91. temp_var=strtok(input_buffer,"=");
  92. strcpy(service_name,strtok(NULL,";"));
  93. for(i=1;i<=SERVICE_COUNT;i++)
  94. {
  95. temp_var=strtok(NULL,";");
  96. }
  97. strcpy(check_name,strtok(temp_var,"!"));
  98. if(strcmp(check_name,"check_nrpe") == 0)
  99. {
  100. time(&current_time);
  101. fprintf(command_fp,"[%lu] DISABLE_SVC_CHECK;%s;%s\n",current_time,host_name,service_name);
  102. }
  103. }
  104. }
  105. }
  106. }
  107. fclose(command_fp);
  108. fclose(services_fp);
  109. }
  110. }
  111. return 0;
  112. }