diff --git a/README.txt b/README.txt index ace9a96..0717141 100644 --- a/README.txt +++ b/README.txt @@ -225,3 +225,28 @@ Other options you could experiment with: reported that this can speed up the Binary protocol (see above). This tells the TCP stack to send packets immediately and without waiting for a full payload, reducing per-packet network latency (disabling "Nagling"). + +It's possible to enable SASL authentication as documented here: + http://php.net/manual/en/memcached.setsaslauthdata.php + https://code.google.com/p/memcached/wiki/SASLHowto + +SASL authentication requires a memcached server with SASL support (version 1.4.3 +or greater built with --enable-sasl and started with the -S flag) and the PECL +memcached client version 2.0.0 or greater also built with SASL support. Once +these requirements are satisfied you can then enable SASL support in the Drupal +memcache module by enabling the binary protocol and setting +memcache_sasl_username and memcache_sasl_password in settings.php. For example: + +$settings['memcache']['sasl'] = [ + 'username' => 'user', + 'password' => 'password', +]; + +// When using SASL, Memcached extension needs to be used +// because Memcache extension doesn't support it. +$settings['memcache']['extension'] = 'Memcached'; + $conf['memcache_options'] = array( + Memcached::OPT_BINARY_PROTOCOL => TRUE, + ); + $conf['memcache_sasl_username'] = 'yourSASLUsername'; + $conf['memcache_sasl_password'] = 'yourSASLPassword'; diff --git a/src/DrupalMemcacheFactory.php b/src/DrupalMemcacheFactory.php index fd2ef61..6c40998 100644 --- a/src/DrupalMemcacheFactory.php +++ b/src/DrupalMemcacheFactory.php @@ -49,6 +49,11 @@ class DrupalMemcacheFactory { /** * @var array */ + protected $memcacheSasl = array(); + + /** + * @var array + */ protected $failedConnectionCache = array(); /** diff --git a/src/DrupalMemcached.php b/src/DrupalMemcached.php index 2d3c88b..7201b0b 100644 --- a/src/DrupalMemcached.php +++ b/src/DrupalMemcached.php @@ -32,6 +32,12 @@ class DrupalMemcached extends DrupalMemcacheBase { foreach ($this->settings->get('options', []) as $key => $value) { $this->memcache->setOption($key, $value); } + + // SASL configuration to authenticate with Memcached. + // Note: this only affects the Memcached PECL extension. + if ($sasl_config = $this->settings->get('sasl', [])) { + $this->memcache->setSaslAuthData($sasl_config['username'], $sasl_config['password']); + } } /**