diff options
author | Ben Lindstrom <mouring@eviladmin.org> | 2001-01-22 05:34:40 +0000 |
---|---|---|
committer | Ben Lindstrom <mouring@eviladmin.org> | 2001-01-22 05:34:40 +0000 |
commit | 226cfa03781466907dd252916aeade6879e376b8 (patch) | |
tree | 3251d15053db065d74994b95e17fd65874fcaa9b /ssh.h | |
parent | 401d58f3612fa030f309d01df9815a2fc1d3c6de (diff) |
Hopefully things did not get mixed around too much. It compiles under
Linux and works. So that is at least a good sign. =)
20010122
- (bal) OpenBSD Resync
- markus@cvs.openbsd.org 2001/01/19 12:45:26 GMT 2001 by markus
[servconf.c ssh.h sshd.c]
only auth-chall.c needs #ifdef SKEY
- markus@cvs.openbsd.org 2001/01/19 15:55:10 GMT 2001 by markus
[auth-krb4.c auth-options.c auth-rh-rsa.c auth-rhosts.c auth-rsa.c
auth1.c auth2.c channels.c clientloop.c dh.c dispatch.c nchan.c
packet.c pathname.h readconf.c scp.c servconf.c serverloop.c
session.c ssh-add.c ssh-keygen.c ssh-keyscan.c ssh.c ssh.h
ssh1.h sshconnect1.c sshd.c ttymodes.c]
move ssh1 definitions to ssh1.h, pathnames to pathnames.h
- markus@cvs.openbsd.org 2001/01/19 16:48:14
[sshd.8]
fix typo; from stevesk@
- markus@cvs.openbsd.org 2001/01/19 16:50:58
[ssh-dss.c]
clear and free digest, make consistent with other code (use dlen); from
stevesk@
- markus@cvs.openbsd.org 2001/01/20 15:55:20 GMT 2001 by markus
[auth-options.c auth-options.h auth-rsa.c auth2.c]
pass the filename to auth_parse_options()
- markus@cvs.openbsd.org 2001/01/20 17:59:40 GMT 2001
[readconf.c]
fix SIGSEGV from -o ""; problem noted by jehsom@togetherweb.com
- stevesk@cvs.openbsd.org 2001/01/20 18:20:29
[sshconnect2.c]
dh_new_group() does not return NULL. ok markus@
- markus@cvs.openbsd.org 2001/01/20 21:33:42
[ssh-add.c]
do not loop forever if askpass does not exist; from
andrew@pimlott.ne.mediaone.net
- djm@cvs.openbsd.org 2001/01/20 23:00:56
[servconf.c]
Check for NULL return from strdelim; ok markus
- djm@cvs.openbsd.org 2001/01/20 23:02:07
[readconf.c]
KNF; ok markus
- jakob@cvs.openbsd.org 2001/01/21 9:00:33
[ssh-keygen.1]
remove -R flag; ok markus@
- markus@cvs.openbsd.org 2001/01/21 19:05:40
[atomicio.c automicio.h auth-chall.c auth-krb4.c auth-options.c
auth-options.h auth-passwd.c auth-rh-rsa.c auth-rhosts.c auth-rsa.c
auth.c auth.h auth1.c auth2-chall.c auth2.c authfd.c authfile.c
bufaux.c bufaux.h buffer.c canahost.c canahost.h channels.c
cipher.c cli.c clientloop.c clientloop.h compat.c compress.c
deattack.c dh.c dispatch.c groupaccess.c hmac.c hostfile.c kex.c
key.c key.h log-client.c log-server.c log.c log.h login.c login.h
match.c misc.c misc.h nchan.c packet.c pty.c radix.h readconf.c
readpass.c readpass.h rsa.c scp.c servconf.c serverloop.c serverloop.h
session.c sftp-server.c ssh-add.c ssh-agent.c ssh-dss.c ssh-keygen.c
ssh-keyscan.c ssh-rsa.c ssh.c ssh.h sshconnect.c sshconnect.h
sshconnect1.c sshconnect2.c sshd.c tildexpand.c tildexpand.h
ttysmodes.c uidswap.c xmalloc.c]
split ssh.h and try to cleanup the #include mess. remove unnecessary
#includes. rename util.[ch] -> misc.[ch]
- (bal) renamed 'PIDDIR' to '_PATH_SSH_PIDDIR' to match OpenBSD tree
- (bal) Moved #ifdef KRB4 in auth-krb4.c above the #include to resolve
conflict when compiling for non-kerb install
- (bal) removed the #ifdef SKEY in auth1.c to match Markus' changes
on 1/19.
Diffstat (limited to 'ssh.h')
-rw-r--r-- | ssh.h | 467 |
1 files changed, 7 insertions, 460 deletions
@@ -3,8 +3,6 @@ | |||
3 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 3 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
4 | * All rights reserved | 4 | * All rights reserved |
5 | * | 5 | * |
6 | * Generic header file for ssh. | ||
7 | * | ||
8 | * As far as I am concerned, the code I have written for this software | 6 | * As far as I am concerned, the code I have written for this software |
9 | * can be used freely for any purpose. Any derived versions of this | 7 | * can be used freely for any purpose. Any derived versions of this |
10 | * software must be clearly marked as such, and if the derived work is | 8 | * software must be clearly marked as such, and if the derived work is |
@@ -12,7 +10,7 @@ | |||
12 | * called by a name other than "ssh" or "Secure Shell". | 10 | * called by a name other than "ssh" or "Secure Shell". |
13 | */ | 11 | */ |
14 | 12 | ||
15 | /* RCSID("$OpenBSD: ssh.h,v 1.59 2001/01/19 12:45:27 markus Exp $"); */ | 13 | /* RCSID("$OpenBSD: ssh.h,v 1.61 2001/01/21 19:05:59 markus Exp $"); */ |
16 | 14 | ||
17 | #ifndef SSH_H | 15 | #ifndef SSH_H |
18 | #define SSH_H | 16 | #define SSH_H |
@@ -26,8 +24,9 @@ | |||
26 | #ifdef HAVE_SYS_SELECT_H | 24 | #ifdef HAVE_SYS_SELECT_H |
27 | # include <sys/select.h> | 25 | # include <sys/select.h> |
28 | #endif | 26 | #endif |
29 | #include "rsa.h" | 27 | |
30 | #include "cipher.h" | 28 | //#include "rsa.h" |
29 | //#include "cipher.h" | ||
31 | 30 | ||
32 | /* Cipher used for encrypting authentication files. */ | 31 | /* Cipher used for encrypting authentication files. */ |
33 | #define SSH_AUTHFILE_CIPHER SSH_CIPHER_3DES | 32 | #define SSH_AUTHFILE_CIPHER SSH_CIPHER_3DES |
@@ -68,138 +67,21 @@ | |||
68 | # define SSHD_PAM_SERVICE "sshd" | 67 | # define SSHD_PAM_SERVICE "sshd" |
69 | #endif | 68 | #endif |
70 | 69 | ||
71 | #ifndef ETCDIR | ||
72 | #define ETCDIR "/etc" | ||
73 | #endif /* ETCDIR */ | ||
74 | |||
75 | #ifndef PIDDIR | ||
76 | #define PIDDIR "/var/run" | ||
77 | #endif /* PIDDIR */ | ||
78 | |||
79 | /* | ||
80 | * System-wide file containing host keys of known hosts. This file should be | ||
81 | * world-readable. | ||
82 | */ | ||
83 | #define SSH_SYSTEM_HOSTFILE ETCDIR "/ssh_known_hosts" | ||
84 | #define SSH_SYSTEM_HOSTFILE2 ETCDIR "/ssh_known_hosts2" | ||
85 | |||
86 | /* | ||
87 | * Of these, ssh_host_key must be readable only by root, whereas ssh_config | ||
88 | * should be world-readable. | ||
89 | */ | ||
90 | #define HOST_KEY_FILE ETCDIR "/ssh_host_key" | ||
91 | #define SERVER_CONFIG_FILE ETCDIR "/sshd_config" | ||
92 | #define HOST_CONFIG_FILE ETCDIR "/ssh_config" | ||
93 | #define HOST_DSA_KEY_FILE ETCDIR "/ssh_host_dsa_key" | ||
94 | #define DH_PRIMES ETCDIR "/primes" | ||
95 | |||
96 | #ifndef SSH_PROGRAM | ||
97 | #define SSH_PROGRAM "/usr/bin/ssh" | ||
98 | #endif /* SSH_PROGRAM */ | ||
99 | |||
100 | #ifndef LOGIN_PROGRAM | ||
101 | # ifdef LOGIN_PROGRAM_FALLBACK | ||
102 | # define LOGIN_PROGRAM LOGIN_PROGRAM_FALLBACK | ||
103 | # else | ||
104 | # define LOGIN_PROGRAM "/usr/bin/login" | ||
105 | # endif | ||
106 | #endif /* LOGIN_PROGRAM */ | ||
107 | |||
108 | #ifndef ASKPASS_PROGRAM | ||
109 | #define ASKPASS_PROGRAM "/usr/lib/ssh/ssh-askpass" | ||
110 | #endif /* ASKPASS_PROGRAM */ | ||
111 | |||
112 | /* | ||
113 | * The process id of the daemon listening for connections is saved here to | ||
114 | * make it easier to kill the correct daemon when necessary. | ||
115 | */ | ||
116 | #define SSH_DAEMON_PID_FILE PIDDIR "/sshd.pid" | ||
117 | |||
118 | /* | ||
119 | * The directory in user\'s home directory in which the files reside. The | ||
120 | * directory should be world-readable (though not all files are). | ||
121 | */ | ||
122 | #define SSH_USER_DIR ".ssh" | ||
123 | |||
124 | /* | ||
125 | * Relevant only when using builtin PRNG. | ||
126 | */ | ||
127 | #ifndef SSH_PRNG_SEED_FILE | ||
128 | # define SSH_PRNG_SEED_FILE SSH_USER_DIR"/prng_seed" | ||
129 | #endif /* SSH_PRNG_SEED_FILE */ | ||
130 | #ifndef SSH_PRNG_COMMAND_FILE | ||
131 | # define SSH_PRNG_COMMAND_FILE ETCDIR "/ssh_prng_cmds" | ||
132 | #endif /* SSH_PRNG_COMMAND_FILE */ | ||
133 | |||
134 | /* | ||
135 | * Per-user file containing host keys of known hosts. This file need not be | ||
136 | * readable by anyone except the user him/herself, though this does not | ||
137 | * contain anything particularly secret. | ||
138 | */ | ||
139 | #define SSH_USER_HOSTFILE "~/.ssh/known_hosts" | ||
140 | #define SSH_USER_HOSTFILE2 "~/.ssh/known_hosts2" | ||
141 | |||
142 | /* | ||
143 | * Name of the default file containing client-side authentication key. This | ||
144 | * file should only be readable by the user him/herself. | ||
145 | */ | ||
146 | #define SSH_CLIENT_IDENTITY ".ssh/identity" | ||
147 | #define SSH_CLIENT_ID_DSA ".ssh/id_dsa" | ||
148 | #define SSH_CLIENT_ID_RSA ".ssh/id_rsa" | ||
149 | |||
150 | /* | ||
151 | * Configuration file in user\'s home directory. This file need not be | ||
152 | * readable by anyone but the user him/herself, but does not contain anything | ||
153 | * particularly secret. If the user\'s home directory resides on an NFS | ||
154 | * volume where root is mapped to nobody, this may need to be world-readable. | ||
155 | */ | ||
156 | #define SSH_USER_CONFFILE ".ssh/config" | ||
157 | |||
158 | /* | ||
159 | * File containing a list of those rsa keys that permit logging in as this | ||
160 | * user. This file need not be readable by anyone but the user him/herself, | ||
161 | * but does not contain anything particularly secret. If the user\'s home | ||
162 | * directory resides on an NFS volume where root is mapped to nobody, this | ||
163 | * may need to be world-readable. (This file is read by the daemon which is | ||
164 | * running as root.) | ||
165 | */ | ||
166 | #define SSH_USER_PERMITTED_KEYS ".ssh/authorized_keys" | ||
167 | #define SSH_USER_PERMITTED_KEYS2 ".ssh/authorized_keys2" | ||
168 | |||
169 | /* | ||
170 | * Per-user and system-wide ssh "rc" files. These files are executed with | ||
171 | * /bin/sh before starting the shell or command if they exist. They will be | ||
172 | * passed "proto cookie" as arguments if X11 forwarding with spoofing is in | ||
173 | * use. xauth will be run if neither of these exists. | ||
174 | */ | ||
175 | #define SSH_USER_RC ".ssh/rc" | ||
176 | #define SSH_SYSTEM_RC ETCDIR "/sshrc" | ||
177 | |||
178 | /* | ||
179 | * Ssh-only version of /etc/hosts.equiv. Additionally, the daemon may use | ||
180 | * ~/.rhosts and /etc/hosts.equiv if rhosts authentication is enabled. | ||
181 | */ | ||
182 | #define SSH_HOSTS_EQUIV ETCDIR "/shosts.equiv" | ||
183 | |||
184 | /* | 70 | /* |
185 | * Name of the environment variable containing the pathname of the | 71 | * Name of the environment variable containing the pathname of the |
186 | * authentication socket. | 72 | * authentication socket. |
187 | */ | 73 | */ |
188 | #define SSH_AUTHSOCKET_ENV_NAME "SSH_AUTH_SOCK" | 74 | #define SSH_AGENTPID_ENV_NAME "SSH_AGENT_PID" |
189 | 75 | ||
190 | /* | 76 | /* |
191 | * Name of the environment variable containing the pathname of the | 77 | * Name of the environment variable containing the pathname of the |
192 | * authentication socket. | 78 | * authentication socket. |
193 | */ | 79 | */ |
194 | #define SSH_AGENTPID_ENV_NAME "SSH_AGENT_PID" | 80 | #define SSH_AUTHSOCKET_ENV_NAME "SSH_AUTH_SOCK" |
195 | 81 | ||
196 | /* | 82 | /* |
197 | * Default path to ssh-askpass used by ssh-add, | 83 | * Environment variable for overwriting the default location of askpass |
198 | * environment variable for overwriting the default location | ||
199 | */ | 84 | */ |
200 | #ifndef SSH_ASKPASS_DEFAULT | ||
201 | # define SSH_ASKPASS_DEFAULT "/usr/X11R6/bin/ssh-askpass" | ||
202 | #endif | ||
203 | #define SSH_ASKPASS_ENV "SSH_ASKPASS" | 85 | #define SSH_ASKPASS_ENV "SSH_ASKPASS" |
204 | 86 | ||
205 | /* | 87 | /* |
@@ -217,339 +99,4 @@ | |||
217 | /* Name of Kerberos service for SSH to use. */ | 99 | /* Name of Kerberos service for SSH to use. */ |
218 | #define KRB4_SERVICE_NAME "rcmd" | 100 | #define KRB4_SERVICE_NAME "rcmd" |
219 | 101 | ||
220 | /* | ||
221 | * Authentication methods. New types can be added, but old types should not | ||
222 | * be removed for compatibility. The maximum allowed value is 31. | ||
223 | */ | ||
224 | #define SSH_AUTH_RHOSTS 1 | ||
225 | #define SSH_AUTH_RSA 2 | ||
226 | #define SSH_AUTH_PASSWORD 3 | ||
227 | #define SSH_AUTH_RHOSTS_RSA 4 | ||
228 | #define SSH_AUTH_TIS 5 | ||
229 | #define SSH_AUTH_KERBEROS 6 | ||
230 | #define SSH_PASS_KERBEROS_TGT 7 | ||
231 | /* 8 to 15 are reserved */ | ||
232 | #define SSH_PASS_AFS_TOKEN 21 | ||
233 | |||
234 | /* Protocol flags. These are bit masks. */ | ||
235 | #define SSH_PROTOFLAG_SCREEN_NUMBER 1 /* X11 forwarding includes screen */ | ||
236 | #define SSH_PROTOFLAG_HOST_IN_FWD_OPEN 2 /* forwarding opens contain host */ | ||
237 | |||
238 | /* | ||
239 | * Definition of message types. New values can be added, but old values | ||
240 | * should not be removed or without careful consideration of the consequences | ||
241 | * for compatibility. The maximum value is 254; value 255 is reserved for | ||
242 | * future extension. | ||
243 | */ | ||
244 | /* Message name */ /* msg code */ /* arguments */ | ||
245 | #define SSH_MSG_NONE 0 /* no message */ | ||
246 | #define SSH_MSG_DISCONNECT 1 /* cause (string) */ | ||
247 | #define SSH_SMSG_PUBLIC_KEY 2 /* ck,msk,srvk,hostk */ | ||
248 | #define SSH_CMSG_SESSION_KEY 3 /* key (BIGNUM) */ | ||
249 | #define SSH_CMSG_USER 4 /* user (string) */ | ||
250 | #define SSH_CMSG_AUTH_RHOSTS 5 /* user (string) */ | ||
251 | #define SSH_CMSG_AUTH_RSA 6 /* modulus (BIGNUM) */ | ||
252 | #define SSH_SMSG_AUTH_RSA_CHALLENGE 7 /* int (BIGNUM) */ | ||
253 | #define SSH_CMSG_AUTH_RSA_RESPONSE 8 /* int (BIGNUM) */ | ||
254 | #define SSH_CMSG_AUTH_PASSWORD 9 /* pass (string) */ | ||
255 | #define SSH_CMSG_REQUEST_PTY 10 /* TERM, tty modes */ | ||
256 | #define SSH_CMSG_WINDOW_SIZE 11 /* row,col,xpix,ypix */ | ||
257 | #define SSH_CMSG_EXEC_SHELL 12 /* */ | ||
258 | #define SSH_CMSG_EXEC_CMD 13 /* cmd (string) */ | ||
259 | #define SSH_SMSG_SUCCESS 14 /* */ | ||
260 | #define SSH_SMSG_FAILURE 15 /* */ | ||
261 | #define SSH_CMSG_STDIN_DATA 16 /* data (string) */ | ||
262 | #define SSH_SMSG_STDOUT_DATA 17 /* data (string) */ | ||
263 | #define SSH_SMSG_STDERR_DATA 18 /* data (string) */ | ||
264 | #define SSH_CMSG_EOF 19 /* */ | ||
265 | #define SSH_SMSG_EXITSTATUS 20 /* status (int) */ | ||
266 | #define SSH_MSG_CHANNEL_OPEN_CONFIRMATION 21 /* channel (int) */ | ||
267 | #define SSH_MSG_CHANNEL_OPEN_FAILURE 22 /* channel (int) */ | ||
268 | #define SSH_MSG_CHANNEL_DATA 23 /* ch,data (int,str) */ | ||
269 | #define SSH_MSG_CHANNEL_CLOSE 24 /* channel (int) */ | ||
270 | #define SSH_MSG_CHANNEL_CLOSE_CONFIRMATION 25 /* channel (int) */ | ||
271 | /* SSH_CMSG_X11_REQUEST_FORWARDING 26 OBSOLETE */ | ||
272 | #define SSH_SMSG_X11_OPEN 27 /* channel (int) */ | ||
273 | #define SSH_CMSG_PORT_FORWARD_REQUEST 28 /* p,host,hp (i,s,i) */ | ||
274 | #define SSH_MSG_PORT_OPEN 29 /* ch,h,p (i,s,i) */ | ||
275 | #define SSH_CMSG_AGENT_REQUEST_FORWARDING 30 /* */ | ||
276 | #define SSH_SMSG_AGENT_OPEN 31 /* port (int) */ | ||
277 | #define SSH_MSG_IGNORE 32 /* string */ | ||
278 | #define SSH_CMSG_EXIT_CONFIRMATION 33 /* */ | ||
279 | #define SSH_CMSG_X11_REQUEST_FORWARDING 34 /* proto,data (s,s) */ | ||
280 | #define SSH_CMSG_AUTH_RHOSTS_RSA 35 /* user,mod (s,mpi) */ | ||
281 | #define SSH_MSG_DEBUG 36 /* string */ | ||
282 | #define SSH_CMSG_REQUEST_COMPRESSION 37 /* level 1-9 (int) */ | ||
283 | #define SSH_CMSG_MAX_PACKET_SIZE 38 /* size 4k-1024k (int) */ | ||
284 | #define SSH_CMSG_AUTH_TIS 39 /* we use this for s/key */ | ||
285 | #define SSH_SMSG_AUTH_TIS_CHALLENGE 40 /* challenge (string) */ | ||
286 | #define SSH_CMSG_AUTH_TIS_RESPONSE 41 /* response (string) */ | ||
287 | #define SSH_CMSG_AUTH_KERBEROS 42 /* (KTEXT) */ | ||
288 | #define SSH_SMSG_AUTH_KERBEROS_RESPONSE 43 /* (KTEXT) */ | ||
289 | #define SSH_CMSG_HAVE_KERBEROS_TGT 44 /* credentials (s) */ | ||
290 | #define SSH_CMSG_HAVE_AFS_TOKEN 65 /* token (s) */ | ||
291 | |||
292 | /*------------ definitions for login.c -------------*/ | ||
293 | |||
294 | /* | ||
295 | * Returns the time when the user last logged in. Returns 0 if the | ||
296 | * information is not available. This must be called before record_login. | ||
297 | * The host from which the user logged in is stored in buf. | ||
298 | */ | ||
299 | u_long | ||
300 | get_last_login_time(uid_t uid, const char *logname, | ||
301 | char *buf, u_int bufsize); | ||
302 | |||
303 | /* | ||
304 | * Records that the user has logged in. This does many things normally done | ||
305 | * by login(1). | ||
306 | */ | ||
307 | void | ||
308 | record_login(pid_t pid, const char *ttyname, const char *user, uid_t uid, | ||
309 | const char *host, struct sockaddr *addr); | ||
310 | |||
311 | /* | ||
312 | * Records that the user has logged out. This does many thigs normally done | ||
313 | * by login(1) or init. | ||
314 | */ | ||
315 | void record_logout(pid_t pid, const char *ttyname); | ||
316 | |||
317 | /*------------ definitions for sshconnect.c ----------*/ | ||
318 | |||
319 | /* | ||
320 | * Opens a TCP/IP connection to the remote server on the given host. If port | ||
321 | * is 0, the default port will be used. If anonymous is zero, a privileged | ||
322 | * port will be allocated to make the connection. This requires super-user | ||
323 | * privileges if anonymous is false. Connection_attempts specifies the | ||
324 | * maximum number of tries, one per second. This returns true on success, | ||
325 | * and zero on failure. If the connection is successful, this calls | ||
326 | * packet_set_connection for the connection. | ||
327 | */ | ||
328 | int | ||
329 | ssh_connect(const char *host, struct sockaddr_storage * hostaddr, | ||
330 | u_short port, int connection_attempts, | ||
331 | int anonymous, uid_t original_real_uid, | ||
332 | const char *proxy_command); | ||
333 | |||
334 | /* | ||
335 | * Starts a dialog with the server, and authenticates the current user on the | ||
336 | * server. This does not need any extra privileges. The basic connection to | ||
337 | * the server must already have been established before this is called. If | ||
338 | * login fails, this function prints an error and never returns. This | ||
339 | * initializes the random state, and leaves it initialized (it will also have | ||
340 | * references from the packet module). | ||
341 | */ | ||
342 | |||
343 | void | ||
344 | ssh_login(int host_key_valid, RSA * host_key, const char *host, | ||
345 | struct sockaddr * hostaddr, uid_t original_real_uid); | ||
346 | |||
347 | /*------------ Definitions for various authentication methods. -------*/ | ||
348 | |||
349 | /* | ||
350 | * Tries to authenticate the user using the .rhosts file. Returns true if | ||
351 | * authentication succeeds. If ignore_rhosts is non-zero, this will not | ||
352 | * consider .rhosts and .shosts (/etc/hosts.equiv will still be used). | ||
353 | */ | ||
354 | int auth_rhosts(struct passwd * pw, const char *client_user); | ||
355 | |||
356 | /* | ||
357 | * Tries to authenticate the user using the .rhosts file and the host using | ||
358 | * its host key. Returns true if authentication succeeds. | ||
359 | */ | ||
360 | int | ||
361 | auth_rhosts_rsa(struct passwd * pw, const char *client_user, RSA* client_host_key); | ||
362 | |||
363 | /* | ||
364 | * Tries to authenticate the user using password. Returns true if | ||
365 | * authentication succeeds. | ||
366 | */ | ||
367 | int auth_password(struct passwd * pw, const char *password); | ||
368 | |||
369 | /* | ||
370 | * Performs the RSA authentication dialog with the client. This returns 0 if | ||
371 | * the client could not be authenticated, and 1 if authentication was | ||
372 | * successful. This may exit if there is a serious protocol violation. | ||
373 | */ | ||
374 | int auth_rsa(struct passwd * pw, BIGNUM * client_n); | ||
375 | |||
376 | /* | ||
377 | * Parses an RSA key (number of bits, e, n) from a string. Moves the pointer | ||
378 | * over the key. Skips any whitespace at the beginning and at end. | ||
379 | */ | ||
380 | int auth_rsa_read_key(char **cpp, u_int *bitsp, BIGNUM * e, BIGNUM * n); | ||
381 | |||
382 | /* | ||
383 | * Returns the name of the machine at the other end of the socket. The | ||
384 | * returned string should be freed by the caller. | ||
385 | */ | ||
386 | char *get_remote_hostname(int socket); | ||
387 | |||
388 | /* | ||
389 | * Return the canonical name of the host in the other side of the current | ||
390 | * connection (as returned by packet_get_connection). The host name is | ||
391 | * cached, so it is efficient to call this several times. | ||
392 | */ | ||
393 | const char *get_canonical_hostname(void); | ||
394 | |||
395 | /* | ||
396 | * Returns the remote IP address as an ascii string. The value need not be | ||
397 | * freed by the caller. | ||
398 | */ | ||
399 | const char *get_remote_ipaddr(void); | ||
400 | |||
401 | /* Returns the port number of the peer of the socket. */ | ||
402 | int get_peer_port(int sock); | ||
403 | |||
404 | /* Returns the port number of the remote/local host. */ | ||
405 | int get_remote_port(void); | ||
406 | int get_local_port(void); | ||
407 | |||
408 | |||
409 | /* | ||
410 | * Performs the RSA authentication challenge-response dialog with the client, | ||
411 | * and returns true (non-zero) if the client gave the correct answer to our | ||
412 | * challenge; returns zero if the client gives a wrong answer. | ||
413 | */ | ||
414 | int auth_rsa_challenge_dialog(RSA *pk); | ||
415 | |||
416 | /* | ||
417 | * Reads a passphrase from /dev/tty with echo turned off. Returns the | ||
418 | * passphrase (allocated with xmalloc). Exits if EOF is encountered. If | ||
419 | * from_stdin is true, the passphrase will be read from stdin instead. | ||
420 | */ | ||
421 | char *read_passphrase(const char *prompt, int from_stdin); | ||
422 | |||
423 | |||
424 | /*------------ Definitions for logging. -----------------------*/ | ||
425 | |||
426 | /* Supported syslog facilities and levels. */ | ||
427 | typedef enum { | ||
428 | SYSLOG_FACILITY_DAEMON, | ||
429 | SYSLOG_FACILITY_USER, | ||
430 | SYSLOG_FACILITY_AUTH, | ||
431 | #ifdef LOG_AUTHPRIV | ||
432 | SYSLOG_FACILITY_AUTHPRIV, | ||
433 | #endif | ||
434 | SYSLOG_FACILITY_LOCAL0, | ||
435 | SYSLOG_FACILITY_LOCAL1, | ||
436 | SYSLOG_FACILITY_LOCAL2, | ||
437 | SYSLOG_FACILITY_LOCAL3, | ||
438 | SYSLOG_FACILITY_LOCAL4, | ||
439 | SYSLOG_FACILITY_LOCAL5, | ||
440 | SYSLOG_FACILITY_LOCAL6, | ||
441 | SYSLOG_FACILITY_LOCAL7 | ||
442 | } SyslogFacility; | ||
443 | |||
444 | typedef enum { | ||
445 | SYSLOG_LEVEL_QUIET, | ||
446 | SYSLOG_LEVEL_FATAL, | ||
447 | SYSLOG_LEVEL_ERROR, | ||
448 | SYSLOG_LEVEL_INFO, | ||
449 | SYSLOG_LEVEL_VERBOSE, | ||
450 | SYSLOG_LEVEL_DEBUG1, | ||
451 | SYSLOG_LEVEL_DEBUG2, | ||
452 | SYSLOG_LEVEL_DEBUG3 | ||
453 | } LogLevel; | ||
454 | /* Initializes logging. */ | ||
455 | void log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr); | ||
456 | |||
457 | /* Logging implementation, depending on server or client */ | ||
458 | void do_log(LogLevel level, const char *fmt, va_list args); | ||
459 | |||
460 | /* name to facility/level */ | ||
461 | SyslogFacility log_facility_number(char *name); | ||
462 | LogLevel log_level_number(char *name); | ||
463 | |||
464 | /* Output a message to syslog or stderr */ | ||
465 | void fatal(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
466 | void error(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
467 | void log(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
468 | void verbose(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
469 | void debug(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
470 | void debug2(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
471 | void debug3(const char *fmt,...) __attribute__((format(printf, 1, 2))); | ||
472 | |||
473 | /* same as fatal() but w/o logging */ | ||
474 | void fatal_cleanup(void); | ||
475 | |||
476 | /* | ||
477 | * Registers a cleanup function to be called by fatal()/fatal_cleanup() | ||
478 | * before exiting. It is permissible to call fatal_remove_cleanup for the | ||
479 | * function itself from the function. | ||
480 | */ | ||
481 | void fatal_add_cleanup(void (*proc) (void *context), void *context); | ||
482 | |||
483 | /* Removes a cleanup function to be called at fatal(). */ | ||
484 | void fatal_remove_cleanup(void (*proc) (void *context), void *context); | ||
485 | |||
486 | /* ---- misc */ | ||
487 | |||
488 | /* | ||
489 | * Expands tildes in the file name. Returns data allocated by xmalloc. | ||
490 | * Warning: this calls getpw*. | ||
491 | */ | ||
492 | char *tilde_expand_filename(const char *filename, uid_t my_uid); | ||
493 | |||
494 | /* remove newline at end of string */ | ||
495 | char *chop(char *s); | ||
496 | |||
497 | /* return next token in configuration line */ | ||
498 | char *strdelim(char **s); | ||
499 | |||
500 | /* set filedescriptor to non-blocking */ | ||
501 | void set_nonblock(int fd); | ||
502 | |||
503 | /* | ||
504 | * Performs the interactive session. This handles data transmission between | ||
505 | * the client and the program. Note that the notion of stdin, stdout, and | ||
506 | * stderr in this function is sort of reversed: this function writes to stdin | ||
507 | * (of the child program), and reads from stdout and stderr (of the child | ||
508 | * program). | ||
509 | */ | ||
510 | void server_loop(pid_t pid, int fdin, int fdout, int fderr); | ||
511 | void server_loop2(void); | ||
512 | |||
513 | /* Client side main loop for the interactive session. */ | ||
514 | int client_loop(int have_pty, int escape_char, int id); | ||
515 | |||
516 | /* Linked list of custom environment strings (see auth-rsa.c). */ | ||
517 | struct envstring { | ||
518 | struct envstring *next; | ||
519 | char *s; | ||
520 | }; | ||
521 | |||
522 | /* | ||
523 | * Ensure all of data on socket comes through. f==read || f==write | ||
524 | */ | ||
525 | ssize_t atomicio(ssize_t (*f)(), int fd, void *s, size_t n); | ||
526 | |||
527 | #ifdef KRB4 | ||
528 | #include <krb.h> | ||
529 | /* | ||
530 | * Performs Kerberos v4 mutual authentication with the client. This returns 0 | ||
531 | * if the client could not be authenticated, and 1 if authentication was | ||
532 | * successful. This may exit if there is a serious protocol violation. | ||
533 | */ | ||
534 | int auth_krb4(const char *server_user, KTEXT auth, char **client); | ||
535 | int krb4_init(uid_t uid); | ||
536 | void krb4_cleanup_proc(void *ignore); | ||
537 | int auth_krb4_password(struct passwd * pw, const char *password); | ||
538 | |||
539 | #ifdef AFS | ||
540 | #include <kafs.h> | ||
541 | |||
542 | /* Accept passed Kerberos v4 ticket-granting ticket and AFS tokens. */ | ||
543 | int auth_kerberos_tgt(struct passwd * pw, const char *string); | ||
544 | int auth_afs_token(struct passwd * pw, const char *token_string); | ||
545 | |||
546 | int creds_to_radix(CREDENTIALS * creds, u_char *buf, size_t buflen); | ||
547 | int radix_to_creds(const char *buf, CREDENTIALS * creds); | ||
548 | #endif /* AFS */ | ||
549 | |||
550 | #endif /* KRB4 */ | ||
551 | |||
552 | /* AF_UNSPEC or AF_INET or AF_INET6 */ | ||
553 | extern int IPv4or6; | ||
554 | |||
555 | #endif /* SSH_H */ | 102 | #endif /* SSH_H */ |