summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-09-01 11:27:49 +0200
committerLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-09-01 11:57:36 +0200
commit28bb2fa0a499b46e279244990b8268c1ed8823bc (patch)
tree06b9ab4d0773f8011f8e263db1111b2c873bf98f
parent888cd29202df5b99d4cd7834b11b030f2c39859f (diff)
downloadmonitoring-plugins-28bb2fa0a499b46e279244990b8268c1ed8823bc.tar.gz
lib/utils_base.c: small refactoring
-rw-r--r--lib/perfdata.h2
-rw-r--r--lib/utils_base.c195
2 files changed, 94 insertions, 103 deletions
diff --git a/lib/perfdata.h b/lib/perfdata.h
index 7fd908a9..c5d4a61d 100644
--- a/lib/perfdata.h
+++ b/lib/perfdata.h
@@ -45,7 +45,7 @@ typedef struct range_struct {
45 double start; 45 double start;
46 bool start_infinity; 46 bool start_infinity;
47 double end; 47 double end;
48 int end_infinity; 48 bool end_infinity;
49 int alert_on; /* OUTSIDE (default) or INSIDE */ 49 int alert_on; /* OUTSIDE (default) or INSIDE */
50 char *text; /* original unparsed text input */ 50 char *text; /* original unparsed text input */
51} range; 51} range;
diff --git a/lib/utils_base.c b/lib/utils_base.c
index 5ba865c9..43e88e7a 100644
--- a/lib/utils_base.c
+++ b/lib/utils_base.c
@@ -46,7 +46,7 @@ monitoring_plugin *this_monitoring_plugin = NULL;
46int timeout_state = STATE_CRITICAL; 46int timeout_state = STATE_CRITICAL;
47unsigned int timeout_interval = DEFAULT_SOCKET_TIMEOUT; 47unsigned int timeout_interval = DEFAULT_SOCKET_TIMEOUT;
48 48
49bool _np_state_read_file(FILE *); 49bool _np_state_read_file(FILE *state_file);
50 50
51void np_init(char *plugin_name, int argc, char **argv) { 51void np_init(char *plugin_name, int argc, char **argv) {
52 if (this_monitoring_plugin == NULL) { 52 if (this_monitoring_plugin == NULL) {
@@ -153,7 +153,7 @@ range *parse_range_string(char *str) {
153 set_range_end(temp_range, end); 153 set_range_end(temp_range, end);
154 } 154 }
155 155
156 if (temp_range->start_infinity == true || temp_range->end_infinity == true || 156 if (temp_range->start_infinity || temp_range->end_infinity ||
157 temp_range->start <= temp_range->end) { 157 temp_range->start <= temp_range->end) {
158 return temp_range; 158 return temp_range;
159 } 159 }
@@ -261,21 +261,21 @@ bool check_range(double value, range *my_range) {
261 yes = false; 261 yes = false;
262 } 262 }
263 263
264 if (my_range->end_infinity == false && my_range->start_infinity == false) { 264 if (!my_range->end_infinity && !my_range->start_infinity) {
265 if ((my_range->start <= value) && (value <= my_range->end)) { 265 if ((my_range->start <= value) && (value <= my_range->end)) {
266 return no; 266 return no;
267 } 267 }
268 return yes; 268 return yes;
269 } 269 }
270 270
271 if (my_range->start_infinity == false && my_range->end_infinity == true) { 271 if (!my_range->start_infinity && my_range->end_infinity) {
272 if (my_range->start <= value) { 272 if (my_range->start <= value) {
273 return no; 273 return no;
274 } 274 }
275 return yes; 275 return yes;
276 } 276 }
277 277
278 if (my_range->start_infinity == true && my_range->end_infinity == false) { 278 if (my_range->start_infinity && !my_range->end_infinity) {
279 if (value <= my_range->end) { 279 if (value <= my_range->end) {
280 return no; 280 return no;
281 } 281 }
@@ -287,12 +287,12 @@ bool check_range(double value, range *my_range) {
287/* Returns status */ 287/* Returns status */
288int get_status(double value, thresholds *my_thresholds) { 288int get_status(double value, thresholds *my_thresholds) {
289 if (my_thresholds->critical != NULL) { 289 if (my_thresholds->critical != NULL) {
290 if (check_range(value, my_thresholds->critical) == true) { 290 if (check_range(value, my_thresholds->critical)) {
291 return STATE_CRITICAL; 291 return STATE_CRITICAL;
292 } 292 }
293 } 293 }
294 if (my_thresholds->warning != NULL) { 294 if (my_thresholds->warning != NULL) {
295 if (check_range(value, my_thresholds->warning) == true) { 295 if (check_range(value, my_thresholds->warning)) {
296 return STATE_WARNING; 296 return STATE_WARNING;
297 } 297 }
298 } 298 }
@@ -301,32 +301,31 @@ int get_status(double value, thresholds *my_thresholds) {
301 301
302char *np_escaped_string(const char *string) { 302char *np_escaped_string(const char *string) {
303 char *data; 303 char *data;
304 int i; 304 int write_index = 0;
305 int j = 0;
306 data = strdup(string); 305 data = strdup(string);
307 for (i = 0; data[i]; i++) { 306 for (int i = 0; data[i]; i++) {
308 if (data[i] == '\\') { 307 if (data[i] == '\\') {
309 switch (data[++i]) { 308 switch (data[++i]) {
310 case 'n': 309 case 'n':
311 data[j++] = '\n'; 310 data[write_index++] = '\n';
312 break; 311 break;
313 case 'r': 312 case 'r':
314 data[j++] = '\r'; 313 data[write_index++] = '\r';
315 break; 314 break;
316 case 't': 315 case 't':
317 data[j++] = '\t'; 316 data[write_index++] = '\t';
318 break; 317 break;
319 case '\\': 318 case '\\':
320 data[j++] = '\\'; 319 data[write_index++] = '\\';
321 break; 320 break;
322 default: 321 default:
323 data[j++] = data[i]; 322 data[write_index++] = data[i];
324 } 323 }
325 } else { 324 } else {
326 data[j++] = data[i]; 325 data[write_index++] = data[i];
327 } 326 }
328 } 327 }
329 data[j] = '\0'; 328 data[write_index] = '\0';
330 return data; 329 return data;
331} 330}
332 331
@@ -341,33 +340,35 @@ int np_check_if_root(void) { return (geteuid() == 0); }
341char *np_extract_value(const char *varlist, const char *name, char sep) { 340char *np_extract_value(const char *varlist, const char *name, char sep) {
342 char *tmp = NULL; 341 char *tmp = NULL;
343 char *value = NULL; 342 char *value = NULL;
344 int i;
345 343
346 while (1) { 344 while (true) {
347 /* Strip any leading space */ 345 /* Strip any leading space */
348 for (; isspace(varlist[0]); varlist++) 346 for (; isspace(varlist[0]); varlist++) {
349 ; 347 ;
348 }
350 349
351 if (strncmp(name, varlist, strlen(name)) == 0) { 350 if (strncmp(name, varlist, strlen(name)) == 0) {
352 varlist += strlen(name); 351 varlist += strlen(name);
353 /* strip trailing spaces */ 352 /* strip trailing spaces */
354 for (; isspace(varlist[0]); varlist++) 353 for (; isspace(varlist[0]); varlist++) {
355 ; 354 ;
355 }
356 356
357 if (varlist[0] == '=') { 357 if (varlist[0] == '=') {
358 /* We matched the key, go past the = sign */ 358 /* We matched the key, go past the = sign */
359 varlist++; 359 varlist++;
360 /* strip leading spaces */ 360 /* strip leading spaces */
361 for (; isspace(varlist[0]); varlist++) 361 for (; isspace(varlist[0]); varlist++) {
362 ; 362 ;
363 }
363 364
364 if ((tmp = index(varlist, sep))) { 365 if ((tmp = index(varlist, sep))) {
365 /* Value is delimited by a comma */ 366 /* Value is delimited by a comma */
366 if (tmp - varlist == 0) { 367 if (tmp - varlist == 0) {
367 continue; 368 continue;
368 } 369 }
369 value = (char *)calloc(1, tmp - varlist + 1); 370 value = (char *)calloc(1, (unsigned long)(tmp - varlist + 1));
370 strncpy(value, varlist, tmp - varlist); 371 strncpy(value, varlist, (unsigned long)(tmp - varlist));
371 value[tmp - varlist] = '\0'; 372 value[tmp - varlist] = '\0';
372 } else { 373 } else {
373 /* Value is delimited by a \0 */ 374 /* Value is delimited by a \0 */
@@ -392,7 +393,7 @@ char *np_extract_value(const char *varlist, const char *name, char sep) {
392 393
393 /* Clean-up trailing spaces/newlines */ 394 /* Clean-up trailing spaces/newlines */
394 if (value) { 395 if (value) {
395 for (i = strlen(value) - 1; isspace(value[i]); i--) { 396 for (unsigned long i = strlen(value) - 1; isspace(value[i]); i--) {
396 value[i] = '\0'; 397 value[i] = '\0';
397 } 398 }
398 } 399 }
@@ -441,11 +442,7 @@ int mp_translate_state(char *state_text) {
441 * parse of argv, so that uniqueness in parameters are reflected there. 442 * parse of argv, so that uniqueness in parameters are reflected there.
442 */ 443 */
443char *_np_state_generate_key(void) { 444char *_np_state_generate_key(void) {
444 int i;
445 char **argv = this_monitoring_plugin->argv; 445 char **argv = this_monitoring_plugin->argv;
446 char keyname[41];
447 char *p = NULL;
448
449 unsigned char result[256]; 446 unsigned char result[256];
450 447
451#ifdef USE_OPENSSL 448#ifdef USE_OPENSSL
@@ -458,7 +455,7 @@ char *_np_state_generate_key(void) {
458 455
459 EVP_DigestInit(ctx, EVP_sha256()); 456 EVP_DigestInit(ctx, EVP_sha256());
460 457
461 for (i = 0; i < this_monitoring_plugin->argc; i++) { 458 for (int i = 0; i < this_monitoring_plugin->argc; i++) {
462 EVP_DigestUpdate(ctx, argv[i], strlen(argv[i])); 459 EVP_DigestUpdate(ctx, argv[i], strlen(argv[i]));
463 } 460 }
464 461
@@ -467,24 +464,26 @@ char *_np_state_generate_key(void) {
467 464
468 struct sha256_ctx ctx; 465 struct sha256_ctx ctx;
469 466
470 for (i = 0; i < this_monitoring_plugin->argc; i++) { 467 for (int i = 0; i < this_monitoring_plugin->argc; i++) {
471 sha256_process_bytes(argv[i], strlen(argv[i]), &ctx); 468 sha256_process_bytes(argv[i], strlen(argv[i]), &ctx);
472 } 469 }
473 470
474 sha256_finish_ctx(&ctx, result); 471 sha256_finish_ctx(&ctx, result);
475#endif // FOUNDOPENSSL 472#endif // FOUNDOPENSSL
476 473
477 for (i = 0; i < 20; ++i) { 474 char keyname[41];
475 for (int i = 0; i < 20; ++i) {
478 sprintf(&keyname[2 * i], "%02x", result[i]); 476 sprintf(&keyname[2 * i], "%02x", result[i]);
479 } 477 }
480 478
481 keyname[40] = '\0'; 479 keyname[40] = '\0';
482 480
483 p = strdup(keyname); 481 char *keyname_copy = strdup(keyname);
484 if (p == NULL) { 482 if (keyname_copy == NULL) {
485 die(STATE_UNKNOWN, _("Cannot execute strdup: %s"), strerror(errno)); 483 die(STATE_UNKNOWN, _("Cannot execute strdup: %s"), strerror(errno));
486 } 484 }
487 return p; 485
486 return keyname_copy;
488} 487}
489 488
490void _cleanup_state_data(void) { 489void _cleanup_state_data(void) {
@@ -525,21 +524,16 @@ char *_np_state_calculate_location_prefix(void) {
525 * UNKNOWN if exception 524 * UNKNOWN if exception
526 */ 525 */
527void np_enable_state(char *keyname, int expected_data_version) { 526void np_enable_state(char *keyname, int expected_data_version) {
528 state_key *this_state = NULL;
529 char *temp_filename = NULL;
530 char *temp_keyname = NULL;
531 char *p = NULL;
532 int ret;
533
534 if (this_monitoring_plugin == NULL) { 527 if (this_monitoring_plugin == NULL) {
535 die(STATE_UNKNOWN, _("This requires np_init to be called")); 528 die(STATE_UNKNOWN, _("This requires np_init to be called"));
536 } 529 }
537 530
538 this_state = (state_key *)calloc(1, sizeof(state_key)); 531 state_key *this_state = (state_key *)calloc(1, sizeof(state_key));
539 if (this_state == NULL) { 532 if (this_state == NULL) {
540 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno)); 533 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
541 } 534 }
542 535
536 char *temp_keyname = NULL;
543 if (keyname == NULL) { 537 if (keyname == NULL) {
544 temp_keyname = _np_state_generate_key(); 538 temp_keyname = _np_state_generate_key();
545 } else { 539 } else {
@@ -548,13 +542,14 @@ void np_enable_state(char *keyname, int expected_data_version) {
548 die(STATE_UNKNOWN, _("Cannot execute strdup: %s"), strerror(errno)); 542 die(STATE_UNKNOWN, _("Cannot execute strdup: %s"), strerror(errno));
549 } 543 }
550 } 544 }
545
551 /* Die if invalid characters used for keyname */ 546 /* Die if invalid characters used for keyname */
552 p = temp_keyname; 547 char *tmp_char = temp_keyname;
553 while (*p != '\0') { 548 while (*tmp_char != '\0') {
554 if (!(isalnum(*p) || *p == '_')) { 549 if (!(isalnum(*tmp_char) || *tmp_char == '_')) {
555 die(STATE_UNKNOWN, _("Invalid character for keyname - only alphanumerics or '_'")); 550 die(STATE_UNKNOWN, _("Invalid character for keyname - only alphanumerics or '_'"));
556 } 551 }
557 p++; 552 tmp_char++;
558 } 553 }
559 this_state->name = temp_keyname; 554 this_state->name = temp_keyname;
560 this_state->plugin_name = this_monitoring_plugin->plugin_name; 555 this_state->plugin_name = this_monitoring_plugin->plugin_name;
@@ -562,9 +557,11 @@ void np_enable_state(char *keyname, int expected_data_version) {
562 this_state->state_data = NULL; 557 this_state->state_data = NULL;
563 558
564 /* Calculate filename */ 559 /* Calculate filename */
565 ret = asprintf(&temp_filename, "%s/%lu/%s/%s", _np_state_calculate_location_prefix(), 560 char *temp_filename = NULL;
566 (unsigned long)geteuid(), this_monitoring_plugin->plugin_name, this_state->name); 561 int error =
567 if (ret < 0) { 562 asprintf(&temp_filename, "%s/%lu/%s/%s", _np_state_calculate_location_prefix(),
563 (unsigned long)geteuid(), this_monitoring_plugin->plugin_name, this_state->name);
564 if (error < 0) {
568 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno)); 565 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
569 } 566 }
570 567
@@ -581,19 +578,17 @@ void np_enable_state(char *keyname, int expected_data_version) {
581 * if exceptional error. 578 * if exceptional error.
582 */ 579 */
583state_data *np_state_read(void) { 580state_data *np_state_read(void) {
584 state_data *this_state_data = NULL;
585 FILE *statefile;
586 bool rc = false;
587
588 if (this_monitoring_plugin == NULL) { 581 if (this_monitoring_plugin == NULL) {
589 die(STATE_UNKNOWN, _("This requires np_init to be called")); 582 die(STATE_UNKNOWN, _("This requires np_init to be called"));
590 } 583 }
591 584
585 bool error_code = false;
586
592 /* Open file. If this fails, no previous state found */ 587 /* Open file. If this fails, no previous state found */
593 statefile = fopen(this_monitoring_plugin->state->_filename, "r"); 588 FILE *statefile = fopen(this_monitoring_plugin->state->_filename, "r");
594 if (statefile != NULL) { 589 if (statefile != NULL) {
595 590
596 this_state_data = (state_data *)calloc(1, sizeof(state_data)); 591 state_data *this_state_data = (state_data *)calloc(1, sizeof(state_data));
597 if (this_state_data == NULL) { 592 if (this_state_data == NULL) {
598 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno)); 593 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
599 } 594 }
@@ -601,12 +596,12 @@ state_data *np_state_read(void) {
601 this_state_data->data = NULL; 596 this_state_data->data = NULL;
602 this_monitoring_plugin->state->state_data = this_state_data; 597 this_monitoring_plugin->state->state_data = this_state_data;
603 598
604 rc = _np_state_read_file(statefile); 599 error_code = _np_state_read_file(statefile);
605 600
606 fclose(statefile); 601 fclose(statefile);
607 } 602 }
608 603
609 if (!rc) { 604 if (!error_code) {
610 _cleanup_state_data(); 605 _cleanup_state_data();
611 } 606 }
612 607
@@ -616,13 +611,17 @@ state_data *np_state_read(void) {
616/* 611/*
617 * Read the state file 612 * Read the state file
618 */ 613 */
619bool _np_state_read_file(FILE *f) { 614bool _np_state_read_file(FILE *state_file) {
615 time_t current_time;
616 time(&current_time);
617
618 /* Note: This introduces a limit of 1024 bytes in the string data */
619 char *line = (char *)calloc(1, 1024);
620 if (line == NULL) {
621 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
622 }
623
620 bool status = false; 624 bool status = false;
621 size_t pos;
622 char *line;
623 int i;
624 int failure = 0;
625 time_t current_time, data_time;
626 enum { 625 enum {
627 STATE_FILE_VERSION, 626 STATE_FILE_VERSION,
628 STATE_DATA_VERSION, 627 STATE_DATA_VERSION,
@@ -631,16 +630,9 @@ bool _np_state_read_file(FILE *f) {
631 STATE_DATA_END 630 STATE_DATA_END
632 } expected = STATE_FILE_VERSION; 631 } expected = STATE_FILE_VERSION;
633 632
634 time(&current_time); 633 int failure = 0;
635 634 while (!failure && (fgets(line, 1024, state_file)) != NULL) {
636 /* Note: This introduces a limit of 1024 bytes in the string data */ 635 size_t pos = strlen(line);
637 line = (char *)calloc(1, 1024);
638 if (line == NULL) {
639 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
640 }
641
642 while (!failure && (fgets(line, 1024, f)) != NULL) {
643 pos = strlen(line);
644 if (line[pos - 1] == '\n') { 636 if (line[pos - 1] == '\n') {
645 line[pos - 1] = '\0'; 637 line[pos - 1] = '\0';
646 } 638 }
@@ -650,32 +642,32 @@ bool _np_state_read_file(FILE *f) {
650 } 642 }
651 643
652 switch (expected) { 644 switch (expected) {
653 case STATE_FILE_VERSION: 645 case STATE_FILE_VERSION: {
654 i = atoi(line); 646 int i = atoi(line);
655 if (i != NP_STATE_FORMAT_VERSION) { 647 if (i != NP_STATE_FORMAT_VERSION) {
656 failure++; 648 failure++;
657 } else { 649 } else {
658 expected = STATE_DATA_VERSION; 650 expected = STATE_DATA_VERSION;
659 } 651 }
660 break; 652 } break;
661 case STATE_DATA_VERSION: 653 case STATE_DATA_VERSION: {
662 i = atoi(line); 654 int i = atoi(line);
663 if (i != this_monitoring_plugin->state->data_version) { 655 if (i != this_monitoring_plugin->state->data_version) {
664 failure++; 656 failure++;
665 } else { 657 } else {
666 expected = STATE_DATA_TIME; 658 expected = STATE_DATA_TIME;
667 } 659 }
668 break; 660 } break;
669 case STATE_DATA_TIME: 661 case STATE_DATA_TIME: {
670 /* If time > now, error */ 662 /* If time > now, error */
671 data_time = strtoul(line, NULL, 10); 663 time_t data_time = strtoul(line, NULL, 10);
672 if (data_time > current_time) { 664 if (data_time > current_time) {
673 failure++; 665 failure++;
674 } else { 666 } else {
675 this_monitoring_plugin->state->state_data->time = data_time; 667 this_monitoring_plugin->state->state_data->time = data_time;
676 expected = STATE_DATA_TEXT; 668 expected = STATE_DATA_TEXT;
677 } 669 }
678 break; 670 } break;
679 case STATE_DATA_TEXT: 671 case STATE_DATA_TEXT:
680 this_monitoring_plugin->state->state_data->data = strdup(line); 672 this_monitoring_plugin->state->state_data->data = strdup(line);
681 if (this_monitoring_plugin->state->state_data->data == NULL) { 673 if (this_monitoring_plugin->state->state_data->data == NULL) {
@@ -700,27 +692,24 @@ bool _np_state_read_file(FILE *f) {
700 * Will die with UNKNOWN if errors 692 * Will die with UNKNOWN if errors
701 */ 693 */
702void np_state_write_string(time_t data_time, char *data_string) { 694void np_state_write_string(time_t data_time, char *data_string) {
703 FILE *fp;
704 char *temp_file = NULL;
705 int fd = 0, result = 0;
706 time_t current_time; 695 time_t current_time;
707 char *directories = NULL;
708 char *p = NULL;
709
710 if (data_time == 0) { 696 if (data_time == 0) {
711 time(&current_time); 697 time(&current_time);
712 } else { 698 } else {
713 current_time = data_time; 699 current_time = data_time;
714 } 700 }
715 701
702 int result = 0;
703
716 /* If file doesn't currently exist, create directories */ 704 /* If file doesn't currently exist, create directories */
717 if (access(this_monitoring_plugin->state->_filename, F_OK) != 0) { 705 if (access(this_monitoring_plugin->state->_filename, F_OK) != 0) {
706 char *directories = NULL;
718 result = asprintf(&directories, "%s", this_monitoring_plugin->state->_filename); 707 result = asprintf(&directories, "%s", this_monitoring_plugin->state->_filename);
719 if (result < 0) { 708 if (result < 0) {
720 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno)); 709 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
721 } 710 }
722 711
723 for (p = directories + 1; *p; p++) { 712 for (char *p = directories + 1; *p; p++) {
724 if (*p == '/') { 713 if (*p == '/') {
725 *p = '\0'; 714 *p = '\0';
726 if ((access(directories, F_OK) != 0) && (mkdir(directories, S_IRWXU) != 0)) { 715 if ((access(directories, F_OK) != 0) && (mkdir(directories, S_IRWXU) != 0)) {
@@ -734,37 +723,39 @@ void np_state_write_string(time_t data_time, char *data_string) {
734 np_free(directories); 723 np_free(directories);
735 } 724 }
736 725
726 char *temp_file = NULL;
737 result = asprintf(&temp_file, "%s.XXXXXX", this_monitoring_plugin->state->_filename); 727 result = asprintf(&temp_file, "%s.XXXXXX", this_monitoring_plugin->state->_filename);
738 if (result < 0) { 728 if (result < 0) {
739 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno)); 729 die(STATE_UNKNOWN, _("Cannot allocate memory: %s"), strerror(errno));
740 } 730 }
741 731
742 if ((fd = mkstemp(temp_file)) == -1) { 732 int temp_file_desc = 0;
733 if ((temp_file_desc = mkstemp(temp_file)) == -1) {
743 np_free(temp_file); 734 np_free(temp_file);
744 die(STATE_UNKNOWN, _("Cannot create temporary filename")); 735 die(STATE_UNKNOWN, _("Cannot create temporary filename"));
745 } 736 }
746 737
747 fp = (FILE *)fdopen(fd, "w"); 738 FILE *temp_file_pointer = (FILE *)fdopen(temp_file_desc, "w");
748 if (fp == NULL) { 739 if (temp_file_pointer == NULL) {
749 close(fd); 740 close(temp_file_desc);
750 unlink(temp_file); 741 unlink(temp_file);
751 np_free(temp_file); 742 np_free(temp_file);
752 die(STATE_UNKNOWN, _("Unable to open temporary state file")); 743 die(STATE_UNKNOWN, _("Unable to open temporary state file"));
753 } 744 }
754 745
755 fprintf(fp, "# NP State file\n"); 746 fprintf(temp_file_pointer, "# NP State file\n");
756 fprintf(fp, "%d\n", NP_STATE_FORMAT_VERSION); 747 fprintf(temp_file_pointer, "%d\n", NP_STATE_FORMAT_VERSION);
757 fprintf(fp, "%d\n", this_monitoring_plugin->state->data_version); 748 fprintf(temp_file_pointer, "%d\n", this_monitoring_plugin->state->data_version);
758 fprintf(fp, "%lu\n", current_time); 749 fprintf(temp_file_pointer, "%lu\n", current_time);
759 fprintf(fp, "%s\n", data_string); 750 fprintf(temp_file_pointer, "%s\n", data_string);
760 751
761 fchmod(fd, S_IRUSR | S_IWUSR | S_IRGRP); 752 fchmod(temp_file_desc, S_IRUSR | S_IWUSR | S_IRGRP);
762 753
763 fflush(fp); 754 fflush(temp_file_pointer);
764 755
765 result = fclose(fp); 756 result = fclose(temp_file_pointer);
766 757
767 fsync(fd); 758 fsync(temp_file_desc);
768 759
769 if (result != 0) { 760 if (result != 0) {
770 unlink(temp_file); 761 unlink(temp_file);