summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c')
-rw-r--r--src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c248
1 files changed, 0 insertions, 248 deletions
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c
deleted file mode 100644
index 0ca591f83fd..00000000000
--- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi/gss_wrapper.c
+++ /dev/null
@@ -1,248 +0,0 @@
-//+build gssapi
-//+build linux darwin
-
-#include <string.h>
-#include <stdio.h>
-#include "gss_wrapper.h"
-
-OM_uint32 gssapi_canonicalize_name(
- OM_uint32* minor_status,
- char *input_name,
- gss_OID input_name_type,
- gss_name_t *output_name
-)
-{
- OM_uint32 major_status;
- gss_name_t imported_name = GSS_C_NO_NAME;
- gss_buffer_desc buffer = GSS_C_EMPTY_BUFFER;
-
- buffer.value = input_name;
- buffer.length = strlen(input_name);
- major_status = gss_import_name(minor_status, &buffer, input_name_type, &imported_name);
- if (GSS_ERROR(major_status)) {
- return major_status;
- }
-
- major_status = gss_canonicalize_name(minor_status, imported_name, (gss_OID)gss_mech_krb5, output_name);
- if (imported_name != GSS_C_NO_NAME) {
- OM_uint32 ignored;
- gss_release_name(&ignored, &imported_name);
- }
-
- return major_status;
-}
-
-int gssapi_error_desc(
- OM_uint32 maj_stat,
- OM_uint32 min_stat,
- char **desc
-)
-{
- OM_uint32 stat = maj_stat;
- int stat_type = GSS_C_GSS_CODE;
- if (min_stat != 0) {
- stat = min_stat;
- stat_type = GSS_C_MECH_CODE;
- }
-
- OM_uint32 local_maj_stat, local_min_stat;
- OM_uint32 msg_ctx = 0;
- gss_buffer_desc desc_buffer;
- do
- {
- local_maj_stat = gss_display_status(
- &local_min_stat,
- stat,
- stat_type,
- GSS_C_NO_OID,
- &msg_ctx,
- &desc_buffer
- );
- if (GSS_ERROR(local_maj_stat)) {
- return GSSAPI_ERROR;
- }
-
- if (*desc) {
- free(*desc);
- }
-
- *desc = malloc(desc_buffer.length+1);
- memcpy(*desc, desc_buffer.value, desc_buffer.length+1);
-
- gss_release_buffer(&local_min_stat, &desc_buffer);
- }
- while(msg_ctx != 0);
-
- return GSSAPI_OK;
-}
-
-int gssapi_client_init(
- gssapi_client_state *client,
- char* spn,
- char* username,
- char* password
-)
-{
- client->cred = GSS_C_NO_CREDENTIAL;
- client->ctx = GSS_C_NO_CONTEXT;
-
- client->maj_stat = gssapi_canonicalize_name(&client->min_stat, spn, GSS_C_NT_HOSTBASED_SERVICE, &client->spn);
- if (GSS_ERROR(client->maj_stat)) {
- return GSSAPI_ERROR;
- }
-
- if (username) {
- gss_name_t name;
- client->maj_stat = gssapi_canonicalize_name(&client->min_stat, username, GSS_C_NT_USER_NAME, &name);
- if (GSS_ERROR(client->maj_stat)) {
- return GSSAPI_ERROR;
- }
-
- if (password) {
- gss_buffer_desc password_buffer;
- password_buffer.value = password;
- password_buffer.length = strlen(password);
- client->maj_stat = gss_acquire_cred_with_password(&client->min_stat, name, &password_buffer, GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_INITIATE, &client->cred, NULL, NULL);
- } else {
- client->maj_stat = gss_acquire_cred(&client->min_stat, name, GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_INITIATE, &client->cred, NULL, NULL);
- }
-
- if (GSS_ERROR(client->maj_stat)) {
- return GSSAPI_ERROR;
- }
-
- OM_uint32 ignored;
- gss_release_name(&ignored, &name);
- }
-
- return GSSAPI_OK;
-}
-
-int gssapi_client_username(
- gssapi_client_state *client,
- char** username
-)
-{
- OM_uint32 ignored;
- gss_name_t name = GSS_C_NO_NAME;
-
- client->maj_stat = gss_inquire_context(&client->min_stat, client->ctx, &name, NULL, NULL, NULL, NULL, NULL, NULL);
- if (GSS_ERROR(client->maj_stat)) {
- return GSSAPI_ERROR;
- }
-
- gss_buffer_desc name_buffer;
- client->maj_stat = gss_display_name(&client->min_stat, name, &name_buffer, NULL);
- if (GSS_ERROR(client->maj_stat)) {
- gss_release_name(&ignored, &name);
- return GSSAPI_ERROR;
- }
-
- *username = malloc(name_buffer.length+1);
- memcpy(*username, name_buffer.value, name_buffer.length+1);
-
- gss_release_buffer(&ignored, &name_buffer);
- gss_release_name(&ignored, &name);
- return GSSAPI_OK;
-}
-
-int gssapi_client_negotiate(
- gssapi_client_state *client,
- void* input,
- size_t input_length,
- void** output,
- size_t* output_length
-)
-{
- gss_buffer_desc input_buffer = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc output_buffer = GSS_C_EMPTY_BUFFER;
-
- if (input) {
- input_buffer.value = input;
- input_buffer.length = input_length;
- }
-
- client->maj_stat = gss_init_sec_context(
- &client->min_stat,
- client->cred,
- &client->ctx,
- client->spn,
- GSS_C_NO_OID,
- GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG,
- 0,
- GSS_C_NO_CHANNEL_BINDINGS,
- &input_buffer,
- NULL,
- &output_buffer,
- NULL,
- NULL
- );
-
- if (output_buffer.length) {
- *output = malloc(output_buffer.length);
- *output_length = output_buffer.length;
- memcpy(*output, output_buffer.value, output_buffer.length);
-
- OM_uint32 ignored;
- gss_release_buffer(&ignored, &output_buffer);
- }
-
- if (GSS_ERROR(client->maj_stat)) {
- return GSSAPI_ERROR;
- } else if (client->maj_stat == GSS_S_CONTINUE_NEEDED) {
- return GSSAPI_CONTINUE;
- }
-
- return GSSAPI_OK;
-}
-
-int gssapi_client_wrap_msg(
- gssapi_client_state *client,
- void* input,
- size_t input_length,
- void** output,
- size_t* output_length
-)
-{
- gss_buffer_desc input_buffer = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc output_buffer = GSS_C_EMPTY_BUFFER;
-
- input_buffer.value = input;
- input_buffer.length = input_length;
-
- client->maj_stat = gss_wrap(&client->min_stat, client->ctx, 0, GSS_C_QOP_DEFAULT, &input_buffer, NULL, &output_buffer);
-
- if (output_buffer.length) {
- *output = malloc(output_buffer.length);
- *output_length = output_buffer.length;
- memcpy(*output, output_buffer.value, output_buffer.length);
-
- gss_release_buffer(&client->min_stat, &output_buffer);
- }
-
- if (GSS_ERROR(client->maj_stat)) {
- return GSSAPI_ERROR;
- }
-
- return GSSAPI_OK;
-}
-
-int gssapi_client_destroy(
- gssapi_client_state *client
-)
-{
- OM_uint32 ignored;
- if (client->ctx != GSS_C_NO_CONTEXT) {
- gss_delete_sec_context(&ignored, &client->ctx, GSS_C_NO_BUFFER);
- }
-
- if (client->spn != GSS_C_NO_NAME) {
- gss_release_name(&ignored, &client->spn);
- }
-
- if (client->cred != GSS_C_NO_CREDENTIAL) {
- gss_release_cred(&ignored, &client->cred);
- }
-
- return GSSAPI_OK;
-}