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
krcmd(ahost,rport,remuser,cmd,fd2p,realm)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
krcmd_mutual(ahost,rport,remuser,cmd,fd2p,realm,cred,sched)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