]> git.saurik.com Git - apple/network_cmds.git/blob - rlogin.tproj/krcmd.c
d5cab341d3c57b763b0cbf9554fc2d113538c143
[apple/network_cmds.git] / rlogin.tproj / krcmd.c
1 /*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
7 *
8 * This file contains Original Code and/or Modifications of Original Code
9 * as defined in and that are subject to the Apple Public Source License
10 * Version 2.0 (the 'License'). You may not use this file except in
11 * compliance with the License. Please obtain a copy of the License at
12 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * file.
14 *
15 * The Original Code and all software distributed under the License are
16 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
17 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
18 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
20 * Please see the License for the specific language governing rights and
21 * limitations under the License.
22 *
23 * @APPLE_LICENSE_HEADER_END@
24 */
25 /*
26 * Copyright (c) 1989, 1993
27 * The Regents of the University of California. All rights reserved.
28 *
29 * Redistribution and use in source and binary forms, with or without
30 * modification, are permitted provided that the following conditions
31 * are met:
32 * 1. Redistributions of source code must retain the above copyright
33 * notice, this list of conditions and the following disclaimer.
34 * 2. Redistributions in binary form must reproduce the above copyright
35 * notice, this list of conditions and the following disclaimer in the
36 * documentation and/or other materials provided with the distribution.
37 * 3. All advertising materials mentioning features or use of this software
38 * must display the following acknowledgement:
39 * This product includes software developed by the University of
40 * California, Berkeley and its contributors.
41 * 4. Neither the name of the University nor the names of its contributors
42 * may be used to endorse or promote products derived from this software
43 * without specific prior written permission.
44 *
45 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
46 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
49 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
51 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
53 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
55 * SUCH DAMAGE.
56 */
57
58
59 /*
60 * $Source: /cvs/root/network_cmds/rlogin.tproj/krcmd.c,v $
61 * $Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1
62 * 89/07/25 15:38:44 kfall Exp Locker: kfall $
63 * static char *rcsid_kcmd_c =
64 * "$Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 89/07/25 15:38:44
65 * kfall Exp Locker: kfall $";
66 */
67
68 #ifdef KERBEROS
69 #include <sys/types.h>
70 #ifdef CRYPT
71 #include <sys/socket.h>
72 #endif
73
74 #include <netinet/in.h>
75
76 #include <kerberosIV/des.h>
77 #include <kerberosIV/krb.h>
78
79 #include <stdio.h>
80
81 #define SERVICE_NAME "rcmd"
82
83 int kcmd __P((int *, char **, u_short, char *, char *, char *, int *,
84 KTEXT, char *, char *, CREDENTIALS *, Key_schedule, MSG_DAT *,
85 struct sockaddr_in *, struct sockaddr_in *, long));
86
87 /*
88 * krcmd: simplified version of Athena's "kcmd"
89 * returns a socket attached to the destination, -1 or krb error on error
90 * if fd2p is non-NULL, another socket is filled in for it
91 */
92
93 int
94 krcmd(ahost, rport, remuser, cmd, fd2p, realm)
95 char **ahost;
96 u_short rport;
97 char *remuser, *cmd;
98 int *fd2p;
99 char *realm;
100 {
101 int sock = -1, err = 0;
102 KTEXT_ST ticket;
103 long authopts = 0L;
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 (CREDENTIALS *) NULL, /* credentials not used */
117 (bit_64 *) NULL, /* key schedule not used */
118 (MSG_DAT *) NULL, /* MSG_DAT not used */
119 (struct sockaddr_in *) NULL, /* local addr not used */
120 (struct sockaddr_in *) NULL, /* foreign addr not used */
121 authopts
122 );
123
124 if (err > KSUCCESS && err < MAX_KRB_ERRORS) {
125 fprintf(stderr, "krcmd: %s\n", krb_err_txt[err]);
126 return(-1);
127 }
128 if (err < 0)
129 return(-1);
130 return(sock);
131 }
132
133 #ifdef CRYPT
134 int
135 krcmd_mutual(ahost, rport, remuser, cmd, fd2p, realm, cred, sched)
136 char **ahost;
137 u_short rport;
138 char *remuser, *cmd;
139 int *fd2p;
140 char *realm;
141 CREDENTIALS *cred;
142 Key_schedule sched;
143 {
144 int sock, err;
145 KTEXT_ST ticket;
146 MSG_DAT msg_dat;
147 struct sockaddr_in laddr, faddr;
148 long authopts = KOPT_DO_MUTUAL;
149
150 err = kcmd(
151 &sock,
152 ahost,
153 rport,
154 NULL, /* locuser not used */
155 remuser,
156 cmd,
157 fd2p,
158 &ticket,
159 SERVICE_NAME,
160 realm,
161 cred, /* filled in */
162 sched, /* filled in */
163 &msg_dat, /* filled in */
164 &laddr, /* filled in */
165 &faddr, /* filled in */
166 authopts
167 );
168
169 if (err > KSUCCESS && err < MAX_KRB_ERRORS) {
170 fprintf(stderr, "krcmd_mutual: %s\n", krb_err_txt[err]);
171 return(-1);
172 }
173
174 if (err < 0)
175 return (-1);
176 return(sock);
177 }
178 #endif /* CRYPT */
179 #endif /* KERBEROS */