#include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include "globus_gss_assist.h" #include "tokens.h" int main() { assert(globus_module_activate(GLOBUS_GSI_GSSAPI_MODULE) == GLOBUS_SUCCESS); int acceptor = socket(AF_INET, SOCK_STREAM, 0); assert(acceptor != -1); struct sockaddr_in me; memset ((char *)&me, 0, sizeof(struct sockaddr_in)); me.sin_family = AF_INET; me.sin_addr.s_addr = INADDR_ANY; me.sin_port = htons(10001); assert(bind(acceptor, (struct sockaddr*)&me, sizeof(struct sockaddr_in)) != -1); assert(listen(acceptor, 10) != -1); OM_uint32 major = 0, minor = 0; gss_cred_id_t credential = GSS_C_NO_CREDENTIAL; major = globus_gss_assist_acquire_cred(&minor, GSS_C_BOTH, &credential); if(GSS_ERROR(major)) { char * str = NULL; globus_gss_assist_display_status_str(&str, "Failed to acquire credentials : ", major, minor, 0); std::cout << str; exit(1); } struct sockaddr_in him; socklen_t addrlen = sizeof(struct sockaddr_in); int sck = accept(acceptor, (struct sockaddr*)&him, &addrlen); gss_ctx_id_t context = GSS_C_NO_CONTEXT; char * name = NULL; OM_uint32 flags = 0; int token_status = 0; gss_cred_id_t delegated_cred = GSS_C_NO_CREDENTIAL; major = globus_gss_assist_accept_sec_context(&minor, &context, credential, &name, &flags, NULL, &token_status, &delegated_cred, &get_token, (void *) &sck, &send_token, (void *) &sck); if(GSS_ERROR(major)) { std::cout << "Major : " << minor << std::endl; std::cout << "Minor : " << major << std::endl; char * str = NULL; globus_gss_assist_display_status_str(&str, "Failed to establish security context : ", major, minor, 0); std::cout << str; exit(1); } if(name) std::cout << name << std::endl; gss_delete_sec_context(&minor, &context, GSS_C_NO_BUFFER); gss_release_cred(&minor, &credential); assert(globus_module_deactivate(GLOBUS_GSI_GSSAPI_MODULE) == GLOBUS_SUCCESS); }