rendered paste body#include <stdlib.h>
#include <stdio.h>
#include <gssapi/gssapi.h>
#define SERVICE_NAME "host@ns-server.epitech.net"
void display_status(OM_uint32 min, OM_uint32 maj)
{
gss_OID mech;
OM_uint32 minor, status;
gss_buffer_desc msg;
gss_display_status(&minor, min, GSS_C_GSS_CODE, GSS_C_NO_OID, &status, &msg);
puts(msg.value);
gss_display_status(&minor, maj, GSS_C_MECH_CODE, GSS_C_NO_OID, &status, &msg);
puts(msg.value);
exit(1);
}
void import_name(gss_name_t *gss_name)
{
OM_uint32 min, maj;
gss_buffer_desc buf;
gss_OID mech;
buf.value = (unsigned char *) strdup(SERVICE_NAME);
buf.length = strlen(buf.value) + 1;
maj = gss_import_name(&min, &buf, GSS_C_NT_HOSTBASED_SERVICE, gss_name);
if (maj != GSS_S_COMPLETE)
display_status(min, maj);
}
unsigned char *init_context(gss_name_t gss_name)
{
OM_uint32 min, maj, flags, time_rec;
gss_ctx_id_t ctx;
gss_name_t name;
gss_OID mech_type;
gss_buffer_t itoken = GSS_C_NO_BUFFER;
gss_buffer_desc otoken;
maj = gss_init_sec_context(&min, GSS_C_NO_CREDENTIAL, &ctx, gss_name,
GSS_C_NO_OID, 0, 0,
GSS_C_NO_CHANNEL_BINDINGS, itoken,
NULL, &otoken, NULL, NULL);
if (maj != GSS_S_COMPLETE)
display_status(min, maj);
gss_delete_sec_context(&min, &ctx, &otoken);
}
int main(int ac, char **av)
{
gss_name_t gss_name;
import_name(&gss_name);
init_context(gss_name);
return (0);
}