1141296Sdas/* 2141296Sdas * Copyright (c) 1997 - 1999 Kungliga Tekniska H�gskolan 32116Sjkh * (Royal Institute of Technology, Stockholm, Sweden). 42116Sjkh * All rights reserved. 52116Sjkh * 62116Sjkh * Redistribution and use in source and binary forms, with or without 7141296Sdas * modification, are permitted provided that the following conditions 82116Sjkh * are met: 9141296Sdas * 102116Sjkh * 1. Redistributions of source code must retain the above copyright 112116Sjkh * notice, this list of conditions and the following disclaimer. 122116Sjkh * 132116Sjkh * 2. Redistributions in binary form must reproduce the above copyright 14176408Sbde * notice, this list of conditions and the following disclaimer in the 15176408Sbde * documentation and/or other materials provided with the distribution. 162116Sjkh * 172116Sjkh * 3. Neither the name of the Institute nor the names of its contributors 182116Sjkh * may be used to endorse or promote products derived from this software 192116Sjkh * without specific prior written permission. 202116Sjkh * 21141296Sdas * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 222116Sjkh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 232116Sjkh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 242116Sjkh * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 252116Sjkh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 262116Sjkh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 272116Sjkh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 282116Sjkh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 292116Sjkh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 302116Sjkh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31141296Sdas * SUCH DAMAGE. 322116Sjkh */ 332116Sjkh 34141296Sdas#include "test_locl.h" 35141296SdasRCSID("$Id: tcp_client.c 17450 2006-05-05 11:11:43Z lha $"); 36141296Sdas 372116Sjkhkrb5_context context; 38151698Sbde 39141296Sdasstatic int 402116Sjkhproto (int sock, const char *hostname, const char *service) 412116Sjkh{ 422116Sjkh krb5_auth_context auth_context; 43151698Sbde krb5_error_code status; 44151698Sbde krb5_principal server; 45151698Sbde krb5_data data; 46151698Sbde krb5_data packet; 47151698Sbde uint32_t len, net_len; 48151698Sbde 49151698Sbde status = krb5_auth_con_init (context, &auth_context); 50151698Sbde if (status) 51151698Sbde krb5_err (context, 1, status, "krb5_auth_con_init"); 52151698Sbde 53151698Sbde status = krb5_auth_con_setaddrs_from_fd (context, 542116Sjkh auth_context, 552116Sjkh &sock); 562116Sjkh if (status) 572116Sjkh krb5_err (context, 1, status, "krb5_auth_con_setaddrs_from_fd"); 582116Sjkh 598870Srgrimes status = krb5_sname_to_principal (context, 602116Sjkh hostname, 612116Sjkh service, 622116Sjkh KRB5_NT_SRV_HST, 632116Sjkh &server); 642116Sjkh if (status) 652116Sjkh krb5_err (context, 1, status, "krb5_sname_to_principal"); 662116Sjkh 672116Sjkh status = krb5_sendauth (context, 6897413Salfred &auth_context, 6997413Salfred &sock, 702116Sjkh VERSION, 71151698Sbde NULL, 72151698Sbde server, 732116Sjkh AP_OPTS_MUTUAL_REQUIRED, 74176408Sbde NULL, 75176408Sbde NULL, 76175665Sbde NULL, 77151698Sbde NULL, 78151698Sbde NULL, 792116Sjkh NULL); 80 if (status) 81 krb5_err (context, 1, status, "krb5_sendauth"); 82 83 data.data = "hej"; 84 data.length = 3; 85 86 krb5_data_zero (&packet); 87 88 status = krb5_mk_safe (context, 89 auth_context, 90 &data, 91 &packet, 92 NULL); 93 if (status) 94 krb5_err (context, 1, status, "krb5_mk_safe"); 95 96 len = packet.length; 97 net_len = htonl(len); 98 99 if (krb5_net_write (context, &sock, &net_len, 4) != 4) 100 err (1, "krb5_net_write"); 101 if (krb5_net_write (context, &sock, packet.data, len) != len) 102 err (1, "krb5_net_write"); 103 104 data.data = "hemligt"; 105 data.length = 7; 106 107 krb5_data_free (&packet); 108 109 status = krb5_mk_priv (context, 110 auth_context, 111 &data, 112 &packet, 113 NULL); 114 if (status) 115 krb5_err (context, 1, status, "krb5_mk_priv"); 116 117 len = packet.length; 118 net_len = htonl(len); 119 120 if (krb5_net_write (context, &sock, &net_len, 4) != 4) 121 err (1, "krb5_net_write"); 122 if (krb5_net_write (context, &sock, packet.data, len) != len) 123 err (1, "krb5_net_write"); 124 return 0; 125} 126 127int 128main(int argc, char **argv) 129{ 130 int port = client_setup(&context, &argc, argv); 131 return client_doit (argv[argc], port, service, proto); 132} 133