removed all krb5 calls
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2267 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -20,24 +20,19 @@ proto (int sock, const char *hostname, const char *service)
 | 
				
			|||||||
    gss_buffer_desc real_input_token, real_output_token;
 | 
					    gss_buffer_desc real_input_token, real_output_token;
 | 
				
			||||||
    OM_uint32 maj_stat, min_stat;
 | 
					    OM_uint32 maj_stat, min_stat;
 | 
				
			||||||
    u_int32_t len, net_len;
 | 
					    u_int32_t len, net_len;
 | 
				
			||||||
 | 
					    gss_name_t server;
 | 
				
			||||||
 | 
					    gss_buffer_desc name_token;
 | 
				
			||||||
 | 
					    char *n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    krb5_context context;
 | 
					    name_token.length = asprintf ((char **)&name_token.value,
 | 
				
			||||||
    krb5_principal server;
 | 
									  "%s@%s", service, hostname);
 | 
				
			||||||
    krb5_error_code status;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    status = krb5_init_context(&context);
 | 
					    maj_stat = gss_import_name (&min_stat,
 | 
				
			||||||
    if (status)
 | 
									&name_token,
 | 
				
			||||||
	errx (1, "krb5_init_context: %s",
 | 
									GSS_C_NT_HOSTBASED_SERVICE,
 | 
				
			||||||
	      krb5_get_err_text(context, status));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    status = krb5_sname_to_principal (context,
 | 
					 | 
				
			||||||
				      hostname,
 | 
					 | 
				
			||||||
				      service,
 | 
					 | 
				
			||||||
				      KRB5_NT_SRV_INST,
 | 
					 | 
				
			||||||
				&server);
 | 
									&server);
 | 
				
			||||||
    if (status)
 | 
					    if (GSS_ERROR(maj_stat))
 | 
				
			||||||
	errx (1, "krb5_sname_to_principal: %s",
 | 
						abort ();
 | 
				
			||||||
	      krb5_get_err_text(context, status));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    addrlen = sizeof(local);
 | 
					    addrlen = sizeof(local);
 | 
				
			||||||
    if (getsockname (sock, (struct sockaddr *)&local, &addrlen) < 0
 | 
					    if (getsockname (sock, (struct sockaddr *)&local, &addrlen) < 0
 | 
				
			||||||
@@ -72,19 +67,8 @@ proto (int sock, const char *hostname, const char *service)
 | 
				
			|||||||
				 NULL);
 | 
									 NULL);
 | 
				
			||||||
	if (GSS_ERROR(maj_stat))
 | 
						if (GSS_ERROR(maj_stat))
 | 
				
			||||||
	    abort ();
 | 
						    abort ();
 | 
				
			||||||
	if (output_token->length != 0) {
 | 
						if (output_token->length != 0)
 | 
				
			||||||
	    len = output_token->length;
 | 
						    write_token (sock, output_token);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	    net_len = htonl(len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	    if (write (sock, &net_len, 4) != 4)
 | 
					 | 
				
			||||||
		err (1, "write");
 | 
					 | 
				
			||||||
	    if (write (sock, output_token->value, len) != len)
 | 
					 | 
				
			||||||
		err (1, "write");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	    gss_release_buffer (&min_stat,
 | 
					 | 
				
			||||||
				output_token);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (GSS_ERROR(maj_stat)) {
 | 
						if (GSS_ERROR(maj_stat)) {
 | 
				
			||||||
	    if (context_hdl != GSS_C_NO_CONTEXT)
 | 
						    if (context_hdl != GSS_C_NO_CONTEXT)
 | 
				
			||||||
		gss_delete_sec_context (&min_stat,
 | 
							gss_delete_sec_context (&min_stat,
 | 
				
			||||||
@@ -93,18 +77,47 @@ proto (int sock, const char *hostname, const char *service)
 | 
				
			|||||||
	    break;
 | 
						    break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (maj_stat & GSS_S_CONTINUE_NEEDED) {
 | 
						if (maj_stat & GSS_S_CONTINUE_NEEDED) {
 | 
				
			||||||
	    if (read(sock, &net_len, 4) != 4)
 | 
						    read_token (sock, input_token);
 | 
				
			||||||
		err (1, "read");
 | 
					 | 
				
			||||||
	    len = ntohl(net_len);
 | 
					 | 
				
			||||||
	    input_token->length = len;
 | 
					 | 
				
			||||||
	    input_token->value  = malloc(len);
 | 
					 | 
				
			||||||
	    if (read (sock, input_token->value, len) != len)
 | 
					 | 
				
			||||||
		err (1, "read");
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
	    context_established = 1;
 | 
						    context_established = 1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* get_mic */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    input_token->length = 3;
 | 
				
			||||||
 | 
					    input_token->value  = strdup("hej");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    maj_stat = gss_get_mic(&min_stat,
 | 
				
			||||||
 | 
								   context_hdl,
 | 
				
			||||||
 | 
								   GSS_C_QOP_DEFAULT,
 | 
				
			||||||
 | 
								   input_token,
 | 
				
			||||||
 | 
								   output_token);
 | 
				
			||||||
 | 
					    if (GSS_ERROR(maj_stat))
 | 
				
			||||||
 | 
						abort ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    write_token (sock, input_token);
 | 
				
			||||||
 | 
					    write_token (sock, output_token);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* wrap */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    input_token->length = 7;
 | 
				
			||||||
 | 
					    input_token->value  = "hemligt";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    maj_stat = gss_wrap (&min_stat,
 | 
				
			||||||
 | 
								 context_hdl,
 | 
				
			||||||
 | 
								 1,
 | 
				
			||||||
 | 
								 GSS_C_QOP_DEFAULT,
 | 
				
			||||||
 | 
								 input_token,
 | 
				
			||||||
 | 
								 NULL,
 | 
				
			||||||
 | 
								 output_token);
 | 
				
			||||||
 | 
					    if (GSS_ERROR(maj_stat))
 | 
				
			||||||
 | 
						abort ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    write_token (sock, output_token);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,11 +19,7 @@ proto (int sock, const char *service)
 | 
				
			|||||||
    OM_uint32 maj_stat, min_stat;
 | 
					    OM_uint32 maj_stat, min_stat;
 | 
				
			||||||
    gss_name_t client_name;
 | 
					    gss_name_t client_name;
 | 
				
			||||||
    u_int32_t len, net_len;
 | 
					    u_int32_t len, net_len;
 | 
				
			||||||
    char *name;
 | 
					    gss_buffer_desc name_token;
 | 
				
			||||||
 | 
					 | 
				
			||||||
    krb5_context context;
 | 
					 | 
				
			||||||
    krb5_principal server;
 | 
					 | 
				
			||||||
    krb5_error_code status;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    addrlen = sizeof(local);
 | 
					    addrlen = sizeof(local);
 | 
				
			||||||
    if (getsockname (sock, (struct sockaddr *)&local, &addrlen) < 0
 | 
					    if (getsockname (sock, (struct sockaddr *)&local, &addrlen) < 0
 | 
				
			||||||
@@ -35,22 +31,11 @@ proto (int sock, const char *service)
 | 
				
			|||||||
	|| addrlen != sizeof(remote))
 | 
						|| addrlen != sizeof(remote))
 | 
				
			||||||
	err (1, "getpeername");
 | 
						err (1, "getpeername");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    status = krb5_init_context(&context);
 | 
					 | 
				
			||||||
    if (status)
 | 
					 | 
				
			||||||
	errx (1, "krb5_init_context: %s",
 | 
					 | 
				
			||||||
	      krb5_get_err_text(context, status));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    input_token = &real_input_token;
 | 
					    input_token = &real_input_token;
 | 
				
			||||||
    output_token = &real_output_token;
 | 
					    output_token = &real_output_token;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
	if (read(sock, &net_len, 4) != 4)
 | 
						read_token (sock, input_token);
 | 
				
			||||||
	    err (1, "read");
 | 
					 | 
				
			||||||
	len = ntohl(net_len);
 | 
					 | 
				
			||||||
	input_token->length = len;
 | 
					 | 
				
			||||||
	input_token->value  = malloc(len);
 | 
					 | 
				
			||||||
	if (read (sock, input_token->value, len) != len)
 | 
					 | 
				
			||||||
	    err (1, "read");
 | 
					 | 
				
			||||||
	maj_stat =
 | 
						maj_stat =
 | 
				
			||||||
	    gss_accept_sec_context (&min_stat,
 | 
						    gss_accept_sec_context (&min_stat,
 | 
				
			||||||
				    &context_hdl,
 | 
									    &context_hdl,
 | 
				
			||||||
@@ -65,19 +50,8 @@ proto (int sock, const char *service)
 | 
				
			|||||||
				    NULL);
 | 
									    NULL);
 | 
				
			||||||
	if(GSS_ERROR(maj_stat))
 | 
						if(GSS_ERROR(maj_stat))
 | 
				
			||||||
	    abort ();
 | 
						    abort ();
 | 
				
			||||||
	if (output_token->length != 0) {
 | 
						if (output_token->length != 0)
 | 
				
			||||||
	    len = output_token->length;
 | 
						    write_token (sock, output_token);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	    net_len = htonl(len);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	    if (write (sock, &net_len, 4) != 4)
 | 
					 | 
				
			||||||
		err (1, "write");
 | 
					 | 
				
			||||||
	    if (write (sock, output_token->value, len) != len)
 | 
					 | 
				
			||||||
		err (1, "write");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	    gss_release_buffer (&min_stat,
 | 
					 | 
				
			||||||
				output_token);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (GSS_ERROR(maj_stat)) {
 | 
						if (GSS_ERROR(maj_stat)) {
 | 
				
			||||||
	    if (context_hdl != GSS_C_NO_CONTEXT)
 | 
						    if (context_hdl != GSS_C_NO_CONTEXT)
 | 
				
			||||||
		gss_delete_sec_context (&min_stat,
 | 
							gss_delete_sec_context (&min_stat,
 | 
				
			||||||
@@ -87,15 +61,44 @@ proto (int sock, const char *service)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
    } while(maj_stat & GSS_S_CONTINUE_NEEDED);
 | 
					    } while(maj_stat & GSS_S_CONTINUE_NEEDED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    status = krb5_unparse_name (context,
 | 
					    maj_stat = gss_display_name (&min_stat,
 | 
				
			||||||
				 client_name,
 | 
									 client_name,
 | 
				
			||||||
				&name);
 | 
									 &name_token,
 | 
				
			||||||
    if (status)
 | 
									 NULL);
 | 
				
			||||||
	errx (1, "krb5_unparse_name: %s",
 | 
					    if (GSS_ERROR(maj_stat))
 | 
				
			||||||
	      krb5_get_err_text(context, status));
 | 
						abort ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    printf ("User is `%s'\n", name);
 | 
					    printf ("User is `%.*s'\n", name_token.length, name_token.value);
 | 
				
			||||||
    free (name);
 | 
					
 | 
				
			||||||
 | 
					    /* gss_verify_mic */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    read_token (sock, input_token);
 | 
				
			||||||
 | 
					    read_token (sock, output_token);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    maj_stat = gss_verify_mic (&min_stat,
 | 
				
			||||||
 | 
								       context_hdl,
 | 
				
			||||||
 | 
								       input_token,
 | 
				
			||||||
 | 
								       output_token,
 | 
				
			||||||
 | 
								       NULL);
 | 
				
			||||||
 | 
					    if (GSS_ERROR(maj_stat))
 | 
				
			||||||
 | 
						abort ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf ("gss_verify_mic: %.*s\n", input_token->length, input_token->value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* gss_unwrap */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    read_token (sock, input_token);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    maj_stat = gss_unwrap (&min_stat,
 | 
				
			||||||
 | 
								   context_hdl,
 | 
				
			||||||
 | 
								   input_token,
 | 
				
			||||||
 | 
								   output_token,
 | 
				
			||||||
 | 
								   NULL,
 | 
				
			||||||
 | 
								   NULL);
 | 
				
			||||||
 | 
					    if(GSS_ERROR(maj_stat))
 | 
				
			||||||
 | 
						abort ();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    printf ("gss_unwrap: %.*s\n", output_token->length, output_token->value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user