Annotation of embedaddon/bird2/proto/rpki/ssh_transport.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  *     BIRD -- An implementation of the SSH protocol for the RPKI transport
                      3:  *
                      4:  *     (c) 2015 CZ.NIC
                      5:  *     (c) 2015 Pavel Tvrdik <pawel.tvrdik@gmail.com>
                      6:  *
                      7:  *     This file was a part of RTRlib: http://rpki.realmv6.org/
                      8:  *     This transport implementation uses libssh (http://www.libssh.org/)
                      9:  *
                     10:  *     Can be freely distributed and used under the terms of the GNU GPL.
                     11:  */
                     12: 
                     13: #include <stdio.h>
                     14: #include <stdlib.h>
                     15: #include <string.h>
                     16: #include <sys/time.h>
                     17: 
                     18: #include "rpki.h"
                     19: 
                     20: static int
                     21: rpki_tr_ssh_open(struct rpki_tr_sock *tr)
                     22: {
                     23:   struct rpki_cache *cache = tr->cache;
                     24:   struct rpki_config *cf = (void *) cache->p->p.cf;
                     25:   struct rpki_tr_ssh_config *ssh_cf = (void *) cf->tr_config.spec;
                     26:   sock *sk = tr->sk;
                     27: 
                     28:   sk->type = SK_SSH_ACTIVE;
                     29:   sk->ssh = mb_allocz(sk->pool, sizeof(struct ssh_sock));
                     30:   sk->ssh->username = ssh_cf->user;
                     31:   sk->ssh->client_privkey_path = ssh_cf->bird_private_key;
                     32:   sk->ssh->server_hostkey_path = ssh_cf->cache_public_key;
                     33:   sk->ssh->subsystem = "rpki-rtr";
                     34:   sk->ssh->state = SK_SSH_CONNECT;
                     35: 
                     36:   if (sk_open(sk) != 0)
                     37:     return RPKI_TR_ERROR;
                     38: 
                     39:   return RPKI_TR_SUCCESS;
                     40: }
                     41: 
                     42: static const char *
                     43: rpki_tr_ssh_ident(struct rpki_tr_sock *tr)
                     44: {
                     45:   struct rpki_cache *cache = tr->cache;
                     46:   struct rpki_config *cf = (void *) cache->p->p.cf;
                     47:   struct rpki_tr_ssh_config *ssh_cf = (void *) cf->tr_config.spec;
                     48: 
                     49:   if (tr->ident != NULL)
                     50:     return tr->ident;
                     51: 
                     52:   const char *username = ssh_cf->user;
                     53:   const char *host = cf->hostname;
                     54:   u16 port = cf->port;
                     55: 
                     56:   size_t len = strlen(username) + 1 + strlen(host) + 1 + 5 + 1; /* <user> + '@' + <host> + ':' + <port> + '\0' */
                     57:   char *ident = mb_alloc(cache->pool, len);
                     58:   bsnprintf(ident, len, "%s@%s:%u", username, host, port);
                     59:   tr->ident = ident;
                     60: 
                     61:   return tr->ident;
                     62: }
                     63: 
                     64: /**
                     65:  * rpki_tr_ssh_init - initializes the RPKI transport structure for a SSH connection
                     66:  * @tr: allocated RPKI transport structure
                     67:  */
                     68: void
                     69: rpki_tr_ssh_init(struct rpki_tr_sock *tr)
                     70: {
                     71:   tr->open_fp = &rpki_tr_ssh_open;
                     72:   tr->ident_fp = &rpki_tr_ssh_ident;
                     73: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>