28 |
*/ |
*/ |
29 |
|
|
30 |
#ifndef lint |
#ifndef lint |
31 |
static char sccsid[] = "@(#)krcmd.c 8.1 (Berkeley) 6/6/93"; |
static char sccsid[] = "@(#)krcmd.c 8.1 (Berkeley) 6/6/93"; |
32 |
#endif /* not lint */ |
#endif /* not lint */ |
33 |
|
|
34 |
/* |
/* |
44 |
#include <config.h> |
#include <config.h> |
45 |
#endif |
#endif |
46 |
|
|
47 |
#ifdef KERBEROS |
#if defined(KERBEROS) || defined(SHISHI) |
48 |
#include <sys/types.h> |
#include <sys/types.h> |
49 |
#ifdef ENCRYPTION |
#ifdef ENCRYPTION |
50 |
#include <sys/socket.h> |
#include <sys/socket.h> |
52 |
|
|
53 |
#include <netinet/in.h> |
#include <netinet/in.h> |
54 |
|
|
55 |
|
#ifdef KERBEROS |
56 |
#include <kerberosIV/des.h> |
#include <kerberosIV/des.h> |
57 |
#include <kerberosIV/krb.h> |
#include <kerberosIV/krb.h> |
58 |
|
#elif defined(SHISHI) |
59 |
|
#include <shishi.h> |
60 |
|
#include "shishi_def.h" |
61 |
|
#endif |
62 |
|
|
63 |
#include <stdio.h> |
#include <stdio.h> |
64 |
|
|
65 |
#define SERVICE_NAME "rcmd" |
#define SERVICE_NAME "rcmd" |
66 |
|
|
67 |
int kcmd __P((int *, char **, u_short, char *, char *, char *, int *, |
#if defined(SHISHI) |
68 |
KTEXT, char *, char *, CREDENTIALS *, Key_schedule, MSG_DAT *, |
int kcmd __P ((Shishi **, int *, char **, u_short, char *, char **, |
69 |
struct sockaddr_in *, struct sockaddr_in *, long)); |
char *, int *, char *, char *, Shishi_key **, |
70 |
|
struct sockaddr_in *, struct sockaddr_in *, long)); |
71 |
|
#else |
72 |
|
int kcmd __P ((int *, char **, u_short, char *, char *, char *, int *, |
73 |
|
KTEXT, char *, char *, CREDENTIALS *, Key_schedule, |
74 |
|
MSG_DAT *, |
75 |
|
struct sockaddr_in *, struct sockaddr_in *, long)); |
76 |
|
#endif |
77 |
|
|
78 |
/* |
/* |
79 |
* krcmd: simplified version of Athena's "kcmd" |
* krcmd: simplified version of Athena's "kcmd" |
81 |
* if fd2p is non-NULL, another socket is filled in for it |
* if fd2p is non-NULL, another socket is filled in for it |
82 |
*/ |
*/ |
83 |
|
|
84 |
|
#if defined(SHISHI) |
85 |
|
int |
86 |
|
krcmd (Shishi ** h, char **ahost, u_short rport, char **remuser, char *cmd, |
87 |
|
int *fd2p, char *realm) |
88 |
|
{ |
89 |
|
int sock = -1, err = 0; |
90 |
|
long authopts = 0L; |
91 |
|
|
92 |
|
err = kcmd (h, &sock, ahost, rport, NULL, /* locuser not used */ |
93 |
|
remuser, cmd, fd2p, SERVICE_NAME, realm, |
94 |
|
NULL, /* key schedule not used */ |
95 |
|
NULL, /* local addr not used */ |
96 |
|
NULL, /* foreign addr not used */ |
97 |
|
authopts); |
98 |
|
|
99 |
|
if (err > SHISHI_OK) |
100 |
|
{ |
101 |
|
fprintf (stderr, "krcmd: %s\n", "error"); |
102 |
|
return (-1); |
103 |
|
} |
104 |
|
if (err < 0) |
105 |
|
return (-1); |
106 |
|
return (sock); |
107 |
|
} |
108 |
|
|
109 |
|
#elif defined(KERBEROS) |
110 |
int |
int |
111 |
krcmd(ahost, rport, remuser, cmd, fd2p, realm) |
krcmd (char **ahost, u_short rport, char *remuser, char *cmd, int *fd2p, |
112 |
char **ahost; |
char *realm) |
|
u_short rport; |
|
|
char *remuser, *cmd; |
|
|
int *fd2p; |
|
|
char *realm; |
|
113 |
{ |
{ |
114 |
int sock = -1, err = 0; |
int sock = -1, err = 0; |
115 |
KTEXT_ST ticket; |
KTEXT_ST ticket; |
116 |
long authopts = 0L; |
long authopts = 0L; |
117 |
|
|
118 |
err = kcmd( |
err = kcmd (&sock, ahost, rport, NULL, /* locuser not used */ |
119 |
&sock, |
remuser, cmd, fd2p, &ticket, SERVICE_NAME, realm, |
120 |
ahost, |
NULL, /* credentials not used */ |
121 |
rport, |
(bit_64 *) NULL, /* key schedule not used */ |
122 |
NULL, /* locuser not used */ |
(MSG_DAT *) NULL, /* MSG_DAT not used */ |
123 |
remuser, |
(struct sockaddr_in *) NULL, /* local addr not used */ |
124 |
cmd, |
(struct sockaddr_in *) NULL, /* foreign addr not used */ |
125 |
fd2p, |
authopts); |
126 |
&ticket, |
|
127 |
SERVICE_NAME, |
if (err > KSUCCESS && err < MAX_KRB_ERRORS) |
128 |
realm, |
{ |
129 |
(CREDENTIALS *) NULL, /* credentials not used */ |
fprintf (stderr, "krcmd: %s\n", krb_err_txt[err]); |
130 |
(bit_64 *) NULL, /* key schedule not used */ |
return (-1); |
131 |
(MSG_DAT *) NULL, /* MSG_DAT not used */ |
} |
132 |
(struct sockaddr_in *) NULL, /* local addr not used */ |
if (err < 0) |
133 |
(struct sockaddr_in *) NULL, /* foreign addr not used */ |
return (-1); |
134 |
authopts |
return (sock); |
|
); |
|
|
|
|
|
if (err > KSUCCESS && err < MAX_KRB_ERRORS) { |
|
|
fprintf(stderr, "krcmd: %s\n", krb_err_txt[err]); |
|
|
return(-1); |
|
|
} |
|
|
if (err < 0) |
|
|
return(-1); |
|
|
return(sock); |
|
135 |
} |
} |
136 |
|
#endif |
137 |
|
|
138 |
#ifdef ENCRYPTION |
#ifdef ENCRYPTION |
139 |
|
|
140 |
|
#if defined(SHISHI) |
141 |
|
int |
142 |
|
krcmd_mutual (Shishi ** h, char **ahost, u_short rport, char **remuser, |
143 |
|
char *cmd, int *fd2p, char *realm, Shishi_key ** key) |
144 |
|
{ |
145 |
|
int sock = -1, err = 0; |
146 |
|
struct sockaddr_in laddr, faddr; |
147 |
|
long authopts = SHISHI_APOPTIONS_MUTUAL_REQUIRED; |
148 |
|
|
149 |
|
err = kcmd (h, &sock, ahost, rport, NULL, /* locuser not used */ |
150 |
|
remuser, cmd, fd2p, SERVICE_NAME, realm, |
151 |
|
key, /* filled in */ |
152 |
|
&laddr, /* filled in */ |
153 |
|
&faddr, /* filled in */ |
154 |
|
authopts); |
155 |
|
|
156 |
|
if (err > SHISHI_OK) |
157 |
|
{ |
158 |
|
fprintf (stderr, "krcmd_mutual: %s\n", "error"); |
159 |
|
return (-1); |
160 |
|
} |
161 |
|
|
162 |
|
if (err < 0) |
163 |
|
return (-1); |
164 |
|
return (sock); |
165 |
|
} |
166 |
|
|
167 |
|
#elif defined(KERBEROS) |
168 |
int |
int |
169 |
krcmd_mutual(ahost, rport, remuser, cmd, fd2p, realm, cred, sched) |
krcmd_mutual (char **ahost, u_short rport, char *remuser, char *cmd, |
170 |
char **ahost; |
int *fd2p, char *realm, CREDENTIALS * cred, Key_schedule sched) |
|
u_short rport; |
|
|
char *remuser, *cmd; |
|
|
int *fd2p; |
|
|
char *realm; |
|
|
CREDENTIALS *cred; |
|
|
Key_schedule sched; |
|
171 |
{ |
{ |
172 |
int sock, err; |
int sock, err; |
173 |
KTEXT_ST ticket; |
KTEXT_ST ticket; |
174 |
MSG_DAT msg_dat; |
MSG_DAT msg_dat; |
175 |
struct sockaddr_in laddr, faddr; |
struct sockaddr_in laddr, faddr; |
176 |
long authopts = KOPT_DO_MUTUAL; |
long authopts = KOPT_DO_MUTUAL; |
177 |
|
|
178 |
err = kcmd( |
err = kcmd (&sock, ahost, rport, NULL, /* locuser not used */ |
179 |
&sock, |
remuser, cmd, fd2p, &ticket, SERVICE_NAME, realm, |
180 |
ahost, |
cred, /* filled in */ |
181 |
rport, |
sched, /* filled in */ |
182 |
NULL, /* locuser not used */ |
&msg_dat, /* filled in */ |
183 |
remuser, |
&laddr, /* filled in */ |
184 |
cmd, |
&faddr, /* filled in */ |
185 |
fd2p, |
authopts); |
186 |
&ticket, |
|
187 |
SERVICE_NAME, |
if (err > KSUCCESS && err < MAX_KRB_ERRORS) |
188 |
realm, |
{ |
189 |
cred, /* filled in */ |
fprintf (stderr, "krcmd_mutual: %s\n", krb_err_txt[err]); |
190 |
sched, /* filled in */ |
return (-1); |
191 |
&msg_dat, /* filled in */ |
} |
192 |
&laddr, /* filled in */ |
|
193 |
&faddr, /* filled in */ |
if (err < 0) |
194 |
authopts |
return (-1); |
195 |
); |
return (sock); |
|
|
|
|
if (err > KSUCCESS && err < MAX_KRB_ERRORS) { |
|
|
fprintf(stderr, "krcmd_mutual: %s\n", krb_err_txt[err]); |
|
|
return(-1); |
|
|
} |
|
|
|
|
|
if (err < 0) |
|
|
return (-1); |
|
|
return(sock); |
|
196 |
} |
} |
197 |
#endif /* CRYPT */ |
#endif /* CRYPT */ |
198 |
#endif /* KERBEROS */ |
#endif /* KERBEROS */ |
199 |
|
#endif /* KERBEROS */ |