Try to restart only the affected stunnel
[mirror/dsa-puppet.git] / modules / stunnel4 / manifests / init.pp
1 class stunnel4 {
2     define stunnel_generic($client, $verify, $cafile, $crlfile=false, $accept, $connect, $local=false) {
3         file {
4             "/etc/stunnel":
5                 ensure  => directory,
6                 owner   => root,
7                 group   => root,
8                 mode    => 755,
9                 ;
10             "/etc/stunnel/puppet-${name}.conf":
11                 content => template("stunnel4/stunnel.conf.erb"),
12                 notify  => Exec["restart_stunnel_${name}"],
13                 ;
14             "/etc/init.d/stunnel4":
15                 source => "puppet:///modules/stunnel4/etc-init.d-stunnel4",
16                 mode    => 555,
17             ;
18         }
19         exec {
20             "restart_stunnel_${name}":
21                     command => "true && cd / && env -i /etc/init.d/stunnel4 restart ${name}",
22                     require => [ File['/etc/stunnel/stunnel.conf'],
23                                  File['/etc/init.d/stunnel4'],
24                                  Exec['enable_stunnel4'],
25                                  Exec['kill_file_override'],
26                                  Package['stunnel4']
27                                ],
28                     refreshonly => true,
29                     ;
30         }
31     }
32
33     # define an stunnel listener, listening for SSL connections on $accept,
34     # connecting to plaintext service $connect using local source address $local
35     #
36     # unfortunately stunnel is really bad about verifying its peer,
37     # all we can be certain of is that they are signed by our CA,
38     # not who they are.  So do not use in places where the identity of
39     # the caller is important.  Use dsa-portforwarder for that.
40     define stunnel_server($accept, $connect, $local = "127.0.0.1") {
41         stunnel_generic {
42             "${name}":
43                 client => false,
44                 verify => 2,
45                 cafile => "/etc/exim4/ssl/ca.crt",
46                 crlfile => "/etc/exim4/ssl/crl.crt",
47                 accept => "${accept}",
48                 connect => "${connect}",
49                 ;
50         }
51         @ferm::rule {
52             "stunnel-${name}":
53                 description => "stunnel ${name}",
54                 rule => "&SERVICE_RANGE(tcp, ${accept}, \$HOST_DEBIAN_V4)",
55                 ;
56             "stunnel-${name}-v6":
57                 domain          => 'ip6',
58                 description => "stunnel ${name}",
59                 rule => "&SERVICE_RANGE(tcp, ${accept}, \$HOST_DEBIAN_V6)",
60                 ;
61         }
62     }
63     define stunnel_client($accept, $connecthost, $connectport) {
64         file {
65             "/etc/stunnel/puppet-${name}-peer.pem":
66                 # source  => "puppet:///modules/exim/certs/${connecthost}.crt",
67                 content => generate("/bin/cat", "/etc/puppet/modules/exim/files/certs/${connecthost}.crt",
68                                                 "/etc/puppet/modules/exim/files/certs/ca.crt"),
69                 notify  => Exec["restart_stunnel_${name}"],
70                 ;
71         }
72         stunnel_generic {
73             "${name}":
74                 client => true,
75                 verify => 3,
76                 cafile => "/etc/stunnel/puppet-${name}-peer.pem",
77                 accept => "${accept}",
78                 connect => "${connecthost}:${connectport}",
79                 ;
80         }
81     }
82
83
84     package {
85         "stunnel4": ensure => installed;
86     }
87
88     file {
89         "/etc/stunnel/stunnel.conf":
90             ensure => absent,
91             require => [ Package['stunnel4'] ],
92             ;
93     }
94
95     exec {
96         "enable_stunnel4":
97                 command => "sed -i -e 's/^ENABLED=/#&/; \$a ENABLED=1 # added by puppet' /etc/default/stunnel4",
98                 unless => "grep -q '^ENABLED=1' /etc/default/stunnel4",
99                 require => [ Package['stunnel4'] ],
100                 ;
101         "kill_file_override":
102                 command => "sed -i -e 's/^FILES=/#&/' /etc/default/stunnel4",
103                 onlyif => "grep -q '^FILES=' /etc/default/stunnel4",
104                 require => [ Package['stunnel4'] ],
105                 ;
106     }
107 }
108
109 # vim:set et:
110 # vim:set sts=4 ts=4:
111 # vim:set shiftwidth=4: