1 /* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * %sccs.include.redist.c% 6 */ 7 8 #ifndef lint 9 static char sccsid[] = "@(#)krcmd.c 8.1 (Berkeley) 06/06/93"; 10 #endif /* not lint */ 11 12 /* 13 * $Source: /usr/src/usr.bin/rlogin/RCS/krcmd.c,v $ 14 * $Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 15 * 89/07/25 15:38:44 kfall Exp Locker: kfall $ 16 * static char *rcsid_kcmd_c = 17 * "$Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 89/07/25 15:38:44 18 * kfall Exp Locker: kfall $"; 19 */ 20 21 #ifdef KERBEROS 22 #include <sys/types.h> 23 #ifdef CRYPT 24 #include <sys/socket.h> 25 #endif 26 27 #include <netinet/in.h> 28 29 #include <kerberosIV/des.h> 30 #include <kerberosIV/krb.h> 31 32 #include <stdio.h> 33 34 #define SERVICE_NAME "rcmd" 35 36 int kcmd __P((int *, char **, u_short, char *, char *, char *, int *, 37 KTEXT, char *, char *, CREDENTIALS *, Key_schedule, MSG_DAT *, 38 struct sockaddr_in *, struct sockaddr_in *, long)); 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 #ifdef CRYPT 87 int 88 krcmd_mutual(ahost, rport, remuser, cmd, fd2p, realm, cred, sched) 89 char **ahost; 90 u_short rport; 91 char *remuser, *cmd; 92 int *fd2p; 93 char *realm; 94 CREDENTIALS *cred; 95 Key_schedule sched; 96 { 97 int sock, err; 98 KTEXT_ST ticket; 99 MSG_DAT msg_dat; 100 struct sockaddr_in laddr, faddr; 101 long authopts = KOPT_DO_MUTUAL; 102 103 err = kcmd( 104 &sock, 105 ahost, 106 rport, 107 NULL, /* locuser not used */ 108 remuser, 109 cmd, 110 fd2p, 111 &ticket, 112 SERVICE_NAME, 113 realm, 114 cred, /* filled in */ 115 sched, /* filled in */ 116 &msg_dat, /* filled in */ 117 &laddr, /* filled in */ 118 &faddr, /* filled in */ 119 authopts 120 ); 121 122 if (err > KSUCCESS && err < MAX_KRB_ERRORS) { 123 fprintf(stderr, "krcmd_mutual: %s\n", krb_err_txt[err]); 124 return(-1); 125 } 126 127 if (err < 0) 128 return (-1); 129 return(sock); 130 } 131 #endif /* CRYPT */ 132 #endif /* KERBEROS */ 133