]> andersk Git - openssh.git/blobdiff - sshconnect.c
- deraadt@cvs.openbsd.org 2006/03/20 18:42:27
[openssh.git] / sshconnect.c
index 92f0f3800afc809698e6df8751dcb1c3a166fc88..33961e4dc169e264846726e03c15bfc19af8c25e 100644 (file)
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: sshconnect.c,v 1.166 2005/06/17 22:53:47 djm Exp $");
 
-#include <openssl/bn.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+
+#include <ctype.h>
+#ifdef HAVE_PATHS_H
+#include <paths.h>
+#endif
 
 #include "ssh.h"
 #include "xmalloc.h"
@@ -31,13 +37,12 @@ RCSID("$OpenBSD: sshconnect.c,v 1.166 2005/06/17 22:53:47 djm Exp $");
 #include "readconf.h"
 #include "atomicio.h"
 #include "misc.h"
-
 #include "dns.h"
 
 char *client_version_string = NULL;
 char *server_version_string = NULL;
 
-int matching_host_key_dns = 0;
+static int matching_host_key_dns = 0;
 
 /* import */
 extern Options options;
@@ -404,7 +409,7 @@ ssh_exchange_identification(void)
                for (i = 0; i < sizeof(buf) - 1; i++) {
                        size_t len = atomicio(read, connection_in, &buf[i], 1);
 
-                       if (len != 1 && errno == EPIPE) 
+                       if (len != 1 && errno == EPIPE)
                                fatal("ssh_exchange_identification: Connection closed by remote host");
                        else if (len != 1)
                                fatal("ssh_exchange_identification: read: %.100s", strerror(errno));
@@ -547,7 +552,7 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
        switch (hostaddr->sa_family) {
        case AF_INET:
                local = (ntohl(((struct sockaddr_in *)hostaddr)->
-                  sin_addr.s_addr) >> 24) == IN_LOOPBACKNET;
+                   sin_addr.s_addr) >> 24) == IN_LOOPBACKNET;
                salen = sizeof(struct sockaddr_in);
                break;
        case AF_INET6:
@@ -604,7 +609,7 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
        file_key = key_new(host_key->type);
 
        /*
-        * Check if the host key is present in the user\'s list of known
+        * Check if the host key is present in the user's list of known
         * hosts or in the systemwide list.
         */
        host_file = user_hostfile;
@@ -680,8 +685,8 @@ check_host_key(char *host, struct sockaddr *hostaddr, Key *host_key,
 
                        if (show_other_keys(host, host_key))
                                snprintf(msg1, sizeof(msg1),
-                                  "\nbut keys of different type are already"
-                                  " known for this host.");
+                                   "\nbut keys of different type are already"
+                                   " known for this host.");
                        else
                                snprintf(msg1, sizeof(msg1), ".");
                        /* The default */
@@ -922,7 +927,7 @@ ssh_login(Sensitive *sensitive, const char *orighost,
        host = xstrdup(orighost);
        for (cp = host; *cp; cp++)
                if (isupper(*cp))
-                       *cp = tolower(*cp);
+                       *cp = (char)tolower(*cp);
 
        /* Exchange protocol version identification strings with the server. */
        ssh_exchange_identification();
@@ -1035,3 +1040,39 @@ warn_changed_key(Key *host_key)
 
        xfree(fp);
 }
+
+/*
+ * Execute a local command
+ */
+int
+ssh_local_cmd(const char *args)
+{
+       char *shell;
+       pid_t pid;
+       int status;
+
+       if (!options.permit_local_command ||
+           args == NULL || !*args)
+               return (1);
+
+       if ((shell = getenv("SHELL")) == NULL)
+               shell = _PATH_BSHELL;
+
+       pid = fork();
+       if (pid == 0) {
+               debug3("Executing %s -c \"%s\"", shell, args);
+               execl(shell, shell, "-c", args, (char *)NULL);
+               error("Couldn't execute %s -c \"%s\": %s",
+                   shell, args, strerror(errno));
+               _exit(1);
+       } else if (pid == -1)
+               fatal("fork failed: %.100s", strerror(errno));
+       while (waitpid(pid, &status, 0) == -1)
+               if (errno != EINTR)
+                       fatal("Couldn't wait for child: %s", strerror(errno));
+
+       if (!WIFEXITED(status))
+               return (1);
+
+       return (WEXITSTATUS(status));
+}
This page took 0.111651 seconds and 4 git commands to generate.