restore LDAP cache cleanup as a CLI script
authorDenis Ovsienko <denis@ovsienko.info>
Sat, 5 Nov 2016 15:17:36 +0000 (15:17 +0000)
committerDenis Ovsienko <denis@ovsienko.info>
Sat, 5 Nov 2016 15:17:36 +0000 (15:17 +0000)
* constructLDAPOptions(): factor out of authenticated_via_ldap() (see
  also commit 88a9274) and add a check
* authenticate(): update to call the above
* cleanup_ldap_cache.php: a new wrapper script for discardLDAPCache()

scripts/cleanup_ldap_cache.php [new file with mode: 0755]
wwwroot/inc/auth.php

diff --git a/scripts/cleanup_ldap_cache.php b/scripts/cleanup_ldap_cache.php
new file mode 100755 (executable)
index 0000000..77b31da
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/env php
+<?php
+
+# This file is a part of RackTables, a datacenter and server room management
+# framework. See accompanying file "COPYING" for the full copyright and
+# licensing information.
+
+// This script purges expired LDAP cache entries from the RackTables database.
+// This maintenance job is optional and purely cosmetic -- the expired entries
+// are not valid as far as RackTables authentication is concerned. It used to
+// be done by RackTables front-end in the past but now you would need to run
+// this script from a cron job (say, once a day) to achieve the same effect.
+
+$script_mode = TRUE;
+require 'inc/init.php';
+
+if ($user_auth_src == 'ldap')
+{
+       constructLDAPOptions();
+       discardLDAPCache ($LDAP_options['cache_expiry']);
+}
+
+?>
index c2b8582..a9e14fa 100644 (file)
@@ -51,6 +51,7 @@ function authenticate ()
                        )
                                throw new RackTablesError ('', RackTablesError::NOT_AUTHENTICATED);
                        $remote_username = $_SERVER['PHP_AUTH_USER'];
+                       constructLDAPOptions();
                        break;
                case 'httpd' == $user_auth_src:
                        if
@@ -301,10 +302,11 @@ function saml_getAttributeValues ($attributes, $name)
        return is_array ($attributes[$name]) ? $attributes[$name] : array($attributes[$name]);
 }
 
-// a wrapper for two LDAP auth methods below
-function authenticated_via_ldap ($username, $password, &$ldap_displayname)
+function constructLDAPOptions()
 {
-       global $LDAP_options, $debug_mode;
+       global $LDAP_options;
+       if (! isset ($LDAP_options))
+               throw new RackTablesError ('$LDAP_options has not been defined (see secret.php)', RackTablesError::MISCONFIGURED);
        $LDAP_defaults = array
        (
                'group_attr' => 'memberof',
@@ -316,7 +318,12 @@ function authenticated_via_ldap ($username, $password, &$ldap_displayname)
        foreach ($LDAP_defaults as $option_name => $option_value)
                if (! array_key_exists ($option_name, $LDAP_options))
                        $LDAP_options[$option_name] = $option_value;
+}
 
+// a wrapper for two LDAP auth methods below
+function authenticated_via_ldap ($username, $password, &$ldap_displayname)
+{
+       global $LDAP_options, $debug_mode;
        try
        {
                // Destroy the cache each time config changes.