diff options
Diffstat (limited to 'lib/utils_base.c')
| -rw-r--r-- | lib/utils_base.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/lib/utils_base.c b/lib/utils_base.c index c458cf61..0f521263 100644 --- a/lib/utils_base.c +++ b/lib/utils_base.c | |||
| @@ -402,26 +402,45 @@ int mp_translate_state (char *state_text) { | |||
| 402 | * parse of argv, so that uniqueness in parameters are reflected there. | 402 | * parse of argv, so that uniqueness in parameters are reflected there. |
| 403 | */ | 403 | */ |
| 404 | char *_np_state_generate_key() { | 404 | char *_np_state_generate_key() { |
| 405 | struct sha256_ctx ctx; | ||
| 406 | int i; | 405 | int i; |
| 407 | char **argv = this_monitoring_plugin->argv; | 406 | char **argv = this_monitoring_plugin->argv; |
| 408 | unsigned char result[20]; | ||
| 409 | char keyname[41]; | 407 | char keyname[41]; |
| 410 | char *p=NULL; | 408 | char *p=NULL; |
| 411 | 409 | ||
| 412 | sha256_init_ctx(&ctx); | 410 | unsigned char result[256]; |
| 413 | 411 | ||
| 412 | #ifdef USE_OPENSSL | ||
| 413 | /* | ||
| 414 | * This code path is chosen if openssl is available (which should be the most common | ||
| 415 | * scenario). Alternatively, the gnulib implementation/ | ||
| 416 | * | ||
| 417 | */ | ||
| 418 | EVP_MD_CTX *ctx = EVP_MD_CTX_new(); | ||
| 419 | |||
| 420 | EVP_DigestInit(ctx, EVP_sha256()); | ||
| 421 | |||
| 422 | for(i=0; i<this_monitoring_plugin->argc; i++) { | ||
| 423 | EVP_DigestUpdate(ctx, argv[i], strlen(argv[i])); | ||
| 424 | } | ||
| 425 | |||
| 426 | EVP_DigestFinal(ctx, result, NULL); | ||
| 427 | #else | ||
| 428 | |||
| 429 | struct sha256_ctx ctx; | ||
| 430 | |||
| 414 | for(i=0; i<this_monitoring_plugin->argc; i++) { | 431 | for(i=0; i<this_monitoring_plugin->argc; i++) { |
| 415 | sha256_process_bytes(argv[i], strlen(argv[i]), &ctx); | 432 | sha256_process_bytes(argv[i], strlen(argv[i]), &ctx); |
| 416 | } | 433 | } |
| 417 | 434 | ||
| 418 | sha256_finish_ctx(&ctx, &result); | 435 | sha256_finish_ctx(&ctx, result); |
| 419 | 436 | #endif // FOUNDOPENSSL | |
| 437 | |||
| 420 | for (i=0; i<20; ++i) { | 438 | for (i=0; i<20; ++i) { |
| 421 | sprintf(&keyname[2*i], "%02x", result[i]); | 439 | sprintf(&keyname[2*i], "%02x", result[i]); |
| 422 | } | 440 | } |
| 441 | |||
| 423 | keyname[40]='\0'; | 442 | keyname[40]='\0'; |
| 424 | 443 | ||
| 425 | p = strdup(keyname); | 444 | p = strdup(keyname); |
| 426 | if(p==NULL) { | 445 | if(p==NULL) { |
| 427 | die(STATE_UNKNOWN, _("Cannot execute strdup: %s"), strerror(errno)); | 446 | die(STATE_UNKNOWN, _("Cannot execute strdup: %s"), strerror(errno)); |
