Plugin Directory

Changeset 2692352


Ignore:
Timestamp:
03/11/2022 08:06:47 AM (4 years ago)
Author:
neosit
Message:

Update to version 2.3.2 from GitHub

Location:
next-active-directory-integration
Files:
2 deleted
56 edited
1 copied

Legend:

Unmodified
Added
Removed
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Authentication/LoginService.php

    r2641799 r2692352  
    113113        add_filter('wp_authenticate_user', array($this->loginSucceededService, 'checkUserEnabled'), 10, 2);
    114114
    115         // @see #142: register an additional filter for checking if the username is excluded
     115        // #142: register an additional filter for checking if the username is excluded
    116116        add_filter(NEXT_AD_INT_PREFIX . 'auth_form_login_requires_ad_authentication', array($this, 'requiresActiveDirectoryAuthentication'), 10, 1);
    117117    }
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Authentication/SingleSignOn/Service.php

    r2641799 r2692352  
    7575        // after login has succeeded, we want the current identified user to be automatically logged in
    7676        add_filter(NEXT_AD_INT_PREFIX . 'login_succeeded', array($this, 'loginUser'), 19, 1);
    77         // @see #142: register an additional filter for checking if the username is excluded; please note that this differs from the parent's basic_login_requires_ad_authentication filter
     77        // #142: register an additional filter for checking if the username is excluded; please note that this differs from the parent's basic_login_requires_ad_authentication filter
    7878        add_filter(NEXT_AD_INT_PREFIX . 'auth_sso_login_requires_ad_authentication', array($this, 'requiresActiveDirectoryAuthentication'), 10, 1);
    7979    }
     
    169169        $profileMatch = $this->ssoProfileLocator->locate($credentials);
    170170
     171        // #152, NADISUP-7: Critical WordPress error if a matching profile for SSO authentication can not be found
     172        if (!$profileMatch) {
     173            throw new NextADInt_Adi_Authentication_Exception("Unable to locate a matching profile for '" . $credentials->getLogin() . "'");
     174        }
     175
    171176        // a valid profile is required for login
    172177        $validation->validateProfile($profileMatch->getProfile());
    173 
     178       
    174179        $this->logger->debug("Valid SSO profile for type '" . $profileMatch->getType() . "' found");
    175180        // fire a hook to inform that one of the SSO profiles has been matched
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Configuration/Options.php

    r2641799 r2692352  
    109109    // Custom Login Page
    110110    const CUSTOM_LOGIN_PAGE_ENABLED = 'custom_login_page_enabled';
     111    const CUSTOM_LOGIN_PAGE_URI = 'custom_login_page_uri';
    111112
    112113    // additional attribute mapping
     
    190191
    191192    /**
    192      * This method generates all the meta information for a option elements.
    193      * The keys (like self::DOMAIN_CONTROLLERS, self::PORT) and it is values are option elements.
     193     * This method generates all the meta information for an option elements.
     194     * The keys (like self::DOMAIN_CONTROLLERS, self::PORT) and their values are option elements.
    194195     * The key is the internal name for the option and the value is the option meta data.
    195196     *
     
    11681169                $transient => false,
    11691170            ),
     1171            self::CUSTOM_LOGIN_PAGE_URI => array(
     1172                $title => __('Custom login page URI', 'next-active-directory-integration'),
     1173                $type => NextADInt_Multisite_Option_Type::TEXT,
     1174                $description => __('URI of a custom login page where authentication against the Active Directory will be enabled. By default, the custom login page\'s URI is <em>/login</em>.',
     1175                    'next-active-directory-integration'),
     1176                $detail => __('If you use a custom login page URI like <em>/login</em>, please enter it to enable Active Directory authentication check on this page.', 'next-active-directory-integration'),
     1177                $angularAttributes => 'ng-disabled="(!option.custom_login_page_enabled',
     1178                $default => '/login',
     1179                $sanitizer => array('string'),
     1180                $showPermission => true,
     1181                $transient => false,
     1182            ),
    11701183            // Maximum number of failed login attempts before the account is blocked
    11711184            self::MAX_LOGIN_ATTEMPTS => array(
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Configuration/Ui/Layout.php

    r2641799 r2692352  
    235235                    self::OPTIONS => array(
    236236                        NextADInt_Adi_Configuration_Options::ENABLE_SMARTCARD_USER_LOGIN,
    237                         NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_ENABLED
     237                        NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_ENABLED,
     238                        NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_URI
    238239                    ),
    239240                ),
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Init.php

    r2331595 r2692352  
    233233     * Signal that NADI registration has been finished. It simply calls the WordPress action 'nadi_loaded'
    234234     * @since 2.1.8
    235      * @see ADI-672
     235     * @issue ADI-672
    236236     */
    237237    public function finishRegistration() {
     
    486486
    487487        if ($customLoginPageEnabled) {
    488             if (isset($_SERVER["REQUEST_URI"]) && strpos($_SERVER["REQUEST_URI"], '/login') !== false) {
     488            $loginUri = $this->dc()->getConfiguration()->getOptionValue(NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_URI);
     489
     490            if (isset($_SERVER["REQUEST_URI"]) && strpos($_SERVER["REQUEST_URI"], $loginUri) !== false) {
    489491                $r = true;
    490492            }
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Synchronization/Abstract.php

    r2517646 r2692352  
    169169            $sid = NextADInt_ActiveDirectory_Sid::of($userDomainSid);
    170170
    171             // @see #138: the SID can be null if this user has been imported in a previous version
     171            // #138: the SID can be null if this user has been imported in a previous version
    172172            if (!$this->connection->getActiveDirectoryContext()->isMember($sid)) {
    173173                $this->logger->warning('User with name ' . $user->user_login . 'is not a member of one of the configured domains.');
  • next-active-directory-integration/tags/2.3.2/classes/Adi/Synchronization/WordPress.php

    r2641799 r2692352  
    280280        $uac = $attributes[$key][0];
    281281
    282         // @see GH-132: https://github.com/NeosIT/active-directory-integration2/issues/132
     282        // #132: https://github.com/NeosIT/active-directory-integration2/issues/132
    283283        // With PHP 8 we got hit by https://github.com/php/php-src/pull/5331
    284284        return (int)$uac;
     
    293293     * @return bool
    294294     */
    295     public function isNormalAccount($uac)
    296     {
    297 
    298         // @see ADI-517: Improved logging for UAC Binary Flag check to make it more transparent for the user and improve debugging.
     295    public function isNormalAccount(int $uac)
     296    {
     297
     298        // ADI-517: Improved logging for UAC Binary Flag check to make it more transparent for the user and improve debugging.
    299299        switch ($uac) {
    300300            case (($uac & self::UF_INTERDOMAIN_TRUST_ACCOUNT) === self::UF_INTERDOMAIN_TRUST_ACCOUNT):
     
    329329     * @return bool
    330330     */
    331     public function isSmartCardRequired($uac)
     331    public function isSmartCardRequired(int $uac)
    332332    {
    333333        if (($uac & self::UF_SMARTCARD_REQUIRED) === 0) {
     
    346346     * @return bool
    347347     */
    348     public function isAccountDisabled($uac)
     348    public function isAccountDisabled(int $uac)
    349349    {
    350350        if (($uac & self::UF_ACCOUNT_DISABLE) === self::UF_ACCOUNT_DISABLE) {
     
    412412
    413413        // ADI-223: Check if user is disabled in Active Directory
    414         $uac = $ldapAttributes->getFilteredValue('useraccountcontrol');
     414        $uac = $this->userAccountControl($ldapAttributes->getRaw());
    415415        $isUserDisabled = $this->isAccountDisabled($uac);
    416416
  • next-active-directory-integration/tags/2.3.2/classes/Adi/User/Manager.php

    r2517646 r2692352  
    579579     * </ul>
    580580     *
    581      * @see ADI-691
     581     * @issue ADI-691
    582582     * @param WP_User $wpUser |null
    583583     * @param $preferredEmail
     
    658658     *
    659659     * @since 2.1.9
    660      * @see ADI-691
     660     * @issue ADI-691
    661661     * @param WP_User|null $wpUserToChange null, if user has not been created yet
    662662     * @param $preferredEmail
  • next-active-directory-integration/tags/2.3.2/classes/Ldap/Attribute/Service.php

    r2513920 r2692352  
    175175     * @param NextADInt_Ldap_UserQuery $userQuery
    176176     * @return NextADInt_Ldap_Attributes
    177      * @see ADI-713
     177     * @issue ADI-713
    178178     */
    179179    public function resolveLdapAttributes(NextADInt_Ldap_UserQuery $userQuery)
  • next-active-directory-integration/tags/2.3.2/classes/Ldap/Connection.php

    r2513920 r2692352  
    432432     * @param array $attributeNames
    433433     * @return array|boolean the $bestMatch exactly one match or false
    434      * @see ADI-713
     434     * @issue ADI-713
    435435     * @since 2.1.13
    436436     */
  • next-active-directory-integration/tags/2.3.2/classes/Multisite/Configuration/Persistence/BlogConfigurationRepository.php

    r2517867 r2692352  
    190190    function getDefaultValue($siteId, $optionName, $option)
    191191    {
    192         // gh-#127: PHP 7.4 compatibility; warning if $option is not an array but null
     192        // #127: PHP 7.4 compatibility; warning if $option is not an array but null
    193193        if (!is_array($option)) {
    194194            $this->logger->warn("Option '" . $optionName . "' in site with ID '" . $siteId . "' has no option configuration");
  • next-active-directory-integration/tags/2.3.2/composer.lock

    r2662231 r2692352  
    158158        {
    159159            "name": "paragonie/random_compat",
    160             "version": "v2.0.20",
     160            "version": "v2.0.21",
    161161            "source": {
    162162                "type": "git",
    163163                "url": "https://github.com/paragonie/random_compat.git",
    164                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a"
    165             },
    166             "dist": {
    167                 "type": "zip",
    168                 "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
    169                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
     164                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae"
     165            },
     166            "dist": {
     167                "type": "zip",
     168                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
     169                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
    170170                "shasum": ""
    171171            },
     
    174174            },
    175175            "require-dev": {
    176                 "phpunit/phpunit": "4.*|5.*"
     176                "phpunit/phpunit": "*"
    177177            },
    178178            "suggest": {
     
    208208                "source": "https://github.com/paragonie/random_compat"
    209209            },
    210             "time": "2021-04-17T09:33:01+00:00"
     210            "time": "2022-02-16T17:07:03+00:00"
    211211        },
    212212        {
     
    262262        {
    263263            "name": "symfony/polyfill-ctype",
    264             "version": "v1.24.0",
     264            "version": "v1.25.0",
    265265            "source": {
    266266                "type": "git",
     
    294294            },
    295295            "autoload": {
     296                "files": [
     297                    "bootstrap.php"
     298                ],
    296299                "psr-4": {
    297300                    "Symfony\\Polyfill\\Ctype\\": ""
    298                 },
    299                 "files": [
    300                     "bootstrap.php"
    301                 ]
     301                }
    302302            },
    303303            "notification-url": "https://packagist.org/downloads/",
     
    324324            ],
    325325            "support": {
    326                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
     326                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
    327327            },
    328328            "funding": [
     
    373373            },
    374374            "autoload": {
     375                "files": [
     376                    "bootstrap.php"
     377                ],
    375378                "psr-4": {
    376379                    "Symfony\\Polyfill\\Mbstring\\": ""
    377                 },
    378                 "files": [
    379                     "bootstrap.php"
    380                 ]
     380                }
    381381            },
    382382            "notification-url": "https://packagist.org/downloads/",
     
    424424        {
    425425            "name": "twig/twig",
    426             "version": "v3.3.7",
     426            "version": "v3.3.8",
    427427            "source": {
    428428                "type": "git",
    429429                "url": "https://github.com/twigphp/Twig.git",
    430                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b"
    431             },
    432             "dist": {
    433                 "type": "zip",
    434                 "url": "https://api.github.com/repos/twigphp/Twig/zipball/8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
    435                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
     430                "reference": "972d8604a92b7054828b539f2febb0211dd5945c"
     431            },
     432            "dist": {
     433                "type": "zip",
     434                "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
     435                "reference": "972d8604a92b7054828b539f2febb0211dd5945c",
    436436                "shasum": ""
    437437            },
     
    484484            "support": {
    485485                "issues": "https://github.com/twigphp/Twig/issues",
    486                 "source": "https://github.com/twigphp/Twig/tree/v3.3.7"
     486                "source": "https://github.com/twigphp/Twig/tree/v3.3.8"
    487487            },
    488488            "funding": [
     
    496496                }
    497497            ],
    498             "time": "2022-01-03T21:15:37+00:00"
     498            "time": "2022-02-04T06:59:48+00:00"
    499499        }
    500500    ],
     
    547547        {
    548548            "name": "antecedent/patchwork",
    549             "version": "2.1.19",
     549            "version": "2.1.21",
    550550            "source": {
    551551                "type": "git",
    552552                "url": "https://github.com/antecedent/patchwork.git",
    553                 "reference": "94fe587cb0a6c1695b1ddc650e877231be80b8bc"
    554             },
    555             "dist": {
    556                 "type": "zip",
    557                 "url": "https://api.github.com/repos/antecedent/patchwork/zipball/94fe587cb0a6c1695b1ddc650e877231be80b8bc",
    558                 "reference": "94fe587cb0a6c1695b1ddc650e877231be80b8bc",
     553                "reference": "25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d"
     554            },
     555            "dist": {
     556                "type": "zip",
     557                "url": "https://api.github.com/repos/antecedent/patchwork/zipball/25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d",
     558                "reference": "25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d",
    559559                "shasum": ""
    560560            },
     
    589589            "support": {
    590590                "issues": "https://github.com/antecedent/patchwork/issues",
    591                 "source": "https://github.com/antecedent/patchwork/tree/2.1.19"
    592             },
    593             "time": "2022-01-20T04:47:04+00:00"
     591                "source": "https://github.com/antecedent/patchwork/tree/2.1.21"
     592            },
     593            "time": "2022-02-07T07:28:34+00:00"
    594594        },
    595595        {
    596596            "name": "doctrine/instantiator",
    597             "version": "1.4.0",
     597            "version": "1.4.1",
    598598            "source": {
    599599                "type": "git",
    600600                "url": "https://github.com/doctrine/instantiator.git",
    601                 "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
    602             },
    603             "dist": {
    604                 "type": "zip",
    605                 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
    606                 "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
     601                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
     602            },
     603            "dist": {
     604                "type": "zip",
     605                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
     606                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
    607607                "shasum": ""
    608608            },
     
    611611            },
    612612            "require-dev": {
    613                 "doctrine/coding-standard": "^8.0",
     613                "doctrine/coding-standard": "^9",
    614614                "ext-pdo": "*",
    615615                "ext-phar": "*",
    616                 "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
    617                 "phpstan/phpstan": "^0.12",
    618                 "phpstan/phpstan-phpunit": "^0.12",
    619                 "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
     616                "phpbench/phpbench": "^0.16 || ^1",
     617                "phpstan/phpstan": "^1.4",
     618                "phpstan/phpstan-phpunit": "^1",
     619                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
     620                "vimeo/psalm": "^4.22"
    620621            },
    621622            "type": "library",
     
    644645            "support": {
    645646                "issues": "https://github.com/doctrine/instantiator/issues",
    646                 "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
     647                "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
    647648            },
    648649            "funding": [
     
    660661                }
    661662            ],
    662             "time": "2020-11-10T18:47:58+00:00"
     663            "time": "2022-03-03T08:28:38+00:00"
    663664        },
    664665        {
     
    784785        {
    785786            "name": "myclabs/deep-copy",
    786             "version": "1.10.2",
     787            "version": "1.11.0",
    787788            "source": {
    788789                "type": "git",
    789790                "url": "https://github.com/myclabs/DeepCopy.git",
    790                 "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
    791             },
    792             "dist": {
    793                 "type": "zip",
    794                 "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
    795                 "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
     791                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
     792            },
     793            "dist": {
     794                "type": "zip",
     795                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
     796                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
    796797                "shasum": ""
    797798            },
     
    799800                "php": "^7.1 || ^8.0"
    800801            },
    801             "require-dev": {
    802                 "doctrine/collections": "^1.0",
    803                 "doctrine/common": "^2.6",
    804                 "phpunit/phpunit": "^7.1"
    805             },
    806             "type": "library",
    807             "autoload": {
     802            "conflict": {
     803                "doctrine/collections": "<1.6.8",
     804                "doctrine/common": "<2.13.3 || >=3,<3.2.2"
     805            },
     806            "require-dev": {
     807                "doctrine/collections": "^1.6.8",
     808                "doctrine/common": "^2.13.3 || ^3.2.2",
     809                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
     810            },
     811            "type": "library",
     812            "autoload": {
     813                "files": [
     814                    "src/DeepCopy/deep_copy.php"
     815                ],
    808816                "psr-4": {
    809817                    "DeepCopy\\": "src/DeepCopy/"
    810                 },
    811                 "files": [
    812                     "src/DeepCopy/deep_copy.php"
    813                 ]
     818                }
    814819            },
    815820            "notification-url": "https://packagist.org/downloads/",
     
    827832            "support": {
    828833                "issues": "https://github.com/myclabs/DeepCopy/issues",
    829                 "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
     834                "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
    830835            },
    831836            "funding": [
     
    835840                }
    836841            ],
    837             "time": "2020-11-13T09:40:50+00:00"
     842            "time": "2022-03-03T13:19:32+00:00"
    838843        },
    839844        {
     
    10651070        {
    10661071            "name": "phar-io/version",
    1067             "version": "3.1.0",
     1072            "version": "3.2.1",
    10681073            "source": {
    10691074                "type": "git",
    10701075                "url": "https://github.com/phar-io/version.git",
    1071                 "reference": "bae7c545bef187884426f042434e561ab1ddb182"
    1072             },
    1073             "dist": {
    1074                 "type": "zip",
    1075                 "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
    1076                 "reference": "bae7c545bef187884426f042434e561ab1ddb182",
     1076                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
     1077            },
     1078            "dist": {
     1079                "type": "zip",
     1080                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
     1081                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
    10771082                "shasum": ""
    10781083            },
     
    11101115            "support": {
    11111116                "issues": "https://github.com/phar-io/version/issues",
    1112                 "source": "https://github.com/phar-io/version/tree/3.1.0"
    1113             },
    1114             "time": "2021-02-23T14:00:09+00:00"
     1117                "source": "https://github.com/phar-io/version/tree/3.2.1"
     1118            },
     1119            "time": "2022-02-21T01:04:05+00:00"
    11151120        },
    11161121        {
     
    13431348        {
    13441349            "name": "phpunit/php-code-coverage",
    1345             "version": "9.2.10",
     1350            "version": "9.2.15",
    13461351            "source": {
    13471352                "type": "git",
    13481353                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
    1349                 "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687"
    1350             },
    1351             "dist": {
    1352                 "type": "zip",
    1353                 "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687",
    1354                 "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687",
     1354                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
     1355            },
     1356            "dist": {
     1357                "type": "zip",
     1358                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
     1359                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
    13551360                "shasum": ""
    13561361            },
     
    14081413            "support": {
    14091414                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
    1410                 "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10"
     1415                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
    14111416            },
    14121417            "funding": [
     
    14161421                }
    14171422            ],
    1418             "time": "2021-12-05T09:12:13+00:00"
     1423            "time": "2022-03-07T09:28:20+00:00"
    14191424        },
    14201425        {
     
    17211726            },
    17221727            "autoload": {
     1728                "files": [
     1729                    "src/Framework/Assert/Functions.php"
     1730                ],
    17231731                "classmap": [
    17241732                    "src/"
    1725                 ],
    1726                 "files": [
    1727                     "src/Framework/Assert/Functions.php"
    17281733                ]
    17291734            },
     
    23212326        {
    23222327            "name": "sebastian/global-state",
    2323             "version": "5.0.3",
     2328            "version": "5.0.5",
    23242329            "source": {
    23252330                "type": "git",
    23262331                "url": "https://github.com/sebastianbergmann/global-state.git",
    2327                 "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
    2328             },
    2329             "dist": {
    2330                 "type": "zip",
    2331                 "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
    2332                 "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
     2332                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
     2333            },
     2334            "dist": {
     2335                "type": "zip",
     2336                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
     2337                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
    23332338                "shasum": ""
    23342339            },
     
    23732378            "support": {
    23742379                "issues": "https://github.com/sebastianbergmann/global-state/issues",
    2375                 "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
     2380                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
    23762381            },
    23772382            "funding": [
     
    23812386                }
    23822387            ],
    2383             "time": "2021-06-11T13:31:12+00:00"
     2388            "time": "2022-02-14T08:28:10+00:00"
    23842389        },
    23852390        {
     
    27812786        {
    27822787            "name": "symfony/console",
    2783             "version": "v5.4.2",
     2788            "version": "v5.4.5",
    27842789            "source": {
    27852790                "type": "git",
    27862791                "url": "https://github.com/symfony/console.git",
    2787                 "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e"
    2788             },
    2789             "dist": {
    2790                 "type": "zip",
    2791                 "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e",
    2792                 "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e",
     2792                "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad"
     2793            },
     2794            "dist": {
     2795                "type": "zip",
     2796                "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad",
     2797                "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad",
    27932798                "shasum": ""
    27942799            },
     
    28602865            ],
    28612866            "support": {
    2862                 "source": "https://github.com/symfony/console/tree/v5.4.2"
     2867                "source": "https://github.com/symfony/console/tree/v5.4.5"
    28632868            },
    28642869            "funding": [
     
    28762881                }
    28772882            ],
    2878             "time": "2021-12-20T16:11:12+00:00"
     2883            "time": "2022-02-24T12:45:35+00:00"
    28792884        },
    28802885        {
     
    29472952        {
    29482953            "name": "symfony/finder",
    2949             "version": "v5.4.2",
     2954            "version": "v5.4.3",
    29502955            "source": {
    29512956                "type": "git",
    29522957                "url": "https://github.com/symfony/finder.git",
    2953                 "reference": "e77046c252be48c48a40816187ed527703c8f76c"
    2954             },
    2955             "dist": {
    2956                 "type": "zip",
    2957                 "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c",
    2958                 "reference": "e77046c252be48c48a40816187ed527703c8f76c",
     2958                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
     2959            },
     2960            "dist": {
     2961                "type": "zip",
     2962                "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
     2963                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
    29592964                "shasum": ""
    29602965            },
     
    29902995            "homepage": "https://symfony.com",
    29912996            "support": {
    2992                 "source": "https://github.com/symfony/finder/tree/v5.4.2"
     2997                "source": "https://github.com/symfony/finder/tree/v5.4.3"
    29932998            },
    29942999            "funding": [
     
    30063011                }
    30073012            ],
    3008             "time": "2021-12-15T11:06:13+00:00"
     3013            "time": "2022-01-26T16:34:36+00:00"
    30093014        },
    30103015        {
    30113016            "name": "symfony/polyfill-intl-grapheme",
    3012             "version": "v1.24.0",
     3017            "version": "v1.25.0",
    30133018            "source": {
    30143019                "type": "git",
     
    30393044            },
    30403045            "autoload": {
     3046                "files": [
     3047                    "bootstrap.php"
     3048                ],
    30413049                "psr-4": {
    30423050                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
    3043                 },
    3044                 "files": [
    3045                     "bootstrap.php"
    3046                 ]
     3051                }
    30473052            },
    30483053            "notification-url": "https://packagist.org/downloads/",
     
    30713076            ],
    30723077            "support": {
    3073                 "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
     3078                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
    30743079            },
    30753080            "funding": [
     
    30913096        {
    30923097            "name": "symfony/polyfill-intl-normalizer",
    3093             "version": "v1.24.0",
     3098            "version": "v1.25.0",
    30943099            "source": {
    30953100                "type": "git",
     
    31203125            },
    31213126            "autoload": {
    3122                 "psr-4": {
    3123                     "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
    3124                 },
    31253127                "files": [
    31263128                    "bootstrap.php"
    31273129                ],
     3130                "psr-4": {
     3131                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
     3132                },
    31283133                "classmap": [
    31293134                    "Resources/stubs"
     
    31553160            ],
    31563161            "support": {
    3157                 "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
     3162                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
    31583163            },
    31593164            "funding": [
     
    31753180        {
    31763181            "name": "symfony/polyfill-php73",
    3177             "version": "v1.24.0",
     3182            "version": "v1.25.0",
    31783183            "source": {
    31793184                "type": "git",
     
    32013206            },
    32023207            "autoload": {
    3203                 "psr-4": {
    3204                     "Symfony\\Polyfill\\Php73\\": ""
    3205                 },
    32063208                "files": [
    32073209                    "bootstrap.php"
    32083210                ],
     3211                "psr-4": {
     3212                    "Symfony\\Polyfill\\Php73\\": ""
     3213                },
    32093214                "classmap": [
    32103215                    "Resources/stubs"
     
    32343239            ],
    32353240            "support": {
    3236                 "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0"
     3241                "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
    32373242            },
    32383243            "funding": [
     
    32543259        {
    32553260            "name": "symfony/polyfill-php80",
    3256             "version": "v1.24.0",
     3261            "version": "v1.25.0",
    32573262            "source": {
    32583263                "type": "git",
    32593264                "url": "https://github.com/symfony/polyfill-php80.git",
    3260                 "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
    3261             },
    3262             "dist": {
    3263                 "type": "zip",
    3264                 "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
    3265                 "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
     3265                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
     3266            },
     3267            "dist": {
     3268                "type": "zip",
     3269                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
     3270                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
    32663271                "shasum": ""
    32673272            },
     
    32803285            },
    32813286            "autoload": {
    3282                 "psr-4": {
    3283                     "Symfony\\Polyfill\\Php80\\": ""
    3284                 },
    32853287                "files": [
    32863288                    "bootstrap.php"
    32873289                ],
     3290                "psr-4": {
     3291                    "Symfony\\Polyfill\\Php80\\": ""
     3292                },
    32883293                "classmap": [
    32893294                    "Resources/stubs"
     
    33173322            ],
    33183323            "support": {
    3319                 "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
     3324                "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
    33203325            },
    33213326            "funding": [
     
    33333338                }
    33343339            ],
    3335             "time": "2021-09-13T13:58:33+00:00"
     3340            "time": "2022-03-04T08:16:47+00:00"
    33363341        },
    33373342        {
    33383343            "name": "symfony/process",
    3339             "version": "v5.4.2",
     3344            "version": "v5.4.5",
    33403345            "source": {
    33413346                "type": "git",
    33423347                "url": "https://github.com/symfony/process.git",
    3343                 "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4"
    3344             },
    3345             "dist": {
    3346                 "type": "zip",
    3347                 "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
    3348                 "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
     3348                "reference": "95440409896f90a5f85db07a32b517ecec17fa4c"
     3349            },
     3350            "dist": {
     3351                "type": "zip",
     3352                "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c",
     3353                "reference": "95440409896f90a5f85db07a32b517ecec17fa4c",
    33493354                "shasum": ""
    33503355            },
     
    33793384            "homepage": "https://symfony.com",
    33803385            "support": {
    3381                 "source": "https://github.com/symfony/process/tree/v5.4.2"
     3386                "source": "https://github.com/symfony/process/tree/v5.4.5"
    33823387            },
    33833388            "funding": [
     
    33953400                }
    33963401            ],
    3397             "time": "2021-12-27T21:01:00+00:00"
     3402            "time": "2022-01-30T18:16:22+00:00"
    33983403        },
    33993404        {
     
    34813486        {
    34823487            "name": "symfony/string",
    3483             "version": "v6.0.2",
     3488            "version": "v6.0.3",
    34843489            "source": {
    34853490                "type": "git",
    34863491                "url": "https://github.com/symfony/string.git",
    3487                 "reference": "bae261d0c3ac38a1f802b4dfed42094296100631"
    3488             },
    3489             "dist": {
    3490                 "type": "zip",
    3491                 "url": "https://api.github.com/repos/symfony/string/zipball/bae261d0c3ac38a1f802b4dfed42094296100631",
    3492                 "reference": "bae261d0c3ac38a1f802b4dfed42094296100631",
     3492                "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2"
     3493            },
     3494            "dist": {
     3495                "type": "zip",
     3496                "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2",
     3497                "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2",
    34933498                "shasum": ""
    34943499            },
     
    35113516            "type": "library",
    35123517            "autoload": {
    3513                 "psr-4": {
    3514                     "Symfony\\Component\\String\\": ""
    3515                 },
    35163518                "files": [
    35173519                    "Resources/functions.php"
    35183520                ],
     3521                "psr-4": {
     3522                    "Symfony\\Component\\String\\": ""
     3523                },
    35193524                "exclude-from-classmap": [
    35203525                    "/Tests/"
     
    35463551            ],
    35473552            "support": {
    3548                 "source": "https://github.com/symfony/string/tree/v6.0.2"
     3553                "source": "https://github.com/symfony/string/tree/v6.0.3"
    35493554            },
    35503555            "funding": [
     
    35623567                }
    35633568            ],
    3564             "time": "2021-12-16T22:13:01+00:00"
     3569            "time": "2022-01-02T09:55:41+00:00"
    35653570        },
    35663571        {
    35673572            "name": "symfony/yaml",
    3568             "version": "v5.4.2",
     3573            "version": "v5.4.3",
    35693574            "source": {
    35703575                "type": "git",
    35713576                "url": "https://github.com/symfony/yaml.git",
    3572                 "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58"
    3573             },
    3574             "dist": {
    3575                 "type": "zip",
    3576                 "url": "https://api.github.com/repos/symfony/yaml/zipball/b9eb163846a61bb32dfc147f7859e274fab38b58",
    3577                 "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58",
     3577                "reference": "e80f87d2c9495966768310fc531b487ce64237a2"
     3578            },
     3579            "dist": {
     3580                "type": "zip",
     3581                "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
     3582                "reference": "e80f87d2c9495966768310fc531b487ce64237a2",
    35783583                "shasum": ""
    35793584            },
     
    36213626            "homepage": "https://symfony.com",
    36223627            "support": {
    3623                 "source": "https://github.com/symfony/yaml/tree/v5.4.2"
     3628                "source": "https://github.com/symfony/yaml/tree/v5.4.3"
    36243629            },
    36253630            "funding": [
     
    36373642                }
    36383643            ],
    3639             "time": "2021-12-16T21:58:21+00:00"
     3644            "time": "2022-01-26T16:32:32+00:00"
    36403645        },
    36413646        {
  • next-active-directory-integration/tags/2.3.2/index.php

    r2662231 r2692352  
    44Plugin URI: https://www.active-directory-wp.com
    55Description: Enterprise-ready solution to authenticate, authorize and synchronize your Active Directory users to WordPress. Next Active Directory Authentication supports NTLM and Kerberos for Single Sign On.
    6 Version: 2.3.1
     6Version: 2.3.2
    77Author: active-directory-wp.com
    88Author URI: https://active-directory-wp.com
  • next-active-directory-integration/tags/2.3.2/js/app/blog-options/controllers/security.controller.js

    r2513920 r2692352  
    2626                enable_smartcard_user_login: $valueHelper.findValue("enable_smartcard_user_login", data),
    2727                custom_login_page_enabled: $valueHelper.findValue("custom_login_page_enabled", data),
     28                custom_login_page_uri: $valueHelper.findValue("custom_login_page_uri", data),
    2829                max_login_attempts: $valueHelper.findValue("max_login_attempts", data),
    2930                block_time: $valueHelper.findValue("block_time", data),
     
    4243                enable_smartcard_user_login: $valueHelper.findPermission("enable_smartcard_user_login", data),
    4344                custom_login_page_enabled: $valueHelper.findPermission("custom_login_page_enabled", data),
     45                custom_login_page_uri: $valueHelper.findPermission("custom_login_page_uri", data),
    4446                max_login_attempts: $valueHelper.findPermission("max_login_attempts", data),
    4547                block_time: $valueHelper.findPermission("block_time", data),
     
    5658                enable_smartcard_user_login: $valueHelper.findMessage("enable_smartcard_user_login", data),
    5759                custom_login_page_enabled: $valueHelper.findMessage("custom_login_page_enabled", data),
     60                custom_login_page_uri: $valueHelper.findMessage("custom_login_page_uri", data),
    5861                max_login_attempts: $valueHelper.findMessage("max_login_attempts", data),
    5962                block_time: $valueHelper.findMessage("block_time", data),
  • next-active-directory-integration/tags/2.3.2/js/app/profile-options/controllers/security.controller.js

    r2513920 r2692352  
    2828                enable_smartcard_user_login: $valueHelper.findValue("enable_smartcard_user_login", data),
    2929                custom_login_page_enabled: $valueHelper.findValue("custom_login_page_enabled", data),
     30                custom_login_page_uri: $valueHelper.findValue("custom_login_page_uri", data),
    3031                max_login_attempts: $valueHelper.findValue("max_login_attempts", data),
    3132                block_time: $valueHelper.findValue("block_time", data),
     
    4647                enable_smartcard_user_login: $valueHelper.findPermission("enable_smartcard_user_login", data),
    4748                custom_login_page_enabled: $valueHelper.findPermission("custom_login_page_enabled", data),
     49                custom_login_page_uri: $valueHelper.findPermission("custom_login_page_uri", data),
    4850                max_login_attempts: $valueHelper.findPermission("max_login_attempts", data),
    4951                block_time: $valueHelper.findPermission("block_time", data),
     
    6062                enable_smartcard_user_login: $valueHelper.findMessage("enable_smartcard_user_login", data),
    6163                custom_login_page_enabled: $valueHelper.findMessage("custom_login_page_enabled", data),
     64                custom_login_page_uri: $valueHelper.findMessage("custom_login_page_uri", data),
    6265                max_login_attempts: $valueHelper.findMessage("max_login_attempts", data),
    6366                block_time: $valueHelper.findMessage("block_time", data),
  • next-active-directory-integration/tags/2.3.2/readme.txt

    r2662231 r2692352  
    11=== Next Active Directory Integration ===
    22Contributors: neosit,tobi823,fatsquirrel,schakko,medan123
    3 Tags: authentication, active directory, ldap, authorization, security, windows, sso
     3Tags: authentication, active directory, ldap, ldaps, authorization, security, windows, sso, login, domain, controller
    44Requires at least: 5.6
    55Tested up to: 5.9
    6 Stable tag: 2.3.1
     6Stable tag: 2.3.2
    77License: GPLv3
     8Donate link: https://active-directory-wp.com
    89
    910Next Active Directory Integration allows WordPress to authenticate, authorize, create and update users against Microsoft Active Directory.
     
    129130For detailed information you can visit the official [GitHub repository of Next Active Directory Integration](https://github.com/NeosIT/active-directory-integration2)
    130131
     132= 2.3.2 =
     133* FIXED: Critical WordPress error if a matching profile for SSO authentication can not be found (#152, NADISUP-7)
     134* FIXED: Uncaught TypeError when checking userAccountControl attribute (#151)
     135* FIXED: For specific Active Directory forest structures, the NETBIOS name can not be resolved during verification of the credentials (#153, NADISUP-8)
     136* ADDED: Option for specifying a custom login page URI; special thanks to GitHub user *czoIg* for contributing this functionality (#154)
     137
    131138= 2.3.1 =
    132139* CHANGED: WordPress 5.9 compatibility has been checked
     
    134141 
    135142= 2.3.0 =
    136 * FIXED: when a user can not be found by email address, findByProxyAddress returns false (gh-#146). Configured *Sync to WordPress* credentials are still required for logging in with email addresses.
    137 * FIXED: when using SSO-based logins, the "Exclude usernames from authentication" option still applies (gh-#142)
    138 * ADDED: hooks for checking if NADI's authentication applies for a given username (gh-#142)
     143* FIXED: when a user can not be found by email address, findByProxyAddress returns false. Configured *Sync to WordPress* credentials are still required for logging in with email addresses. (#146)
     144* FIXED: when using SSO-based logins, the "Exclude usernames from authentication" option still applies (#142)
     145* ADDED: hooks for checking if NADI's authentication applies for a given username (#142)
    139146* CHANGED: WordPress 5.8.1 compatibility has been checked
    140147* CHANGED: WordPress 5.8.2 compatibility has been checked
    141 * REMOVED: Parameter $useLocalWordPressUser in NextADInt_Adi_Mail_Notification (gh-#135)
    142 * REMOVED: Option 'Automatic user creation'. This option has been implicitly enabled for all installations and is no longer required (gh-#134)
    143 * CHANGED: PHP 8.1 compatibility has been checked; Twig has to be updated with the next release (gh-#148)
     148* REMOVED: Parameter $useLocalWordPressUser in NextADInt_Adi_Mail_Notification (#135)
     149* REMOVED: Option 'Automatic user creation'. This option has been implicitly enabled for all installations and is no longer required (#134)
     150* CHANGED: PHP 8.1 compatibility has been checked; Twig has to be updated with the next release (#148)
    144151
    145152= 2.2.3 =
    146 * FIXED: Sync to WordPress fails if user is no longer present in Active Directory (gh-#141)
     153* FIXED: Sync to WordPress fails if user is no longer present in Active Directory (#141)
    147154
    148155= 2.2.2 =
    149 * FIXED: Boolean options can't be persisted correctly with 2.2.1 (gh-#140)
     156* FIXED: Boolean options can't be persisted correctly with 2.2.1 (#140)
    150157
    151158= 2.2.1 =
    152 * FIXED: Missing meta_key "domainsid" results in TypeError or NextADInt_ActiveDirectory_Context::isMember (gh-#133)
    153 * FIXED: Warning: Trying to access array offset on value of type null (gh-#139)
     159* FIXED: Missing meta_key "domainsid" results in TypeError or NextADInt_ActiveDirectory_Context::isMember (#133)
     160* FIXED: Warning: Trying to access array offset on value of type null (#139)
    154161
    155162= 2.2.0 =
     
    161168* CHANGED: WordPress 5.6.1 compatibility has been checked
    162169* CHANGED: WordPress 5.7 compatibility has been checked
    163 * CHANGED: PHP 8.0 compatibility has been added (ADI-718, gh-#132, gh-#137)
     170* CHANGED: PHP 8.0 compatibility has been added (ADI-718, #132, #137)
    164171* FIXED: Deprecation warning when trying to send mail notification for blocked users (ADI-719)
    165 * FIXED: Option "Blog admin sets the option value." had no effect in Multisite environments (gh-#124)
    166 * DEPRECATION-WARNING: For the upcoming release 2.3.0 we will remove "Internal password migration" (gh-#136), "Automatic user creation" (gh-#134) and "Email address conflict handling" (gh-#133)
     172* FIXED: Option "Blog admin sets the option value." had no effect in Multisite environments (#124)
     173* DEPRECATION-WARNING: For the upcoming release 2.3.0 we will remove "Internal password migration" (#136), "Automatic user creation" (#134) and "Email address conflict handling" (#133)
    167174* DEV: Slightly transition new issues to GitHub instead of internal Jira
    168175
    169176= 2.1.12 =
    170 * ADDED: PR gh-#107: allow self signed certificates
     177* ADDED: allow self signed certificates (#107)
    171178* CHANGED: notices for minimum PHP version 7.2 due to EOL of PHP 7.1
    172179* FIXED: Test compatibility with latest stable PHPUnit version
    173 * FIXED: gh-#127: PHP 7.4 compatibility and deprecation of some ldap_* functions
     180* FIXED: PHP 7.4 compatibility and deprecation of some ldap_* functions (#127)
    174181* FIXED: various typos and formatting errors in the administration user interface
    175182* ADDED: hook for triggering Sync To WordPress and Sync To AD (ADI-526)
     
    183190* CHANGED: Twig version updated to 1.41.0 (ADI-707)
    184191* FIXED: When a non-existing user inside in WordPress authenticates in a multisite environment the first time, a warning is triggered (ADI-705)
    185 * FIXED: A deleted user from Active Directory is mapped to the wrong user in WordPress; thanks to T. Kowalchuk (ADI-702)
     192* FIXED: A deleted user from Active Directory is mapped to the wrong user in WordPress; thanks to *T. Kowalchuk* (ADI-702)
    186193* FIXED: PHP warning if user is deleted from Active Directory (ADI-701)
    187194* FIXED: PHP error if touching of log file failed
    188195* FIXED: "-DISABLED" suffix is added everytime a user is synchronized (ADI-697, NADIS-110)
    189196* ADDED: hook next_ad_int_user_before_disable (ADI-699)
    190 * FIXED: curly brace access (GitHub #119)
     197* FIXED: curly brace access (#119)
    191198
    192199= 2.1.9 =
     
    203210= 2.1.8 =
    204211* FIXED: compatibility issues when using the Woffice theme (ADI-659)
    205 * FIXED: missing email parameter when creating users (GitHub #74 Thanks to nefarius, ADI-615)
    206 * FIXED: an issue with the 'Prevent email change' option (https://wordpress.org/support/topic/new-user-creation-error/ Thanks to mlipenk, ADI-670)
    207 * ADDED: new hook to hide the 'Log in using SSO' option (https://wordpress.org/support/topic/remove-link-log-in-using-sso-on-login-page/ Thanks to vyatcheslav, ADI-672)
     212* FIXED: missing email parameter when creating users;  thanks to *nefarius* (#74, ADI-615)
     213* FIXED: an issue with the 'Prevent email change' option, https://wordpress.org/support/topic/new-user-creation-error/; thanks to *mlipenk* (ADI-670)
     214* ADDED: new hook to hide the 'Log in using SSO' option, https://wordpress.org/support/topic/remove-link-log-in-using-sso-on-login-page/; thanks to *vyatcheslav* (ADI-672)
    208215* FIXED: refactored post authentication logic into separate services (ADI-671, ADI-673)
    209216
     
    212219
    213220= 2.1.6 =
    214 * FIXED: custom authentication filters were not registered properly (ADI-665) this will fix SSO related issues
     221* FIXED: custom authentication filters were not registered properly and this fixes SSO related issues (ADI-665)
    215222* FIXED: test authentication will now properly check for authorization groups again
    216223
    217224= 2.1.5 =
    218225* FIXED: replaced all references to the deprecated each-function with foreach (ADI-628)
    219 * FIXED: authorization groups will now properly prevent users from logging in (ADI-664, https://wordpress.org/support/topic/authorization-groups-not-working/ Thanks to shmew22, GitHub #92 Thanks to pokertour)
    220 * FIXED: the menu-visibility options were missing inside the profile-tab (ADI-663, https://wordpress.org/support/topic/menu-items-missing-3/ Thanks to 5tu)
    221 * ADDED: 2 new filters to allow for custom validation during the authentication process (ADI-657, GitHub #89 Thanks to Destabilizator)
     226* FIXED: authorization groups will now properly prevent users from logging in, https://wordpress.org/support/topic/authorization-groups-not-working/; thanks to *shmew22*, *pokertour* (ADI-664, #92)
     227* FIXED: the menu-visibility options were missing inside the profile-tab, https://wordpress.org/support/topic/menu-items-missing-3/; thanks to *5tu* (ADI-663);
     228* ADDED: 2 new filters to allow for custom validation during the authentication process; thanks to *Destabilizator* (ADI-657, #89)
    222229
    223230= 2.1.4 =
     
    228235
    229236= 2.1.3 =
    230 * ADD: added message on the profile configuration page to inform customers about end of PHP version <7.1 support
    231 * ADD: json response for "Sync to WordPress" triggered via powershell
    232 * ADD: improved logging in within the Connection.php class
    233 * ADD: missing German translations
    234 * ADD: PHP_AUTH_USER to SSO username variables
     237* ADDED: added message on the profile configuration page to inform customers about end of PHP version <7.1 support
     238* ADDED: json response for "Sync to WordPress" triggered via powershell
     239* ADDED: improved logging in within the Connection.php class
     240* ADDED: missing German translations
     241* ADDED: PHP_AUTH_USER to SSO username variables
    235242* FIXED: app.config and password.controller.config being flagged by customer firewalls / security plugins which resulted in them not being loaded properly (renamed them)
    236243* FIXED: redirect to target site not working properly after being authenticated via NADI SSO
     
    244251
    245252= 2.1.1 =
    246 * ADD: Github#59 proxy address login (Special thanks to Github user *nedwidek* for contributing this functionality)
    247 * ADD: profile picture ad attributes to the ad attributes dropdown at the ad attributes configuration page
    248 * ADD: Github#44 claims based authentication (Special thanks to Github user *rgottsch* for contributing this functionality)
    249 * ADD: new option to decide if you want to grant smart card users access to the WordPress environment
    250 * ADD: links to the specific documentation pages for each configuration page
    251 * ADD: Github#64 powershell script to trigger "Sync to WordPress" and "Sync to AD" (Special thanks to Github user *nemchik* for contributing this)
    252 * FIX: Github#49 its now possible to enter an empty base dn
    253 * FIX: adjusted base DN description
    254 * FIX: Github#59 typo in LoginService.php
     253* ADDED: proxy address login; special thanks to *nedwidek* for contributing this functionality (#59)
     254* ADDED: profile picture ad attributes to the ad attributes dropdown at the ad attributes configuration page
     255* ADDED: claims based authentication; special thanks to *rgottsch* for contributing this functionality (#44)
     256* ADDED: new option to decide if you want to grant smart card users access to the WordPress environment
     257* ADDED: links to the specific documentation pages for each configuration page
     258* ADDED: powershell script to trigger "Sync to WordPress" and "Sync to AD"; special thanks to *nemchik* for contributing this (#64)
     259* FIXED: it is now possible to enter an empty base dn (#49)
     260* FIXED: adjusted base DN description
     261* FIXED: typo in LoginService.php (#59)
    255262* REMOVED: whitespaces inside the rendered curl and wget tags
    256263* REMOVED: old code that caused an warning with PHP 7.2.0 changes to count() and sizeOf()
    257264
    258265= 2.1.0 =
    259 * ADD: NADI is now using Monolog for everything related to logs
    260 * ADD: added a button to manually persist "Logging" configurations
    261 * FIX: user attributes are now correctly logged
    262 * FIX: fixed a problem where the port configuration for LDAPS was not used
    263 * FIX: updated twig to the latest 1.x version. (2.x requires >= PHP 7.0.0)
    264 * ADD: debug logs messages will be not displayed in the frontend log anymore in order to prevent an overflow
    265 * ADD: dummy logger in order to prevent outdated premium extensions from crashing
     266* ADDED: NADI is now using Monolog for everything related to logs
     267* ADDED: added a button to manually persist "Logging" configurations
     268* FIXED: user attributes are now correctly logged
     269* FIXED: fixed a problem where the port configuration for LDAPS was not used
     270* FIXED: updated twig to the latest 1.x version. (2.x requires >= PHP 7.0.0)
     271* ADDED: debug logs messages will be not displayed in the frontend log anymore in order to prevent an overflow
     272* ADDED: dummy logger in order to prevent outdated premium extensions from crashing
    266273* REMOVED: removed log4php from NADI
    267274
    268275= 2.0.14 =
    269 * ADD: added frontend information banners for NADI premium extensions
    270 * ADD: added frontend information about why "Sync to WordPress" can not be started
    271 * FIX: members of not mapped security groups will now receive the default role "Subscriber"
    272 * FIX: "Clean existing Roles" is now default set to false
    273 * ADD: added new style for configuration page
    274 * FIX: fixed some style issues
    275 * ADD: added logic to determine if a NADI option already exists in the DB to prevent the problem saving options with default value true
    276 * ADD: added detailed log on which UAC flag is responsible for users not beeing imported
    277 * FIX: fixed logs destroying the user profile while trying to update a user profile / also catched exception
    278 * FIX: fixed template conditions causing problems in Microsoft Edge
     276* ADDED: added frontend information banners for NADI premium extensions
     277* ADDED: added frontend information about why "Sync to WordPress" can not be started
     278* FIXED: members of not mapped security groups will now receive the default role "Subscriber"
     279* FIXED: "Clean existing Roles" is now default set to false
     280* ADDED: added new style for configuration page
     281* FIXED: fixed some style issues
     282* ADDED: added logic to determine if a NADI option already exists in the DB to prevent the problem saving options with default value true
     283* ADDED: added detailed log on which UAC flag is responsible for users not being imported
     284* FIXED: fixed logs destroying the user profile while trying to update a user profile / also caught exception
     285* FIXED: fixed template conditions causing problems in Microsoft Edge
    279286
    280287
    281288= 2.0.13 =
    282 * FIX: switched from mcrypt to defuse/php-encryption
    283 * FIX: decoupled password update from user update to allow for automatic password updates without 'auto update user' set to true
    284 * FIX: marked brute force protection deprecated
    285 * FIX: minor bugs when using ldap over ssl
    286 * ADD: sync to ad now uses the GUID for syncronization
    287 * FIX: verify domain controller connectivity before incrementing brute force protection counter
    288 * FIX: custom attributes inside the user profile will prioritize the custom description (thanks to mzemann)
    289 * FIX: changed the look of Sync to AD, Sync to WordPress and Test authentication
    290 * ADD: added row to users list for premium extension (custom user role management)
    291 * FIX: added the complete dirname when using require_once inside index.php (GitHub #47)
     289* FIXED: switched from mcrypt to defuse/php-encryption
     290* FIXED: decoupled password update from user update to allow for automatic password updates without 'auto update user' set to true
     291* FIXED: marked brute force protection deprecated
     292* FIXED: minor bugs when using ldap over ssl
     293* ADDED: sync to ad now uses the GUID for synchronization
     294* FIXED: verify domain controller connectivity before incrementing brute force protection counter
     295* FIXED: custom attributes inside the user profile will prioritize the custom description; thanks to *mzemann*
     296* FIXED: changed the look of Sync to AD, Sync to WordPress and Test authentication
     297* ADDED: added row to users list for premium extension (custom user role management)
     298* FIXED: added the complete dirname when using require_once inside index.php (#47)
    292299
    293300= 2.0.12 =
    294 * ADD: internationalization for all plugin strings (ADI-432 ADI-436 see https://translate.wordpress.org/projects/wp-plugins/next-active-directory-integration)
    295 * FIX: roles are now mapped using the GUID instead of sAMAccountName (ADI-428)
    296 * ADD: option for preventing disabled users to be synchronized to WordPress (ADI-223)
    297 * ADD: validation for Base DN
    298 * FIX: problem when sending brute force protection notifications via email (ADI-464)
    299 * FIX: non NADI users being blocked by the brute force protection
    300 * FIX: brute force protection now checks for the whole username (ADI-424)
    301 * FIX: updating user profiles without bind user (ADI-439)
    302 * FIX: countdown for brute force protection (ADI-456)
     301* ADDED: internationalization for all plugin strings, see https://translate.wordpress.org/projects/wp-plugins/next-active-directory-integration (ADI-432, ADI-436)
     302* FIXED: roles are now mapped using the GUID instead of sAMAccountName (ADI-428)
     303* ADDED: option for preventing disabled users to be synchronized to WordPress (ADI-223)
     304* ADDED: validation for Base DN
     305* FIXED: problem when sending brute force protection notifications via email (ADI-464)
     306* FIXED: non NADI users being blocked by the brute force protection
     307* FIXED: brute force protection now checks for the whole username (ADI-424)
     308* FIXED: updating user profiles without bind user (ADI-439)
     309* FIXED: countdown for brute force protection (ADI-456)
    303310
    304311= 2.0.11 =
    305 * ADD: NTLM support for SSO (sponsored by Vogels - www.vogels.com)
    306 * ADD: implementation of hooks to provide an API (ADI-145)
    307 * ADD: premium extensions available for support license subscribers
    308 * ADD: log reason for not being able to increase max_execution_time (ADI-396)
    309 * ADD: log message that AD security group could not be found (ADI-397)
    310 * ADD: improve logging number of users to import from AD to WordPress (ADI-414)
    311 * FIX: synchronization does not work b/c getDomainSid returns "S-0" (ADI-412)
    312 * FIX: "Test authentication" does not allow characters like a backward slash (ADI-421)
    313 * FIX: permanent redirects after successful authentication (ADI-422)
    314 * FIX: error "the current user is being initialized without using $wp->init()" when using BuddyPress (ADI-416)
    315 * FIX: blocking of users with long user names (ADI-330)
    316 * FIX: get_blog_details replaced with get_site to maintain compatibility with WordPress 4.7+ (ADI-419)
    317 * FIX: restrict output of debug LDAP user information to only an amount of characters (ADI-420)
    318 * FIX: Sync to WordPress: default WordPress role "Subscriber" is not assigned (ADI-401)
    319 * FIX: Users with admin role granted by WordPress lose their role when logging into the site for the first time (ADI-380)
     312* ADDED: NTLM support for SSO (sponsored by Vogels - www.vogels.com)
     313* ADDED: implementation of hooks to provide an API (ADI-145)
     314* ADDED: premium extensions available for support license subscribers
     315* ADDED: log reason for not being able to increase max_execution_time (ADI-396)
     316* ADDED: log message that AD security group could not be found (ADI-397)
     317* ADDED: improve logging number of users to import from AD to WordPress (ADI-414)
     318* FIXED: synchronization does not work b/c getDomainSid returns "S-0" (ADI-412)
     319* FIXED: "Test authentication" does not allow characters like a backward slash (ADI-421)
     320* FIXED: permanent redirects after successful authentication (ADI-422)
     321* FIXED: error "the current user is being initialized without using $wp->init()" when using BuddyPress (ADI-416)
     322* FIXED: blocking of users with long user names (ADI-330)
     323* FIXED: get_blog_details replaced with get_site to maintain compatibility with WordPress 4.7+ (ADI-419)
     324* FIXED: restrict output of debug LDAP user information to only an amount of characters (ADI-420)
     325* FIXED: Sync to WordPress: default WordPress role "Subscriber" is not assigned (ADI-401)
     326* FIXED: Users with admin role granted by WordPress lose their role when logging into the site for the first time (ADI-380)
    320327
    321328= 2.0.10 =
    322 * ADD: option to enable/disable authentication using XML-RPC
    323 * FIX: reworked user interface
    324 * FIX: sync ends after deleted account is no longer present in Active Directory
    325 * FIX: integration tests
    326 * FIX: emails will not be sent to administrators (GitHub #27 Thanks to kyleflan)
    327 * FIX: users can now be disabled from WordPress
    328 * ADD: HTTP_X_REMOTE_USER is now an option in the SSO configuration (GitHub #29 Thanks to laughtonsm)
     329* ADDED: option to enable/disable authentication using XML-RPC
     330* FIXED: reworked user interface
     331* FIXED: sync ends after deleted account is no longer present in Active Directory
     332* FIXED: integration tests
     333* FIXED: emails will not be sent to administrators; thanks to *kyleflan* (#27)
     334* FIXED: users can now be disabled from WordPress
     335* ADDED: HTTP_X_REMOTE_USER is now an option in the SSO configuration; thanks to *laughtonsm* (#29)
    329336
    330337= 2.0.9 =
    331 * FIX: add missing default value for method parameter
     338* FIXED: add missing default value for method parameter
    332339
    333340= 2.0.8 =
    334 * FIX: remove PHP 5.6 code (GitHub #22 Thanks to requincreative)
     341* FIXED: remove PHP 5.6 code; thanks to *requincreative* (#22)
    335342
    336343= 2.0.7 =
    337 * ADD: custom user roles can be used in "Role equivalent groups"
    338 * ADD: the logger is disabled by default (and can be enabled inside the configuration)
    339 * ADD: log file path can be configured (default is wp-content/plugins/next-active-directory-integration/logs/debug.log)
     344* ADDED: custom user roles can be used in "Role equivalent groups"
     345* ADDED: the logger is disabled by default (and can be enabled inside the configuration)
     346* ADDED: log file path can be configured (default is wp-content/plugins/next-active-directory-integration/logs/debug.log)
    340347
    341348= 2.0.6 =
    342 * FIX: show activation notice only after activating this plugin (https://wordpress.org/support/topic/activate-plugin-notification-bug/ Thanks to bobchou9)
    343 * FIX: SSO/verify-password errors by un-quoting values in $_GET/$_POST/$_SERVER. WordPress quotes all entries in $_GET/$_POST/$_SERVER automatically (GitHub #20 Thanks to plantjes)
     349* FIXED: show activation notice only after activating this plugin (https://wordpress.org/support/topic/activate-plugin-notification-bug/); thanks to bobchou9
     350* FIXED: SSO/verify-password errors by un-quoting values in $_GET/$_POST/$_SERVER. WordPress quotes all entries in $_GET/$_POST/$_SERVER automatically; thanks to plantjes (#20)
    344351
    345352= 2.0.5 =
    346 * FIX: check if AD result is not empty before accessing distinguished name (GitHub #16 Thanks to petterannerwall)
    347 * ADD: optional support for Down-Level User Name (like TEST\klammer) (GitHub #18)
     353* FIXED: check if AD result is not empty before accessing distinguished name; thanks to petterannerwall (#16)
     354* ADDED: optional support for Down-Level User Name (like TEST\klammer) (#18)
    348355
    349356= 2.0.4 =
    350 * ADD: make log pattern configurable (https://wordpress.org/support/topic/please-add-timestamps-to-the-debug-log-file/ Thanks to tmuikku)
     357* ADDED: make log pattern configurable (https://wordpress.org/support/topic/please-add-timestamps-to-the-debug-log-file/); Thanks to tmuikku
    351358
    352359= 2.0.3 =
    353 * FIX: brute force protection is now be disabled (GitHub #14 Thanks to Munnday (David Munn))
    354 * FIX: the max count of login tries and the block time are now editable
     360* FIXED: brute force protection is now be disabled; thanks to Munnday (David Munn) (#14)
     361* FIXED: the max count of login tries and the block time are now editable
    355362
    356363= 2.0.2 =
    357 * FIX: SSO caused a PHP error during login (GitHub #13 Thanks to Jason Taylor and Munnday (David Munn))
     364* FIXED: SSO caused a PHP error during login; thanks to Jason Taylor and Munnday (David Munn) (#13)
    358365
    359366= 2.0.1 =
    360 * FIX: missing german translation
     367* FIXED: missing german translation
    361368
    362369= 2.0.0 =
    363 * ADD: support for WordPress Multisite through profiles
    364 * ADD: Profiles can be customized, including the permission of every option
    365 * ADD: support for PHP7
    366 * ADD: detailed documentation at https://www.active-directory-wp.com/docs/Getting_Started.html
    367 * ADD: experimental support for multiple Active Directory domains; see FAQ
    368 * ADD: easier handling and description of encryption methods for LDAP
    369 * ADD: additional columns in Multisite overview for networks and users
    370 * ADD: user names can be explicitly excluded from authentication
    371 * ADD: menu entries of *Next ADI* can be hidden
    372 * ADD: *Next ADI* can be disabled per Multisite site environment
    373 * CHANGE: large user interface improvements
    374 * CHANGE: complete rewrite of the PHP backend
    375 * CHANGE: userPrincipalName is leading attribute for user identification instead of sAMAccountName
    376 * FIX: Role Equivalent Groups can be mapped to multiple WordPress roles instead of only one
     370* ADDED: support for WordPress Multisite through profiles
     371* ADDED: Profiles can be customized, including the permission of every option
     372* ADDED: support for PHP7
     373* ADDED: detailed documentation at https://www.active-directory-wp.com/docs/Getting_Started.html
     374* ADDED: experimental support for multiple Active Directory domains; see FAQ
     375* ADDED: easier handling and description of encryption methods for LDAP
     376* ADDED: additional columns in Multisite overview for networks and users
     377* ADDED: user names can be explicitly excluded from authentication
     378* ADDED: menu entries of *Next ADI* can be hidden
     379* ADDED: *Next ADI* can be disabled per Multisite site environment
     380* CHANGED: large user interface improvements
     381* CHANGED: complete rewrite of the PHP backend
     382* CHANGED: userPrincipalName is leading attribute for user identification instead of sAMAccountName
     383* FIXED: Role Equivalent Groups can be mapped to multiple WordPress roles instead of only one
    377384* and much much more we can not list here. Please take the time and read the official documentation :-)
    378385
  • next-active-directory-integration/tags/2.3.2/vendor/adLDAP/adLDAP.php

    r2641799 r2692352  
    824824       
    825825        // Let's use paging if available
    826         // gh-#127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
     826        // #127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
    827827        if (function_exists('ldap_control_paged_result')) {
    828828           
     
    10151015       
    10161016        // Let's use paging if available
    1017         // gh-#127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
     1017        // #127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
    10181018        if (function_exists('ldap_control_paged_result')) {
    10191019       
     
    13651365            return $entries;
    13661366        }
     1367
    13671368        return false;
    13681369    }
    13691370
    1370     /**
    1371      * Get a configuration entry form the CN=Partitions,CN=Configuration object
    1372      *
     1371    const PARTITIONS_PREFIX = "CN=Partitions,CN=Configuration,";
     1372    const NETBIOS_MATCHER = "(&(netbiosname=*))";
     1373    const NCNAME_ATTRIBUTE = 'ncname';
     1374
     1375    /**
     1376     * Get a configuration entry form the CN=Partitions,CN=Configuration object.
     1377     * Due to the nature of Active Directory forests, this method is not so simple.
     1378     *
     1379     * @since #153 this method has been extended to support Active Directory forests
    13731380     * @param $filter
    13741381     * @return bool
    13751382     */
    1376     public function get_configuration($filter)
    1377     {
    1378         $tmp = "CN=Partitions,CN=Configuration," . $this->_base_dn;
    1379         $sr = ldap_search($this->_conn,$tmp,"(&(netbiosname=*))", array());
    1380         $entries = ldap_get_entries($this->_conn, $sr);
    1381 
    1382         if ($entries[0]['count'] >= 1) {
    1383             $result = $entries[0][$filter][0];
    1384 
    1385             return $result;
    1386         }
    1387 
    1388         return false;
    1389     }
     1383    public function get_configuration($filter)
     1384    {
     1385        // in a single Active Directory domain environment, we'll probably find the partition CN below CN=Partitions,CN=Configuration,${BASE_DN}.
     1386        // in a Active Directory domain forest, this can be a little bit more complex. The base DN could be DC=sub,DC=test,DC=ad but the CN for the partition can be CN=Partitions,CN=Configuration,DC=test,DC=ad (note the missing DC=sub).
     1387        $distinguishedNameCandidates = array();
     1388        $leafs = explode(",", $this->_base_dn);
     1389
     1390        // we create a list of DN search candidates in which the configuration is probably stored, beginning with the most concrete DN (DC=sub,DC=test,DC=ad) and ending with the most top-level DN (DC=ad)
     1391        for ($i = 0, $m = sizeof($leafs); $i < $m; $i++) {
     1392            $distinguishedNameCandidates[] = self::PARTITIONS_PREFIX . implode(",", array_slice($leafs, $i));
     1393        }
     1394
     1395        $sanitizedBaseDn = $this->sanitizeDistinguishedName($this->_base_dn);
     1396        $r = FALSE;
     1397        $hasBestMatch = FALSE;
     1398
     1399        // iterate over each of the available parts
     1400        foreach ($distinguishedNameCandidates as $distinguishedName) {
     1401            // try to find the configuration below e.g. CN=Partitions,CN=Configuration,DC=sub,DC=test,DC=ad
     1402            $sr = $this->_ldap_search($distinguishedName, self::NETBIOS_MATCHER, array());
     1403
     1404            // handle error code 32, "No such object" when configuration partition can not be found by given DN
     1405            if (!$sr) {
     1406                continue;
     1407            }
     1408
     1409            $entries = $this->_ldap_get_entries($sr);
     1410
     1411            // if no entries are available, this is probably the wrong search tree. We move a level up (now: CN=Partitions,CN=Configuration,DC=sub,DC=test,DC=ad; next: CN=Partitions,CN=Configuration,DC=sub,DC=test,DC=ad)
     1412            if (!$entries) {
     1413                continue;
     1414            }
     1415
     1416            $count = (int)$entries['count'];
     1417
     1418            if ($count >= 1) {
     1419                // after having found our configuration partition DN (e.g. CN=Partitions,CN=Configuration,DC=test,DC=ad), we need to check each of the CNs in there with the netbiosname attribute if they match the specified base DN:
     1420                // in a AD forest, we would have the following entries below CN=Partitions,CN=Configuration,DC=test,DC=ad:
     1421                // - CN=SUB,CN=Partitions,CN=Configuration,DC=test,DC=ad
     1422                // - CN=FOREST-1,CN=Partitions,CN=Configuration,DC=test,DC=ad
     1423                // - CN=FOREST-2,CN=Partitions,CN=Configuration,DC=test,DC=ad
     1424                for ($idx = 0, $m = $count; $idx < $m; $idx++) {
     1425                    // the first entry is our best match if we don't find a better match
     1426                    if (!$r) {
     1427                        $r = $entries[$idx][$filter][0];
     1428                    }
     1429
     1430                    // the attribute nCName contains the base DN for a partition. If this matches the specified base DN, we are good to go.
     1431                    // possible caveat: the base DN good be too unspecific so that the wrong partition is used; this could only happy in a AD forest - in a single forest, there is only one entry available.
     1432                    $sanitizedNCname = $this->sanitizeDistinguishedName($entries[$idx][self::NCNAME_ATTRIBUTE][0]);
     1433
     1434                    if ($sanitizedNCname == $sanitizedBaseDn) {
     1435                        $r = $entries[$idx][$filter][0];
     1436
     1437                        // end outer loop
     1438                        $hasBestMatch = TRUE;
     1439                        // end this loop
     1440                        break;
     1441                    }
     1442                }
     1443            }
     1444
     1445            if ($hasBestMatch) {
     1446                break;
     1447            }
     1448
     1449        }
     1450
     1451        return $r;
     1452    }
     1453
     1454    /**
     1455     * Removes any whitespaces in front and at the end and lowers the string
     1456     * @param $dn
     1457     * @return string
     1458     */
     1459    public function sanitizeDistinguishedName($dn)
     1460    {
     1461        return trim(strtolower($dn));
     1462    }
     1463
     1464    /**
     1465     * Forward method to <em>php_ldap</em>'s ldap_get_entries to make adLDAP testable.
     1466     *
     1467     * @param $result
     1468     * @return array
     1469     */
     1470    protected function _ldap_get_entries($result)
     1471    {
     1472        return ldap_get_entries($this->_conn, $result);
     1473    }
     1474
     1475    /**
     1476     * Forward method to <em>php_ldap</em>'s ldap_search to make adLDAP testable.
     1477     *
     1478     * @param $base
     1479     * @param $filter
     1480     * @param array $attributes
     1481     * @param int $attributes_only
     1482     * @param int $sizelimit
     1483     * @param int $timelimit
     1484     * @param int $deref
     1485     * @param null $controls
     1486     * @return array
     1487     */
     1488    protected function _ldap_search($base, $filter, $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, $controls = null)
     1489    {
     1490        return ldap_search($this->_conn, $base, $filter, $attributes, $attributes_only, $sizelimit, $timelimit, $deref, $controls);
     1491    }
    13901492   
    13911493    /**
     
    29463048        $sr = ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
    29473049       
    2948         // @see #146: if search failed, $sr will be false and we have to return
     3050        // #146: if search failed, $sr will be false and we have to return
    29493051        if ($sr === FALSE) {
    29503052            return FALSE;
  • next-active-directory-integration/tags/2.3.2/vendor/autoload.php

    r2662231 r2692352  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1::getLoader();
     7return ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25::getLoader();
  • next-active-directory-integration/tags/2.3.2/vendor/composer/autoload_files.php

    r2662231 r2692352  
    88return array(
    99    '5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
     10    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
    1011    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
    11     '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
    1212);
  • next-active-directory-integration/tags/2.3.2/vendor/composer/autoload_real.php

    r2662231 r2692352  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1
     5class ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
    29         spl_autoload_unregister(array('ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInit134232ed870c926a87ebeb152d531d25::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInit134232ed870c926a87ebeb152d531d25::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequired668969de90e07bc3e6c5441ee782cc1($fileIdentifier, $file);
     61            composerRequire134232ed870c926a87ebeb152d531d25($fileIdentifier, $file);
    6262        }
    6363
     
    7171 * @return void
    7272 */
    73 function composerRequired668969de90e07bc3e6c5441ee782cc1($fileIdentifier, $file)
     73function composerRequire134232ed870c926a87ebeb152d531d25($fileIdentifier, $file)
    7474{
    7575    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • next-active-directory-integration/tags/2.3.2/vendor/composer/autoload_static.php

    r2662231 r2692352  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1
     7class ComposerStaticInit134232ed870c926a87ebeb152d531d25
    88{
    99    public static $files = array (
    1010        '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
     11        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
    1112        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
    12         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
    1313    );
    1414
     
    7777    {
    7878        return \Closure::bind(function () use ($loader) {
    79             $loader->prefixLengthsPsr4 = ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$prefixLengthsPsr4;
    80             $loader->prefixDirsPsr4 = ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$prefixDirsPsr4;
    81             $loader->classMap = ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$classMap;
     79            $loader->prefixLengthsPsr4 = ComposerStaticInit134232ed870c926a87ebeb152d531d25::$prefixLengthsPsr4;
     80            $loader->prefixDirsPsr4 = ComposerStaticInit134232ed870c926a87ebeb152d531d25::$prefixDirsPsr4;
     81            $loader->classMap = ComposerStaticInit134232ed870c926a87ebeb152d531d25::$classMap;
    8282
    8383        }, null, ClassLoader::class);
  • next-active-directory-integration/tags/2.3.2/vendor/composer/installed.json

    r2662231 r2692352  
    158158        {
    159159            "name": "paragonie/random_compat",
    160             "version": "v2.0.20",
    161             "version_normalized": "2.0.20.0",
     160            "version": "v2.0.21",
     161            "version_normalized": "2.0.21.0",
    162162            "source": {
    163163                "type": "git",
    164164                "url": "https://github.com/paragonie/random_compat.git",
    165                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a"
    166             },
    167             "dist": {
    168                 "type": "zip",
    169                 "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
    170                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
     165                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae"
     166            },
     167            "dist": {
     168                "type": "zip",
     169                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
     170                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
    171171                "shasum": ""
    172172            },
     
    175175            },
    176176            "require-dev": {
    177                 "phpunit/phpunit": "4.*|5.*"
     177                "phpunit/phpunit": "*"
    178178            },
    179179            "suggest": {
    180180                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
    181181            },
    182             "time": "2021-04-17T09:33:01+00:00",
     182            "time": "2022-02-16T17:07:03+00:00",
    183183            "type": "library",
    184184            "installation-source": "dist",
     
    268268        {
    269269            "name": "symfony/polyfill-ctype",
    270             "version": "v1.24.0",
    271             "version_normalized": "1.24.0.0",
     270            "version": "v1.25.0",
     271            "version_normalized": "1.25.0.0",
    272272            "source": {
    273273                "type": "git",
     
    303303            "installation-source": "dist",
    304304            "autoload": {
     305                "files": [
     306                    "bootstrap.php"
     307                ],
    305308                "psr-4": {
    306309                    "Symfony\\Polyfill\\Ctype\\": ""
    307                 },
    308                 "files": [
    309                     "bootstrap.php"
    310                 ]
     310                }
    311311            },
    312312            "notification-url": "https://packagist.org/downloads/",
     
    333333            ],
    334334            "support": {
    335                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
     335                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
    336336            },
    337337            "funding": [
     
    385385            "installation-source": "dist",
    386386            "autoload": {
     387                "files": [
     388                    "bootstrap.php"
     389                ],
    387390                "psr-4": {
    388391                    "Symfony\\Polyfill\\Mbstring\\": ""
    389                 },
    390                 "files": [
    391                     "bootstrap.php"
    392                 ]
     392                }
    393393            },
    394394            "notification-url": "https://packagist.org/downloads/",
     
    436436        {
    437437            "name": "twig/twig",
    438             "version": "v3.3.7",
    439             "version_normalized": "3.3.7.0",
     438            "version": "v3.3.8",
     439            "version_normalized": "3.3.8.0",
    440440            "source": {
    441441                "type": "git",
    442442                "url": "https://github.com/twigphp/Twig.git",
    443                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b"
    444             },
    445             "dist": {
    446                 "type": "zip",
    447                 "url": "https://api.github.com/repos/twigphp/Twig/zipball/8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
    448                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
     443                "reference": "972d8604a92b7054828b539f2febb0211dd5945c"
     444            },
     445            "dist": {
     446                "type": "zip",
     447                "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
     448                "reference": "972d8604a92b7054828b539f2febb0211dd5945c",
    449449                "shasum": ""
    450450            },
     
    458458                "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
    459459            },
    460             "time": "2022-01-03T21:15:37+00:00",
     460            "time": "2022-02-04T06:59:48+00:00",
    461461            "type": "library",
    462462            "extra": {
     
    499499            "support": {
    500500                "issues": "https://github.com/twigphp/Twig/issues",
    501                 "source": "https://github.com/twigphp/Twig/tree/v3.3.7"
     501                "source": "https://github.com/twigphp/Twig/tree/v3.3.8"
    502502            },
    503503            "funding": [
  • next-active-directory-integration/tags/2.3.2/vendor/composer/installed.php

    r2662231 r2692352  
    11<?php return array(
    22    'root' => array(
    3         'pretty_version' => '2.3.1',
    4         'version' => '2.3.1.0',
     3        'pretty_version' => '2.3.2',
     4        'version' => '2.3.2.0',
    55        'type' => 'library',
    66        'install_path' => __DIR__ . '/../../',
    77        'aliases' => array(),
    8         'reference' => '37e1f656389d0d03aaab30f1d5053e618e625af9',
     8        'reference' => 'e49bb008caab50a3a561224e91d43829a274c2ad',
    99        'name' => '__root__',
    1010        'dev' => false,
     
    1212    'versions' => array(
    1313        '__root__' => array(
    14             'pretty_version' => '2.3.1',
    15             'version' => '2.3.1.0',
     14            'pretty_version' => '2.3.2',
     15            'version' => '2.3.2.0',
    1616            'type' => 'library',
    1717            'install_path' => __DIR__ . '/../../',
    1818            'aliases' => array(),
    19             'reference' => '37e1f656389d0d03aaab30f1d5053e618e625af9',
     19            'reference' => 'e49bb008caab50a3a561224e91d43829a274c2ad',
    2020            'dev_requirement' => false,
    2121        ),
     
    3939        ),
    4040        'paragonie/random_compat' => array(
    41             'pretty_version' => 'v2.0.20',
    42             'version' => '2.0.20.0',
     41            'pretty_version' => 'v2.0.21',
     42            'version' => '2.0.21.0',
    4343            'type' => 'library',
    4444            'install_path' => __DIR__ . '/../paragonie/random_compat',
    4545            'aliases' => array(),
    46             'reference' => '0f1f60250fccffeaf5dda91eea1c018aed1adc2a',
     46            'reference' => '96c132c7f2f7bc3230723b66e89f8f150b29d5ae',
    4747            'dev_requirement' => false,
    4848        ),
     
    6363        ),
    6464        'symfony/polyfill-ctype' => array(
    65             'pretty_version' => 'v1.24.0',
    66             'version' => '1.24.0.0',
     65            'pretty_version' => 'v1.25.0',
     66            'version' => '1.25.0.0',
    6767            'type' => 'library',
    6868            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
     
    8181        ),
    8282        'twig/twig' => array(
    83             'pretty_version' => 'v3.3.7',
    84             'version' => '3.3.7.0',
     83            'pretty_version' => 'v3.3.8',
     84            'version' => '3.3.8.0',
    8585            'type' => 'library',
    8686            'install_path' => __DIR__ . '/../twig/twig',
    8787            'aliases' => array(),
    88             'reference' => '8f168c6ffa3ce76d1786b3cd52275424a3fc675b',
     88            'reference' => '972d8604a92b7054828b539f2febb0211dd5945c',
    8989            'dev_requirement' => false,
    9090        ),
  • next-active-directory-integration/tags/2.3.2/vendor/paragonie/random_compat/composer.json

    r1944146 r2692352  
    2626  },
    2727  "require-dev": {
    28     "phpunit/phpunit": "4.*|5.*"
     28    "phpunit/phpunit": "*"
    2929  },
    3030  "suggest": {
  • next-active-directory-integration/tags/2.3.2/vendor/paragonie/random_compat/lib/random.php

    r2517646 r2692352  
    184184                $RandomCompatCOMtest = new COM('CAPICOM.Utilities.1');
    185185                /** @psalm-suppress TypeDoesNotContainType */
    186                 if (method_exists($RandomCompatCOMtest, 'GetRandom')) {
     186                if (is_callable(array($RandomCompatCOMtest, 'GetRandom'))) {
    187187                    // See random_bytes_com_dotnet.php
    188188                    require_once $RandomCompatDIR.DIRECTORY_SEPARATOR.'random_bytes_com_dotnet.php';
  • next-active-directory-integration/tags/2.3.2/vendor/twig/twig/CHANGELOG

    r2662231 r2692352  
     1# 3.3.8 (2022-02-04)
     2
     3 * Fix a security issue when in a sandbox: the `sort` filter must require a Closure for the `arrow` parameter
     4
    15# 3.3.7 (2022-01-03)
    26
  • next-active-directory-integration/tags/2.3.2/vendor/twig/twig/src/Environment.php

    r2662231 r2692352  
    3939class Environment
    4040{
    41     public const VERSION = '3.3.7';
    42     public const VERSION_ID = 30307;
     41    public const VERSION = '3.3.8';
     42    public const VERSION_ID = 30308;
    4343    public const MAJOR_VERSION = 3;
    4444    public const MINOR_VERSION = 3;
    45     public const RELEASE_VERSION = 7;
     45    public const RELEASE_VERSION = 8;
    4646    public const EXTRA_VERSION = '';
    4747
  • next-active-directory-integration/tags/2.3.2/vendor/twig/twig/src/Extension/CoreExtension.php

    r2662231 r2692352  
    202202            new TwigFilter('join', 'twig_join_filter'),
    203203            new TwigFilter('split', 'twig_split_filter', ['needs_environment' => true]),
    204             new TwigFilter('sort', 'twig_sort_filter'),
     204            new TwigFilter('sort', 'twig_sort_filter', ['needs_environment' => true]),
    205205            new TwigFilter('merge', 'twig_array_merge'),
    206206            new TwigFilter('batch', 'twig_array_batch'),
     
    544544function twig_round($value, $precision = 0, $method = 'common')
    545545{
     546    $value = (float) $value;
     547
    546548    if ('common' === $method) {
    547549        return round($value, $precision);
     
    551553        throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.');
    552554    }
    553 
    554     $value = (float) $value;
    555555
    556556    return $method($value * 10 ** $precision) / 10 ** $precision;
     
    888888 * @return array
    889889 */
    890 function twig_sort_filter($array, $arrow = null)
     890function twig_sort_filter(Environment $env, $array, $arrow = null)
    891891{
    892892    if ($array instanceof \Traversable) {
     
    897897
    898898    if (null !== $arrow) {
     899        twig_check_arrow_in_sandbox($env, $arrow, 'sort', 'filter');
     900
    899901        uasort($array, $arrow);
    900902    } else {
     
    16401642    }
    16411643
    1642     if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
    1643         throw new RuntimeError('The callable passed to "filter" filter must be a Closure in sandbox mode.');
    1644     }
     1644    twig_check_arrow_in_sandbox($env, $arrow, 'filter', 'filter');
    16451645
    16461646    if (\is_array($array)) {
     
    16541654function twig_array_map(Environment $env, $array, $arrow)
    16551655{
    1656     if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
    1657         throw new RuntimeError('The callable passed to the "map" filter must be a Closure in sandbox mode.');
    1658     }
     1656    twig_check_arrow_in_sandbox($env, $arrow, 'map', 'filter');
    16591657
    16601658    $r = [];
     
    16681666function twig_array_reduce(Environment $env, $array, $arrow, $initial = null)
    16691667{
    1670     if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
    1671         throw new RuntimeError('The callable passed to the "reduce" filter must be a Closure in sandbox mode.');
    1672     }
     1668    twig_check_arrow_in_sandbox($env, $arrow, 'reduce', 'filter');
    16731669
    16741670    if (!\is_array($array)) {
     
    16821678    return array_reduce($array, $arrow, $initial);
    16831679}
    1684 }
     1680
     1681function twig_check_arrow_in_sandbox(Environment $env, $arrow, $thing, $type)
     1682{
     1683    if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
     1684        throw new RuntimeError(sprintf('The callable passed to the "%s" %s must be a Closure in sandbox mode.', $thing, $type));
     1685    }
     1686}
     1687}
  • next-active-directory-integration/trunk/classes/Adi/Authentication/LoginService.php

    r2641799 r2692352  
    113113        add_filter('wp_authenticate_user', array($this->loginSucceededService, 'checkUserEnabled'), 10, 2);
    114114
    115         // @see #142: register an additional filter for checking if the username is excluded
     115        // #142: register an additional filter for checking if the username is excluded
    116116        add_filter(NEXT_AD_INT_PREFIX . 'auth_form_login_requires_ad_authentication', array($this, 'requiresActiveDirectoryAuthentication'), 10, 1);
    117117    }
  • next-active-directory-integration/trunk/classes/Adi/Authentication/SingleSignOn/Service.php

    r2641799 r2692352  
    7575        // after login has succeeded, we want the current identified user to be automatically logged in
    7676        add_filter(NEXT_AD_INT_PREFIX . 'login_succeeded', array($this, 'loginUser'), 19, 1);
    77         // @see #142: register an additional filter for checking if the username is excluded; please note that this differs from the parent's basic_login_requires_ad_authentication filter
     77        // #142: register an additional filter for checking if the username is excluded; please note that this differs from the parent's basic_login_requires_ad_authentication filter
    7878        add_filter(NEXT_AD_INT_PREFIX . 'auth_sso_login_requires_ad_authentication', array($this, 'requiresActiveDirectoryAuthentication'), 10, 1);
    7979    }
     
    169169        $profileMatch = $this->ssoProfileLocator->locate($credentials);
    170170
     171        // #152, NADISUP-7: Critical WordPress error if a matching profile for SSO authentication can not be found
     172        if (!$profileMatch) {
     173            throw new NextADInt_Adi_Authentication_Exception("Unable to locate a matching profile for '" . $credentials->getLogin() . "'");
     174        }
     175
    171176        // a valid profile is required for login
    172177        $validation->validateProfile($profileMatch->getProfile());
    173 
     178       
    174179        $this->logger->debug("Valid SSO profile for type '" . $profileMatch->getType() . "' found");
    175180        // fire a hook to inform that one of the SSO profiles has been matched
  • next-active-directory-integration/trunk/classes/Adi/Configuration/Options.php

    r2641799 r2692352  
    109109    // Custom Login Page
    110110    const CUSTOM_LOGIN_PAGE_ENABLED = 'custom_login_page_enabled';
     111    const CUSTOM_LOGIN_PAGE_URI = 'custom_login_page_uri';
    111112
    112113    // additional attribute mapping
     
    190191
    191192    /**
    192      * This method generates all the meta information for a option elements.
    193      * The keys (like self::DOMAIN_CONTROLLERS, self::PORT) and it is values are option elements.
     193     * This method generates all the meta information for an option elements.
     194     * The keys (like self::DOMAIN_CONTROLLERS, self::PORT) and their values are option elements.
    194195     * The key is the internal name for the option and the value is the option meta data.
    195196     *
     
    11681169                $transient => false,
    11691170            ),
     1171            self::CUSTOM_LOGIN_PAGE_URI => array(
     1172                $title => __('Custom login page URI', 'next-active-directory-integration'),
     1173                $type => NextADInt_Multisite_Option_Type::TEXT,
     1174                $description => __('URI of a custom login page where authentication against the Active Directory will be enabled. By default, the custom login page\'s URI is <em>/login</em>.',
     1175                    'next-active-directory-integration'),
     1176                $detail => __('If you use a custom login page URI like <em>/login</em>, please enter it to enable Active Directory authentication check on this page.', 'next-active-directory-integration'),
     1177                $angularAttributes => 'ng-disabled="(!option.custom_login_page_enabled',
     1178                $default => '/login',
     1179                $sanitizer => array('string'),
     1180                $showPermission => true,
     1181                $transient => false,
     1182            ),
    11701183            // Maximum number of failed login attempts before the account is blocked
    11711184            self::MAX_LOGIN_ATTEMPTS => array(
  • next-active-directory-integration/trunk/classes/Adi/Configuration/Ui/Layout.php

    r2641799 r2692352  
    235235                    self::OPTIONS => array(
    236236                        NextADInt_Adi_Configuration_Options::ENABLE_SMARTCARD_USER_LOGIN,
    237                         NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_ENABLED
     237                        NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_ENABLED,
     238                        NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_URI
    238239                    ),
    239240                ),
  • next-active-directory-integration/trunk/classes/Adi/Init.php

    r2331595 r2692352  
    233233     * Signal that NADI registration has been finished. It simply calls the WordPress action 'nadi_loaded'
    234234     * @since 2.1.8
    235      * @see ADI-672
     235     * @issue ADI-672
    236236     */
    237237    public function finishRegistration() {
     
    486486
    487487        if ($customLoginPageEnabled) {
    488             if (isset($_SERVER["REQUEST_URI"]) && strpos($_SERVER["REQUEST_URI"], '/login') !== false) {
     488            $loginUri = $this->dc()->getConfiguration()->getOptionValue(NextADInt_Adi_Configuration_Options::CUSTOM_LOGIN_PAGE_URI);
     489
     490            if (isset($_SERVER["REQUEST_URI"]) && strpos($_SERVER["REQUEST_URI"], $loginUri) !== false) {
    489491                $r = true;
    490492            }
  • next-active-directory-integration/trunk/classes/Adi/Synchronization/Abstract.php

    r2517646 r2692352  
    169169            $sid = NextADInt_ActiveDirectory_Sid::of($userDomainSid);
    170170
    171             // @see #138: the SID can be null if this user has been imported in a previous version
     171            // #138: the SID can be null if this user has been imported in a previous version
    172172            if (!$this->connection->getActiveDirectoryContext()->isMember($sid)) {
    173173                $this->logger->warning('User with name ' . $user->user_login . 'is not a member of one of the configured domains.');
  • next-active-directory-integration/trunk/classes/Adi/Synchronization/WordPress.php

    r2641799 r2692352  
    280280        $uac = $attributes[$key][0];
    281281
    282         // @see GH-132: https://github.com/NeosIT/active-directory-integration2/issues/132
     282        // #132: https://github.com/NeosIT/active-directory-integration2/issues/132
    283283        // With PHP 8 we got hit by https://github.com/php/php-src/pull/5331
    284284        return (int)$uac;
     
    293293     * @return bool
    294294     */
    295     public function isNormalAccount($uac)
    296     {
    297 
    298         // @see ADI-517: Improved logging for UAC Binary Flag check to make it more transparent for the user and improve debugging.
     295    public function isNormalAccount(int $uac)
     296    {
     297
     298        // ADI-517: Improved logging for UAC Binary Flag check to make it more transparent for the user and improve debugging.
    299299        switch ($uac) {
    300300            case (($uac & self::UF_INTERDOMAIN_TRUST_ACCOUNT) === self::UF_INTERDOMAIN_TRUST_ACCOUNT):
     
    329329     * @return bool
    330330     */
    331     public function isSmartCardRequired($uac)
     331    public function isSmartCardRequired(int $uac)
    332332    {
    333333        if (($uac & self::UF_SMARTCARD_REQUIRED) === 0) {
     
    346346     * @return bool
    347347     */
    348     public function isAccountDisabled($uac)
     348    public function isAccountDisabled(int $uac)
    349349    {
    350350        if (($uac & self::UF_ACCOUNT_DISABLE) === self::UF_ACCOUNT_DISABLE) {
     
    412412
    413413        // ADI-223: Check if user is disabled in Active Directory
    414         $uac = $ldapAttributes->getFilteredValue('useraccountcontrol');
     414        $uac = $this->userAccountControl($ldapAttributes->getRaw());
    415415        $isUserDisabled = $this->isAccountDisabled($uac);
    416416
  • next-active-directory-integration/trunk/classes/Adi/User/Manager.php

    r2517646 r2692352  
    579579     * </ul>
    580580     *
    581      * @see ADI-691
     581     * @issue ADI-691
    582582     * @param WP_User $wpUser |null
    583583     * @param $preferredEmail
     
    658658     *
    659659     * @since 2.1.9
    660      * @see ADI-691
     660     * @issue ADI-691
    661661     * @param WP_User|null $wpUserToChange null, if user has not been created yet
    662662     * @param $preferredEmail
  • next-active-directory-integration/trunk/classes/Ldap/Attribute/Service.php

    r2513920 r2692352  
    175175     * @param NextADInt_Ldap_UserQuery $userQuery
    176176     * @return NextADInt_Ldap_Attributes
    177      * @see ADI-713
     177     * @issue ADI-713
    178178     */
    179179    public function resolveLdapAttributes(NextADInt_Ldap_UserQuery $userQuery)
  • next-active-directory-integration/trunk/classes/Ldap/Connection.php

    r2513920 r2692352  
    432432     * @param array $attributeNames
    433433     * @return array|boolean the $bestMatch exactly one match or false
    434      * @see ADI-713
     434     * @issue ADI-713
    435435     * @since 2.1.13
    436436     */
  • next-active-directory-integration/trunk/classes/Multisite/Configuration/Persistence/BlogConfigurationRepository.php

    r2517867 r2692352  
    190190    function getDefaultValue($siteId, $optionName, $option)
    191191    {
    192         // gh-#127: PHP 7.4 compatibility; warning if $option is not an array but null
     192        // #127: PHP 7.4 compatibility; warning if $option is not an array but null
    193193        if (!is_array($option)) {
    194194            $this->logger->warn("Option '" . $optionName . "' in site with ID '" . $siteId . "' has no option configuration");
  • next-active-directory-integration/trunk/composer.lock

    r2662231 r2692352  
    158158        {
    159159            "name": "paragonie/random_compat",
    160             "version": "v2.0.20",
     160            "version": "v2.0.21",
    161161            "source": {
    162162                "type": "git",
    163163                "url": "https://github.com/paragonie/random_compat.git",
    164                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a"
    165             },
    166             "dist": {
    167                 "type": "zip",
    168                 "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
    169                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
     164                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae"
     165            },
     166            "dist": {
     167                "type": "zip",
     168                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
     169                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
    170170                "shasum": ""
    171171            },
     
    174174            },
    175175            "require-dev": {
    176                 "phpunit/phpunit": "4.*|5.*"
     176                "phpunit/phpunit": "*"
    177177            },
    178178            "suggest": {
     
    208208                "source": "https://github.com/paragonie/random_compat"
    209209            },
    210             "time": "2021-04-17T09:33:01+00:00"
     210            "time": "2022-02-16T17:07:03+00:00"
    211211        },
    212212        {
     
    262262        {
    263263            "name": "symfony/polyfill-ctype",
    264             "version": "v1.24.0",
     264            "version": "v1.25.0",
    265265            "source": {
    266266                "type": "git",
     
    294294            },
    295295            "autoload": {
     296                "files": [
     297                    "bootstrap.php"
     298                ],
    296299                "psr-4": {
    297300                    "Symfony\\Polyfill\\Ctype\\": ""
    298                 },
    299                 "files": [
    300                     "bootstrap.php"
    301                 ]
     301                }
    302302            },
    303303            "notification-url": "https://packagist.org/downloads/",
     
    324324            ],
    325325            "support": {
    326                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
     326                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
    327327            },
    328328            "funding": [
     
    373373            },
    374374            "autoload": {
     375                "files": [
     376                    "bootstrap.php"
     377                ],
    375378                "psr-4": {
    376379                    "Symfony\\Polyfill\\Mbstring\\": ""
    377                 },
    378                 "files": [
    379                     "bootstrap.php"
    380                 ]
     380                }
    381381            },
    382382            "notification-url": "https://packagist.org/downloads/",
     
    424424        {
    425425            "name": "twig/twig",
    426             "version": "v3.3.7",
     426            "version": "v3.3.8",
    427427            "source": {
    428428                "type": "git",
    429429                "url": "https://github.com/twigphp/Twig.git",
    430                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b"
    431             },
    432             "dist": {
    433                 "type": "zip",
    434                 "url": "https://api.github.com/repos/twigphp/Twig/zipball/8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
    435                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
     430                "reference": "972d8604a92b7054828b539f2febb0211dd5945c"
     431            },
     432            "dist": {
     433                "type": "zip",
     434                "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
     435                "reference": "972d8604a92b7054828b539f2febb0211dd5945c",
    436436                "shasum": ""
    437437            },
     
    484484            "support": {
    485485                "issues": "https://github.com/twigphp/Twig/issues",
    486                 "source": "https://github.com/twigphp/Twig/tree/v3.3.7"
     486                "source": "https://github.com/twigphp/Twig/tree/v3.3.8"
    487487            },
    488488            "funding": [
     
    496496                }
    497497            ],
    498             "time": "2022-01-03T21:15:37+00:00"
     498            "time": "2022-02-04T06:59:48+00:00"
    499499        }
    500500    ],
     
    547547        {
    548548            "name": "antecedent/patchwork",
    549             "version": "2.1.19",
     549            "version": "2.1.21",
    550550            "source": {
    551551                "type": "git",
    552552                "url": "https://github.com/antecedent/patchwork.git",
    553                 "reference": "94fe587cb0a6c1695b1ddc650e877231be80b8bc"
    554             },
    555             "dist": {
    556                 "type": "zip",
    557                 "url": "https://api.github.com/repos/antecedent/patchwork/zipball/94fe587cb0a6c1695b1ddc650e877231be80b8bc",
    558                 "reference": "94fe587cb0a6c1695b1ddc650e877231be80b8bc",
     553                "reference": "25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d"
     554            },
     555            "dist": {
     556                "type": "zip",
     557                "url": "https://api.github.com/repos/antecedent/patchwork/zipball/25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d",
     558                "reference": "25c1fa0cd9a6e6d0d13863d8df8f050b6733f16d",
    559559                "shasum": ""
    560560            },
     
    589589            "support": {
    590590                "issues": "https://github.com/antecedent/patchwork/issues",
    591                 "source": "https://github.com/antecedent/patchwork/tree/2.1.19"
    592             },
    593             "time": "2022-01-20T04:47:04+00:00"
     591                "source": "https://github.com/antecedent/patchwork/tree/2.1.21"
     592            },
     593            "time": "2022-02-07T07:28:34+00:00"
    594594        },
    595595        {
    596596            "name": "doctrine/instantiator",
    597             "version": "1.4.0",
     597            "version": "1.4.1",
    598598            "source": {
    599599                "type": "git",
    600600                "url": "https://github.com/doctrine/instantiator.git",
    601                 "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
    602             },
    603             "dist": {
    604                 "type": "zip",
    605                 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
    606                 "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
     601                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
     602            },
     603            "dist": {
     604                "type": "zip",
     605                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
     606                "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
    607607                "shasum": ""
    608608            },
     
    611611            },
    612612            "require-dev": {
    613                 "doctrine/coding-standard": "^8.0",
     613                "doctrine/coding-standard": "^9",
    614614                "ext-pdo": "*",
    615615                "ext-phar": "*",
    616                 "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
    617                 "phpstan/phpstan": "^0.12",
    618                 "phpstan/phpstan-phpunit": "^0.12",
    619                 "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
     616                "phpbench/phpbench": "^0.16 || ^1",
     617                "phpstan/phpstan": "^1.4",
     618                "phpstan/phpstan-phpunit": "^1",
     619                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
     620                "vimeo/psalm": "^4.22"
    620621            },
    621622            "type": "library",
     
    644645            "support": {
    645646                "issues": "https://github.com/doctrine/instantiator/issues",
    646                 "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
     647                "source": "https://github.com/doctrine/instantiator/tree/1.4.1"
    647648            },
    648649            "funding": [
     
    660661                }
    661662            ],
    662             "time": "2020-11-10T18:47:58+00:00"
     663            "time": "2022-03-03T08:28:38+00:00"
    663664        },
    664665        {
     
    784785        {
    785786            "name": "myclabs/deep-copy",
    786             "version": "1.10.2",
     787            "version": "1.11.0",
    787788            "source": {
    788789                "type": "git",
    789790                "url": "https://github.com/myclabs/DeepCopy.git",
    790                 "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
    791             },
    792             "dist": {
    793                 "type": "zip",
    794                 "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
    795                 "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
     791                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614"
     792            },
     793            "dist": {
     794                "type": "zip",
     795                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614",
     796                "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614",
    796797                "shasum": ""
    797798            },
     
    799800                "php": "^7.1 || ^8.0"
    800801            },
    801             "require-dev": {
    802                 "doctrine/collections": "^1.0",
    803                 "doctrine/common": "^2.6",
    804                 "phpunit/phpunit": "^7.1"
    805             },
    806             "type": "library",
    807             "autoload": {
     802            "conflict": {
     803                "doctrine/collections": "<1.6.8",
     804                "doctrine/common": "<2.13.3 || >=3,<3.2.2"
     805            },
     806            "require-dev": {
     807                "doctrine/collections": "^1.6.8",
     808                "doctrine/common": "^2.13.3 || ^3.2.2",
     809                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
     810            },
     811            "type": "library",
     812            "autoload": {
     813                "files": [
     814                    "src/DeepCopy/deep_copy.php"
     815                ],
    808816                "psr-4": {
    809817                    "DeepCopy\\": "src/DeepCopy/"
    810                 },
    811                 "files": [
    812                     "src/DeepCopy/deep_copy.php"
    813                 ]
     818                }
    814819            },
    815820            "notification-url": "https://packagist.org/downloads/",
     
    827832            "support": {
    828833                "issues": "https://github.com/myclabs/DeepCopy/issues",
    829                 "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
     834                "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0"
    830835            },
    831836            "funding": [
     
    835840                }
    836841            ],
    837             "time": "2020-11-13T09:40:50+00:00"
     842            "time": "2022-03-03T13:19:32+00:00"
    838843        },
    839844        {
     
    10651070        {
    10661071            "name": "phar-io/version",
    1067             "version": "3.1.0",
     1072            "version": "3.2.1",
    10681073            "source": {
    10691074                "type": "git",
    10701075                "url": "https://github.com/phar-io/version.git",
    1071                 "reference": "bae7c545bef187884426f042434e561ab1ddb182"
    1072             },
    1073             "dist": {
    1074                 "type": "zip",
    1075                 "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
    1076                 "reference": "bae7c545bef187884426f042434e561ab1ddb182",
     1076                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
     1077            },
     1078            "dist": {
     1079                "type": "zip",
     1080                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
     1081                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
    10771082                "shasum": ""
    10781083            },
     
    11101115            "support": {
    11111116                "issues": "https://github.com/phar-io/version/issues",
    1112                 "source": "https://github.com/phar-io/version/tree/3.1.0"
    1113             },
    1114             "time": "2021-02-23T14:00:09+00:00"
     1117                "source": "https://github.com/phar-io/version/tree/3.2.1"
     1118            },
     1119            "time": "2022-02-21T01:04:05+00:00"
    11151120        },
    11161121        {
     
    13431348        {
    13441349            "name": "phpunit/php-code-coverage",
    1345             "version": "9.2.10",
     1350            "version": "9.2.15",
    13461351            "source": {
    13471352                "type": "git",
    13481353                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
    1349                 "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687"
    1350             },
    1351             "dist": {
    1352                 "type": "zip",
    1353                 "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687",
    1354                 "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687",
     1354                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f"
     1355            },
     1356            "dist": {
     1357                "type": "zip",
     1358                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
     1359                "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f",
    13551360                "shasum": ""
    13561361            },
     
    14081413            "support": {
    14091414                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
    1410                 "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10"
     1415                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15"
    14111416            },
    14121417            "funding": [
     
    14161421                }
    14171422            ],
    1418             "time": "2021-12-05T09:12:13+00:00"
     1423            "time": "2022-03-07T09:28:20+00:00"
    14191424        },
    14201425        {
     
    17211726            },
    17221727            "autoload": {
     1728                "files": [
     1729                    "src/Framework/Assert/Functions.php"
     1730                ],
    17231731                "classmap": [
    17241732                    "src/"
    1725                 ],
    1726                 "files": [
    1727                     "src/Framework/Assert/Functions.php"
    17281733                ]
    17291734            },
     
    23212326        {
    23222327            "name": "sebastian/global-state",
    2323             "version": "5.0.3",
     2328            "version": "5.0.5",
    23242329            "source": {
    23252330                "type": "git",
    23262331                "url": "https://github.com/sebastianbergmann/global-state.git",
    2327                 "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
    2328             },
    2329             "dist": {
    2330                 "type": "zip",
    2331                 "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
    2332                 "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
     2332                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
     2333            },
     2334            "dist": {
     2335                "type": "zip",
     2336                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
     2337                "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
    23332338                "shasum": ""
    23342339            },
     
    23732378            "support": {
    23742379                "issues": "https://github.com/sebastianbergmann/global-state/issues",
    2375                 "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
     2380                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
    23762381            },
    23772382            "funding": [
     
    23812386                }
    23822387            ],
    2383             "time": "2021-06-11T13:31:12+00:00"
     2388            "time": "2022-02-14T08:28:10+00:00"
    23842389        },
    23852390        {
     
    27812786        {
    27822787            "name": "symfony/console",
    2783             "version": "v5.4.2",
     2788            "version": "v5.4.5",
    27842789            "source": {
    27852790                "type": "git",
    27862791                "url": "https://github.com/symfony/console.git",
    2787                 "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e"
    2788             },
    2789             "dist": {
    2790                 "type": "zip",
    2791                 "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e",
    2792                 "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e",
     2792                "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad"
     2793            },
     2794            "dist": {
     2795                "type": "zip",
     2796                "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad",
     2797                "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad",
    27932798                "shasum": ""
    27942799            },
     
    28602865            ],
    28612866            "support": {
    2862                 "source": "https://github.com/symfony/console/tree/v5.4.2"
     2867                "source": "https://github.com/symfony/console/tree/v5.4.5"
    28632868            },
    28642869            "funding": [
     
    28762881                }
    28772882            ],
    2878             "time": "2021-12-20T16:11:12+00:00"
     2883            "time": "2022-02-24T12:45:35+00:00"
    28792884        },
    28802885        {
     
    29472952        {
    29482953            "name": "symfony/finder",
    2949             "version": "v5.4.2",
     2954            "version": "v5.4.3",
    29502955            "source": {
    29512956                "type": "git",
    29522957                "url": "https://github.com/symfony/finder.git",
    2953                 "reference": "e77046c252be48c48a40816187ed527703c8f76c"
    2954             },
    2955             "dist": {
    2956                 "type": "zip",
    2957                 "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c",
    2958                 "reference": "e77046c252be48c48a40816187ed527703c8f76c",
     2958                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
     2959            },
     2960            "dist": {
     2961                "type": "zip",
     2962                "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
     2963                "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
    29592964                "shasum": ""
    29602965            },
     
    29902995            "homepage": "https://symfony.com",
    29912996            "support": {
    2992                 "source": "https://github.com/symfony/finder/tree/v5.4.2"
     2997                "source": "https://github.com/symfony/finder/tree/v5.4.3"
    29932998            },
    29942999            "funding": [
     
    30063011                }
    30073012            ],
    3008             "time": "2021-12-15T11:06:13+00:00"
     3013            "time": "2022-01-26T16:34:36+00:00"
    30093014        },
    30103015        {
    30113016            "name": "symfony/polyfill-intl-grapheme",
    3012             "version": "v1.24.0",
     3017            "version": "v1.25.0",
    30133018            "source": {
    30143019                "type": "git",
     
    30393044            },
    30403045            "autoload": {
     3046                "files": [
     3047                    "bootstrap.php"
     3048                ],
    30413049                "psr-4": {
    30423050                    "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
    3043                 },
    3044                 "files": [
    3045                     "bootstrap.php"
    3046                 ]
     3051                }
    30473052            },
    30483053            "notification-url": "https://packagist.org/downloads/",
     
    30713076            ],
    30723077            "support": {
    3073                 "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0"
     3078                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
    30743079            },
    30753080            "funding": [
     
    30913096        {
    30923097            "name": "symfony/polyfill-intl-normalizer",
    3093             "version": "v1.24.0",
     3098            "version": "v1.25.0",
    30943099            "source": {
    30953100                "type": "git",
     
    31203125            },
    31213126            "autoload": {
    3122                 "psr-4": {
    3123                     "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
    3124                 },
    31253127                "files": [
    31263128                    "bootstrap.php"
    31273129                ],
     3130                "psr-4": {
     3131                    "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
     3132                },
    31283133                "classmap": [
    31293134                    "Resources/stubs"
     
    31553160            ],
    31563161            "support": {
    3157                 "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
     3162                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
    31583163            },
    31593164            "funding": [
     
    31753180        {
    31763181            "name": "symfony/polyfill-php73",
    3177             "version": "v1.24.0",
     3182            "version": "v1.25.0",
    31783183            "source": {
    31793184                "type": "git",
     
    32013206            },
    32023207            "autoload": {
    3203                 "psr-4": {
    3204                     "Symfony\\Polyfill\\Php73\\": ""
    3205                 },
    32063208                "files": [
    32073209                    "bootstrap.php"
    32083210                ],
     3211                "psr-4": {
     3212                    "Symfony\\Polyfill\\Php73\\": ""
     3213                },
    32093214                "classmap": [
    32103215                    "Resources/stubs"
     
    32343239            ],
    32353240            "support": {
    3236                 "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0"
     3241                "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
    32373242            },
    32383243            "funding": [
     
    32543259        {
    32553260            "name": "symfony/polyfill-php80",
    3256             "version": "v1.24.0",
     3261            "version": "v1.25.0",
    32573262            "source": {
    32583263                "type": "git",
    32593264                "url": "https://github.com/symfony/polyfill-php80.git",
    3260                 "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9"
    3261             },
    3262             "dist": {
    3263                 "type": "zip",
    3264                 "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9",
    3265                 "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9",
     3265                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
     3266            },
     3267            "dist": {
     3268                "type": "zip",
     3269                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
     3270                "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
    32663271                "shasum": ""
    32673272            },
     
    32803285            },
    32813286            "autoload": {
    3282                 "psr-4": {
    3283                     "Symfony\\Polyfill\\Php80\\": ""
    3284                 },
    32853287                "files": [
    32863288                    "bootstrap.php"
    32873289                ],
     3290                "psr-4": {
     3291                    "Symfony\\Polyfill\\Php80\\": ""
     3292                },
    32883293                "classmap": [
    32893294                    "Resources/stubs"
     
    33173322            ],
    33183323            "support": {
    3319                 "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0"
     3324                "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
    33203325            },
    33213326            "funding": [
     
    33333338                }
    33343339            ],
    3335             "time": "2021-09-13T13:58:33+00:00"
     3340            "time": "2022-03-04T08:16:47+00:00"
    33363341        },
    33373342        {
    33383343            "name": "symfony/process",
    3339             "version": "v5.4.2",
     3344            "version": "v5.4.5",
    33403345            "source": {
    33413346                "type": "git",
    33423347                "url": "https://github.com/symfony/process.git",
    3343                 "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4"
    3344             },
    3345             "dist": {
    3346                 "type": "zip",
    3347                 "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
    3348                 "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4",
     3348                "reference": "95440409896f90a5f85db07a32b517ecec17fa4c"
     3349            },
     3350            "dist": {
     3351                "type": "zip",
     3352                "url": "https://api.github.com/repos/symfony/process/zipball/95440409896f90a5f85db07a32b517ecec17fa4c",
     3353                "reference": "95440409896f90a5f85db07a32b517ecec17fa4c",
    33493354                "shasum": ""
    33503355            },
     
    33793384            "homepage": "https://symfony.com",
    33803385            "support": {
    3381                 "source": "https://github.com/symfony/process/tree/v5.4.2"
     3386                "source": "https://github.com/symfony/process/tree/v5.4.5"
    33823387            },
    33833388            "funding": [
     
    33953400                }
    33963401            ],
    3397             "time": "2021-12-27T21:01:00+00:00"
     3402            "time": "2022-01-30T18:16:22+00:00"
    33983403        },
    33993404        {
     
    34813486        {
    34823487            "name": "symfony/string",
    3483             "version": "v6.0.2",
     3488            "version": "v6.0.3",
    34843489            "source": {
    34853490                "type": "git",
    34863491                "url": "https://github.com/symfony/string.git",
    3487                 "reference": "bae261d0c3ac38a1f802b4dfed42094296100631"
    3488             },
    3489             "dist": {
    3490                 "type": "zip",
    3491                 "url": "https://api.github.com/repos/symfony/string/zipball/bae261d0c3ac38a1f802b4dfed42094296100631",
    3492                 "reference": "bae261d0c3ac38a1f802b4dfed42094296100631",
     3492                "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2"
     3493            },
     3494            "dist": {
     3495                "type": "zip",
     3496                "url": "https://api.github.com/repos/symfony/string/zipball/522144f0c4c004c80d56fa47e40e17028e2eefc2",
     3497                "reference": "522144f0c4c004c80d56fa47e40e17028e2eefc2",
    34933498                "shasum": ""
    34943499            },
     
    35113516            "type": "library",
    35123517            "autoload": {
    3513                 "psr-4": {
    3514                     "Symfony\\Component\\String\\": ""
    3515                 },
    35163518                "files": [
    35173519                    "Resources/functions.php"
    35183520                ],
     3521                "psr-4": {
     3522                    "Symfony\\Component\\String\\": ""
     3523                },
    35193524                "exclude-from-classmap": [
    35203525                    "/Tests/"
     
    35463551            ],
    35473552            "support": {
    3548                 "source": "https://github.com/symfony/string/tree/v6.0.2"
     3553                "source": "https://github.com/symfony/string/tree/v6.0.3"
    35493554            },
    35503555            "funding": [
     
    35623567                }
    35633568            ],
    3564             "time": "2021-12-16T22:13:01+00:00"
     3569            "time": "2022-01-02T09:55:41+00:00"
    35653570        },
    35663571        {
    35673572            "name": "symfony/yaml",
    3568             "version": "v5.4.2",
     3573            "version": "v5.4.3",
    35693574            "source": {
    35703575                "type": "git",
    35713576                "url": "https://github.com/symfony/yaml.git",
    3572                 "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58"
    3573             },
    3574             "dist": {
    3575                 "type": "zip",
    3576                 "url": "https://api.github.com/repos/symfony/yaml/zipball/b9eb163846a61bb32dfc147f7859e274fab38b58",
    3577                 "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58",
     3577                "reference": "e80f87d2c9495966768310fc531b487ce64237a2"
     3578            },
     3579            "dist": {
     3580                "type": "zip",
     3581                "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
     3582                "reference": "e80f87d2c9495966768310fc531b487ce64237a2",
    35783583                "shasum": ""
    35793584            },
     
    36213626            "homepage": "https://symfony.com",
    36223627            "support": {
    3623                 "source": "https://github.com/symfony/yaml/tree/v5.4.2"
     3628                "source": "https://github.com/symfony/yaml/tree/v5.4.3"
    36243629            },
    36253630            "funding": [
     
    36373642                }
    36383643            ],
    3639             "time": "2021-12-16T21:58:21+00:00"
     3644            "time": "2022-01-26T16:32:32+00:00"
    36403645        },
    36413646        {
  • next-active-directory-integration/trunk/index.php

    r2662231 r2692352  
    44Plugin URI: https://www.active-directory-wp.com
    55Description: Enterprise-ready solution to authenticate, authorize and synchronize your Active Directory users to WordPress. Next Active Directory Authentication supports NTLM and Kerberos for Single Sign On.
    6 Version: 2.3.1
     6Version: 2.3.2
    77Author: active-directory-wp.com
    88Author URI: https://active-directory-wp.com
  • next-active-directory-integration/trunk/js/app/blog-options/controllers/security.controller.js

    r2513920 r2692352  
    2626                enable_smartcard_user_login: $valueHelper.findValue("enable_smartcard_user_login", data),
    2727                custom_login_page_enabled: $valueHelper.findValue("custom_login_page_enabled", data),
     28                custom_login_page_uri: $valueHelper.findValue("custom_login_page_uri", data),
    2829                max_login_attempts: $valueHelper.findValue("max_login_attempts", data),
    2930                block_time: $valueHelper.findValue("block_time", data),
     
    4243                enable_smartcard_user_login: $valueHelper.findPermission("enable_smartcard_user_login", data),
    4344                custom_login_page_enabled: $valueHelper.findPermission("custom_login_page_enabled", data),
     45                custom_login_page_uri: $valueHelper.findPermission("custom_login_page_uri", data),
    4446                max_login_attempts: $valueHelper.findPermission("max_login_attempts", data),
    4547                block_time: $valueHelper.findPermission("block_time", data),
     
    5658                enable_smartcard_user_login: $valueHelper.findMessage("enable_smartcard_user_login", data),
    5759                custom_login_page_enabled: $valueHelper.findMessage("custom_login_page_enabled", data),
     60                custom_login_page_uri: $valueHelper.findMessage("custom_login_page_uri", data),
    5861                max_login_attempts: $valueHelper.findMessage("max_login_attempts", data),
    5962                block_time: $valueHelper.findMessage("block_time", data),
  • next-active-directory-integration/trunk/js/app/profile-options/controllers/security.controller.js

    r2513920 r2692352  
    2828                enable_smartcard_user_login: $valueHelper.findValue("enable_smartcard_user_login", data),
    2929                custom_login_page_enabled: $valueHelper.findValue("custom_login_page_enabled", data),
     30                custom_login_page_uri: $valueHelper.findValue("custom_login_page_uri", data),
    3031                max_login_attempts: $valueHelper.findValue("max_login_attempts", data),
    3132                block_time: $valueHelper.findValue("block_time", data),
     
    4647                enable_smartcard_user_login: $valueHelper.findPermission("enable_smartcard_user_login", data),
    4748                custom_login_page_enabled: $valueHelper.findPermission("custom_login_page_enabled", data),
     49                custom_login_page_uri: $valueHelper.findPermission("custom_login_page_uri", data),
    4850                max_login_attempts: $valueHelper.findPermission("max_login_attempts", data),
    4951                block_time: $valueHelper.findPermission("block_time", data),
     
    6062                enable_smartcard_user_login: $valueHelper.findMessage("enable_smartcard_user_login", data),
    6163                custom_login_page_enabled: $valueHelper.findMessage("custom_login_page_enabled", data),
     64                custom_login_page_uri: $valueHelper.findMessage("custom_login_page_uri", data),
    6265                max_login_attempts: $valueHelper.findMessage("max_login_attempts", data),
    6366                block_time: $valueHelper.findMessage("block_time", data),
  • next-active-directory-integration/trunk/readme.txt

    r2662231 r2692352  
    11=== Next Active Directory Integration ===
    22Contributors: neosit,tobi823,fatsquirrel,schakko,medan123
    3 Tags: authentication, active directory, ldap, authorization, security, windows, sso
     3Tags: authentication, active directory, ldap, ldaps, authorization, security, windows, sso, login, domain, controller
    44Requires at least: 5.6
    55Tested up to: 5.9
    6 Stable tag: 2.3.1
     6Stable tag: 2.3.2
    77License: GPLv3
     8Donate link: https://active-directory-wp.com
    89
    910Next Active Directory Integration allows WordPress to authenticate, authorize, create and update users against Microsoft Active Directory.
     
    129130For detailed information you can visit the official [GitHub repository of Next Active Directory Integration](https://github.com/NeosIT/active-directory-integration2)
    130131
     132= 2.3.2 =
     133* FIXED: Critical WordPress error if a matching profile for SSO authentication can not be found (#152, NADISUP-7)
     134* FIXED: Uncaught TypeError when checking userAccountControl attribute (#151)
     135* FIXED: For specific Active Directory forest structures, the NETBIOS name can not be resolved during verification of the credentials (#153, NADISUP-8)
     136* ADDED: Option for specifying a custom login page URI; special thanks to GitHub user *czoIg* for contributing this functionality (#154)
     137
    131138= 2.3.1 =
    132139* CHANGED: WordPress 5.9 compatibility has been checked
     
    134141 
    135142= 2.3.0 =
    136 * FIXED: when a user can not be found by email address, findByProxyAddress returns false (gh-#146). Configured *Sync to WordPress* credentials are still required for logging in with email addresses.
    137 * FIXED: when using SSO-based logins, the "Exclude usernames from authentication" option still applies (gh-#142)
    138 * ADDED: hooks for checking if NADI's authentication applies for a given username (gh-#142)
     143* FIXED: when a user can not be found by email address, findByProxyAddress returns false. Configured *Sync to WordPress* credentials are still required for logging in with email addresses. (#146)
     144* FIXED: when using SSO-based logins, the "Exclude usernames from authentication" option still applies (#142)
     145* ADDED: hooks for checking if NADI's authentication applies for a given username (#142)
    139146* CHANGED: WordPress 5.8.1 compatibility has been checked
    140147* CHANGED: WordPress 5.8.2 compatibility has been checked
    141 * REMOVED: Parameter $useLocalWordPressUser in NextADInt_Adi_Mail_Notification (gh-#135)
    142 * REMOVED: Option 'Automatic user creation'. This option has been implicitly enabled for all installations and is no longer required (gh-#134)
    143 * CHANGED: PHP 8.1 compatibility has been checked; Twig has to be updated with the next release (gh-#148)
     148* REMOVED: Parameter $useLocalWordPressUser in NextADInt_Adi_Mail_Notification (#135)
     149* REMOVED: Option 'Automatic user creation'. This option has been implicitly enabled for all installations and is no longer required (#134)
     150* CHANGED: PHP 8.1 compatibility has been checked; Twig has to be updated with the next release (#148)
    144151
    145152= 2.2.3 =
    146 * FIXED: Sync to WordPress fails if user is no longer present in Active Directory (gh-#141)
     153* FIXED: Sync to WordPress fails if user is no longer present in Active Directory (#141)
    147154
    148155= 2.2.2 =
    149 * FIXED: Boolean options can't be persisted correctly with 2.2.1 (gh-#140)
     156* FIXED: Boolean options can't be persisted correctly with 2.2.1 (#140)
    150157
    151158= 2.2.1 =
    152 * FIXED: Missing meta_key "domainsid" results in TypeError or NextADInt_ActiveDirectory_Context::isMember (gh-#133)
    153 * FIXED: Warning: Trying to access array offset on value of type null (gh-#139)
     159* FIXED: Missing meta_key "domainsid" results in TypeError or NextADInt_ActiveDirectory_Context::isMember (#133)
     160* FIXED: Warning: Trying to access array offset on value of type null (#139)
    154161
    155162= 2.2.0 =
     
    161168* CHANGED: WordPress 5.6.1 compatibility has been checked
    162169* CHANGED: WordPress 5.7 compatibility has been checked
    163 * CHANGED: PHP 8.0 compatibility has been added (ADI-718, gh-#132, gh-#137)
     170* CHANGED: PHP 8.0 compatibility has been added (ADI-718, #132, #137)
    164171* FIXED: Deprecation warning when trying to send mail notification for blocked users (ADI-719)
    165 * FIXED: Option "Blog admin sets the option value." had no effect in Multisite environments (gh-#124)
    166 * DEPRECATION-WARNING: For the upcoming release 2.3.0 we will remove "Internal password migration" (gh-#136), "Automatic user creation" (gh-#134) and "Email address conflict handling" (gh-#133)
     172* FIXED: Option "Blog admin sets the option value." had no effect in Multisite environments (#124)
     173* DEPRECATION-WARNING: For the upcoming release 2.3.0 we will remove "Internal password migration" (#136), "Automatic user creation" (#134) and "Email address conflict handling" (#133)
    167174* DEV: Slightly transition new issues to GitHub instead of internal Jira
    168175
    169176= 2.1.12 =
    170 * ADDED: PR gh-#107: allow self signed certificates
     177* ADDED: allow self signed certificates (#107)
    171178* CHANGED: notices for minimum PHP version 7.2 due to EOL of PHP 7.1
    172179* FIXED: Test compatibility with latest stable PHPUnit version
    173 * FIXED: gh-#127: PHP 7.4 compatibility and deprecation of some ldap_* functions
     180* FIXED: PHP 7.4 compatibility and deprecation of some ldap_* functions (#127)
    174181* FIXED: various typos and formatting errors in the administration user interface
    175182* ADDED: hook for triggering Sync To WordPress and Sync To AD (ADI-526)
     
    183190* CHANGED: Twig version updated to 1.41.0 (ADI-707)
    184191* FIXED: When a non-existing user inside in WordPress authenticates in a multisite environment the first time, a warning is triggered (ADI-705)
    185 * FIXED: A deleted user from Active Directory is mapped to the wrong user in WordPress; thanks to T. Kowalchuk (ADI-702)
     192* FIXED: A deleted user from Active Directory is mapped to the wrong user in WordPress; thanks to *T. Kowalchuk* (ADI-702)
    186193* FIXED: PHP warning if user is deleted from Active Directory (ADI-701)
    187194* FIXED: PHP error if touching of log file failed
    188195* FIXED: "-DISABLED" suffix is added everytime a user is synchronized (ADI-697, NADIS-110)
    189196* ADDED: hook next_ad_int_user_before_disable (ADI-699)
    190 * FIXED: curly brace access (GitHub #119)
     197* FIXED: curly brace access (#119)
    191198
    192199= 2.1.9 =
     
    203210= 2.1.8 =
    204211* FIXED: compatibility issues when using the Woffice theme (ADI-659)
    205 * FIXED: missing email parameter when creating users (GitHub #74 Thanks to nefarius, ADI-615)
    206 * FIXED: an issue with the 'Prevent email change' option (https://wordpress.org/support/topic/new-user-creation-error/ Thanks to mlipenk, ADI-670)
    207 * ADDED: new hook to hide the 'Log in using SSO' option (https://wordpress.org/support/topic/remove-link-log-in-using-sso-on-login-page/ Thanks to vyatcheslav, ADI-672)
     212* FIXED: missing email parameter when creating users;  thanks to *nefarius* (#74, ADI-615)
     213* FIXED: an issue with the 'Prevent email change' option, https://wordpress.org/support/topic/new-user-creation-error/; thanks to *mlipenk* (ADI-670)
     214* ADDED: new hook to hide the 'Log in using SSO' option, https://wordpress.org/support/topic/remove-link-log-in-using-sso-on-login-page/; thanks to *vyatcheslav* (ADI-672)
    208215* FIXED: refactored post authentication logic into separate services (ADI-671, ADI-673)
    209216
     
    212219
    213220= 2.1.6 =
    214 * FIXED: custom authentication filters were not registered properly (ADI-665) this will fix SSO related issues
     221* FIXED: custom authentication filters were not registered properly and this fixes SSO related issues (ADI-665)
    215222* FIXED: test authentication will now properly check for authorization groups again
    216223
    217224= 2.1.5 =
    218225* FIXED: replaced all references to the deprecated each-function with foreach (ADI-628)
    219 * FIXED: authorization groups will now properly prevent users from logging in (ADI-664, https://wordpress.org/support/topic/authorization-groups-not-working/ Thanks to shmew22, GitHub #92 Thanks to pokertour)
    220 * FIXED: the menu-visibility options were missing inside the profile-tab (ADI-663, https://wordpress.org/support/topic/menu-items-missing-3/ Thanks to 5tu)
    221 * ADDED: 2 new filters to allow for custom validation during the authentication process (ADI-657, GitHub #89 Thanks to Destabilizator)
     226* FIXED: authorization groups will now properly prevent users from logging in, https://wordpress.org/support/topic/authorization-groups-not-working/; thanks to *shmew22*, *pokertour* (ADI-664, #92)
     227* FIXED: the menu-visibility options were missing inside the profile-tab, https://wordpress.org/support/topic/menu-items-missing-3/; thanks to *5tu* (ADI-663);
     228* ADDED: 2 new filters to allow for custom validation during the authentication process; thanks to *Destabilizator* (ADI-657, #89)
    222229
    223230= 2.1.4 =
     
    228235
    229236= 2.1.3 =
    230 * ADD: added message on the profile configuration page to inform customers about end of PHP version <7.1 support
    231 * ADD: json response for "Sync to WordPress" triggered via powershell
    232 * ADD: improved logging in within the Connection.php class
    233 * ADD: missing German translations
    234 * ADD: PHP_AUTH_USER to SSO username variables
     237* ADDED: added message on the profile configuration page to inform customers about end of PHP version <7.1 support
     238* ADDED: json response for "Sync to WordPress" triggered via powershell
     239* ADDED: improved logging in within the Connection.php class
     240* ADDED: missing German translations
     241* ADDED: PHP_AUTH_USER to SSO username variables
    235242* FIXED: app.config and password.controller.config being flagged by customer firewalls / security plugins which resulted in them not being loaded properly (renamed them)
    236243* FIXED: redirect to target site not working properly after being authenticated via NADI SSO
     
    244251
    245252= 2.1.1 =
    246 * ADD: Github#59 proxy address login (Special thanks to Github user *nedwidek* for contributing this functionality)
    247 * ADD: profile picture ad attributes to the ad attributes dropdown at the ad attributes configuration page
    248 * ADD: Github#44 claims based authentication (Special thanks to Github user *rgottsch* for contributing this functionality)
    249 * ADD: new option to decide if you want to grant smart card users access to the WordPress environment
    250 * ADD: links to the specific documentation pages for each configuration page
    251 * ADD: Github#64 powershell script to trigger "Sync to WordPress" and "Sync to AD" (Special thanks to Github user *nemchik* for contributing this)
    252 * FIX: Github#49 its now possible to enter an empty base dn
    253 * FIX: adjusted base DN description
    254 * FIX: Github#59 typo in LoginService.php
     253* ADDED: proxy address login; special thanks to *nedwidek* for contributing this functionality (#59)
     254* ADDED: profile picture ad attributes to the ad attributes dropdown at the ad attributes configuration page
     255* ADDED: claims based authentication; special thanks to *rgottsch* for contributing this functionality (#44)
     256* ADDED: new option to decide if you want to grant smart card users access to the WordPress environment
     257* ADDED: links to the specific documentation pages for each configuration page
     258* ADDED: powershell script to trigger "Sync to WordPress" and "Sync to AD"; special thanks to *nemchik* for contributing this (#64)
     259* FIXED: it is now possible to enter an empty base dn (#49)
     260* FIXED: adjusted base DN description
     261* FIXED: typo in LoginService.php (#59)
    255262* REMOVED: whitespaces inside the rendered curl and wget tags
    256263* REMOVED: old code that caused an warning with PHP 7.2.0 changes to count() and sizeOf()
    257264
    258265= 2.1.0 =
    259 * ADD: NADI is now using Monolog for everything related to logs
    260 * ADD: added a button to manually persist "Logging" configurations
    261 * FIX: user attributes are now correctly logged
    262 * FIX: fixed a problem where the port configuration for LDAPS was not used
    263 * FIX: updated twig to the latest 1.x version. (2.x requires >= PHP 7.0.0)
    264 * ADD: debug logs messages will be not displayed in the frontend log anymore in order to prevent an overflow
    265 * ADD: dummy logger in order to prevent outdated premium extensions from crashing
     266* ADDED: NADI is now using Monolog for everything related to logs
     267* ADDED: added a button to manually persist "Logging" configurations
     268* FIXED: user attributes are now correctly logged
     269* FIXED: fixed a problem where the port configuration for LDAPS was not used
     270* FIXED: updated twig to the latest 1.x version. (2.x requires >= PHP 7.0.0)
     271* ADDED: debug logs messages will be not displayed in the frontend log anymore in order to prevent an overflow
     272* ADDED: dummy logger in order to prevent outdated premium extensions from crashing
    266273* REMOVED: removed log4php from NADI
    267274
    268275= 2.0.14 =
    269 * ADD: added frontend information banners for NADI premium extensions
    270 * ADD: added frontend information about why "Sync to WordPress" can not be started
    271 * FIX: members of not mapped security groups will now receive the default role "Subscriber"
    272 * FIX: "Clean existing Roles" is now default set to false
    273 * ADD: added new style for configuration page
    274 * FIX: fixed some style issues
    275 * ADD: added logic to determine if a NADI option already exists in the DB to prevent the problem saving options with default value true
    276 * ADD: added detailed log on which UAC flag is responsible for users not beeing imported
    277 * FIX: fixed logs destroying the user profile while trying to update a user profile / also catched exception
    278 * FIX: fixed template conditions causing problems in Microsoft Edge
     276* ADDED: added frontend information banners for NADI premium extensions
     277* ADDED: added frontend information about why "Sync to WordPress" can not be started
     278* FIXED: members of not mapped security groups will now receive the default role "Subscriber"
     279* FIXED: "Clean existing Roles" is now default set to false
     280* ADDED: added new style for configuration page
     281* FIXED: fixed some style issues
     282* ADDED: added logic to determine if a NADI option already exists in the DB to prevent the problem saving options with default value true
     283* ADDED: added detailed log on which UAC flag is responsible for users not being imported
     284* FIXED: fixed logs destroying the user profile while trying to update a user profile / also caught exception
     285* FIXED: fixed template conditions causing problems in Microsoft Edge
    279286
    280287
    281288= 2.0.13 =
    282 * FIX: switched from mcrypt to defuse/php-encryption
    283 * FIX: decoupled password update from user update to allow for automatic password updates without 'auto update user' set to true
    284 * FIX: marked brute force protection deprecated
    285 * FIX: minor bugs when using ldap over ssl
    286 * ADD: sync to ad now uses the GUID for syncronization
    287 * FIX: verify domain controller connectivity before incrementing brute force protection counter
    288 * FIX: custom attributes inside the user profile will prioritize the custom description (thanks to mzemann)
    289 * FIX: changed the look of Sync to AD, Sync to WordPress and Test authentication
    290 * ADD: added row to users list for premium extension (custom user role management)
    291 * FIX: added the complete dirname when using require_once inside index.php (GitHub #47)
     289* FIXED: switched from mcrypt to defuse/php-encryption
     290* FIXED: decoupled password update from user update to allow for automatic password updates without 'auto update user' set to true
     291* FIXED: marked brute force protection deprecated
     292* FIXED: minor bugs when using ldap over ssl
     293* ADDED: sync to ad now uses the GUID for synchronization
     294* FIXED: verify domain controller connectivity before incrementing brute force protection counter
     295* FIXED: custom attributes inside the user profile will prioritize the custom description; thanks to *mzemann*
     296* FIXED: changed the look of Sync to AD, Sync to WordPress and Test authentication
     297* ADDED: added row to users list for premium extension (custom user role management)
     298* FIXED: added the complete dirname when using require_once inside index.php (#47)
    292299
    293300= 2.0.12 =
    294 * ADD: internationalization for all plugin strings (ADI-432 ADI-436 see https://translate.wordpress.org/projects/wp-plugins/next-active-directory-integration)
    295 * FIX: roles are now mapped using the GUID instead of sAMAccountName (ADI-428)
    296 * ADD: option for preventing disabled users to be synchronized to WordPress (ADI-223)
    297 * ADD: validation for Base DN
    298 * FIX: problem when sending brute force protection notifications via email (ADI-464)
    299 * FIX: non NADI users being blocked by the brute force protection
    300 * FIX: brute force protection now checks for the whole username (ADI-424)
    301 * FIX: updating user profiles without bind user (ADI-439)
    302 * FIX: countdown for brute force protection (ADI-456)
     301* ADDED: internationalization for all plugin strings, see https://translate.wordpress.org/projects/wp-plugins/next-active-directory-integration (ADI-432, ADI-436)
     302* FIXED: roles are now mapped using the GUID instead of sAMAccountName (ADI-428)
     303* ADDED: option for preventing disabled users to be synchronized to WordPress (ADI-223)
     304* ADDED: validation for Base DN
     305* FIXED: problem when sending brute force protection notifications via email (ADI-464)
     306* FIXED: non NADI users being blocked by the brute force protection
     307* FIXED: brute force protection now checks for the whole username (ADI-424)
     308* FIXED: updating user profiles without bind user (ADI-439)
     309* FIXED: countdown for brute force protection (ADI-456)
    303310
    304311= 2.0.11 =
    305 * ADD: NTLM support for SSO (sponsored by Vogels - www.vogels.com)
    306 * ADD: implementation of hooks to provide an API (ADI-145)
    307 * ADD: premium extensions available for support license subscribers
    308 * ADD: log reason for not being able to increase max_execution_time (ADI-396)
    309 * ADD: log message that AD security group could not be found (ADI-397)
    310 * ADD: improve logging number of users to import from AD to WordPress (ADI-414)
    311 * FIX: synchronization does not work b/c getDomainSid returns "S-0" (ADI-412)
    312 * FIX: "Test authentication" does not allow characters like a backward slash (ADI-421)
    313 * FIX: permanent redirects after successful authentication (ADI-422)
    314 * FIX: error "the current user is being initialized without using $wp->init()" when using BuddyPress (ADI-416)
    315 * FIX: blocking of users with long user names (ADI-330)
    316 * FIX: get_blog_details replaced with get_site to maintain compatibility with WordPress 4.7+ (ADI-419)
    317 * FIX: restrict output of debug LDAP user information to only an amount of characters (ADI-420)
    318 * FIX: Sync to WordPress: default WordPress role "Subscriber" is not assigned (ADI-401)
    319 * FIX: Users with admin role granted by WordPress lose their role when logging into the site for the first time (ADI-380)
     312* ADDED: NTLM support for SSO (sponsored by Vogels - www.vogels.com)
     313* ADDED: implementation of hooks to provide an API (ADI-145)
     314* ADDED: premium extensions available for support license subscribers
     315* ADDED: log reason for not being able to increase max_execution_time (ADI-396)
     316* ADDED: log message that AD security group could not be found (ADI-397)
     317* ADDED: improve logging number of users to import from AD to WordPress (ADI-414)
     318* FIXED: synchronization does not work b/c getDomainSid returns "S-0" (ADI-412)
     319* FIXED: "Test authentication" does not allow characters like a backward slash (ADI-421)
     320* FIXED: permanent redirects after successful authentication (ADI-422)
     321* FIXED: error "the current user is being initialized without using $wp->init()" when using BuddyPress (ADI-416)
     322* FIXED: blocking of users with long user names (ADI-330)
     323* FIXED: get_blog_details replaced with get_site to maintain compatibility with WordPress 4.7+ (ADI-419)
     324* FIXED: restrict output of debug LDAP user information to only an amount of characters (ADI-420)
     325* FIXED: Sync to WordPress: default WordPress role "Subscriber" is not assigned (ADI-401)
     326* FIXED: Users with admin role granted by WordPress lose their role when logging into the site for the first time (ADI-380)
    320327
    321328= 2.0.10 =
    322 * ADD: option to enable/disable authentication using XML-RPC
    323 * FIX: reworked user interface
    324 * FIX: sync ends after deleted account is no longer present in Active Directory
    325 * FIX: integration tests
    326 * FIX: emails will not be sent to administrators (GitHub #27 Thanks to kyleflan)
    327 * FIX: users can now be disabled from WordPress
    328 * ADD: HTTP_X_REMOTE_USER is now an option in the SSO configuration (GitHub #29 Thanks to laughtonsm)
     329* ADDED: option to enable/disable authentication using XML-RPC
     330* FIXED: reworked user interface
     331* FIXED: sync ends after deleted account is no longer present in Active Directory
     332* FIXED: integration tests
     333* FIXED: emails will not be sent to administrators; thanks to *kyleflan* (#27)
     334* FIXED: users can now be disabled from WordPress
     335* ADDED: HTTP_X_REMOTE_USER is now an option in the SSO configuration; thanks to *laughtonsm* (#29)
    329336
    330337= 2.0.9 =
    331 * FIX: add missing default value for method parameter
     338* FIXED: add missing default value for method parameter
    332339
    333340= 2.0.8 =
    334 * FIX: remove PHP 5.6 code (GitHub #22 Thanks to requincreative)
     341* FIXED: remove PHP 5.6 code; thanks to *requincreative* (#22)
    335342
    336343= 2.0.7 =
    337 * ADD: custom user roles can be used in "Role equivalent groups"
    338 * ADD: the logger is disabled by default (and can be enabled inside the configuration)
    339 * ADD: log file path can be configured (default is wp-content/plugins/next-active-directory-integration/logs/debug.log)
     344* ADDED: custom user roles can be used in "Role equivalent groups"
     345* ADDED: the logger is disabled by default (and can be enabled inside the configuration)
     346* ADDED: log file path can be configured (default is wp-content/plugins/next-active-directory-integration/logs/debug.log)
    340347
    341348= 2.0.6 =
    342 * FIX: show activation notice only after activating this plugin (https://wordpress.org/support/topic/activate-plugin-notification-bug/ Thanks to bobchou9)
    343 * FIX: SSO/verify-password errors by un-quoting values in $_GET/$_POST/$_SERVER. WordPress quotes all entries in $_GET/$_POST/$_SERVER automatically (GitHub #20 Thanks to plantjes)
     349* FIXED: show activation notice only after activating this plugin (https://wordpress.org/support/topic/activate-plugin-notification-bug/); thanks to bobchou9
     350* FIXED: SSO/verify-password errors by un-quoting values in $_GET/$_POST/$_SERVER. WordPress quotes all entries in $_GET/$_POST/$_SERVER automatically; thanks to plantjes (#20)
    344351
    345352= 2.0.5 =
    346 * FIX: check if AD result is not empty before accessing distinguished name (GitHub #16 Thanks to petterannerwall)
    347 * ADD: optional support for Down-Level User Name (like TEST\klammer) (GitHub #18)
     353* FIXED: check if AD result is not empty before accessing distinguished name; thanks to petterannerwall (#16)
     354* ADDED: optional support for Down-Level User Name (like TEST\klammer) (#18)
    348355
    349356= 2.0.4 =
    350 * ADD: make log pattern configurable (https://wordpress.org/support/topic/please-add-timestamps-to-the-debug-log-file/ Thanks to tmuikku)
     357* ADDED: make log pattern configurable (https://wordpress.org/support/topic/please-add-timestamps-to-the-debug-log-file/); Thanks to tmuikku
    351358
    352359= 2.0.3 =
    353 * FIX: brute force protection is now be disabled (GitHub #14 Thanks to Munnday (David Munn))
    354 * FIX: the max count of login tries and the block time are now editable
     360* FIXED: brute force protection is now be disabled; thanks to Munnday (David Munn) (#14)
     361* FIXED: the max count of login tries and the block time are now editable
    355362
    356363= 2.0.2 =
    357 * FIX: SSO caused a PHP error during login (GitHub #13 Thanks to Jason Taylor and Munnday (David Munn))
     364* FIXED: SSO caused a PHP error during login; thanks to Jason Taylor and Munnday (David Munn) (#13)
    358365
    359366= 2.0.1 =
    360 * FIX: missing german translation
     367* FIXED: missing german translation
    361368
    362369= 2.0.0 =
    363 * ADD: support for WordPress Multisite through profiles
    364 * ADD: Profiles can be customized, including the permission of every option
    365 * ADD: support for PHP7
    366 * ADD: detailed documentation at https://www.active-directory-wp.com/docs/Getting_Started.html
    367 * ADD: experimental support for multiple Active Directory domains; see FAQ
    368 * ADD: easier handling and description of encryption methods for LDAP
    369 * ADD: additional columns in Multisite overview for networks and users
    370 * ADD: user names can be explicitly excluded from authentication
    371 * ADD: menu entries of *Next ADI* can be hidden
    372 * ADD: *Next ADI* can be disabled per Multisite site environment
    373 * CHANGE: large user interface improvements
    374 * CHANGE: complete rewrite of the PHP backend
    375 * CHANGE: userPrincipalName is leading attribute for user identification instead of sAMAccountName
    376 * FIX: Role Equivalent Groups can be mapped to multiple WordPress roles instead of only one
     370* ADDED: support for WordPress Multisite through profiles
     371* ADDED: Profiles can be customized, including the permission of every option
     372* ADDED: support for PHP7
     373* ADDED: detailed documentation at https://www.active-directory-wp.com/docs/Getting_Started.html
     374* ADDED: experimental support for multiple Active Directory domains; see FAQ
     375* ADDED: easier handling and description of encryption methods for LDAP
     376* ADDED: additional columns in Multisite overview for networks and users
     377* ADDED: user names can be explicitly excluded from authentication
     378* ADDED: menu entries of *Next ADI* can be hidden
     379* ADDED: *Next ADI* can be disabled per Multisite site environment
     380* CHANGED: large user interface improvements
     381* CHANGED: complete rewrite of the PHP backend
     382* CHANGED: userPrincipalName is leading attribute for user identification instead of sAMAccountName
     383* FIXED: Role Equivalent Groups can be mapped to multiple WordPress roles instead of only one
    377384* and much much more we can not list here. Please take the time and read the official documentation :-)
    378385
  • next-active-directory-integration/trunk/vendor/adLDAP/adLDAP.php

    r2641799 r2692352  
    824824       
    825825        // Let's use paging if available
    826         // gh-#127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
     826        // #127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
    827827        if (function_exists('ldap_control_paged_result')) {
    828828           
     
    10151015       
    10161016        // Let's use paging if available
    1017         // gh-#127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
     1017        // #127: PHP 7.4 compatibility; ldap_control_paged* is deprecated
    10181018        if (function_exists('ldap_control_paged_result')) {
    10191019       
     
    13651365            return $entries;
    13661366        }
     1367
    13671368        return false;
    13681369    }
    13691370
    1370     /**
    1371      * Get a configuration entry form the CN=Partitions,CN=Configuration object
    1372      *
     1371    const PARTITIONS_PREFIX = "CN=Partitions,CN=Configuration,";
     1372    const NETBIOS_MATCHER = "(&(netbiosname=*))";
     1373    const NCNAME_ATTRIBUTE = 'ncname';
     1374
     1375    /**
     1376     * Get a configuration entry form the CN=Partitions,CN=Configuration object.
     1377     * Due to the nature of Active Directory forests, this method is not so simple.
     1378     *
     1379     * @since #153 this method has been extended to support Active Directory forests
    13731380     * @param $filter
    13741381     * @return bool
    13751382     */
    1376     public function get_configuration($filter)
    1377     {
    1378         $tmp = "CN=Partitions,CN=Configuration," . $this->_base_dn;
    1379         $sr = ldap_search($this->_conn,$tmp,"(&(netbiosname=*))", array());
    1380         $entries = ldap_get_entries($this->_conn, $sr);
    1381 
    1382         if ($entries[0]['count'] >= 1) {
    1383             $result = $entries[0][$filter][0];
    1384 
    1385             return $result;
    1386         }
    1387 
    1388         return false;
    1389     }
     1383    public function get_configuration($filter)
     1384    {
     1385        // in a single Active Directory domain environment, we'll probably find the partition CN below CN=Partitions,CN=Configuration,${BASE_DN}.
     1386        // in a Active Directory domain forest, this can be a little bit more complex. The base DN could be DC=sub,DC=test,DC=ad but the CN for the partition can be CN=Partitions,CN=Configuration,DC=test,DC=ad (note the missing DC=sub).
     1387        $distinguishedNameCandidates = array();
     1388        $leafs = explode(",", $this->_base_dn);
     1389
     1390        // we create a list of DN search candidates in which the configuration is probably stored, beginning with the most concrete DN (DC=sub,DC=test,DC=ad) and ending with the most top-level DN (DC=ad)
     1391        for ($i = 0, $m = sizeof($leafs); $i < $m; $i++) {
     1392            $distinguishedNameCandidates[] = self::PARTITIONS_PREFIX . implode(",", array_slice($leafs, $i));
     1393        }
     1394
     1395        $sanitizedBaseDn = $this->sanitizeDistinguishedName($this->_base_dn);
     1396        $r = FALSE;
     1397        $hasBestMatch = FALSE;
     1398
     1399        // iterate over each of the available parts
     1400        foreach ($distinguishedNameCandidates as $distinguishedName) {
     1401            // try to find the configuration below e.g. CN=Partitions,CN=Configuration,DC=sub,DC=test,DC=ad
     1402            $sr = $this->_ldap_search($distinguishedName, self::NETBIOS_MATCHER, array());
     1403
     1404            // handle error code 32, "No such object" when configuration partition can not be found by given DN
     1405            if (!$sr) {
     1406                continue;
     1407            }
     1408
     1409            $entries = $this->_ldap_get_entries($sr);
     1410
     1411            // if no entries are available, this is probably the wrong search tree. We move a level up (now: CN=Partitions,CN=Configuration,DC=sub,DC=test,DC=ad; next: CN=Partitions,CN=Configuration,DC=sub,DC=test,DC=ad)
     1412            if (!$entries) {
     1413                continue;
     1414            }
     1415
     1416            $count = (int)$entries['count'];
     1417
     1418            if ($count >= 1) {
     1419                // after having found our configuration partition DN (e.g. CN=Partitions,CN=Configuration,DC=test,DC=ad), we need to check each of the CNs in there with the netbiosname attribute if they match the specified base DN:
     1420                // in a AD forest, we would have the following entries below CN=Partitions,CN=Configuration,DC=test,DC=ad:
     1421                // - CN=SUB,CN=Partitions,CN=Configuration,DC=test,DC=ad
     1422                // - CN=FOREST-1,CN=Partitions,CN=Configuration,DC=test,DC=ad
     1423                // - CN=FOREST-2,CN=Partitions,CN=Configuration,DC=test,DC=ad
     1424                for ($idx = 0, $m = $count; $idx < $m; $idx++) {
     1425                    // the first entry is our best match if we don't find a better match
     1426                    if (!$r) {
     1427                        $r = $entries[$idx][$filter][0];
     1428                    }
     1429
     1430                    // the attribute nCName contains the base DN for a partition. If this matches the specified base DN, we are good to go.
     1431                    // possible caveat: the base DN good be too unspecific so that the wrong partition is used; this could only happy in a AD forest - in a single forest, there is only one entry available.
     1432                    $sanitizedNCname = $this->sanitizeDistinguishedName($entries[$idx][self::NCNAME_ATTRIBUTE][0]);
     1433
     1434                    if ($sanitizedNCname == $sanitizedBaseDn) {
     1435                        $r = $entries[$idx][$filter][0];
     1436
     1437                        // end outer loop
     1438                        $hasBestMatch = TRUE;
     1439                        // end this loop
     1440                        break;
     1441                    }
     1442                }
     1443            }
     1444
     1445            if ($hasBestMatch) {
     1446                break;
     1447            }
     1448
     1449        }
     1450
     1451        return $r;
     1452    }
     1453
     1454    /**
     1455     * Removes any whitespaces in front and at the end and lowers the string
     1456     * @param $dn
     1457     * @return string
     1458     */
     1459    public function sanitizeDistinguishedName($dn)
     1460    {
     1461        return trim(strtolower($dn));
     1462    }
     1463
     1464    /**
     1465     * Forward method to <em>php_ldap</em>'s ldap_get_entries to make adLDAP testable.
     1466     *
     1467     * @param $result
     1468     * @return array
     1469     */
     1470    protected function _ldap_get_entries($result)
     1471    {
     1472        return ldap_get_entries($this->_conn, $result);
     1473    }
     1474
     1475    /**
     1476     * Forward method to <em>php_ldap</em>'s ldap_search to make adLDAP testable.
     1477     *
     1478     * @param $base
     1479     * @param $filter
     1480     * @param array $attributes
     1481     * @param int $attributes_only
     1482     * @param int $sizelimit
     1483     * @param int $timelimit
     1484     * @param int $deref
     1485     * @param null $controls
     1486     * @return array
     1487     */
     1488    protected function _ldap_search($base, $filter, $attributes = [], int $attributes_only = 0, int $sizelimit = -1, int $timelimit = -1, int $deref = LDAP_DEREF_NEVER, $controls = null)
     1489    {
     1490        return ldap_search($this->_conn, $base, $filter, $attributes, $attributes_only, $sizelimit, $timelimit, $deref, $controls);
     1491    }
    13901492   
    13911493    /**
     
    29463048        $sr = ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
    29473049       
    2948         // @see #146: if search failed, $sr will be false and we have to return
     3050        // #146: if search failed, $sr will be false and we have to return
    29493051        if ($sr === FALSE) {
    29503052            return FALSE;
  • next-active-directory-integration/trunk/vendor/autoload.php

    r2662231 r2692352  
    55require_once __DIR__ . '/composer/autoload_real.php';
    66
    7 return ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1::getLoader();
     7return ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25::getLoader();
  • next-active-directory-integration/trunk/vendor/composer/autoload_files.php

    r2662231 r2692352  
    88return array(
    99    '5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
     10    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
    1011    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
    11     '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
    1212);
  • next-active-directory-integration/trunk/vendor/composer/autoload_real.php

    r2662231 r2692352  
    33// autoload_real.php @generated by Composer
    44
    5 class ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1
     5class ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25
    66{
    77    private static $loader;
     
    2525        require __DIR__ . '/platform_check.php';
    2626
    27         spl_autoload_register(array('ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1', 'loadClassLoader'), true, true);
     27        spl_autoload_register(array('ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25', 'loadClassLoader'), true, true);
    2828        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
    29         spl_autoload_unregister(array('ComposerAutoloaderInitd668969de90e07bc3e6c5441ee782cc1', 'loadClassLoader'));
     29        spl_autoload_unregister(array('ComposerAutoloaderInit134232ed870c926a87ebeb152d531d25', 'loadClassLoader'));
    3030
    3131        $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
     
    3333            require __DIR__ . '/autoload_static.php';
    3434
    35             call_user_func(\Composer\Autoload\ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::getInitializer($loader));
     35            call_user_func(\Composer\Autoload\ComposerStaticInit134232ed870c926a87ebeb152d531d25::getInitializer($loader));
    3636        } else {
    3737            $map = require __DIR__ . '/autoload_namespaces.php';
     
    5454
    5555        if ($useStaticLoader) {
    56             $includeFiles = Composer\Autoload\ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$files;
     56            $includeFiles = Composer\Autoload\ComposerStaticInit134232ed870c926a87ebeb152d531d25::$files;
    5757        } else {
    5858            $includeFiles = require __DIR__ . '/autoload_files.php';
    5959        }
    6060        foreach ($includeFiles as $fileIdentifier => $file) {
    61             composerRequired668969de90e07bc3e6c5441ee782cc1($fileIdentifier, $file);
     61            composerRequire134232ed870c926a87ebeb152d531d25($fileIdentifier, $file);
    6262        }
    6363
     
    7171 * @return void
    7272 */
    73 function composerRequired668969de90e07bc3e6c5441ee782cc1($fileIdentifier, $file)
     73function composerRequire134232ed870c926a87ebeb152d531d25($fileIdentifier, $file)
    7474{
    7575    if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
  • next-active-directory-integration/trunk/vendor/composer/autoload_static.php

    r2662231 r2692352  
    55namespace Composer\Autoload;
    66
    7 class ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1
     7class ComposerStaticInit134232ed870c926a87ebeb152d531d25
    88{
    99    public static $files = array (
    1010        '5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
     11        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
    1112        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
    12         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
    1313    );
    1414
     
    7777    {
    7878        return \Closure::bind(function () use ($loader) {
    79             $loader->prefixLengthsPsr4 = ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$prefixLengthsPsr4;
    80             $loader->prefixDirsPsr4 = ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$prefixDirsPsr4;
    81             $loader->classMap = ComposerStaticInitd668969de90e07bc3e6c5441ee782cc1::$classMap;
     79            $loader->prefixLengthsPsr4 = ComposerStaticInit134232ed870c926a87ebeb152d531d25::$prefixLengthsPsr4;
     80            $loader->prefixDirsPsr4 = ComposerStaticInit134232ed870c926a87ebeb152d531d25::$prefixDirsPsr4;
     81            $loader->classMap = ComposerStaticInit134232ed870c926a87ebeb152d531d25::$classMap;
    8282
    8383        }, null, ClassLoader::class);
  • next-active-directory-integration/trunk/vendor/composer/installed.json

    r2662231 r2692352  
    158158        {
    159159            "name": "paragonie/random_compat",
    160             "version": "v2.0.20",
    161             "version_normalized": "2.0.20.0",
     160            "version": "v2.0.21",
     161            "version_normalized": "2.0.21.0",
    162162            "source": {
    163163                "type": "git",
    164164                "url": "https://github.com/paragonie/random_compat.git",
    165                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a"
    166             },
    167             "dist": {
    168                 "type": "zip",
    169                 "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
    170                 "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a",
     165                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae"
     166            },
     167            "dist": {
     168                "type": "zip",
     169                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
     170                "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
    171171                "shasum": ""
    172172            },
     
    175175            },
    176176            "require-dev": {
    177                 "phpunit/phpunit": "4.*|5.*"
     177                "phpunit/phpunit": "*"
    178178            },
    179179            "suggest": {
    180180                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
    181181            },
    182             "time": "2021-04-17T09:33:01+00:00",
     182            "time": "2022-02-16T17:07:03+00:00",
    183183            "type": "library",
    184184            "installation-source": "dist",
     
    268268        {
    269269            "name": "symfony/polyfill-ctype",
    270             "version": "v1.24.0",
    271             "version_normalized": "1.24.0.0",
     270            "version": "v1.25.0",
     271            "version_normalized": "1.25.0.0",
    272272            "source": {
    273273                "type": "git",
     
    303303            "installation-source": "dist",
    304304            "autoload": {
     305                "files": [
     306                    "bootstrap.php"
     307                ],
    305308                "psr-4": {
    306309                    "Symfony\\Polyfill\\Ctype\\": ""
    307                 },
    308                 "files": [
    309                     "bootstrap.php"
    310                 ]
     310                }
    311311            },
    312312            "notification-url": "https://packagist.org/downloads/",
     
    333333            ],
    334334            "support": {
    335                 "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
     335                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
    336336            },
    337337            "funding": [
     
    385385            "installation-source": "dist",
    386386            "autoload": {
     387                "files": [
     388                    "bootstrap.php"
     389                ],
    387390                "psr-4": {
    388391                    "Symfony\\Polyfill\\Mbstring\\": ""
    389                 },
    390                 "files": [
    391                     "bootstrap.php"
    392                 ]
     392                }
    393393            },
    394394            "notification-url": "https://packagist.org/downloads/",
     
    436436        {
    437437            "name": "twig/twig",
    438             "version": "v3.3.7",
    439             "version_normalized": "3.3.7.0",
     438            "version": "v3.3.8",
     439            "version_normalized": "3.3.8.0",
    440440            "source": {
    441441                "type": "git",
    442442                "url": "https://github.com/twigphp/Twig.git",
    443                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b"
    444             },
    445             "dist": {
    446                 "type": "zip",
    447                 "url": "https://api.github.com/repos/twigphp/Twig/zipball/8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
    448                 "reference": "8f168c6ffa3ce76d1786b3cd52275424a3fc675b",
     443                "reference": "972d8604a92b7054828b539f2febb0211dd5945c"
     444            },
     445            "dist": {
     446                "type": "zip",
     447                "url": "https://api.github.com/repos/twigphp/Twig/zipball/972d8604a92b7054828b539f2febb0211dd5945c",
     448                "reference": "972d8604a92b7054828b539f2febb0211dd5945c",
    449449                "shasum": ""
    450450            },
     
    458458                "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0"
    459459            },
    460             "time": "2022-01-03T21:15:37+00:00",
     460            "time": "2022-02-04T06:59:48+00:00",
    461461            "type": "library",
    462462            "extra": {
     
    499499            "support": {
    500500                "issues": "https://github.com/twigphp/Twig/issues",
    501                 "source": "https://github.com/twigphp/Twig/tree/v3.3.7"
     501                "source": "https://github.com/twigphp/Twig/tree/v3.3.8"
    502502            },
    503503            "funding": [
  • next-active-directory-integration/trunk/vendor/composer/installed.php

    r2662231 r2692352  
    11<?php return array(
    22    'root' => array(
    3         'pretty_version' => '2.3.1',
    4         'version' => '2.3.1.0',
     3        'pretty_version' => '2.3.2',
     4        'version' => '2.3.2.0',
    55        'type' => 'library',
    66        'install_path' => __DIR__ . '/../../',
    77        'aliases' => array(),
    8         'reference' => '37e1f656389d0d03aaab30f1d5053e618e625af9',
     8        'reference' => 'e49bb008caab50a3a561224e91d43829a274c2ad',
    99        'name' => '__root__',
    1010        'dev' => false,
     
    1212    'versions' => array(
    1313        '__root__' => array(
    14             'pretty_version' => '2.3.1',
    15             'version' => '2.3.1.0',
     14            'pretty_version' => '2.3.2',
     15            'version' => '2.3.2.0',
    1616            'type' => 'library',
    1717            'install_path' => __DIR__ . '/../../',
    1818            'aliases' => array(),
    19             'reference' => '37e1f656389d0d03aaab30f1d5053e618e625af9',
     19            'reference' => 'e49bb008caab50a3a561224e91d43829a274c2ad',
    2020            'dev_requirement' => false,
    2121        ),
     
    3939        ),
    4040        'paragonie/random_compat' => array(
    41             'pretty_version' => 'v2.0.20',
    42             'version' => '2.0.20.0',
     41            'pretty_version' => 'v2.0.21',
     42            'version' => '2.0.21.0',
    4343            'type' => 'library',
    4444            'install_path' => __DIR__ . '/../paragonie/random_compat',
    4545            'aliases' => array(),
    46             'reference' => '0f1f60250fccffeaf5dda91eea1c018aed1adc2a',
     46            'reference' => '96c132c7f2f7bc3230723b66e89f8f150b29d5ae',
    4747            'dev_requirement' => false,
    4848        ),
     
    6363        ),
    6464        'symfony/polyfill-ctype' => array(
    65             'pretty_version' => 'v1.24.0',
    66             'version' => '1.24.0.0',
     65            'pretty_version' => 'v1.25.0',
     66            'version' => '1.25.0.0',
    6767            'type' => 'library',
    6868            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
     
    8181        ),
    8282        'twig/twig' => array(
    83             'pretty_version' => 'v3.3.7',
    84             'version' => '3.3.7.0',
     83            'pretty_version' => 'v3.3.8',
     84            'version' => '3.3.8.0',
    8585            'type' => 'library',
    8686            'install_path' => __DIR__ . '/../twig/twig',
    8787            'aliases' => array(),
    88             'reference' => '8f168c6ffa3ce76d1786b3cd52275424a3fc675b',
     88            'reference' => '972d8604a92b7054828b539f2febb0211dd5945c',
    8989            'dev_requirement' => false,
    9090        ),
  • next-active-directory-integration/trunk/vendor/paragonie/random_compat/composer.json

    r1944146 r2692352  
    2626  },
    2727  "require-dev": {
    28     "phpunit/phpunit": "4.*|5.*"
     28    "phpunit/phpunit": "*"
    2929  },
    3030  "suggest": {
  • next-active-directory-integration/trunk/vendor/paragonie/random_compat/lib/random.php

    r2517646 r2692352  
    184184                $RandomCompatCOMtest = new COM('CAPICOM.Utilities.1');
    185185                /** @psalm-suppress TypeDoesNotContainType */
    186                 if (method_exists($RandomCompatCOMtest, 'GetRandom')) {
     186                if (is_callable(array($RandomCompatCOMtest, 'GetRandom'))) {
    187187                    // See random_bytes_com_dotnet.php
    188188                    require_once $RandomCompatDIR.DIRECTORY_SEPARATOR.'random_bytes_com_dotnet.php';
  • next-active-directory-integration/trunk/vendor/twig/twig/CHANGELOG

    r2662231 r2692352  
     1# 3.3.8 (2022-02-04)
     2
     3 * Fix a security issue when in a sandbox: the `sort` filter must require a Closure for the `arrow` parameter
     4
    15# 3.3.7 (2022-01-03)
    26
  • next-active-directory-integration/trunk/vendor/twig/twig/src/Environment.php

    r2662231 r2692352  
    3939class Environment
    4040{
    41     public const VERSION = '3.3.7';
    42     public const VERSION_ID = 30307;
     41    public const VERSION = '3.3.8';
     42    public const VERSION_ID = 30308;
    4343    public const MAJOR_VERSION = 3;
    4444    public const MINOR_VERSION = 3;
    45     public const RELEASE_VERSION = 7;
     45    public const RELEASE_VERSION = 8;
    4646    public const EXTRA_VERSION = '';
    4747
  • next-active-directory-integration/trunk/vendor/twig/twig/src/Extension/CoreExtension.php

    r2662231 r2692352  
    202202            new TwigFilter('join', 'twig_join_filter'),
    203203            new TwigFilter('split', 'twig_split_filter', ['needs_environment' => true]),
    204             new TwigFilter('sort', 'twig_sort_filter'),
     204            new TwigFilter('sort', 'twig_sort_filter', ['needs_environment' => true]),
    205205            new TwigFilter('merge', 'twig_array_merge'),
    206206            new TwigFilter('batch', 'twig_array_batch'),
     
    544544function twig_round($value, $precision = 0, $method = 'common')
    545545{
     546    $value = (float) $value;
     547
    546548    if ('common' === $method) {
    547549        return round($value, $precision);
     
    551553        throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.');
    552554    }
    553 
    554     $value = (float) $value;
    555555
    556556    return $method($value * 10 ** $precision) / 10 ** $precision;
     
    888888 * @return array
    889889 */
    890 function twig_sort_filter($array, $arrow = null)
     890function twig_sort_filter(Environment $env, $array, $arrow = null)
    891891{
    892892    if ($array instanceof \Traversable) {
     
    897897
    898898    if (null !== $arrow) {
     899        twig_check_arrow_in_sandbox($env, $arrow, 'sort', 'filter');
     900
    899901        uasort($array, $arrow);
    900902    } else {
     
    16401642    }
    16411643
    1642     if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
    1643         throw new RuntimeError('The callable passed to "filter" filter must be a Closure in sandbox mode.');
    1644     }
     1644    twig_check_arrow_in_sandbox($env, $arrow, 'filter', 'filter');
    16451645
    16461646    if (\is_array($array)) {
     
    16541654function twig_array_map(Environment $env, $array, $arrow)
    16551655{
    1656     if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
    1657         throw new RuntimeError('The callable passed to the "map" filter must be a Closure in sandbox mode.');
    1658     }
     1656    twig_check_arrow_in_sandbox($env, $arrow, 'map', 'filter');
    16591657
    16601658    $r = [];
     
    16681666function twig_array_reduce(Environment $env, $array, $arrow, $initial = null)
    16691667{
    1670     if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
    1671         throw new RuntimeError('The callable passed to the "reduce" filter must be a Closure in sandbox mode.');
    1672     }
     1668    twig_check_arrow_in_sandbox($env, $arrow, 'reduce', 'filter');
    16731669
    16741670    if (!\is_array($array)) {
     
    16821678    return array_reduce($array, $arrow, $initial);
    16831679}
    1684 }
     1680
     1681function twig_check_arrow_in_sandbox(Environment $env, $arrow, $thing, $type)
     1682{
     1683    if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) {
     1684        throw new RuntimeError(sprintf('The callable passed to the "%s" %s must be a Closure in sandbox mode.', $thing, $type));
     1685    }
     1686}
     1687}
Note: See TracChangeset for help on using the changeset viewer.