]> andersk Git - openssh.git/blobdiff - sshconnect2.c
- djm@cvs.openbsd.org 2010/01/30 02:54:53
[openssh.git] / sshconnect2.c
index 937bb773dd647610b7d8a140d05ce5b08b628b95..e81064daed1c049e5cb2837d6fa6b5cb8d2742c8 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshconnect2.c,v 1.173 2009/10/24 11:13:54 andreas Exp $ */
+/* $OpenBSD: sshconnect2.c,v 1.179 2010/01/13 01:20:20 dtucker Exp $ */
 /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
  * Copyright (c) 2008 Damien Miller.  All rights reserved.
@@ -32,6 +32,7 @@
 #include <sys/stat.h>
 
 #include <errno.h>
+#include <fcntl.h>
 #include <netdb.h>
 #include <pwd.h>
 #include <signal.h>
@@ -420,7 +421,7 @@ input_userauth_banner(int type, u_int32_t seq, void *ctxt)
                if (len > 65536)
                        len = 65536;
                msg = xmalloc(len * 4 + 1); /* max expansion from strnvis() */
-               strnvis(msg, raw, len * 4 + 1, VIS_SAFE|VIS_OCTAL);
+               strnvis(msg, raw, len * 4 + 1, VIS_SAFE|VIS_OCTAL|VIS_NOSLASH);
                fprintf(stderr, "%s", msg);
                xfree(msg);
        }
@@ -803,6 +804,8 @@ userauth_passwd(Authctxt *authctxt)
        static int attempt = 0;
        char prompt[150];
        char *password;
+       const char *host = options.host_key_alias ?  options.host_key_alias :
+           authctxt->host;
 
        if (attempt++ >= options.number_of_password_prompts)
                return 0;
@@ -811,7 +814,7 @@ userauth_passwd(Authctxt *authctxt)
                error("Permission denied, please try again.");
 
        snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ",
-           authctxt->server_user, authctxt->host);
+           authctxt->server_user, host);
        password = read_passphrase(prompt, 0);
        packet_start(SSH2_MSG_USERAUTH_REQUEST);
        packet_put_cstring(authctxt->server_user);
@@ -840,6 +843,8 @@ input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt)
        Authctxt *authctxt = ctxt;
        char *info, *lang, *password = NULL, *retype = NULL;
        char prompt[150];
+       const char *host = options.host_key_alias ? options.host_key_alias :
+           authctxt->host;
 
        debug2("input_userauth_passwd_changereq");
 
@@ -860,7 +865,7 @@ input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt)
        packet_put_char(1);                     /* additional info */
        snprintf(prompt, sizeof(prompt),
            "Enter %.30s@%.128s's old password: ",
-           authctxt->server_user, authctxt->host);
+           authctxt->server_user, host);
        password = read_passphrase(prompt, 0);
        packet_put_cstring(password);
        memset(password, 0, strlen(password));
@@ -869,7 +874,7 @@ input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt)
        while (password == NULL) {
                snprintf(prompt, sizeof(prompt),
                    "Enter %.30s@%.128s's new password: ",
-                   authctxt->server_user, authctxt->host);
+                   authctxt->server_user, host);
                password = read_passphrase(prompt, RP_ALLOW_EOF);
                if (password == NULL) {
                        /* bail out */
@@ -877,7 +882,7 @@ input_userauth_passwd_changereq(int type, u_int32_t seqnr, void *ctxt)
                }
                snprintf(prompt, sizeof(prompt),
                    "Retype %.30s@%.128s's new password: ",
-                   authctxt->server_user, authctxt->host);
+                   authctxt->server_user, host);
                retype = read_passphrase(prompt, 0);
                if (strcmp(password, retype) != 0) {
                        memset(password, 0, strlen(password));
@@ -1245,7 +1250,7 @@ load_identity_file(char *filename)
 {
        Key *private;
        char prompt[300], *passphrase;
-       int perm_ok, quit, i;
+       int perm_ok = 0, quit, i;
        struct stat st;
 
        if (stat(filename, &st) < 0) {
@@ -1509,7 +1514,7 @@ ssh_keysign(Key *key, u_char **sigp, u_int *lenp,
        debug2("ssh_keysign called");
 
        if (stat(_PATH_SSH_KEY_SIGN, &st) < 0) {
-               error("ssh_keysign: no installed: %s", strerror(errno));
+               error("ssh_keysign: not installed: %s", strerror(errno));
                return -1;
        }
        if (fflush(stdout) != 0)
@@ -1527,6 +1532,8 @@ ssh_keysign(Key *key, u_char **sigp, u_int *lenp,
                return -1;
        }
        if (pid == 0) {
+               /* keep the socket on exec */
+               fcntl(packet_get_connection_in(), F_SETFD, 0);
                permanently_drop_suid(getuid());
                close(from[0]);
                if (dup2(from[1], STDOUT_FILENO) < 0)
@@ -1579,10 +1586,10 @@ userauth_hostbased(Authctxt *authctxt)
        Sensitive *sensitive = authctxt->sensitive;
        Buffer b;
        u_char *signature, *blob;
-       char *chost, *pkalg, *p, myname[NI_MAXHOST];
+       char *chost, *pkalg, *p;
        const char *service;
        u_int blen, slen;
-       int ok, i, len, found = 0;
+       int ok, i, found = 0;
 
        /* check for a useful key */
        for (i = 0; i < sensitive->nkeys; i++) {
@@ -1603,23 +1610,13 @@ userauth_hostbased(Authctxt *authctxt)
                return 0;
        }
        /* figure out a name for the client host */
-       p = NULL;
-       if (packet_connection_is_on_socket())
-               p = get_local_name(packet_get_connection_in());
-       if (p == NULL) {
-               if (gethostname(myname, sizeof(myname)) == -1) {
-                       verbose("userauth_hostbased: gethostname: %s", 
-                           strerror(errno));
-               } else
-                       p = xstrdup(myname);
-       }
+       p = get_local_name(packet_get_connection_in());
        if (p == NULL) {
                error("userauth_hostbased: cannot get local ipaddr/name");
                key_free(private);
                xfree(blob);
                return 0;
        }
-       len = strlen(p) + 2;
        xasprintf(&chost, "%s.", p);
        debug2("userauth_hostbased: chost %s", chost);
        xfree(p);
This page took 0.142028 seconds and 4 git commands to generate.