1 /* 2 * $Source: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v $ 3 * $Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 89/07/25 15:38:44 kfall Exp Locker: kfall $ 4 */ 5 6 #ifndef lint 7 static char *rcsid_kcmd_c = 8 "$Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 89/07/25 15:38:44 kfall Exp Locker: kfall $"; 9 #endif lint 10 #define LIBC_SCCS 11 12 /* 13 * Copyright (c) 1989 The Regents of the University of California. 14 * All rights reserved. 15 * 16 * Redistribution and use in source and binary forms are permitted 17 * provided that the above copyright notice and this paragraph are 18 * duplicated in all such forms and that any documentation, 19 * advertising materials, and other materials related to such 20 * distribution and use acknowledge that the software was developed 21 * by the University of California, Berkeley. The name of the 22 * University may not be used to endorse or promote products derived 23 * from this software without specific prior written permission. 24 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 25 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 26 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 27 */ 28 29 #ifndef lint 30 static char sccsid[] = "@(#)krcmd.c 1.3 (Berkeley) 2/10/89"; 31 #endif /* not lint */ 32 33 #include <sys/types.h> 34 #include <stdio.h> 35 #include <kerberosIV/des.h> 36 #include <kerberosIV/krb.h> 37 38 #define SERVICE_NAME "rcmd" 39 40 /* 41 * krcmd: simplified version of Athena's "kcmd" 42 * returns a socket attached to the destination, -1 or krb error on error 43 * if fd2p is non-NULL, another socket is filled in for it 44 */ 45 46 int 47 krcmd(ahost, rport, remuser, cmd, fd2p, realm) 48 char **ahost; 49 u_short rport; 50 char *remuser, *cmd; 51 int *fd2p; 52 char *realm; 53 { 54 int sock = -1, err = 0; 55 KTEXT_ST ticket; 56 long authopts = 0L; 57 58 err = kcmd( 59 &sock, 60 ahost, 61 rport, 62 NULL, /* locuser not used */ 63 remuser, 64 cmd, 65 fd2p, 66 &ticket, 67 SERVICE_NAME, 68 realm, 69 (CREDENTIALS *) NULL, /* credentials not used */ 70 (bit_64 *) NULL, /* key schedule not used */ 71 (MSG_DAT *) NULL, /* MSG_DAT not used */ 72 (struct sockaddr_in *) NULL, /* local addr not used */ 73 (struct sockaddr_in *) NULL, /* foreign addr not used */ 74 authopts 75 ); 76 77 if (err > KSUCCESS && err < MAX_KRB_ERRORS) { 78 fprintf(stderr, "krcmd: %s\n", krb_err_txt[err]); 79 return(-1); 80 } 81 if (err < 0) 82 return(-1); 83 return(sock); 84 } 85 86 #include <sys/socket.h> 87 #include <netinet/in.h> 88 89 int 90 krcmd_mutual(ahost, rport, remuser, cmd, fd2p, realm, cred, sched) 91 char **ahost; 92 u_short rport; 93 char *remuser, *cmd; 94 int *fd2p; 95 char *realm; 96 CREDENTIALS *cred; 97 Key_schedule sched; 98 { 99 int sock, err; 100 KTEXT_ST ticket; 101 MSG_DAT msg_dat; 102 struct sockaddr_in laddr, faddr; 103 long authopts = KOPT_DO_MUTUAL; 104 105 err = kcmd( 106 &sock, 107 ahost, 108 rport, 109 NULL, /* locuser not used */ 110 remuser, 111 cmd, 112 fd2p, 113 &ticket, 114 SERVICE_NAME, 115 realm, 116 cred, /* filled in */ 117 sched, /* filled in */ 118 &msg_dat, /* filled in */ 119 &laddr, /* filled in */ 120 &faddr, /* filled in */ 121 authopts 122 ); 123 124 if (err > KSUCCESS && err < MAX_KRB_ERRORS) { 125 fprintf(stderr, "krcmd_mutual: %s\n", krb_err_txt[err]); 126 return(-1); 127 } 128 129 if (err < 0) 130 return (-1); 131 return(sock); 132 } 133