summaryrefslogtreecommitdiffstats
path: root/crypto/kerberosIV/appl/sample/simple_client.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/kerberosIV/appl/sample/simple_client.c')
-rw-r--r--crypto/kerberosIV/appl/sample/simple_client.c202
1 files changed, 0 insertions, 202 deletions
diff --git a/crypto/kerberosIV/appl/sample/simple_client.c b/crypto/kerberosIV/appl/sample/simple_client.c
deleted file mode 100644
index 434150d..0000000
--- a/crypto/kerberosIV/appl/sample/simple_client.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- *
- * Copyright 1989 by the Massachusetts Institute of Technology.
- *
- * For copying and distribution information, please see the file
- * <mit-copyright.h>.
- *
- * Simple UDP-based sample client program. For demonstration.
- * This program performs no useful function.
- */
-
-#include "sample.h"
-RCSID("$Id: simple_client.c,v 1.15 1999/11/13 06:29:01 assar Exp $");
-
-#define MSG "hi, Jennifer!" /* message text */
-
-static int
-talkto(char *hostname, char *service, int port)
-{
- int flags = 0; /* flags for sendto() */
- long len;
- u_long cksum = 0L; /* cksum not used */
- char c_realm[REALM_SZ]; /* local Kerberos realm */
- char *s_realm; /* server's Kerberos realm */
-
- KTEXT_ST k; /* Kerberos data */
- KTEXT ktxt = &k;
-
- int sock, i;
- struct hostent *host;
- struct sockaddr_in s_sock; /* server address */
- char myhostname[MaxHostNameLen]; /* local hostname */
-
- /* for krb_mk_safe/priv */
- struct sockaddr_in c_sock; /* client address */
- CREDENTIALS c; /* ticket & session key */
- CREDENTIALS *cred = &c;
-
- /* for krb_mk_priv */
- des_key_schedule sched; /* session key schedule */
-
- /* Look up server host */
- if ((host = gethostbyname(hostname)) == NULL) {
- fprintf(stderr, "%s: unknown host \n", hostname);
- return 1;
- }
-
- /* Set server's address */
- memset(&s_sock, 0, sizeof(s_sock));
- memcpy(&s_sock.sin_addr, host->h_addr, sizeof(s_sock.sin_addr));
- s_sock.sin_family = AF_INET;
- if (port)
- s_sock.sin_port = port;
- else
- s_sock.sin_port = k_getportbyname (service, "tcp", htons(SAMPLE_PORT));
-
- if (gethostname(myhostname, sizeof(myhostname)) < 0) {
- warn("gethostname");
- return 1;
- }
-
- if ((host = gethostbyname(myhostname)) == NULL) {
- fprintf(stderr, "%s: unknown host\n", myhostname);
- return 1;
- }
-
- /* Open a socket */
- if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- warn("socket SOCK_DGRAM");
- return 1;
- }
-
- memset(&c_sock, 0, sizeof(c_sock));
- memcpy(&c_sock.sin_addr, host->h_addr, sizeof(c_sock.sin_addr));
- c_sock.sin_family = AF_INET;
-
- /* Bind it to set the address; kernel will fill in port # */
- if (bind(sock, (struct sockaddr *)&c_sock, sizeof(c_sock)) < 0) {
- warn("bind");
- return 1;
- }
-
- /* Get local realm, not needed, just an example */
- if ((i = krb_get_lrealm(c_realm, 1)) != KSUCCESS) {
- fprintf(stderr, "can't find local Kerberos realm\n");
- return 1;
- }
- printf("Local Kerberos realm is %s\n", c_realm);
-
- /* Get Kerberos realm of host */
- s_realm = krb_realmofhost(hostname);
-
- /* PREPARE KRB_MK_REQ MESSAGE */
-
- /* Get credentials for server, create krb_mk_req message */
- if ((i = krb_mk_req(ktxt, service, hostname, s_realm, cksum))
- != KSUCCESS) {
- fprintf(stderr, "%s\n", krb_get_err_text(i));
- return 1;
- }
- printf("Got credentials for %s.\n", service);
-
- /* Send authentication info to server */
- i = sendto(sock, (char *)ktxt->dat, ktxt->length, flags,
- (struct sockaddr *)&s_sock, sizeof(s_sock));
- if (i < 0)
- warn("sending datagram message");
- printf("Sent authentication data: %d bytes\n", i);
-
- /* PREPARE KRB_MK_SAFE MESSAGE */
-
- /* Get my address */
- memset(&c_sock, 0, sizeof(c_sock));
- i = sizeof(c_sock);
- if (getsockname(sock, (struct sockaddr *)&c_sock, &i) < 0) {
- warn("getsockname");
- return 1;
- }
-
- /* Get session key */
- i = krb_get_cred(service, hostname, s_realm, cred);
- if (i != KSUCCESS)
- return 1;
-
- /* Make the safe message */
- len = krb_mk_safe(MSG, ktxt->dat, strlen(MSG)+1,
- &cred->session, &c_sock, &s_sock);
-
- /* Send it */
- i = sendto(sock, (char *)ktxt->dat, (int) len, flags,
- (struct sockaddr *)&s_sock, sizeof(s_sock));
- if (i < 0)
- warn("sending safe message");
- printf("Sent checksummed message: %d bytes\n", i);
-
- /* PREPARE KRB_MK_PRIV MESSAGE */
-
-#ifdef NOENCRYPTION
- memset(sched, 0, sizeof(sched));
-#else
- /* Get key schedule for session key */
- des_key_sched(&cred->session, sched);
-#endif
-
- /* Make the encrypted message */
- len = krb_mk_priv(MSG, ktxt->dat, strlen(MSG)+1,
- sched, &cred->session, &c_sock, &s_sock);
-
- /* Send it */
- i = sendto(sock, (char *)ktxt->dat, (int) len, flags,
- (struct sockaddr *)&s_sock, sizeof(s_sock));
- if (i < 0)
- warn("sending encrypted message");
- printf("Sent encrypted message: %d bytes\n", i);
- return 0;
-}
-
-static void
-usage (void)
-{
- fprintf (stderr, "Usage: %s [-s service] [-p port] hostname\n",
- __progname);
- exit (1);
-}
-
-int
-main(int argc, char **argv)
-{
- int ret = 0;
- int port = 0;
- char service[SNAME_SZ];
- struct servent *serv;
- int c;
-
- set_progname (argv[0]);
-
- strlcpy (service, SAMPLE_SERVICE, sizeof(service));
-
- while ((c = getopt(argc, argv, "s:p:")) != -1)
- switch(c) {
- case 's' :
- strlcpy (service, optarg, sizeof(service));
- break;
- case 'p' :
- serv = getservbyname (optarg, "tcp");
- if (serv)
- port = serv->s_port;
- else
- port = htons(atoi(optarg));
- break;
- case '?' :
- default :
- usage();
- }
-
- argc -= optind;
- argv += optind;
-
- while (argc-- > 0)
- ret &= talkto (*argv++, service, port);
- return ret;
-}
OpenPOWER on IntegriCloud