diff options
| -rw-r--r-- | lib/utils_base.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/utils_base.c b/lib/utils_base.c index 39032cbd..105ff44e 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c | |||
| @@ -404,9 +404,15 @@ int mp_translate_state (char *state_text) { | |||
| 404 | char *_np_state_generate_key() { | 404 | char *_np_state_generate_key() { |
| 405 | int i; | 405 | int i; |
| 406 | char **argv = this_monitoring_plugin->argv; | 406 | char **argv = this_monitoring_plugin->argv; |
| 407 | unsigned char result[20]; | ||
| 408 | char keyname[41]; | 407 | char keyname[41]; |
| 409 | char *p=NULL; | 408 | char *p=NULL; |
| 409 | |||
| 410 | unsigned char *result = malloc(256 * sizeof(unsigned char)); | ||
| 411 | |||
| 412 | if (result == NULL) { | ||
| 413 | die(STATE_UNKNOWN, _("Failed to allocate memory for hashes: %s"), strerror(errno)); | ||
| 414 | } | ||
| 415 | |||
| 410 | #ifdef USE_OPENSSL | 416 | #ifdef USE_OPENSSL |
| 411 | /* | 417 | /* |
| 412 | * This code path is chosen if openssl is available (which should be the most common | 418 | * This code path is chosen if openssl is available (which should be the most common |
| @@ -421,16 +427,22 @@ char *_np_state_generate_key() { | |||
| 421 | EVP_DigestUpdate(ctx, argv[i], strlen(argv[i])); | 427 | EVP_DigestUpdate(ctx, argv[i], strlen(argv[i])); |
| 422 | } | 428 | } |
| 423 | 429 | ||
| 424 | EVP_DigestFinalXOF(ctx, &result, 20); | 430 | EVP_DigestFinal(ctx, result, NULL); |
| 425 | #else | 431 | #else |
| 432 | |||
| 426 | struct sha256_ctx ctx; | 433 | struct sha256_ctx ctx; |
| 427 | 434 | ||
| 428 | for(i=0; i<this_monitoring_plugin->argc; i++) { | 435 | for(i=0; i<this_monitoring_plugin->argc; i++) { |
| 429 | sha256_process_bytes(argv[i], strlen(argv[i]), &ctx); | 436 | sha256_process_bytes(argv[i], strlen(argv[i]), &ctx); |
| 430 | } | 437 | } |
| 431 | 438 | ||
| 432 | sha256_finish_ctx(&ctx, &result); | 439 | sha256_finish_ctx(&ctx, result); |
| 433 | #endif // FOUNDOPENSSL | 440 | #endif // FOUNDOPENSSL |
| 441 | |||
| 442 | for (i=0; i<20; ++i) { | ||
| 443 | sprintf(&keyname[2*i], "%02x", result[i]); | ||
| 444 | } | ||
| 445 | |||
| 434 | keyname[40]='\0'; | 446 | keyname[40]='\0'; |
| 435 | 447 | ||
| 436 | p = strdup(keyname); | 448 | p = strdup(keyname); |
