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>