summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/appl
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2000-02-24 11:19:29 +0000
committermarkm <markm@FreeBSD.org>2000-02-24 11:19:29 +0000
commit69414e22b995b6d161fc19bcab66823585f1d394 (patch)
treec822a9ebecac015f7f6b7d1422b50d0c490791e7 /crypto/heimdal/appl
parentfa8b1a96d3a4e7cb6123f48b6c27b717a5ed86fe (diff)
downloadFreeBSD-src-69414e22b995b6d161fc19bcab66823585f1d394.zip
FreeBSD-src-69414e22b995b6d161fc19bcab66823585f1d394.tar.gz
Vendor import of Heimdal 0.2o
Diffstat (limited to 'crypto/heimdal/appl')
-rw-r--r--crypto/heimdal/appl/telnet/ChangeLog5
-rw-r--r--crypto/heimdal/appl/telnet/telnet/commands.c4
-rw-r--r--crypto/heimdal/appl/test/common.c6
-rw-r--r--crypto/heimdal/appl/test/gss_common.c6
-rw-r--r--crypto/heimdal/appl/test/gssapi_client.c127
-rw-r--r--crypto/heimdal/appl/test/gssapi_server.c153
-rw-r--r--crypto/heimdal/appl/test/test_locl.h5
7 files changed, 207 insertions, 99 deletions
diff --git a/crypto/heimdal/appl/telnet/ChangeLog b/crypto/heimdal/appl/telnet/ChangeLog
index 76a7546..b38f16d 100644
--- a/crypto/heimdal/appl/telnet/ChangeLog
+++ b/crypto/heimdal/appl/telnet/ChangeLog
@@ -1,3 +1,8 @@
+2000-02-12 Assar Westerlund <assar@sics.se>
+
+ * telnet/commands.c (tn): only set tos for AF_INET. From
+ itojun@iijlab.net
+
2000-02-07 Assar Westerlund <assar@sics.se>
* libtelnet/kerberos.c (kerberos4_is): send a reject back to the
diff --git a/crypto/heimdal/appl/telnet/telnet/commands.c b/crypto/heimdal/appl/telnet/telnet/commands.c
index 1cf0ee8..dd78636 100644
--- a/crypto/heimdal/appl/telnet/telnet/commands.c
+++ b/crypto/heimdal/appl/telnet/telnet/commands.c
@@ -33,7 +33,7 @@
#include "telnet_locl.h"
-RCSID("$Id: commands.c,v 1.59 2000/01/08 08:04:16 assar Exp $");
+RCSID("$Id: commands.c,v 1.60 2000/02/12 16:00:07 assar Exp $");
#if defined(IPPROTO_IP) && defined(IP_TOS)
int tos = -1;
@@ -2201,7 +2201,7 @@ tn(int argc, char **argv)
perror("setsockopt (IP_OPTIONS)");
#endif
#if defined(IPPROTO_IP) && defined(IP_TOS)
- {
+ if (a->ai_family == AF_INET) {
# if defined(HAVE_GETTOSBYNAME)
struct tosent *tp;
if (tos < 0 && (tp = gettosbyname("telnet", "tcp")))
diff --git a/crypto/heimdal/appl/test/common.c b/crypto/heimdal/appl/test/common.c
index 5cd4e85..30b2e2d 100644
--- a/crypto/heimdal/appl/test/common.c
+++ b/crypto/heimdal/appl/test/common.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 1998, 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -33,16 +33,18 @@
#include "test_locl.h"
-RCSID("$Id: common.c,v 1.9 1999/12/16 10:29:18 assar Exp $");
+RCSID("$Id: common.c,v 1.10 2000/02/12 21:30:47 assar Exp $");
static int help_flag;
static int version_flag;
static char *port_str;
char *service = SERVICE;
+int fork_flag;
static struct getargs args[] = {
{ "port", 'p', arg_string, &port_str, "port to listen to", "port" },
{ "service", 's', arg_string, &service, "service to use", "service" },
+ { "fork", 'f', arg_flag, &fork_flag, "do fork" },
{ "help", 'h', arg_flag, &help_flag },
{ "version", 0, arg_flag, &version_flag }
};
diff --git a/crypto/heimdal/appl/test/gss_common.c b/crypto/heimdal/appl/test/gss_common.c
index c82ba13..821114b 100644
--- a/crypto/heimdal/appl/test/gss_common.c
+++ b/crypto/heimdal/appl/test/gss_common.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 1998, 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -34,7 +34,7 @@
#include "test_locl.h"
#include <gssapi.h>
#include "gss_common.h"
-RCSID("$Id: gss_common.c,v 1.6 1999/12/02 17:04:56 joda Exp $");
+RCSID("$Id: gss_common.c,v 1.7 2000/02/12 21:31:38 assar Exp $");
void
write_token (int sock, gss_buffer_t buf)
@@ -64,6 +64,8 @@ read_token (int sock, gss_buffer_t buf)
len = ntohl(net_len);
buf->length = len;
buf->value = malloc(len);
+ if (buf->value == NULL)
+ err (1, "malloc %u", len);
if (read (sock, buf->value, len) != len)
err (1, "read");
}
diff --git a/crypto/heimdal/appl/test/gssapi_client.c b/crypto/heimdal/appl/test/gssapi_client.c
index 7d15b99..ed3c43a 100644
--- a/crypto/heimdal/appl/test/gssapi_client.c
+++ b/crypto/heimdal/appl/test/gssapi_client.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -34,7 +34,52 @@
#include "test_locl.h"
#include <gssapi.h>
#include "gss_common.h"
-RCSID("$Id: gssapi_client.c,v 1.10 1999/12/04 18:15:50 assar Exp $");
+RCSID("$Id: gssapi_client.c,v 1.12 2000/02/12 21:33:17 assar Exp $");
+
+static int
+do_trans (int sock, gss_ctx_id_t context_hdl)
+{
+ OM_uint32 maj_stat, min_stat;
+ gss_buffer_desc real_input_token, real_output_token;
+ gss_buffer_t input_token = &real_input_token,
+ output_token = &real_output_token;
+
+ /* 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))
+ gss_err (1, min_stat, "gss_get_mic");
+
+ 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))
+ gss_err (1, min_stat, "gss_wrap");
+
+ write_token (sock, output_token);
+
+ return 0;
+}
static int
proto (int sock, const char *hostname, const char *service)
@@ -44,8 +89,9 @@ proto (int sock, const char *hostname, const char *service)
int context_established = 0;
gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
- gss_buffer_t input_token, output_token;
gss_buffer_desc real_input_token, real_output_token;
+ gss_buffer_t input_token = &real_input_token,
+ output_token = &real_output_token;
OM_uint32 maj_stat, min_stat;
gss_name_t server;
gss_buffer_desc name_token;
@@ -71,9 +117,6 @@ proto (int sock, const char *hostname, const char *service)
|| addrlen != sizeof(remote))
err (1, "getpeername(%s)", hostname);
- input_token = &real_input_token;
- output_token = &real_output_token;
-
input_token->length = 0;
output_token->length = 0;
@@ -110,42 +153,42 @@ proto (int sock, const char *hostname, const char *service)
}
}
-
- /* 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))
- gss_err (1, min_stat, "gss_get_mic");
-
- 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))
- gss_err (1, min_stat, "gss_wrap");
-
- write_token (sock, output_token);
-
- return 0;
+ if (fork_flag) {
+ pid_t pid;
+ int pipefd[2];
+
+ if (pipe (pipefd) < 0)
+ err (1, "pipe");
+
+ pid = fork ();
+ if (pid < 0)
+ err (1, "fork");
+ if (pid != 0) {
+ gss_buffer_desc buf;
+
+ maj_stat = gss_export_sec_context (&min_stat,
+ &context_hdl,
+ &buf);
+ if (GSS_ERROR(maj_stat))
+ gss_err (1, min_stat, "gss_export_sec_context");
+ write_token (pipefd[1], &buf);
+ exit (0);
+ } else {
+ gss_ctx_id_t context_hdl;
+ gss_buffer_desc buf;
+
+ close (pipefd[1]);
+ read_token (pipefd[0], &buf);
+ close (pipefd[0]);
+ maj_stat = gss_import_sec_context (&min_stat, &buf, &context_hdl);
+ if (GSS_ERROR(maj_stat))
+ gss_err (1, min_stat, "gss_import_sec_context");
+ gss_release_buffer (&min_stat, &buf);
+ return do_trans (sock, context_hdl);
+ }
+ } else {
+ return do_trans (sock, context_hdl);
+ }
}
int
diff --git a/crypto/heimdal/appl/test/gssapi_server.c b/crypto/heimdal/appl/test/gssapi_server.c
index a17ce3e..01aa769 100644
--- a/crypto/heimdal/appl/test/gssapi_server.c
+++ b/crypto/heimdal/appl/test/gssapi_server.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -34,59 +34,19 @@
#include "test_locl.h"
#include <gssapi.h>
#include "gss_common.h"
-RCSID("$Id: gssapi_server.c,v 1.10 1999/12/16 10:29:41 assar Exp $");
+RCSID("$Id: gssapi_server.c,v 1.12 2000/02/12 21:34:11 assar Exp $");
static int
-proto (int sock, const char *service)
+process_it(int sock,
+ gss_ctx_id_t context_hdl,
+ gss_name_t client_name
+ )
{
- struct sockaddr_in remote, local;
- int addrlen;
- gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
- gss_buffer_t input_token, output_token;
- gss_buffer_desc real_input_token, real_output_token;
OM_uint32 maj_stat, min_stat;
- gss_name_t client_name;
gss_buffer_desc name_token;
-
- addrlen = sizeof(local);
- if (getsockname (sock, (struct sockaddr *)&local, &addrlen) < 0
- || addrlen != sizeof(local))
- err (1, "getsockname)");
-
- addrlen = sizeof(remote);
- if (getpeername (sock, (struct sockaddr *)&remote, &addrlen) < 0
- || addrlen != sizeof(remote))
- err (1, "getpeername");
-
- input_token = &real_input_token;
- output_token = &real_output_token;
-
- do {
- read_token (sock, input_token);
- maj_stat =
- gss_accept_sec_context (&min_stat,
- &context_hdl,
- GSS_C_NO_CREDENTIAL,
- input_token,
- GSS_C_NO_CHANNEL_BINDINGS,
- &client_name,
- NULL,
- output_token,
- NULL,
- NULL,
- NULL);
- if(GSS_ERROR(maj_stat))
- gss_err (1, min_stat, "gss_accept_sec_context");
- if (output_token->length != 0)
- write_token (sock, output_token);
- if (GSS_ERROR(maj_stat)) {
- if (context_hdl != GSS_C_NO_CONTEXT)
- gss_delete_sec_context (&min_stat,
- &context_hdl,
- GSS_C_NO_BUFFER);
- break;
- }
- } while(maj_stat & GSS_S_CONTINUE_NEEDED);
+ gss_buffer_desc real_input_token, real_output_token;
+ gss_buffer_t input_token = &real_input_token,
+ output_token = &real_output_token;
maj_stat = gss_display_name (&min_stat,
client_name,
@@ -98,6 +58,8 @@ proto (int sock, const char *service)
fprintf (stderr, "User is `%.*s'\n", (int)name_token.length,
(char *)name_token.value);
+ gss_release_buffer (&min_stat, &name_token);
+
/* gss_verify_mic */
read_token (sock, input_token);
@@ -114,6 +76,9 @@ proto (int sock, const char *service)
fprintf (stderr, "gss_verify_mic: %.*s\n", (int)input_token->length,
(char *)input_token->value);
+ gss_release_buffer (&min_stat, input_token);
+ gss_release_buffer (&min_stat, output_token);
+
/* gss_unwrap */
read_token (sock, input_token);
@@ -130,10 +95,100 @@ proto (int sock, const char *service)
fprintf (stderr, "gss_unwrap: %.*s\n", (int)output_token->length,
(char *)output_token->value);
+ gss_release_buffer (&min_stat, input_token);
+ gss_release_buffer (&min_stat, output_token);
+
return 0;
}
static int
+proto (int sock, const char *service)
+{
+ struct sockaddr_in remote, local;
+ int addrlen;
+ gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
+ gss_buffer_desc real_input_token, real_output_token;
+ gss_buffer_t input_token = &real_input_token,
+ output_token = &real_output_token;
+ OM_uint32 maj_stat, min_stat;
+ gss_name_t client_name;
+
+ addrlen = sizeof(local);
+ if (getsockname (sock, (struct sockaddr *)&local, &addrlen) < 0
+ || addrlen != sizeof(local))
+ err (1, "getsockname)");
+
+ addrlen = sizeof(remote);
+ if (getpeername (sock, (struct sockaddr *)&remote, &addrlen) < 0
+ || addrlen != sizeof(remote))
+ err (1, "getpeername");
+
+ do {
+ read_token (sock, input_token);
+ maj_stat =
+ gss_accept_sec_context (&min_stat,
+ &context_hdl,
+ GSS_C_NO_CREDENTIAL,
+ input_token,
+ GSS_C_NO_CHANNEL_BINDINGS,
+ &client_name,
+ NULL,
+ output_token,
+ NULL,
+ NULL,
+ NULL);
+ if(GSS_ERROR(maj_stat))
+ gss_err (1, min_stat, "gss_accept_sec_context");
+ if (output_token->length != 0)
+ write_token (sock, output_token);
+ if (GSS_ERROR(maj_stat)) {
+ if (context_hdl != GSS_C_NO_CONTEXT)
+ gss_delete_sec_context (&min_stat,
+ &context_hdl,
+ GSS_C_NO_BUFFER);
+ break;
+ }
+ } while(maj_stat & GSS_S_CONTINUE_NEEDED);
+
+ if (fork_flag) {
+ pid_t pid;
+ int pipefd[2];
+
+ if (pipe (pipefd) < 0)
+ err (1, "pipe");
+
+ pid = fork ();
+ if (pid < 0)
+ err (1, "fork");
+ if (pid != 0) {
+ gss_buffer_desc buf;
+
+ maj_stat = gss_export_sec_context (&min_stat,
+ &context_hdl,
+ &buf);
+ if (GSS_ERROR(maj_stat))
+ gss_err (1, min_stat, "gss_export_sec_context");
+ write_token (pipefd[1], &buf);
+ exit (0);
+ } else {
+ gss_ctx_id_t context_hdl;
+ gss_buffer_desc buf;
+
+ close (pipefd[1]);
+ read_token (pipefd[0], &buf);
+ close (pipefd[0]);
+ maj_stat = gss_import_sec_context (&min_stat, &buf, &context_hdl);
+ if (GSS_ERROR(maj_stat))
+ gss_err (1, min_stat, "gss_import_sec_context");
+ gss_release_buffer (&min_stat, &buf);
+ return process_it (sock, context_hdl, client_name);
+ }
+ } else {
+ return process_it (sock, context_hdl, client_name);
+ }
+}
+
+static int
doit (int port, const char *service)
{
int sock, sock2;
diff --git a/crypto/heimdal/appl/test/test_locl.h b/crypto/heimdal/appl/test/test_locl.h
index 045d060..5c4ca36 100644
--- a/crypto/heimdal/appl/test/test_locl.h
+++ b/crypto/heimdal/appl/test/test_locl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997 - 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*/
-/* $Id: test_locl.h,v 1.7 1999/12/04 18:17:07 assar Exp $ */
+/* $Id: test_locl.h,v 1.8 2000/02/14 02:52:55 assar Exp $ */
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -79,6 +79,7 @@
#define PORT "test"
extern char *service;
+extern int fork_flag;
int server_setup(krb5_context*, int, char**);
int client_setup(krb5_context*, int*, char**);
int client_doit (const char *hostname, int port, const char *service,
OpenPOWER on IntegriCloud