diff --git a/plugins/out_stackdriver/gce_metadata.c b/plugins/out_stackdriver/gce_metadata.c index 6032fe85069..207b8c69089 100644 --- a/plugins/out_stackdriver/gce_metadata.c +++ b/plugins/out_stackdriver/gce_metadata.c @@ -33,7 +33,7 @@ static int fetch_metadata(struct flb_stackdriver *ctx, struct flb_upstream *upstream, char *uri, - char *payload) + flb_sds_t *payload) { int ret; int ret_code; @@ -44,15 +44,15 @@ static int fetch_metadata(struct flb_stackdriver *ctx, /* If runtime test mode is enabled, add test data */ if (ctx->ins->test_mode == FLB_TRUE) { if (strcmp(uri, FLB_STD_METADATA_PROJECT_ID_URI) == 0) { - flb_sds_cat(payload, "fluent-bit-test", 15); + *payload = flb_sds_cat(*payload, "fluent-bit-test", 15); return 0; } else if (strcmp(uri, FLB_STD_METADATA_ZONE_URI) == 0) { - flb_sds_cat(payload, "projects/0123456789/zones/fluent", 32); + *payload = flb_sds_cat(*payload, "projects/0123456789/zones/fluent", 32); return 0; } else if (strcmp(uri, FLB_STD_METADATA_INSTANCE_ID_URI) == 0) { - flb_sds_cat(payload, "333222111", 9); + *payload = flb_sds_cat(*payload, "333222111", 9); return 0; } return -1; @@ -88,7 +88,7 @@ static int fetch_metadata(struct flb_stackdriver *ctx, flb_plg_debug(ctx->ins, "HTTP Status=%i", c->resp.status); if (c->resp.status == 200) { ret_code = 0; - flb_sds_copy(payload, c->resp.payload, c->resp.payload_size); + *payload = flb_sds_copy(*payload, c->resp.payload, c->resp.payload_size); } else { if (c->resp.payload_size > 0) { @@ -117,7 +117,7 @@ int gce_metadata_read_token(struct flb_stackdriver *ctx) uri = flb_sds_cat(uri, ctx->client_email, flb_sds_len(ctx->client_email)); uri = flb_sds_cat(uri, "/token", 6); - ret = fetch_metadata(ctx, ctx->metadata_u, uri, payload); + ret = fetch_metadata(ctx, ctx->metadata_u, uri, &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch token from the metadata server"); flb_sds_destroy(payload); @@ -147,7 +147,7 @@ int gce_metadata_read_zone(struct flb_stackdriver *ctx) flb_sds_t zone = NULL; ret = fetch_metadata(ctx, ctx->metadata_u, FLB_STD_METADATA_ZONE_URI, - payload); + &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch zone from the metadata server"); flb_sds_destroy(payload); @@ -193,7 +193,7 @@ int gce_metadata_read_project_id(struct flb_stackdriver *ctx) flb_sds_t payload = flb_sds_create_size(4096); ret = fetch_metadata(ctx, ctx->metadata_u, - FLB_STD_METADATA_PROJECT_ID_URI, payload); + FLB_STD_METADATA_PROJECT_ID_URI, &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch project id from the metadata server"); flb_sds_destroy(payload); @@ -210,7 +210,7 @@ int gce_metadata_read_instance_id(struct flb_stackdriver *ctx) flb_sds_t payload = flb_sds_create_size(4096); ret = fetch_metadata(ctx, ctx->metadata_u, - FLB_STD_METADATA_INSTANCE_ID_URI, payload); + FLB_STD_METADATA_INSTANCE_ID_URI, &payload); if (ret != 0) { flb_plg_error(ctx->ins, "can't fetch instance id from the metadata server"); flb_sds_destroy(payload); diff --git a/plugins/out_stackdriver/stackdriver.c b/plugins/out_stackdriver/stackdriver.c index 38fefd7a8fd..84e452e9a98 100644 --- a/plugins/out_stackdriver/stackdriver.c +++ b/plugins/out_stackdriver/stackdriver.c @@ -1130,6 +1130,9 @@ static int pack_resource_labels(struct flb_stackdriver *ctx, } else { flb_plg_warn(ctx->ins, "failed to find a corresponding entry for " "resource label entry [%s=%s]", label_kv->key, label_kv->val); + if (rval) { + flb_ra_key_value_destroy(rval); + } } flb_ra_destroy(ra); } else { @@ -2476,6 +2479,8 @@ static flb_sds_t stackdriver_format(struct flb_stackdriver *ctx, flb_sds_destroy(log_name); } + destroy_http_request(&http_request); + flb_log_event_decoder_destroy(&log_decoder); msgpack_sbuffer_destroy(&mp_sbuf); diff --git a/plugins/out_stackdriver/stackdriver_conf.c b/plugins/out_stackdriver/stackdriver_conf.c index 7c36b2e02b9..103232abeec 100644 --- a/plugins/out_stackdriver/stackdriver_conf.c +++ b/plugins/out_stackdriver/stackdriver_conf.c @@ -134,6 +134,9 @@ static int read_credentials_file(const char *cred_file, struct flb_stackdriver * ctx->creds->type = flb_sds_create_len(val, val_len); } else if (key_cmp(key, key_len, "project_id") == 0) { + if (ctx->project_id) { + flb_sds_destroy(ctx->project_id); + } ctx->project_id = flb_sds_create_len(val, val_len); } else if (key_cmp(key, key_len, "private_key_id") == 0) {