]> andersk Git - openssh.git/blob - ssh.h
- Removed most of the pam code into its own file auth-pam.[ch]. This
[openssh.git] / ssh.h
1 /*
2  * 
3  * ssh.h
4  * 
5  * Author: Tatu Ylonen <ylo@cs.hut.fi>
6  * 
7  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
8  *                    All rights reserved
9  * 
10  * Created: Fri Mar 17 17:09:37 1995 ylo
11  * 
12  * Generic header file for ssh.
13  * 
14  */
15
16 /* RCSID("$Id$"); */
17
18 #ifndef SSH_H
19 #define SSH_H
20
21 #include <netinet/in.h> /* For struct sockaddr_in */
22 #include <pwd.h> /* For struct pw */
23 #include <stdarg.h> /* For va_list */
24 #ifdef HAVE_SYS_SELECT_H
25 # include <sys/select.h>
26 #endif
27 #include "rsa.h"
28 #include "cipher.h"
29
30 /*
31  * The default cipher used if IDEA is not supported by the remote host. It is
32  * recommended that this be one of the mandatory ciphers (DES, 3DES), though
33  * that is not required.
34  */
35 #define SSH_FALLBACK_CIPHER     SSH_CIPHER_3DES
36
37 /* Cipher used for encrypting authentication files. */
38 #define SSH_AUTHFILE_CIPHER     SSH_CIPHER_3DES
39
40 /* Default port number. */
41 #define SSH_DEFAULT_PORT        22
42
43 /* Maximum number of TCP/IP ports forwarded per direction. */
44 #define SSH_MAX_FORWARDS_PER_DIRECTION  100
45
46 /*
47  * Maximum number of RSA authentication identity files that can be specified
48  * in configuration files or on the command line.
49  */
50 #define SSH_MAX_IDENTITY_FILES          100
51
52 /*
53  * Major protocol version.  Different version indicates major incompatiblity
54  * that prevents communication.
55  */
56 #define PROTOCOL_MAJOR          1
57
58 /*
59  * Minor protocol version.  Different version indicates minor incompatibility
60  * that does not prevent interoperation.
61  */
62 #define PROTOCOL_MINOR          5
63
64 /*
65  * Name for the service.  The port named by this service overrides the
66  * default port if present.
67  */
68 #define SSH_SERVICE_NAME        "ssh"
69
70 #ifndef ETCDIR
71 #define ETCDIR                  "/etc"
72 #endif /* ETCDIR */
73
74 #ifndef PIDDIR
75 #define PIDDIR                  "/var/run"
76 #endif /* PIDDIR */
77
78 /*
79  * System-wide file containing host keys of known hosts.  This file should be
80  * world-readable.
81  */
82 #define SSH_SYSTEM_HOSTFILE     ETCDIR "/ssh_known_hosts"
83
84 /*
85  * Of these, ssh_host_key must be readable only by root, whereas ssh_config
86  * should be world-readable.
87  */
88 #define HOST_KEY_FILE           ETCDIR "/ssh_host_key"
89 #define SERVER_CONFIG_FILE      ETCDIR "/sshd_config"
90 #define HOST_CONFIG_FILE        ETCDIR "/ssh_config"
91
92 #ifndef SSH_PROGRAM
93 #define SSH_PROGRAM                     "/usr/bin/ssh"
94 #endif /* SSH_PROGRAM */
95
96 #ifndef LOGIN_PROGRAM
97 #define LOGIN_PROGRAM           "/usr/bin/login"
98 #endif /* LOGIN_PROGRAM */
99
100 #ifndef ASKPASS_PROGRAM
101 #define ASKPASS_PROGRAM         "/usr/lib/ssh/ssh-askpass"
102 #endif /* ASKPASS_PROGRAM */
103
104 /*
105  * The process id of the daemon listening for connections is saved here to
106  * make it easier to kill the correct daemon when necessary.
107  */
108 #define SSH_DAEMON_PID_FILE     PIDDIR "/sshd.pid"
109
110 /*
111  * The directory in user\'s home directory in which the files reside. The
112  * directory should be world-readable (though not all files are).
113  */
114 #define SSH_USER_DIR            ".ssh"
115
116 /*
117  * Per-user file containing host keys of known hosts.  This file need not be
118  * readable by anyone except the user him/herself, though this does not
119  * contain anything particularly secret.
120  */
121 #define SSH_USER_HOSTFILE       "~/.ssh/known_hosts"
122
123 /*
124  * Name of the default file containing client-side authentication key. This
125  * file should only be readable by the user him/herself.
126  */
127 #define SSH_CLIENT_IDENTITY     ".ssh/identity"
128
129 /*
130  * Configuration file in user\'s home directory.  This file need not be
131  * readable by anyone but the user him/herself, but does not contain anything
132  * particularly secret.  If the user\'s home directory resides on an NFS
133  * volume where root is mapped to nobody, this may need to be world-readable.
134  */
135 #define SSH_USER_CONFFILE       ".ssh/config"
136
137 /*
138  * File containing a list of those rsa keys that permit logging in as this
139  * user.  This file need not be readable by anyone but the user him/herself,
140  * but does not contain anything particularly secret.  If the user\'s home
141  * directory resides on an NFS volume where root is mapped to nobody, this
142  * may need to be world-readable.  (This file is read by the daemon which is
143  * running as root.)
144  */
145 #define SSH_USER_PERMITTED_KEYS ".ssh/authorized_keys"
146
147 /*
148  * Per-user and system-wide ssh "rc" files.  These files are executed with
149  * /bin/sh before starting the shell or command if they exist.  They will be
150  * passed "proto cookie" as arguments if X11 forwarding with spoofing is in
151  * use.  xauth will be run if neither of these exists.
152  */
153 #define SSH_USER_RC             ".ssh/rc"
154 #define SSH_SYSTEM_RC           ETCDIR "/sshrc"
155
156 /*
157  * Ssh-only version of /etc/hosts.equiv.  Additionally, the daemon may use
158  * ~/.rhosts and /etc/hosts.equiv if rhosts authentication is enabled.
159  */
160 #define SSH_HOSTS_EQUIV         ETCDIR "/shosts.equiv"
161
162 /*
163  * Name of the environment variable containing the pathname of the
164  * authentication socket.
165  */
166 #define SSH_AUTHSOCKET_ENV_NAME "SSH_AUTH_SOCK"
167
168 /*
169  * Name of the environment variable containing the pathname of the
170  * authentication socket.
171  */
172 #define SSH_AGENTPID_ENV_NAME   "SSH_AGENT_PID"
173
174 /*
175  * Default path to ssh-askpass used by ssh-add,
176  * environment variable for overwriting the default location
177  */
178 #ifndef SSH_ASKPASS_DEFAULT
179 # define SSH_ASKPASS_DEFAULT    "/usr/X11R6/bin/ssh-askpass"
180 #endif
181 #define SSH_ASKPASS_ENV         "SSH_ASKPASS"
182
183 /*
184  * Force host key length and server key length to differ by at least this
185  * many bits.  This is to make double encryption with rsaref work.
186  */
187 #define SSH_KEY_BITS_RESERVED           128
188
189 /*
190  * Length of the session key in bytes.  (Specified as 256 bits in the
191  * protocol.)
192  */
193 #define SSH_SESSION_KEY_LENGTH          32
194
195 /* Name of Kerberos service for SSH to use. */
196 #define KRB4_SERVICE_NAME               "rcmd"
197
198 /*
199  * Authentication methods.  New types can be added, but old types should not
200  * be removed for compatibility.  The maximum allowed value is 31.
201  */
202 #define SSH_AUTH_RHOSTS         1
203 #define SSH_AUTH_RSA            2
204 #define SSH_AUTH_PASSWORD       3
205 #define SSH_AUTH_RHOSTS_RSA     4
206 #define SSH_AUTH_TIS            5
207 #define SSH_AUTH_KERBEROS       6
208 #define SSH_PASS_KERBEROS_TGT   7
209                                 /* 8 to 15 are reserved */
210 #define SSH_PASS_AFS_TOKEN      21
211
212 /* Protocol flags.  These are bit masks. */
213 #define SSH_PROTOFLAG_SCREEN_NUMBER     1       /* X11 forwarding includes screen */
214 #define SSH_PROTOFLAG_HOST_IN_FWD_OPEN  2       /* forwarding opens contain host */
215
216 /*
217  * Definition of message types.  New values can be added, but old values
218  * should not be removed or without careful consideration of the consequences
219  * for compatibility.  The maximum value is 254; value 255 is reserved for
220  * future extension.
221  */
222 /* Message name */                      /* msg code */  /* arguments */
223 #define SSH_MSG_NONE                            0       /* no message */
224 #define SSH_MSG_DISCONNECT                      1       /* cause (string) */
225 #define SSH_SMSG_PUBLIC_KEY                     2       /* ck,msk,srvk,hostk */
226 #define SSH_CMSG_SESSION_KEY                    3       /* key (BIGNUM) */
227 #define SSH_CMSG_USER                           4       /* user (string) */
228 #define SSH_CMSG_AUTH_RHOSTS                    5       /* user (string) */
229 #define SSH_CMSG_AUTH_RSA                       6       /* modulus (BIGNUM) */
230 #define SSH_SMSG_AUTH_RSA_CHALLENGE             7       /* int (BIGNUM) */
231 #define SSH_CMSG_AUTH_RSA_RESPONSE              8       /* int (BIGNUM) */
232 #define SSH_CMSG_AUTH_PASSWORD                  9       /* pass (string) */
233 #define SSH_CMSG_REQUEST_PTY                    10      /* TERM, tty modes */
234 #define SSH_CMSG_WINDOW_SIZE                    11      /* row,col,xpix,ypix */
235 #define SSH_CMSG_EXEC_SHELL                     12      /* */
236 #define SSH_CMSG_EXEC_CMD                       13      /* cmd (string) */
237 #define SSH_SMSG_SUCCESS                        14      /* */
238 #define SSH_SMSG_FAILURE                        15      /* */
239 #define SSH_CMSG_STDIN_DATA                     16      /* data (string) */
240 #define SSH_SMSG_STDOUT_DATA                    17      /* data (string) */
241 #define SSH_SMSG_STDERR_DATA                    18      /* data (string) */
242 #define SSH_CMSG_EOF                            19      /* */
243 #define SSH_SMSG_EXITSTATUS                     20      /* status (int) */
244 #define SSH_MSG_CHANNEL_OPEN_CONFIRMATION       21      /* channel (int) */
245 #define SSH_MSG_CHANNEL_OPEN_FAILURE            22      /* channel (int) */
246 #define SSH_MSG_CHANNEL_DATA                    23      /* ch,data (int,str) */
247 #define SSH_MSG_CHANNEL_CLOSE                   24      /* channel (int) */
248 #define SSH_MSG_CHANNEL_CLOSE_CONFIRMATION      25      /* channel (int) */
249 /*      SSH_CMSG_X11_REQUEST_FORWARDING         26         OBSOLETE */
250 #define SSH_SMSG_X11_OPEN                       27      /* channel (int) */
251 #define SSH_CMSG_PORT_FORWARD_REQUEST           28      /* p,host,hp (i,s,i) */
252 #define SSH_MSG_PORT_OPEN                       29      /* ch,h,p (i,s,i) */
253 #define SSH_CMSG_AGENT_REQUEST_FORWARDING       30      /* */
254 #define SSH_SMSG_AGENT_OPEN                     31      /* port (int) */
255 #define SSH_MSG_IGNORE                          32      /* string */
256 #define SSH_CMSG_EXIT_CONFIRMATION              33      /* */
257 #define SSH_CMSG_X11_REQUEST_FORWARDING         34      /* proto,data (s,s) */
258 #define SSH_CMSG_AUTH_RHOSTS_RSA                35      /* user,mod (s,mpi) */
259 #define SSH_MSG_DEBUG                           36      /* string */
260 #define SSH_CMSG_REQUEST_COMPRESSION            37      /* level 1-9 (int) */
261 #define SSH_CMSG_MAX_PACKET_SIZE                38      /* size 4k-1024k (int) */
262 #define SSH_CMSG_AUTH_TIS                       39      /* we use this for s/key */
263 #define SSH_SMSG_AUTH_TIS_CHALLENGE             40      /* challenge (string) */
264 #define SSH_CMSG_AUTH_TIS_RESPONSE              41      /* response (string) */
265 #define SSH_CMSG_AUTH_KERBEROS                  42      /* (KTEXT) */
266 #define SSH_SMSG_AUTH_KERBEROS_RESPONSE         43      /* (KTEXT) */
267 #define SSH_CMSG_HAVE_KERBEROS_TGT              44      /* credentials (s) */
268 #define SSH_CMSG_HAVE_AFS_TOKEN                 65      /* token (s) */
269
270 /*------------ definitions for login.c -------------*/
271
272 /*
273  * Returns the time when the user last logged in.  Returns 0 if the
274  * information is not available.  This must be called before record_login.
275  * The host from which the user logged in is stored in buf.
276  */
277 unsigned long 
278 get_last_login_time(uid_t uid, const char *logname,
279     char *buf, unsigned int bufsize);
280
281 /*
282  * Records that the user has logged in.  This does many things normally done
283  * by login(1).
284  */
285 void 
286 record_login(int pid, const char *ttyname, const char *user, uid_t uid,
287     const char *host, struct sockaddr_in * addr);
288
289 /*
290  * Records that the user has logged out.  This does many thigs normally done
291  * by login(1) or init.
292  */
293 void    record_logout(int pid, const char *ttyname);
294
295 /*------------ definitions for sshconnect.c ----------*/
296
297 /*
298  * Opens a TCP/IP connection to the remote server on the given host.  If port
299  * is 0, the default port will be used.  If anonymous is zero, a privileged
300  * port will be allocated to make the connection. This requires super-user
301  * privileges if anonymous is false. Connection_attempts specifies the
302  * maximum number of tries, one per second.  This returns true on success,
303  * and zero on failure.  If the connection is successful, this calls
304  * packet_set_connection for the connection.
305  */
306 int 
307 ssh_connect(const char *host, struct sockaddr_in * hostaddr,
308     u_short port, int connection_attempts,
309     int anonymous, uid_t original_real_uid,
310     const char *proxy_command);
311
312 /*
313  * Starts a dialog with the server, and authenticates the current user on the
314  * server.  This does not need any extra privileges.  The basic connection to
315  * the server must already have been established before this is called. If
316  * login fails, this function prints an error and never returns. This
317  * initializes the random state, and leaves it initialized (it will also have
318  * references from the packet module).
319  */
320
321 void 
322 ssh_login(int host_key_valid, RSA * host_key, const char *host,
323     struct sockaddr_in * hostaddr, uid_t original_real_uid);
324
325 /*------------ Definitions for various authentication methods. -------*/
326
327 /*
328  * Tries to authenticate the user using the .rhosts file.  Returns true if
329  * authentication succeeds.  If ignore_rhosts is non-zero, this will not
330  * consider .rhosts and .shosts (/etc/hosts.equiv will still be used).
331  */
332 int     auth_rhosts(struct passwd * pw, const char *client_user);
333
334 /*
335  * Tries to authenticate the user using the .rhosts file and the host using
336  * its host key.  Returns true if authentication succeeds.
337  */
338 int 
339 auth_rhosts_rsa(struct passwd * pw, const char *client_user,
340     BIGNUM * client_host_key_e, BIGNUM * client_host_key_n);
341
342 /*
343  * Tries to authenticate the user using password.  Returns true if
344  * authentication succeeds.
345  */
346 int     auth_password(struct passwd * pw, const char *password);
347
348 /*
349  * Performs the RSA authentication dialog with the client.  This returns 0 if
350  * the client could not be authenticated, and 1 if authentication was
351  * successful.  This may exit if there is a serious protocol violation.
352  */
353 int     auth_rsa(struct passwd * pw, BIGNUM * client_n);
354
355 /*
356  * Parses an RSA key (number of bits, e, n) from a string.  Moves the pointer
357  * over the key.  Skips any whitespace at the beginning and at end.
358  */
359 int     auth_rsa_read_key(char **cpp, unsigned int *bitsp, BIGNUM * e, BIGNUM * n);
360
361 /*
362  * Returns the name of the machine at the other end of the socket.  The
363  * returned string should be freed by the caller.
364  */
365 char   *get_remote_hostname(int socket);
366
367 /*
368  * Return the canonical name of the host in the other side of the current
369  * connection (as returned by packet_get_connection).  The host name is
370  * cached, so it is efficient to call this several times.
371  */
372 const char *get_canonical_hostname(void);
373
374 /*
375  * Returns the remote IP address as an ascii string.  The value need not be
376  * freed by the caller.
377  */
378 const char *get_remote_ipaddr(void);
379
380 /* Returns the port number of the peer of the socket. */
381 int     get_peer_port(int sock);
382
383 /* Returns the port number of the remote host. */
384 int     get_remote_port(void);
385
386 /*
387  * Tries to match the host name (which must be in all lowercase) against the
388  * comma-separated sequence of subpatterns (each possibly preceded by ! to
389  * indicate negation).  Returns true if there is a positive match; zero
390  * otherwise.
391  */
392 int     match_hostname(const char *host, const char *pattern, unsigned int len);
393
394 /*
395  * Checks whether the given host is already in the list of our known hosts.
396  * Returns HOST_OK if the host is known and has the specified key, HOST_NEW
397  * if the host is not known, and HOST_CHANGED if the host is known but used
398  * to have a different host key.  The host must be in all lowercase.
399  */
400 typedef enum {
401         HOST_OK, HOST_NEW, HOST_CHANGED
402 }       HostStatus;
403 HostStatus 
404 check_host_in_hostfile(const char *filename, const char *host,
405     BIGNUM * e, BIGNUM * n, BIGNUM * ke, BIGNUM * kn);
406
407 /*
408  * Appends an entry to the host file.  Returns false if the entry could not
409  * be appended.
410  */
411 int 
412 add_host_to_hostfile(const char *filename, const char *host,
413     BIGNUM * e, BIGNUM * n);
414
415 /*
416  * Performs the RSA authentication challenge-response dialog with the client,
417  * and returns true (non-zero) if the client gave the correct answer to our
418  * challenge; returns zero if the client gives a wrong answer.
419  */
420 int     auth_rsa_challenge_dialog(BIGNUM * e, BIGNUM * n);
421
422 /*
423  * Reads a passphrase from /dev/tty with echo turned off.  Returns the
424  * passphrase (allocated with xmalloc).  Exits if EOF is encountered. If
425  * from_stdin is true, the passphrase will be read from stdin instead.
426  */
427 char   *read_passphrase(const char *prompt, int from_stdin);
428
429 /*
430  * Saves the authentication (private) key in a file, encrypting it with
431  * passphrase.  The identification of the file (lowest 64 bits of n) will
432  * precede the key to provide identification of the key without needing a
433  * passphrase.
434  */
435 int 
436 save_private_key(const char *filename, const char *passphrase,
437     RSA * private_key, const char *comment);
438
439 /*
440  * Loads the public part of the key file (public key and comment). Returns 0
441  * if an error occurred; zero if the public key was successfully read.  The
442  * comment of the key is returned in comment_return if it is non-NULL; the
443  * caller must free the value with xfree.
444  */
445 int 
446 load_public_key(const char *filename, RSA * pub,
447     char **comment_return);
448
449 /*
450  * Loads the private key from the file.  Returns 0 if an error is encountered
451  * (file does not exist or is not readable, or passphrase is bad). This
452  * initializes the private key.  The comment of the key is returned in
453  * comment_return if it is non-NULL; the caller must free the value with
454  * xfree.
455  */
456 int 
457 load_private_key(const char *filename, const char *passphrase,
458     RSA * private_key, char **comment_return);
459
460 /*------------ Definitions for logging. -----------------------*/
461
462 /* Supported syslog facilities and levels. */
463 typedef enum {
464         SYSLOG_FACILITY_DAEMON,
465         SYSLOG_FACILITY_USER,
466         SYSLOG_FACILITY_AUTH,
467         SYSLOG_FACILITY_LOCAL0,
468         SYSLOG_FACILITY_LOCAL1,
469         SYSLOG_FACILITY_LOCAL2,
470         SYSLOG_FACILITY_LOCAL3,
471         SYSLOG_FACILITY_LOCAL4,
472         SYSLOG_FACILITY_LOCAL5,
473         SYSLOG_FACILITY_LOCAL6,
474         SYSLOG_FACILITY_LOCAL7
475 }       SyslogFacility;
476
477 typedef enum {
478         SYSLOG_LEVEL_QUIET,
479         SYSLOG_LEVEL_FATAL,
480         SYSLOG_LEVEL_ERROR,
481         SYSLOG_LEVEL_INFO,
482         SYSLOG_LEVEL_VERBOSE,
483         SYSLOG_LEVEL_DEBUG
484 }       LogLevel;
485 /* Initializes logging. */
486 void    log_init(char *av0, LogLevel level, SyslogFacility facility, int on_stderr);
487
488 /* Logging implementation, depending on server or client */
489 void    do_log(LogLevel level, const char *fmt, va_list args);
490
491 /* name to facility/level */
492 SyslogFacility log_facility_number(char *name);
493 LogLevel log_level_number(char *name);
494
495 /* Output a message to syslog or stderr */
496 void    fatal(const char *fmt,...) __attribute__((format(printf, 1, 2)));
497 void    error(const char *fmt,...) __attribute__((format(printf, 1, 2)));
498 void    log(const char *fmt,...) __attribute__((format(printf, 1, 2)));
499 void    verbose(const char *fmt,...) __attribute__((format(printf, 1, 2)));
500 void    debug(const char *fmt,...) __attribute__((format(printf, 1, 2)));
501
502 /* same as fatal() but w/o logging */
503 void    fatal_cleanup(void);
504
505 /*
506  * Registers a cleanup function to be called by fatal()/fatal_cleanup()
507  * before exiting. It is permissible to call fatal_remove_cleanup for the
508  * function itself from the function.
509  */
510 void    fatal_add_cleanup(void (*proc) (void *context), void *context);
511
512 /* Removes a cleanup function to be called at fatal(). */
513 void    fatal_remove_cleanup(void (*proc) (void *context), void *context);
514
515 /*---------------- definitions for channels ------------------*/
516
517 /* Sets specific protocol options. */
518 void    channel_set_options(int hostname_in_open);
519
520 /*
521  * Allocate a new channel object and set its type and socket.  Remote_name
522  * must have been allocated with xmalloc; this will free it when the channel
523  * is freed.
524  */
525 int     channel_allocate(int type, int sock, char *remote_name);
526
527 /* Free the channel and close its socket. */
528 void    channel_free(int channel);
529
530 /* Add any bits relevant to channels in select bitmasks. */
531 void    channel_prepare_select(fd_set * readset, fd_set * writeset);
532
533 /*
534  * After select, perform any appropriate operations for channels which have
535  * events pending.
536  */
537 void    channel_after_select(fd_set * readset, fd_set * writeset);
538
539 /* If there is data to send to the connection, send some of it now. */
540 void    channel_output_poll(void);
541
542 /*
543  * This is called when a packet of type CHANNEL_DATA has just been received.
544  * The message type has already been consumed, but channel number and data is
545  * still there.
546  */
547 void    channel_input_data(int payload_len);
548
549 /* Returns true if no channel has too much buffered data. */
550 int     channel_not_very_much_buffered_data(void);
551
552 /* This is called after receiving CHANNEL_CLOSE. */
553 void    channel_input_close(void);
554
555 /* This is called after receiving CHANNEL_CLOSE_CONFIRMATION. */
556 void    channel_input_close_confirmation(void);
557
558 /* This is called after receiving CHANNEL_OPEN_CONFIRMATION. */
559 void    channel_input_open_confirmation(void);
560
561 /* This is called after receiving CHANNEL_OPEN_FAILURE from the other side. */
562 void    channel_input_open_failure(void);
563
564 /* This closes any sockets that are listening for connections; this removes
565    any unix domain sockets. */
566 void    channel_stop_listening(void);
567
568 /*
569  * Closes the sockets of all channels.  This is used to close extra file
570  * descriptors after a fork.
571  */
572 void    channel_close_all(void);
573
574 /* Returns the maximum file descriptor number used by the channels. */
575 int     channel_max_fd(void);
576
577 /* Returns true if there is still an open channel over the connection. */
578 int     channel_still_open(void);
579
580 /*
581  * Returns a string containing a list of all open channels.  The list is
582  * suitable for displaying to the user.  It uses crlf instead of newlines.
583  * The caller should free the string with xfree.
584  */
585 char   *channel_open_message(void);
586
587 /*
588  * Initiate forwarding of connections to local port "port" through the secure
589  * channel to host:port from remote side.  This never returns if there was an
590  * error.
591  */
592 void 
593 channel_request_local_forwarding(u_short port, const char *host,
594     u_short remote_port, int gateway_ports);
595
596 /*
597  * Initiate forwarding of connections to port "port" on remote host through
598  * the secure channel to host:port from local side.  This never returns if
599  * there was an error.  This registers that open requests for that port are
600  * permitted.
601  */
602 void 
603 channel_request_remote_forwarding(u_short port, const char *host,
604     u_short remote_port);
605
606 /*
607  * Permits opening to any host/port in SSH_MSG_PORT_OPEN.  This is usually
608  * called by the server, because the user could connect to any port anyway,
609  * and the server has no way to know but to trust the client anyway.
610  */
611 void    channel_permit_all_opens(void);
612
613 /*
614  * This is called after receiving CHANNEL_FORWARDING_REQUEST.  This initates
615  * listening for the port, and sends back a success reply (or disconnect
616  * message if there was an error).  This never returns if there was an error.
617  */
618 void    channel_input_port_forward_request(int is_root);
619
620 /*
621  * This is called after receiving PORT_OPEN message.  This attempts to
622  * connect to the given host:port, and sends back CHANNEL_OPEN_CONFIRMATION
623  * or CHANNEL_OPEN_FAILURE.
624  */
625 void    channel_input_port_open(int payload_len);
626
627 /*
628  * Creates a port for X11 connections, and starts listening for it. Returns
629  * the display name, or NULL if an error was encountered.
630  */
631 char   *x11_create_display(int screen);
632
633 /*
634  * Creates an internet domain socket for listening for X11 connections.
635  * Returns a suitable value for the DISPLAY variable, or NULL if an error
636  * occurs.
637  */
638 char   *x11_create_display_inet(int screen, int x11_display_offset);
639
640 /*
641  * This is called when SSH_SMSG_X11_OPEN is received.  The packet contains
642  * the remote channel number.  We should do whatever we want, and respond
643  * with either SSH_MSG_OPEN_CONFIRMATION or SSH_MSG_OPEN_FAILURE.
644  */
645 void    x11_input_open(int payload_len);
646
647 /*
648  * Requests forwarding of X11 connections.  This should be called on the
649  * client only.
650  */
651 void    x11_request_forwarding(void);
652
653 /*
654  * Requests forwarding for X11 connections, with authentication spoofing.
655  * This should be called in the client only.
656  */
657 void    x11_request_forwarding_with_spoofing(const char *proto, const char *data);
658
659 /* Sends a message to the server to request authentication fd forwarding. */
660 void    auth_request_forwarding(void);
661
662 /*
663  * Returns the name of the forwarded authentication socket.  Returns NULL if
664  * there is no forwarded authentication socket.  The returned value points to
665  * a static buffer.
666  */
667 char   *auth_get_socket_name(void);
668
669 /*
670  * This if called to process SSH_CMSG_AGENT_REQUEST_FORWARDING on the server.
671  * This starts forwarding authentication requests.
672  */
673 void    auth_input_request_forwarding(struct passwd * pw);
674
675 /* This is called to process an SSH_SMSG_AGENT_OPEN message. */
676 void    auth_input_open_request(void);
677
678 /*
679  * Returns true if the given string matches the pattern (which may contain ?
680  * and * as wildcards), and zero if it does not match.
681  */
682 int     match_pattern(const char *s, const char *pattern);
683
684 /*
685  * Expands tildes in the file name.  Returns data allocated by xmalloc.
686  * Warning: this calls getpw*.
687  */
688 char   *tilde_expand_filename(const char *filename, uid_t my_uid);
689
690 /*
691  * Performs the interactive session.  This handles data transmission between
692  * the client and the program.  Note that the notion of stdin, stdout, and
693  * stderr in this function is sort of reversed: this function writes to stdin
694  * (of the child program), and reads from stdout and stderr (of the child
695  * program).
696  */
697 void    server_loop(int pid, int fdin, int fdout, int fderr);
698
699 /* Client side main loop for the interactive session. */
700 int     client_loop(int have_pty, int escape_char);
701
702 /* Linked list of custom environment strings (see auth-rsa.c). */
703 struct envstring {
704         struct envstring *next;
705         char   *s;
706 };
707
708 /*
709  * Ensure all of data on socket comes through. f==read || f==write
710  */
711 int     atomicio(int (*f)(), int fd, void *s, size_t n);
712
713 #ifdef KRB4
714 #include <krb.h>
715 /*
716  * Performs Kerberos v4 mutual authentication with the client. This returns 0
717  * if the client could not be authenticated, and 1 if authentication was
718  * successful.  This may exit if there is a serious protocol violation.
719  */
720 int     auth_krb4(const char *server_user, KTEXT auth, char **client);
721 int     krb4_init(uid_t uid);
722 void    krb4_cleanup_proc(void *ignore);
723 int     auth_krb4_password(struct passwd * pw, const char *password);
724
725 #ifdef AFS
726 #include <kafs.h>
727
728 /* Accept passed Kerberos v4 ticket-granting ticket and AFS tokens. */
729 int     auth_kerberos_tgt(struct passwd * pw, const char *string);
730 int     auth_afs_token(struct passwd * pw, const char *token_string);
731
732 int     creds_to_radix(CREDENTIALS * creds, unsigned char *buf);
733 int     radix_to_creds(const char *buf, CREDENTIALS * creds);
734 #endif                          /* AFS */
735
736 #endif                          /* KRB4 */
737
738 #ifdef SKEY
739 #include <skey.h>
740 char   *skey_fake_keyinfo(char *username);
741 int     auth_skey_password(struct passwd * pw, const char *password);
742 #endif                          /* SKEY */
743
744 #ifdef USE_PAM
745 #include "auth-pam.h"
746 #endif /* USE_PAM */
747
748 #endif                          /* SSH_H */
This page took 0.814084 seconds and 5 git commands to generate.