Unverified Commit 7338d283 authored by Nathan Ward's avatar Nathan Ward Committed by GitHub
Browse files

Merge pull request #157 from SearchLightNZ/radsniff

Add support for installing and managing radsniff
parents 8225c28e b3642d7d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5,3 +5,4 @@ fixtures:
    logrotate: "puppet/logrotate"
    rsyslog: "saz/rsyslog"
    stdlib: "puppetlabs/stdlib"
    systemd: "camptocamp/systemd"
+16 −0
Original line number Diff line number Diff line
@@ -193,6 +193,22 @@ Whether the control socket should be read-only or read-write. Choose from `ro`,
  }
```

#### `freeradius::radsniff`

The `freeradius::radsniff` class configures and runs the [RADSNIFF](https://freeradius.org/radiusd/man/radsniff.html) service.
It requires freeradius-utils to be installed, so will fail if `utils_support` is not enabled on the `freeradius` class.

Note: This is only supported on RedHat like systems at present.

##### `options`
Command line options to be passed to radsniff. Quotes are escaped
```puppet
  # Enable radsniff, with a filter, sending data to collectd (requires freeradius to be compiled for this)
  class { 'freeradius::radsniff':
    options => '-m -p1812,1813 -O unix:/var/run/collectd.sock -N freeradius -W 10 -i eth0 -f "src not 192.0.2.1"',
  }
```

### Resources

#### `freeradius::attr`
+1 −1
Original line number Diff line number Diff line
@@ -240,7 +240,7 @@ class freeradius (
  concat { "${freeradius::fr_basepath}/dictionary":
    owner   => 'root',
    group   => $freeradius::fr_group,
    mode    => '0640',
    mode    => '0644',
    require => [Package[$freeradius::fr_package], Group[$freeradius::fr_group]],
  }
  concat::fragment { 'dictionary_header':
+10 −0
Original line number Diff line number Diff line
@@ -172,4 +172,14 @@ class freeradius::params {
  }

  $radacctdir = "\${logdir}/radacct"

  # Default radsniff environment file location
  $fr_radsniff_envfile = $::osfamily ? {
    'RedHat' => '/etc/sysconfig/radsniff',
    'Debian' => '/etc/defaults/radsniff',
    default  => undef,
  }

  # Default radsniff pid file location
  $fr_radsniff_pidfile = "/var/run/${fr_service}/radsniff.pid"
}

manifests/radsniff.pp

0 → 100644
+57 −0
Original line number Diff line number Diff line
# @summary configure and run radsniff
#
# @param envfile path to the environment file, used by the systemd unit
# @param options commandline options passed to radsniff when it runs
# @param
class freeradius::radsniff (
  Optional[String] $envfile = undef,
  String $options = '',
  Optional[String] $pidfile = undef,
) inherits freeradius::params {
  unless $::freeradius::utils_support {
    fail('freeradius::radsniff requires freeradius have utils_support enabled')
  }

  # Calculate the envfile to use - specified, then calculated, then error if none
  if $envfile {
    $final_envfile = $envfile
  } else {
    if $freeradius::radsniff::fr_radsniff_envfile {
      $final_envfile = $freeradius::radsniff::fr_radsniff_envfile
    } else {
      fail('freeradius::radsniff requires envfile to be explicitly set on this OS')
    }
  }

  # Calculate the pidfile to use - specified, then calculated, then error if none
  if $pidfile {
    $final_pidfile = $pidfile
  } else {
    if $freeradius::radsniff::fr_radsniff_pidfile {
      $final_pidfile = $freeradius::radsniff::fr_radsniff_pidfile
    } else {
      fail('freeradius::radsniff requires pidfile to be explicitly set on this OS')
    }
  }

  $escaped_cmd = $options.regsubst('"','\\\\"','G')

  file { $final_envfile:
    content => @("SYSCONFIG"),
      RADSNIFF_OPTIONS="${escaped_cmd}"
      | SYSCONFIG
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    require => Package['freeradius-utils'],
  }
  ~> service { 'radsniff':
    ensure => running,
    enable => true,
  }

  systemd::unit_file {'radsniff.service':
    content => template('freeradius/radsniff.service.erb'),
    notify  => Service['radsniff'],
  }
}
Loading