Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / crypto / dist / heimdal / appl / test / tcp_client.c
blob0df4059b9d5a2d8da11255aceb23d926e02ad5fd
1 /*
2 * Copyright (c) 1997 - 1999 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
34 #include "test_locl.h"
35 __RCSID("$Heimdal: tcp_client.c 17450 2006-05-05 11:11:43Z lha $"
36 "$NetBSD$");
38 krb5_context context;
40 static int
41 proto (int sock, const char *hostname, const char *service)
43 krb5_auth_context auth_context;
44 krb5_error_code status;
45 krb5_principal server;
46 krb5_data data;
47 krb5_data packet;
48 uint32_t len, net_len;
50 status = krb5_auth_con_init (context, &auth_context);
51 if (status)
52 krb5_err (context, 1, status, "krb5_auth_con_init");
54 status = krb5_auth_con_setaddrs_from_fd (context,
55 auth_context,
56 &sock);
57 if (status)
58 krb5_err (context, 1, status, "krb5_auth_con_setaddrs_from_fd");
60 status = krb5_sname_to_principal (context,
61 hostname,
62 service,
63 KRB5_NT_SRV_HST,
64 &server);
65 if (status)
66 krb5_err (context, 1, status, "krb5_sname_to_principal");
68 status = krb5_sendauth (context,
69 &auth_context,
70 &sock,
71 VERSION,
72 NULL,
73 server,
74 AP_OPTS_MUTUAL_REQUIRED,
75 NULL,
76 NULL,
77 NULL,
78 NULL,
79 NULL,
80 NULL);
81 if (status)
82 krb5_err (context, 1, status, "krb5_sendauth");
84 data.data = "hej";
85 data.length = 3;
87 krb5_data_zero (&packet);
89 status = krb5_mk_safe (context,
90 auth_context,
91 &data,
92 &packet,
93 NULL);
94 if (status)
95 krb5_err (context, 1, status, "krb5_mk_safe");
97 len = packet.length;
98 net_len = htonl(len);
100 if (krb5_net_write (context, &sock, &net_len, 4) != 4)
101 err (1, "krb5_net_write");
102 if (krb5_net_write (context, &sock, packet.data, len) != len)
103 err (1, "krb5_net_write");
105 data.data = "hemligt";
106 data.length = 7;
108 krb5_data_free (&packet);
110 status = krb5_mk_priv (context,
111 auth_context,
112 &data,
113 &packet,
114 NULL);
115 if (status)
116 krb5_err (context, 1, status, "krb5_mk_priv");
118 len = packet.length;
119 net_len = htonl(len);
121 if (krb5_net_write (context, &sock, &net_len, 4) != 4)
122 err (1, "krb5_net_write");
123 if (krb5_net_write (context, &sock, packet.data, len) != len)
124 err (1, "krb5_net_write");
125 return 0;
129 main(int argc, char **argv)
131 int port = client_setup(&context, &argc, argv);
132 return client_doit (argv[argc], port, service, proto);