X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fgrpc.cc;h=977c5b2cc2a5392a7950bd9c7805dff272dbd6f9;hp=0f5cfec0427a7ef6e1f06f603208eb706017b40c;hb=a9e50e9e30ecde17e167e271060c8183bfcbf407;hpb=43ee9ced15521d541dd3fb0698c9c490339dd35f diff --git a/src/grpc.cc b/src/grpc.cc index 0f5cfec0..977c5b2c 100644 --- a/src/grpc.cc +++ b/src/grpc.cc @@ -56,7 +56,8 @@ using collectd::QueryValuesResponse; using google::protobuf::util::TimeUtil; -typedef google::protobuf::Map grpcMetadata; +typedef google::protobuf::Map + grpcMetadata; /* * private types @@ -175,10 +176,11 @@ static grpc::Status marshal_meta_data(meta_data_t *meta, switch (md_type) { case MD_TYPE_STRING: char *md_string; - if (meta_data_get_string(meta, key, &md_string) != 0 || md_string == nullptr) { + if (meta_data_get_string(meta, key, &md_string) != 0 || + md_string == nullptr) { strarray_free(meta_data_keys, meta_data_keys_len); return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("missing metadata")); + grpc::string("missing metadata")); } md_value.set_string_value(md_string); free(md_string); @@ -188,7 +190,7 @@ static grpc::Status marshal_meta_data(meta_data_t *meta, if (meta_data_get_signed_int(meta, key, &int64_value) != 0) { strarray_free(meta_data_keys, meta_data_keys_len); return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("missing metadata")); + grpc::string("missing metadata")); } md_value.set_int64_value(int64_value); break; @@ -197,7 +199,7 @@ static grpc::Status marshal_meta_data(meta_data_t *meta, if (meta_data_get_unsigned_int(meta, key, &uint64_value) != 0) { strarray_free(meta_data_keys, meta_data_keys_len); return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("missing metadata")); + grpc::string("missing metadata")); } md_value.set_uint64_value(uint64_value); break; @@ -206,7 +208,7 @@ static grpc::Status marshal_meta_data(meta_data_t *meta, if (meta_data_get_double(meta, key, &double_value) != 0) { strarray_free(meta_data_keys, meta_data_keys_len); return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("missing metadata")); + grpc::string("missing metadata")); } md_value.set_double_value(double_value); break; @@ -215,7 +217,7 @@ static grpc::Status marshal_meta_data(meta_data_t *meta, if (meta_data_get_boolean(meta, key, &bool_value) != 0) { strarray_free(meta_data_keys, meta_data_keys_len); return grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("missing metadata")); + grpc::string("missing metadata")); } md_value.set_bool_value(bool_value); break; @@ -239,9 +241,9 @@ static grpc::Status unmarshal_meta_data(const grpcMetadata &rpc_metadata, *md_out = meta_data_create(); if (*md_out == nullptr) { return grpc::Status(grpc::StatusCode::RESOURCE_EXHAUSTED, - grpc::string("failed to metadata list")); + grpc::string("failed to create metadata list")); } - for (auto kv: rpc_metadata) { + for (auto kv : rpc_metadata) { auto k = kv.first.c_str(); auto v = kv.second; @@ -267,8 +269,8 @@ static grpc::Status unmarshal_meta_data(const grpcMetadata &rpc_metadata, break; default: meta_data_destroy(*md_out); - return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, - grpc::string("Metadata of unknown type")); + return grpc::Status(grpc::StatusCode::INVALID_ARGUMENT, + grpc::string("Metadata of unknown type")); } } return grpc::Status::OK; @@ -482,8 +484,9 @@ private: break; } if (uc_iterator_get_meta(iter, &vl.meta) < 0) { - status = grpc::Status(grpc::StatusCode::INTERNAL, - grpc::string("failed to retrieve value metadata")); + status = + grpc::Status(grpc::StatusCode::INTERNAL, + grpc::string("failed to retrieve value metadata")); } value_lists->push(vl); @@ -626,7 +629,8 @@ static int c_grpc_config_listen(oconfig_item_t *ci) { listener.port = grpc::string(ci->values[1].value.string); listener.ssl = nullptr; - auto ssl_opts = new (grpc::SslServerCredentialsOptions); + auto ssl_opts = new grpc::SslServerCredentialsOptions( + GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY); grpc::SslServerCredentialsOptions::PemKeyCertPair pkcp = {}; bool use_ssl = false; @@ -659,6 +663,14 @@ static int c_grpc_config_listen(oconfig_item_t *ci) { return -1; } pkcp.cert_chain = read_file(cert); + } else if (!strcasecmp("VerifyPeer", child->key)) { + _Bool verify = 0; + if (cf_util_get_boolean(child, &verify)) { + return -1; + } + ssl_opts->client_certificate_request = + verify ? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY + : GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE; } else { WARNING("grpc: Option `%s` not allowed in <%s> block.", child->key, ci->key);