]> andersk Git - openssh.git/blobdiff - sshd.c
- (djm) CVS OpenBSD sync:
[openssh.git] / sshd.c
diff --git a/sshd.c b/sshd.c
index ae02f2c401629cc72fe2123dc985176fe80ff880..ae22cd9530caa18e02bdb4b203656d410d74b79a 100644 (file)
--- a/sshd.c
+++ b/sshd.c
@@ -2,19 +2,45 @@
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
  * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
  *                    All rights reserved
- * Created: Fri Mar 17 17:09:28 1995 ylo
- * This program is the ssh daemon.  It listens for connections from clients, and
- * performs authentication, executes use commands or shell, and forwards
+ * This program is the ssh daemon.  It listens for connections from clients,
+ * and performs authentication, executes use commands or shell, and forwards
  * information to/from the application to the user client over an encrypted
- * connection.  This can also handle forwarding of X11, TCP/IP, and authentication
- * agent connections.
+ * connection.  This can also handle forwarding of X11, TCP/IP, and
+ * authentication agent connections.
  *
- * SSH2 implementation,
- * Copyright (c) 2000 Markus Friedl. All rights reserved.
+ * As far as I am concerned, the code I have written for this software
+ * can be used freely for any purpose.  Any derived versions of this
+ * software must be clearly marked as such, and if the derived work is
+ * incompatible with the protocol description in the RFC file, it must be
+ * called by a name other than "ssh" or "Secure Shell".
+ *
+ * SSH2 implementation:
+ *
+ * Copyright (c) 2000 Markus Friedl.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: sshd.c,v 1.125 2000/08/17 20:06:34 markus Exp $");
+RCSID("$OpenBSD: sshd.c,v 1.128 2000/09/17 15:38:59 markus Exp $");
 
 #include "xmalloc.h"
 #include "rsa.h"
@@ -485,8 +511,15 @@ main(int ac, char **av)
                        config_file_name = optarg;
                        break;
                case 'd':
-                       debug_flag = 1;
-                       options.log_level = SYSLOG_LEVEL_DEBUG;
+                       if (0 == debug_flag) {
+                               debug_flag = 1;
+                               options.log_level = SYSLOG_LEVEL_DEBUG1;
+                       } else if (options.log_level < SYSLOG_LEVEL_DEBUG3) {
+                               options.log_level++;
+                       } else {
+                               fprintf(stderr, "Too high debugging level.\n");
+                               exit(1);
+                       }
                        break;
                case 'i':
                        inetd_flag = 1;
@@ -502,8 +535,10 @@ main(int ac, char **av)
                        break;
                case 'p':
                        options.ports_from_cmdline = 1;
-                       if (options.num_ports >= MAX_PORTS)
-                               fatal("too many ports.\n");
+                       if (options.num_ports >= MAX_PORTS) {
+                               fprintf(stderr, "too many ports.\n");
+                               exit(1);
+                       }
                        options.ports[options.num_ports++] = atoi(optarg);
                        break;
                case 'g':
@@ -529,7 +564,7 @@ main(int ac, char **av)
                        fprintf(stderr, "Usage: %s [options]\n", av0);
                        fprintf(stderr, "Options:\n");
                        fprintf(stderr, "  -f file    Configuration file (default %s)\n", SERVER_CONFIG_FILE);
-                       fprintf(stderr, "  -d         Debugging mode\n");
+                       fprintf(stderr, "  -d         Debugging mode (multiple -d means more debugging)\n");
                        fprintf(stderr, "  -i         Started from inetd\n");
                        fprintf(stderr, "  -q         Quiet (no logging)\n");
                        fprintf(stderr, "  -p port    Listen on the specified port (default: 22)\n");
@@ -632,6 +667,10 @@ main(int ac, char **av)
                }
        }
 
+#ifdef HAVE_SCO_PROTECTED_PW
+       (void) set_auth_parameters(ac, av);
+#endif
+
        /* Initialize the log (it is reinitialized below in case we forked). */
        if (debug_flag && !inetd_flag)
                log_stderr = 1;
@@ -765,7 +804,7 @@ main(int ac, char **av)
                         * fail if there already is a daemon, and this will
                         * overwrite any old pid in the file.
                         */
-                       f = fopen(options.pid_file, "w");
+                       f = fopen(options.pid_file, "wb");
                        if (f) {
                                fprintf(f, "%u\n", (unsigned int) getpid());
                                fclose(f);
@@ -956,6 +995,7 @@ main(int ac, char **av)
        signal(SIGTERM, SIG_DFL);
        signal(SIGQUIT, SIG_DFL);
        signal(SIGCHLD, SIG_DFL);
+       signal(SIGINT, SIG_DFL);
 
        /*
         * Set socket options for the connection.  We want the socket to
@@ -1223,7 +1263,7 @@ do_ssh1_kex()
        if (len < 0 || len > sizeof(session_key))
                fatal("do_connection: bad len from %s: session_key_int %d > sizeof(session_key) %d",
                      get_remote_ipaddr(),
-                     len, sizeof(session_key));
+                     len, (int) sizeof(session_key));
        memset(session_key, 0, sizeof(session_key));
        BN_bn2bin(session_key_int, session_key + sizeof(session_key) - len);
 
@@ -1300,7 +1340,7 @@ do_ssh2_kex()
 
 #ifdef DEBUG_KEXDH
        fprintf(stderr, "\ndh_client_pub= ");
-       bignum_print(dh_client_pub);
+       BN_print_fp(stderr, dh_client_pub);
        fprintf(stderr, "\n");
        debug("bits %d", BN_num_bits(dh_client_pub));
 #endif
@@ -1310,12 +1350,13 @@ do_ssh2_kex()
 
 #ifdef DEBUG_KEXDH
        fprintf(stderr, "\np= ");
-       bignum_print(dh->p);
+       BN_print_fp(stderr, dh->p);
        fprintf(stderr, "\ng= ");
-       bignum_print(dh->g);
+       bn_print(dh->g);
        fprintf(stderr, "\npub= ");
-       bignum_print(dh->pub_key);
+       BN_print_fp(stderr, dh->pub_key);
        fprintf(stderr, "\n");
+        DHparams_print_fp(stderr, dh);
 #endif
        if (!dh_pub_is_valid(dh, dh_client_pub))
                packet_disconnect("bad client public DH value");
This page took 0.039203 seconds and 4 git commands to generate.