xref: /original-bsd/usr.bin/rlogin/krcmd.c (revision 5f03794f)
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