]> andersk Git - openssh.git/blobdiff - ssh-keysign.c
- (tim) [contrib/cygwin/README] add minires-devel requirement. Patch from
[openssh.git] / ssh-keysign.c
index bed2b987488192d3cda86bcb5dbe73ef6d20bca0..e642948a0f78c4ebc0e784b725cfe17367402c32 100644 (file)
@@ -22,7 +22,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "includes.h"
-RCSID("$OpenBSD: ssh-keysign.c,v 1.6 2002/07/03 09:55:38 markus Exp $");
+RCSID("$OpenBSD: ssh-keysign.c,v 1.16 2004/04/18 23:10:26 djm Exp $");
 
 #include <openssl/evp.h>
 #include <openssl/rand.h>
@@ -30,6 +30,7 @@ RCSID("$OpenBSD: ssh-keysign.c,v 1.6 2002/07/03 09:55:38 markus Exp $");
 
 #include "log.h"
 #include "key.h"
+#include "ssh.h"
 #include "ssh2.h"
 #include "misc.h"
 #include "xmalloc.h"
@@ -39,6 +40,10 @@ RCSID("$OpenBSD: ssh-keysign.c,v 1.6 2002/07/03 09:55:38 markus Exp $");
 #include "msg.h"
 #include "canohost.h"
 #include "pathnames.h"
+#include "readconf.h"
+
+/* XXX readconf.c needs these */
+uid_t original_real_uid;
 
 #ifdef HAVE___PROGNAME
 extern char *__progname;
@@ -51,7 +56,7 @@ valid_request(struct passwd *pw, char *host, Key **ret, u_char *data,
     u_int datalen)
 {
        Buffer b;
-       Key *key;
+       Key *key = NULL;
        u_char *pkblob;
        u_int blen, len;
        char *pkalg, *p;
@@ -121,6 +126,7 @@ valid_request(struct passwd *pw, char *host, Key **ret, u_char *data,
        /* end of message */
        if (buffer_len(&b) != 0)
                fail++;
+       buffer_free(&b);
 
        debug3("valid_request: fail %d", fail);
 
@@ -136,6 +142,7 @@ int
 main(int argc, char **argv)
 {
        Buffer b;
+       Options options;
        Key *keys[2], *key;
        struct passwd *pw;
        int key_fd[2], i, found, version = 2, fd;
@@ -158,6 +165,15 @@ main(int argc, char **argv)
        log_init("ssh-keysign", SYSLOG_LEVEL_DEBUG3, SYSLOG_FACILITY_AUTH, 0);
 #endif
 
+       /* verify that ssh-keysign is enabled by the admin */
+       original_real_uid = getuid();   /* XXX readconf.c needs this */
+       initialize_options(&options);
+       (void)read_config_file(_PATH_HOST_CONFIG_FILE, "", &options, 0);
+       fill_default_options(&options);
+       if (options.enable_ssh_keysign != 1)
+               fatal("ssh-keysign not enabled in %s",
+                   _PATH_HOST_CONFIG_FILE);
+
        if (key_fd[0] == -1 && key_fd[1] == -1)
                fatal("could not open any host key");
 
@@ -178,13 +194,6 @@ main(int argc, char **argv)
                keys[i] = key_load_private_pem(key_fd[i], KEY_UNSPEC,
                    NULL, NULL);
                close(key_fd[i]);
-               if (keys[i] != NULL && keys[i]->type == KEY_RSA) {
-                       if (RSA_blinding_on(keys[i]->rsa, NULL) != 1) {
-                               error("RSA_blinding_on failed");
-                               key_free(keys[i]);
-                               keys[i] = NULL;
-                       }
-               }
                if (keys[i] != NULL)
                        found = 1;
        }
@@ -192,8 +201,8 @@ main(int argc, char **argv)
                fatal("no hostkey found");
 
        buffer_init(&b);
-       if (msg_recv(STDIN_FILENO, &b) < 0)
-               fatal("msg_recv failed");
+       if (ssh_msg_recv(STDIN_FILENO, &b) < 0)
+               fatal("ssh_msg_recv failed");
        if (buffer_get_char(&b) != version)
                fatal("bad version");
        fd = buffer_get_int(&b);
@@ -225,7 +234,8 @@ main(int argc, char **argv)
        /* send reply */
        buffer_clear(&b);
        buffer_put_string(&b, signature, slen);
-       msg_send(STDOUT_FILENO, version, &b);
+       if (ssh_msg_send(STDOUT_FILENO, version, &b) == -1)
+               fatal("ssh_msg_send failed");
 
        return (0);
 }
This page took 0.158061 seconds and 4 git commands to generate.