Annotation of embedaddon/strongswan/src/libcharon/plugins/vici/perl/Vici-Session/README.pod, revision 1.1.1.1

1.1       misho       1: 
                      2: =head1 NAME
                      3: 
                      4: Vici::Session - Perl binding for the strongSwan VICI configuration interface
                      5: 
                      6: =head1 DESCRIPTION
                      7: 
                      8: The Vici::Session module allows a Perl script to communicate with the open
                      9: source strongSwan IPsec daemon (https://www.strongswan.org) via the documented
                     10: Versatile IKE Configuration Interface (VICI). VICI allows the configuration,
                     11: management and monitoring of multiple IPsec connections.
                     12: 
                     13: =head1 INSTALLATION
                     14: 
                     15: To install this module type the following:
                     16: 
                     17:   perl Makefile.PL
                     18:   make
                     19:   make install
                     20: 
                     21: =head1 DEPENDENCIES
                     22: 
                     23: This module requires the standard networking module:
                     24: 
                     25:   IO::Socket::UNIX
                     26: 
                     27: =head1 METHODS
                     28: 
                     29: The following examples show the use of the Vici::Session interface in a
                     30: a "net-net" connection between the VPN gateways "moon" and "sun".
                     31: 
                     32: =cut
                     33: 
                     34: use strict;
                     35: use warnings;
                     36: use IO::Socket::UNIX;
                     37: use Vici::Message;
                     38: use Vici::Session;
                     39: 
                     40: my $moon_key = "-----BEGIN RSA PRIVATE KEY-----\n" .
                     41:     "MIIEowIBAAKCAQEApHwF+sUXQdH+WwYzdPMzpjuwhGGvHgsmBah1IQsPsddL9gZy" .
                     42:     "gerzpTM1vvQ4kbRuvE3SZWLf9uKEbiQV9IABr87L9JAva56EHIAiUMuG8WizVbIK" .
                     43:     "IhQlZc8S2mIwAW0Jc6EmnoJv9j6F/tVD9+6xvMJbwHLi0h7BUO9tBVLPy72YeGNB" .
                     44:     "Y6Cob4CrOuFOJyACezJ7i9vZ+XzOfnXpu7qL0DgYP/n2maPEJGEivTFunkJD/mJ8" .
                     45:     "DecyLTQcchsCj2118BMuf2qjVn4UWPCBBuhyYK5wsATB1ANeAtlFfgH+wsuHjZwt" .
                     46:     "TJru05lGHBZ3F2hZ9PO68hVHbIZZj6SB8X47nwIDAQABAoIBAAQDXqX6rxGVDQ6t" .
                     47:     "fQ3qbSUuKaVhOMOT5A6ZSJpQycY+CYVsLNkMoXszX6lUDhlH/Letcme03OAKMM77" .
                     48:     "JGn9wYzHj+RcrDuE95Y2bh/oh1dWhaGeoW6pbSwpvD0FzkQKpANlOCr/5bltVxmb" .
                     49:     "nHftI/sGBvUQGIal53ORE+jgV1+SK6I0oAIWiCpU2oZpYMAtp7WxOngsAJaGtk//" .
                     50:     "m2ckH+T8uVHwe9gJ9HZnEk+Io6BXScMNNrsbd2J+pQ75wQXfzHEzHAj+ElhWzhtc" .
                     51:     "5XefqHw/DfpPDX/lby3VoSoagqzsVuUx7LylgzIDxTsb9HQVOLjDzOQ+vn22Xj7g" .
                     52:     "UCEjwLkCgYEA2EZguuzJdxRIWBSnIyzpCzfqm0EgybpeLuJVfzWla0yKWI6AeLhW" .
                     53:     "cr+7o9UE8nCQHVffIrgjWksjc/S5FhzC9TYSHpPa8TPgebTQK4VxnP9Qkh/XRpJj" .
                     54:     "CqgJ8k2MYleHYxa+AKQv/25yNhLdowkNR0iU1kbiaYRJMP0WigAmdAUCgYEAwrJe" .
                     55:     "Y3LAawOkalJFMFTtLXsqZE91TFwMt9TQnzysGH3Q6+9N+qypS5KCes650+qgrwBV" .
                     56:     "RmRNc1ixylToP3B0BKY5OD/BwMx1L/zSO3x7I4ZDasCu33y2ukGLcVSxrxTPTGdd" .
                     57:     "8fhEiVO1CDXcM08/kSeQa049J8ziY3M+4NDchlMCgYEAw2VCO1923Tjb64gtQOBw" .
                     58:     "ZAxOz5nVz6urL9yYted33is2yq9kbqzMnbuQAYKRh6Ae9APRuwJ2HjvIehjdp5aw" .
                     59:     "pO4HDM00f7sI0ayEbu2PKfKZjotp6X6UMKqE4f8iGC9QSDvhyZ6NJs9YLHZ6+7NP" .
                     60:     "5dkzbyx3njFAFxxxYpikJSkCgYByShB8YlUvvKCcRRUWbRQZWa6l2brqizJwCz43" .
                     61:     "636+lcS5au2klAyBL0zm2Elfa+DNOe3U93Y7mrorIrJ+4v1H6We3bD3JdnvoIooq" .
                     62:     "n0UNsngKx3cf++6r4WQAsA3pz9ZsbFVKgEmDL58aZbuQZxnSlJ4DT5c4sN3IMVOc" .
                     63:     "1x5MvwKBgHudAaLvioIopBpYzOsK2OtEn6NQ7SwH0BLEUulHysaHqan5oExmM1bm" .
                     64:     "YeivMDc9hj0YLXA47ryQHTx4vB5Nv3TI/LoUG6VrCvZvocQOXe/n7TguwAjJj7ef" .
                     65:     "E55Gy8lXDRENyJMP1vif3N2iH8eQ1ASf8k/+gnBNkjSlYSSQUDfV\n" .
                     66:     "-----END RSA PRIVATE KEY-----\n";
                     67: 
                     68: my $moon_cert = "-----BEGIN CERTIFICATE-----\n" .
                     69:     "MIIEIjCCAwqgAwIBAgIBKzANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJDSDEZ" .
                     70:     "MBcGA1UEChMQTGludXggc3Ryb25nU3dhbjEbMBkGA1UEAxMSc3Ryb25nU3dhbiBS" .
                     71:     "b290IENBMB4XDTE0MDgyNzE0NDQ1NloXDTE5MDgyNjE0NDQ1NlowRjELMAkGA1UE" .
                     72:     "BhMCQ0gxGTAXBgNVBAoTEExpbnV4IHN0cm9uZ1N3YW4xHDAaBgNVBAMTE21vb24u" .
                     73:     "c3Ryb25nc3dhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCk" .
                     74:     "fAX6xRdB0f5bBjN08zOmO7CEYa8eCyYFqHUhCw+x10v2BnKB6vOlMzW+9DiRtG68" .
                     75:     "TdJlYt/24oRuJBX0gAGvzsv0kC9rnoQcgCJQy4bxaLNVsgoiFCVlzxLaYjABbQlz" .
                     76:     "oSaegm/2PoX+1UP37rG8wlvAcuLSHsFQ720FUs/LvZh4Y0FjoKhvgKs64U4nIAJ7" .
                     77:     "MnuL29n5fM5+dem7uovQOBg/+faZo8QkYSK9MW6eQkP+YnwN5zItNBxyGwKPbXXw" .
                     78:     "Ey5/aqNWfhRY8IEG6HJgrnCwBMHUA14C2UV+Af7Cy4eNnC1Mmu7TmUYcFncXaFn0" .
                     79:     "87ryFUdshlmPpIHxfjufAgMBAAGjggEaMIIBFjAJBgNVHRMEAjAAMAsGA1UdDwQE" .
                     80:     "AwIDqDAdBgNVHQ4EFgQU2CY9Iex8275aOQxbcMsDgCHerhMwbQYDVR0jBGYwZIAU" .
                     81:     "XafdcAZRMn7ntm2zteXgYOouTe+hSaRHMEUxCzAJBgNVBAYTAkNIMRkwFwYDVQQK" .
                     82:     "ExBMaW51eCBzdHJvbmdTd2FuMRswGQYDVQQDExJzdHJvbmdTd2FuIFJvb3QgQ0GC" .
                     83:     "AQAwHgYDVR0RBBcwFYITbW9vbi5zdHJvbmdzd2FuLm9yZzATBgNVHSUEDDAKBggr" .
                     84:     "BgEFBQcDATA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vY3JsLnN0cm9uZ3N3YW4u" .
                     85:     "b3JnL3N0cm9uZ3N3YW4uY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQCpnj6Nc+PuPLPi" .
                     86:     "4E3g5hyJkr5VZy7SSglcs1uyVP2mfwj6JR9SLd5+JOsL1aCTm0y9qLcqdbHBxG8i" .
                     87:     "LNLtwVKU3s1hV4EIO3saHe4XUEjxN9bDtLWEoeq5ipmYX8RJ/fXKR8/8vurBARP2" .
                     88:     "xu1+wqwEhymp4jBmF0LVovT1+o+GhH66zIJnx3zR9BtfMkaeL6804hrx2ygeopeo" .
                     89:     "buGvMDQ8HcnMB9OU7Y8fK0oY1kULl6hf36K5ApPA6766sRRKRvBSKlmViKSQTq5a" .
                     90:     "4c8gCWAZbtdT+N/fa8hKDlZt5q10EgjTqDfGTj50xKvAneq7XdfKmYYGnIWoNLY9" .
                     91:     "ga8NOzX8\n" .
                     92:     "-----END CERTIFICATE-----\n";
                     93: 
                     94: my $ca_cert = "-----BEGIN CERTIFICATE-----\n" .
                     95:     "MIIDuDCCAqCgAwIBAgIBADANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJDSDEZ" .
                     96:     "MBcGA1UEChMQTGludXggc3Ryb25nU3dhbjEbMBkGA1UEAxMSc3Ryb25nU3dhbiBS" .
                     97:     "b290IENBMB4XDTA0MDkxMDEwMDExOFoXDTE5MDkwNzEwMDExOFowRTELMAkGA1UE" .
                     98:     "BhMCQ0gxGTAXBgNVBAoTEExpbnV4IHN0cm9uZ1N3YW4xGzAZBgNVBAMTEnN0cm9u" .
                     99:     "Z1N3YW4gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/y" .
                    100:     "X2LqPVZuWLPIeknK86xhz6ljd3NNhC2z+P1uoCP3sBMuZiZQEjFzhnKcbXxCeo2f" .
                    101:     "FnvhOOjrrisSuVkzuu82oxXD3fIkzuS7m9V4E10EZzgmKWIf+WuNRfbgAuUINmLc" .
                    102:     "4YGAXBQLPyzpP4Ou48hhz/YQo58Bics6PHy5v34qCVROIXDvqhj91P8g+pS+F21/" .
                    103:     "7P+CH2jRcVIEHZtG8M/PweTPQ95dPzpYd2Ov6SZ/U7EWmbMmT8VcUYn1aChxFmy5" .
                    104:     "gweVBWlkH6MP+1DeE0/tL5c87xo5KCeGK8Tdqpe7sBRC4pPEEHDQciTUvkeuJ1Pr" .
                    105:     "K+1LwdqRxo7HgMRiDw8CAwEAAaOBsjCBrzASBgNVHRMBAf8ECDAGAQH/AgEBMAsG" .
                    106:     "A1UdDwQEAwIBBjAdBgNVHQ4EFgQUXafdcAZRMn7ntm2zteXgYOouTe8wbQYDVR0j" .
                    107:     "BGYwZIAUXafdcAZRMn7ntm2zteXgYOouTe+hSaRHMEUxCzAJBgNVBAYTAkNIMRkw" .
                    108:     "FwYDVQQKExBMaW51eCBzdHJvbmdTd2FuMRswGQYDVQQDExJzdHJvbmdTd2FuIFJv" .
                    109:     "b3QgQ0GCAQAwDQYJKoZIhvcNAQELBQADggEBACOSmqEBtBLR9aV3UyCI8gmzR5in" .
                    110:     "Lte9aUXXS+qis6F2h2Stf4sN+Nl6Gj7REC6SpfEH4wWdwiUL5J0CJhyoOjQuDl3n" .
                    111:     "1Dw3dE4/zqMZdyDKEYTU75TmvusNJBdGsLkrf7EATAjoi/nrTOYPPhSUZvPp/D+Y" .
                    112:     "vORJ9Ej51GXlK1nwEB5iA8+tDYniNQn6BD1MEgIejzK+fbiy7braZB1kqhoEr2Si" .
                    113:     "7luBSnU912sw494E88a2EWbmMvg2TVHPNzCpVkpNk7kifCiwmw9VldkqYy9y/lCa" .
                    114:     "Epyp7lTfKw7cbD04Vk8QJW782L6Csuxkl346b17wmOqn8AZips3tFsuAY3w=\n" .
                    115:     "-----END CERTIFICATE-----\n" ;
                    116: 
                    117: =pod
                    118: 
                    119: The VICI interface requires a UNIX socket in order to communicate with the
                    120: strongSwan charon daemon:
                    121: 
                    122:   use IO::Socket::UNIX;
                    123: 
                    124:   my $socket = IO::Socket::UNIX->new(
                    125:           Type => SOCK_STREAM,
                    126:           Peer => '/var/run/charon.vici',
                    127:   ) or die "Vici socket: $!";
                    128: 
                    129: =cut
                    130: 
                    131: my $socket = IO::Socket::UNIX->new(
                    132:             Type => SOCK_STREAM,
                    133:             Peer => '/var/run/charon.vici',
                    134: ) or die "Vici socket: $!";
                    135: 
                    136: =over
                    137: 
                    138: =item new()
                    139: 
                    140: creates a new Vici::Session object.
                    141: 
                    142:   use Vici::Session;
                    143:   use Vici::Message;
                    144: 
                    145:   my $session = Vici::Session->new($socket);
                    146: 
                    147: =cut
                    148: 
                    149: my $session = Vici::Session->new($socket);
                    150: 
                    151: =item version()
                    152: 
                    153: returns daemon and system specific version information.
                    154: 
                    155:   my $version = $session->version();
                    156: 
                    157: =cut
                    158: 
                    159: print "----- version -----\n";
                    160: my $version = $session->version();
                    161: print $version->raw(), "\n";
                    162: 
                    163: =item load_cert()
                    164: 
                    165: loads a certificate into the daemon.
                    166: 
                    167:   my %vars = ( type => 'X509', flag => 'CA', data => $ca_cert );
                    168:   my ($res, $errmsg) = $session->load_cert(Vici::Message->new(\%vars));
                    169: 
                    170: =cut
                    171: 
                    172: print "----- load-cert -----\n";
                    173: my %vars = ( type => 'X509', flag => 'CA', data => $ca_cert );
                    174: my ($res, $errmsg) = $session->load_cert(Vici::Message->new(\%vars));
                    175: print $res ? "ok\n" : "failed: $errmsg\n";
                    176: 
                    177: =item load_key()
                    178: 
                    179: loads a private key into the daemon.
                    180: 
                    181:   my %vars = ( type => 'RSA', data => $moon_key );
                    182:   my ($res, $errmsg) = $session->load_key(Vici::Message->new(\%vars));
                    183: 
                    184: =cut
                    185: 
                    186: print "----- load-key -----\n";
                    187: %vars = ( type => 'RSA', data => $moon_key );
                    188: ($res, $errmsg) = $session->load_key(Vici::Message->new(\%vars));
                    189: print $res ? "ok\n" : "failed: $errmsg\n";
                    190: 
                    191: =item load_shared()
                    192: 
                    193: loads a shared IKE PSK, EAP or XAuth secret into the daemon.
                    194: 
                    195:   my @owners = ( 'carol' );
                    196:   my %vars = ( type => 'EAP', data => 'Ar3etTnp', owners => \@owners );
                    197:   my ($res, $errmsg) = $session->load_shared(Vici::Message->new(\%vars));
                    198: 
                    199: =cut
                    200: 
                    201: print "----- load-shared -----\n";
                    202: my @owners = ( 'carol' );
                    203: %vars = ( type => 'EAP', data => 'Ar3etTnp', owners => \@owners );
                    204: ($res, $errmsg) = $session->load_shared(Vici::Message->new(\%vars));
                    205: print $res ? "ok\n" : "failed: $errmsg\n";
                    206: 
                    207: =item load_authority()
                    208: 
                    209: loads a single certification authority definition into the daemon. An existing
                    210: authority with the same name gets replaced.
                    211: 
                    212:   my @crl_uris  = ( 'http://crl.strongswan.org/strongswan.crl' );
                    213:   my @ocsp_uris = ( 'http://ocsp.strongswan.org:8880' );
                    214: 
                    215:   my %auth = (
                    216:       cacert => $ca_cert,
                    217:       crl_uris  => \@crl_uris,
                    218:       ocsp_uris => \@ocsp_uris
                    219:   );
                    220: 
                    221:   my %vars = ( strongswan => \%auth );
                    222:   my ($res, $errmsg) = $session->load_authority(Vici::Message->new(\%vars));
                    223: 
                    224: =cut
                    225: 
                    226: print "----- load-authority -----\n";
                    227: my @crl_uris  = ( 'http://crl.strongswan.org/strongswan.crl' );
                    228: my @ocsp_uris = ( 'http://ocsp.strongswan.org:8880' );
                    229: my %auth = (
                    230:     cacert => $ca_cert,
                    231:     crl_uris  => \@crl_uris,
                    232:     ocsp_uris => \@ocsp_uris
                    233: );
                    234: %vars = ( strongswan => \%auth );
                    235: ($res, $errmsg) = $session->load_authority(Vici::Message->new(\%vars));
                    236: print $res ? "ok\n" : "failed: $errmsg\n";
                    237: 
                    238: =item load_conn()
                    239: 
                    240: loads a single connection definition into the daemon. An existing connection
                    241: with the same name gets updated or replaced.
                    242: 
                    243:   my @l_ts = ( '10.1.0.0/16' );
                    244:   my @r_ts = ( '10.2.0.0/16' );
                    245:   my @esp  = ( 'aes128gcm128-modp3072' );
                    246: 
                    247:   my %child = (
                    248:       local_ts  => \@l_ts,
                    249:       remote_ts => \@r_ts,
                    250:       esp_proposals => \@esp,
                    251:   );
                    252:   my %children = ( 'net-net' => \%child );
                    253: 
                    254:   my @l_addrs = ( '192.168.0.1' );
                    255:   my @r_addrs = ( '192.168.0.2' );
                    256:   my @l_certs = ( $moon_cert );
                    257:   my %l = ( auth => 'pubkey', id => 'moon.strongswan.org',
                    258:             certs => \@l_certs );
                    259:   my %r = ( auth => 'pubkey', id => 'sun.strongswan.org');
                    260:   my @ike = ( 'aes128-sha256-modp3072' );
                    261: 
                    262:   my %gw = (
                    263:       version => 2,
                    264:       mobike => 'no',
                    265:       proposals => \@ike,
                    266:       local_addrs  => \@l_addrs,
                    267:       remote_addrs => \@r_addrs,
                    268:       local  => \%l,
                    269:       remote => \%r,
                    270:       children => \%children,
                    271:   );
                    272: 
                    273:   my %vars = ( 'gw-gw' => \%gw);
                    274:   my ($res, $errmsg) = $session->load_conn(Vici::Message->new(\%vars));
                    275: 
                    276: =cut
                    277: 
                    278: print "----- load-conn -----\n";
                    279: my @l_ts = ( '10.1.0.0/16' );
                    280: my @r_ts = ( '10.2.0.0/16' );
                    281: my @esp  = ( 'aes128gcm128-modp3072' );
                    282: my %child = (
                    283:     local_ts  => \@l_ts,
                    284:     remote_ts => \@r_ts,
                    285:     esp_proposals => \@esp,
                    286: );
                    287: my %children = ( 'net-net' => \%child );
                    288: my @l_addrs = ( '192.168.0.1' );
                    289: my @r_addrs = ( '192.168.0.2' );
                    290: my @l_certs = ( $moon_cert );
                    291: my %l = ( auth => 'pubkey', id => 'moon.strongswan.org', certs => \@l_certs );
                    292: my %r = ( auth => 'pubkey', id => 'sun.strongswan.org');
                    293: my @ike = ( 'aes128-sha256-modp3072' );
                    294: my %gw = (
                    295:     version => 2,
                    296:     mobike => 'no',
                    297:     proposals => \@ike,
                    298:     local_addrs  => \@l_addrs,
                    299:     remote_addrs => \@r_addrs,
                    300:     local  => \%l,
                    301:     remote => \%r,
                    302:     children => \%children,
                    303: );
                    304: %vars = ( 'gw-gw' => \%gw);
                    305: ($res, $errmsg) = $session->load_conn(Vici::Message->new(\%vars));
                    306: print $res ? "ok\n" : "failed: $errmsg\n";
                    307: 
                    308: =item get_algorithms()
                    309: 
                    310: lists all currently loaded algorithms and their implementation.
                    311: 
                    312:   my $algs = $session->get_algorithms();
                    313: 
                    314: =cut
                    315: 
                    316: print "----- get-algorithms -----\n";
                    317: my $algs = $session->get_algorithms();
                    318: print $algs->raw(), "\n";
                    319: 
                    320: =item get_conns()
                    321: 
                    322: returns a list of connection names loaded exclusively over VICI, not including
                    323: connections found in other backends.
                    324: 
                    325:   my $conns = $session->get_conns();
                    326: 
                    327: =cut
                    328: 
                    329: print "----- get-conns -----\n";
                    330: my $conns = $session->get_conns();
                    331: print $conns->raw(), "\n";
                    332: 
                    333: =item list_conns()
                    334: 
                    335: lists currently loaded connections by streaming list-conn events. This
                    336: call includes all connections known by the daemon, not only those loaded
                    337: over VICI.
                    338: 
                    339:   my $conns = $session->list_conns();
                    340: 
                    341:   foreach my $conn (@$conns)
                    342:   {
                    343:       print $conn->raw(), "\n";
                    344:   }
                    345: 
                    346: =cut
                    347: 
                    348: print "----- list-conns -----\n";
                    349: $conns = $session->list_conns();
                    350: foreach my $conn (@$conns)
                    351: {
                    352:     print $conn->raw(), "\n";
                    353: }
                    354: 
                    355: =item initiate()
                    356: 
                    357: initiates a CHILD_SA.
                    358: 
                    359:   my %vars = ( child => 'net-net' );
                    360:   my($res, $errmsg) = $session->initiate(Vici::Message->new(\%vars));
                    361: 
                    362: =cut
                    363: 
                    364: print "----- initiate -----\n";
                    365: %vars = ( child => 'net-net' );
                    366: ($res, $errmsg) = $session->initiate(Vici::Message->new(\%vars));
                    367: print $res ? "ok\n" : "failed: $errmsg\n";
                    368: 
                    369: =item list_sas()
                    370: 
                    371: lists currently active IKE_SAs and associated CHILD_SAs by streaming list-sa
                    372: events.
                    373: 
                    374:   my $sas = $session->list_sas();
                    375: 
                    376:   foreach my $sa (@$sas)
                    377:   {
                    378:       print $sa->raw(), "\n";
                    379:   }
                    380: 
                    381: =cut
                    382: 
                    383: print "----- list-sas -----\n";
                    384: my $sas = $session->list_sas();
                    385: foreach my $sa (@$sas)
                    386: {
                    387:     print $sa->raw(), "\n";
                    388: }
                    389: 
                    390: =item get_authorities()
                    391: 
                    392: returns a list of currently loaded certification authority names.
                    393: 
                    394:   my $auths = $session->get_authorities();
                    395: 
                    396: =cut
                    397: 
                    398: print "----- get-authorities -----\n";
                    399: my $auths = $session->get_authorities();
                    400: print $auths->raw(), "\n";
                    401: 
                    402: =item list-authorities()
                    403: 
                    404: lists currently loaded certification authority information by streaming
                    405: list-authority events.
                    406: 
                    407:   my $auths = $session->list_authorities();
                    408: 
                    409:   foreach my $auth (@$auths)
                    410:   {
                    411:       print $auth->raw(), "\n";
                    412:   }
                    413: 
                    414: =cut
                    415: 
                    416: print "----- list-authorities -----\n";
                    417: $auths = $session->list_authorities();
                    418: foreach my $auth (@$auths)
                    419: {
                    420:     print $auth->raw(), "\n";
                    421: }
                    422: 
                    423: =item list_certs()
                    424: 
                    425: lists currently loaded certificates by streaming list-cert events. This
                    426: call includes all certificates known by the daemon, not only those loaded
                    427: over VICI.
                    428: 
                    429:   my %vars = ( subject => 'C=CH, O=Linux strongSwan, CN=moon.strongswan.org' );
                    430:   my $certs = $session->list_certs(Vici::Message->new(\%vars));
                    431: 
                    432: =cut
                    433: 
                    434: print "----- list-certs -----\n";
                    435: %vars = ( subject => 'C=CH, O=Linux strongSwan, CN=moon.strongswan.org' );
                    436: my $certs = $session->list_certs(Vici::Message->new(\%vars));
                    437: foreach my $cert (@$certs)
                    438: {
                    439:     my $hash = $cert->hash();
                    440:     print $hash->{'type'}, ": ", length($hash->{'data'}), ' bytes',
                    441:           $hash->{'has_privkey'} ? ', has private key' : '', "\n";
                    442: }
                    443: 
                    444: =item stats()
                    445: 
                    446: returns IKE daemon statistics and load information.
                    447: 
                    448:   my $stats = $session->stats();
                    449: 
                    450: =cut
                    451: 
                    452: print "----- stats -----\n";
                    453: my $stats = $session->stats();
                    454: print $stats->raw(), "\n";
                    455: 
                    456: =item terminate()
                    457: 
                    458: terminates an IKE_SA or CHILD_SA.
                    459: 
                    460:   my %vars = ( ike => 'gw-gw' );
                    461:   my ($res, $errmsg) = $session->terminate(Vici::Message->new(\%vars));
                    462: 
                    463: =cut
                    464: 
                    465: print "----- terminate -----\n";
                    466: %vars = ( ike => 'gw-gw' );
                    467: ($res, $errmsg) = $session->terminate(Vici::Message->new(\%vars));
                    468: print $res ? "ok\n" : "failed: $errmsg\n";
                    469: 
                    470: =item install()
                    471: 
                    472: installs a trap, drop or bypass policy defined by a CHILD_SA config.
                    473: 
                    474:   my %vars = ( child => 'net-net' );
                    475:   my ($res, $errmsg) = $session->install(Vici::Message->new(\%vars));
                    476: 
                    477: =cut
                    478: 
                    479: print "----- install -----\n";
                    480: %vars = ( child => 'net-net' );
                    481: ($res, $errmsg) = $session->install(Vici::Message->new(\%vars));
                    482: print $res ? "ok\n" : "failed: $errmsg\n";
                    483: 
                    484: =item list_policies()
                    485: 
                    486: lists currently installed trap, drop and bypass policies by streaming
                    487: list-policy events.
                    488: 
                    489:   my %vars = ( trap => 'yes' );
                    490:   my $pols = $session->list_policies(Vici::Message->new(\%vars));
                    491: 
                    492:   foreach my $pol (@$pols)
                    493:   {
                    494:       print $pol->raw(), "\n";
                    495:   }
                    496: 
                    497: =cut
                    498: 
                    499: print "----- list-policies -----\n";
                    500: %vars = ( trap => 'yes' );
                    501: my $pols = $session->list_policies(Vici::Message->new(\%vars));
                    502: foreach my $pol (@$pols)
                    503: {
                    504:     print $pol->raw(), "\n";
                    505: }
                    506: 
                    507: =item uninstall()
                    508: 
                    509: uninstalls a trap, drop or bypass policy defined by a CHILD_SA config.
                    510: 
                    511:   my %vars = ( child => 'net-net' );
                    512:   my ($res, $errmsg) = $session->uninstall(Vici::Message->new(\%vars));
                    513: 
                    514: =cut
                    515: 
                    516: print "----- uninstall -----\n";
                    517: %vars = ( child => 'net-net' );
                    518: ($res, $errmsg) = $session->uninstall(Vici::Message->new(\%vars));
                    519: print $res ? "ok\n" : "failed: $errmsg\n";
                    520: 
                    521: =item reload_settings()
                    522: 
                    523: reloads strongswan.conf settings and all plugins supporting configuration
                    524: reload.
                    525: 
                    526:   my ($res, $errmsg) = $session->reload_settings();
                    527:   print $res ? "ok\n" : "failed: $errmsg\n";
                    528: 
                    529: =cut
                    530: 
                    531: print "----- reload-settings -----\n";
                    532: ($res, $errmsg) = $session->reload_settings();
                    533: print $res ? "ok\n" : "failed: $errmsg\n";
                    534: 
                    535: =item unload_conn()
                    536: 
                    537: unloads a previously loaded connection definition by name.
                    538: 
                    539:   my %vars = ( name => 'gw-gw' );
                    540:   my ($res, $errmsg) = $session->unload_conn(Vici::Message->new(\%vars));
                    541: 
                    542: =cut
                    543: 
                    544: print "----- unload-conn -----\n";
                    545: %vars = ( name => 'gw-gw' );
                    546: ($res, $errmsg) = $session->unload_conn(Vici::Message->new(\%vars));
                    547: print $res ? "ok\n" : "failed: $errmsg\n";
                    548: 
                    549: =item unload_authority()
                    550: 
                    551: unloads a previously loaded certification authority definition by name.
                    552: 
                    553:   my %vars = ( name => 'strongswan' );
                    554:   my ($res, $errmsg) = $session->unload_authority(Vici::Message->new(\%vars));
                    555: 
                    556: =cut
                    557: 
                    558: print "----- unload-authority -----\n";
                    559: %vars = ( name => 'strongswan' );
                    560: ($res, $errmsg) = $session->unload_authority(Vici::Message->new(\%vars));
                    561: print $res ? "ok\n" : "failed: $errmsg\n";
                    562: 
                    563: =item flush_certs()
                    564: 
                    565: flushes the volatile certificate cache. Optionally only a given certificate
                    566: type is flushed.
                    567: 
                    568:   my %vars = ( type => 'x509_crl' );
                    569:   my ($res, $errmsg) = $session->flush_certs(Vici::Message->new(\%vars));
                    570: 
                    571: =cut
                    572: 
                    573: print "----- flush-certs -----\n";
                    574: %vars = ( type => 'x509_crl' );
                    575: ($res, $errmsg) = $session->flush_certs(Vici::Message->new(\%vars));
                    576: print $res ? "ok\n" : "failed: $errmsg\n";
                    577: 
                    578: =item clear_creds()
                    579: 
                    580: clears all loaded certificate, private key and shared key credentials. This
                    581: affects only credentials loaded over vici, but additionally flushes the
                    582: credential cache.
                    583: 
                    584:   my ($res, $errmsg) = $session->clear_creds();
                    585: 
                    586: =cut
                    587: 
                    588: print "----- clear-creds -----\n";
                    589: ($res, $errmsg) = $session->clear_creds();
                    590: print $res ? "ok\n" : "failed: $errmsg\n";
                    591: 
                    592: =item load_pool()
                    593: 
                    594: loads an in-memory virtual IP and configuration attribute pool. Existing
                    595: pools with the same name get updated, if possible.
                    596: 
                    597:   my %pool = ( addrs => '10.3.0.0/23' );
                    598:   my %vars = ( my_pool => \%pool );
                    599:   my ($res, $errmsg) = $session->load_pool(Vici::Message->new(\%vars));
                    600: 
                    601: =cut
                    602: 
                    603: print "----- load-pool -----\n";
                    604: my %pool = ( addrs => '10.3.0.0/23' );
                    605: %vars = ( my_pool => \%pool );
                    606: ($res, $errmsg) = $session->load_pool(Vici::Message->new(\%vars));
                    607: print $res ? "ok\n" : "failed: $errmsg\n";
                    608: 
                    609: =item get_pools()
                    610: 
                    611: lists the currently loaded pools.
                    612: 
                    613:   my $pools = $session->get_pools();
                    614: 
                    615: =cut
                    616: 
                    617: print "----- get-pools -----\n";
                    618: my $pools = $session->get_pools();
                    619: print $pools->raw(), "\n";
                    620: 
                    621: =item unload_pool()
                    622: 
                    623: unloads a previously loaded virtual IP and configuration attribute pool.
                    624: Unloading fails for pools with leases currently online.
                    625: 
                    626:   my %vars = ( name => 'my_pool' );
                    627:   my ($res, $errmsg) = $session->unload_pool(Vici::Message->new(\%vars));
                    628: 
                    629: =cut
                    630: 
                    631: print "----- unload-pool -----\n";
                    632: %vars = ( name => 'my_pool' );
                    633: ($res, $errmsg) = $session->unload_pool(Vici::Message->new(\%vars));
                    634: print $res ? "ok\n" : "failed: $errmsg\n";
                    635: 
                    636: =back
                    637: 
                    638: =cut
                    639: 
                    640: # close vici socket
                    641: close($socket);
                    642: 
                    643: =head1 COPYRIGHT AND LICENCE
                    644: 
                    645: Copyright (c) 2015 Andreas Steffen
                    646: 
                    647: Permission is hereby granted, free of charge, to any person obtaining a copy
                    648: of this software and associated documentation files (the "Software"), to deal
                    649: in the Software without restriction, including without limitation the rights
                    650: to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
                    651: copies of the Software, and to permit persons to whom the Software is
                    652: furnished to do so, subject to the following conditions:
                    653: 
                    654: The above copyright notice and this permission notice shall be included in
                    655: all copies or substantial portions of the Software.
                    656: 
                    657: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
                    658: IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
                    659: FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
                    660: AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
                    661: LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
                    662: OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
                    663: THE SOFTWARE.
                    664: 

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