xref: /original-bsd/usr.bin/rlogin/krcmd.c (revision 28e93ce0)
1 /*
2  * Copyright (c) 1989 The Regents of the University of California.
3  * All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 static char sccsid[] = "@(#)krcmd.c	1.7 (Berkeley) 03/04/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