#include #include #include #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); }