diff options
Diffstat (limited to 'lib')
-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); |