Compare commits

...

7 Commits

Author SHA1 Message Date
3f2cd56884 Change CI/CD build from gitlab to gitea
All checks were successful
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 1m24s
Create Docker Image / Build Docker Image (arm64) (push) Successful in 3m12s
Create Docker Image / Final Docker Image Manifest (push) Successful in 10s
2025-01-02 19:53:14 +11:00
bfe71edc44 Swap out base docker container for dunglas/frankenphp, enabling us to run as non-root, addressing #271.
By default the container web address is now port 8080, so port mapping of -p 80:8080 will now be required
2025-01-02 19:53:14 +11:00
bd62897e80 Turn down the verbosity with an internal config attr when parsing the schema.
This helps while developing, without memcached running we get 100,000's of logs while rendering the test environment.
Also fixes a deprecated parsing null to strlen().
2025-01-02 19:53:14 +11:00
e399b733e9 Deprecate using osixia/openldap and setup test configuration using our own alpine/ldap container 2025-01-02 19:53:14 +11:00
7e25000e68 Test needs npm 2025-01-01 17:47:28 +11:00
41fb40983b Enable builds for armv7l and arm64 2025-01-01 17:47:28 +11:00
37cf1292df Updates to PHP 8.3 2025-01-01 17:47:28 +11:00
28 changed files with 695 additions and 374 deletions

View File

@ -1,10 +1,19 @@
.dockerignore .dockerignore
.editorconfig .editorconfig
.env.testing .env.testing
.idea
.git* .git*
docker/ .phpunit.result.cache
.styleci.yml
node_modules/
storage/debugbar
storage/framework/cache/data
storage/framework/sessions
storage/framework/views
storage/logs
package.json package.json
package-lock.json package-lock.json
phpunit.xml phpunit.xml
vendor/
webpack.mix.js webpack.mix.js
yarn.lock yarn.lock

View File

@ -0,0 +1,144 @@
name: Create Docker Image
run-name: ${{ gitea.actor }} Building Docker Image 🐳
on: [push]
env:
VERSION: latest
DOCKER_HOST: tcp://127.0.0.1:2375
jobs:
# test:
# strategy:
# matrix:
# arch:
# - x86_64
# # arm64
#
# name: Test Application
# runs-on: docker-${{ matrix.arch }}
# container:
# image: gitea.dege.au/docker/php:8.3-fpm-ldap-test
#
# steps:
# - name: Environment Setup
# run: |
# # If we have a proxy use it
# if [ -n "${HTTP_PROXY}" ]; then echo "HTTP PROXY [${HTTP_PROXY}]"; sed -i -e s'/https/http/' /etc/apk/repositories; fi
# # Some pre-reqs
# apk add git nodejs
# ## Some debugging info
# # env|sort
#
# - name: Code Checkout
# uses: actions/checkout@v4
#
# - name: Run Tests
# run: |
# mv .env.testing .env
# # Install Composer and project dependencies.
# mkdir -p ${COMPOSER_HOME}
# if [ -n "${{ secrets.COMPOSER_GITHUB_TOKEN }}" ]; then echo ${{ secrets.COMPOSER_GITHUB_TOKEN }} > ${COMPOSER_HOME}/auth.json; fi
# composer install
# # Generate an application key. Re-cache.
# php artisan key:generate
# php artisan migrate
# php artisan db:seed
# # run laravel tests
# touch storage/app/test/*ZIP storage/app/test/file/*
# XDEBUG_MODE=coverage php vendor/bin/phpunit --coverage-text --colors=never
build:
strategy:
matrix:
arch:
- x86_64
- arm64
# needs: [test]
name: Build Docker Image
runs-on: docker-${{ matrix.arch }}
container:
image: docker:dind
privileged: true
env:
ARCH: ${{ matrix.arch }}
VERSIONARCH: ${{ env.VERSION }}-${{ env.ARCH }}
steps:
- name: Environment Setup
run: |
# If we have a proxy use it
if [ -n "${HTTP_PROXY}" ]; then echo "HTTP PROXY [${HTTP_PROXY}]"; sed -i -e s'/https/http/' /etc/apk/repositories; fi
# Some pre-reqs
apk add git curl nodejs
# Start docker
( dockerd --host=tcp://0.0.0.0:2375 --tls=false & ) && sleep 3
## Some debugging info
# docker info && docker version
# env|sort
- name: Registry FQDN Setup
id: registry
run: |
registry=${{ github.server_url }}
echo "registry=${registry##http*://}" >> "$GITHUB_OUTPUT"
- name: Container Registry Login
uses: docker/login-action@v2
with:
registry: ${{ steps.registry.outputs.registry }}
username: ${{ gitea.actor }}
password: ${{ secrets.PKG_WRITE_TOKEN }}
- name: Code Checkout
uses: actions/checkout@v4
- name: Record version and Delete Unnecessary files
run: |
echo ${GITHUB_SHA::8} > VERSION
rm -rf .git* tests/ storage/app/test/
- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
context: .
file: docker/Dockerfile
push: true
tags: "${{ steps.registry.outputs.registry }}/${{ env.GITHUB_REPOSITORY }}:${{ env.VERSIONARCH }}"
manifest:
name: Final Docker Image Manifest
runs-on: docker-x86_64
container:
image: docker:dind
privileged: true
needs: [build]
steps:
- name: Environment Setup
run: |
# If we have a proxy use it
if [ -n "${HTTP_PROXY}" ]; then echo "HTTP PROXY [${HTTP_PROXY}]"; sed -i -e s'/https/http/' /etc/apk/repositories; fi
# Some pre-reqs
apk add git curl nodejs
# Start docker
( dockerd --host=tcp://0.0.0.0:2375 --tls=false & ) && sleep 3
- name: Registry FQDN Setup
id: registry
run: |
registry=${{ github.server_url }}
echo "registry=${registry##http*://}" >> "$GITHUB_OUTPUT"
- name: Container Registry Login
uses: docker/login-action@v2
with:
registry: ${{ steps.registry.outputs.registry }}
username: ${{ gitea.actor }}
password: ${{ secrets.PKG_WRITE_TOKEN }}
- name: Build Docker Manifest
run: |
docker manifest create ${{ steps.registry.outputs.registry }}/${{ env.GITHUB_REPOSITORY }}:${{ env.VERSION }} \
${{ steps.registry.outputs.registry }}/${{ env.GITHUB_REPOSITORY }}:${{ env.VERSION }}-x86_64
# ${{ steps.registry.outputs.registry }}/${{ env.GITHUB_REPOSITORY }}:${{ env.VERSION }}-arm64
docker manifest push --purge ${{ steps.registry.outputs.registry }}/${{ env.GITHUB_REPOSITORY }}:${{ env.VERSION }}

View File

@ -1,20 +0,0 @@
stages:
- test
- build
# This folder is cached between builds
# http://docs.gitlab.com/ce/ci/yaml/README.html#cache
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- public/css/app.css
- public/js/app.js
- public/js/manifest.js
- public/js/vendor.js
- public/*/vendor/
- node_modules/
- vendor/
include:
- .gitlab-test.yml
- .gitlab-docker-x86_64.yml

View File

@ -1,27 +0,0 @@
docker:
variables:
VERSION: latest
DOCKER_HOST: tcp://docker:2375
stage: build
image: docker:latest
services:
- docker:dind
before_script:
- docker info && docker version
- echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
- if [ -n "$GITHUB_TOKEN" ]; then cat $GITHUB_TOKEN |base64 -d > auth.json; fi
script:
- if [ -f init ]; then chmod 500 init; fi
- echo -n ${CI_COMMIT_SHORT_SHA} > VERSION
- rm -rf node_modules database/seeds database/schema database/factories/*
- docker build -f docker/Dockerfile -t ${CI_REGISTRY_IMAGE}:${VERSION} .
- docker push ${CI_REGISTRY_IMAGE}:${VERSION}
tags:
- docker
- x86_64
only:
- BRANCH-2.0

View File

@ -1,51 +0,0 @@
test:
image: ${CI_REGISTRY}/leenooks/php:8.1-fpm-alpine-ldap-test
stage: test
# NOTE: This service is dependant on project file configuration, which is not there if the cache was deleted
# resulting in the testing to fail on the first run.
services:
- name: osixia/openldap:latest
alias: test_ldap
command: ["--loglevel","debug"]
variables:
LDAP_SEED_INTERNAL_LDIF_PATH: "${CI_PROJECT_DIR}/tests/server/openldap/data"
LDAP_SEED_INTERNAL_SCHEMA_PATH: "${CI_PROJECT_DIR}/tests/server/openldap/schema"
LDAP_BASE_DN: "dc=Test"
LDAP_DOMAIN: "Test"
LDAP_ADMIN_PASSWORD: test
#CI_DEBUG_SERVICES: "true"
tags:
- php
only:
- BRANCH-2.0
before_script:
- mv .env.testing .env
# Install npm and dependancies
- npm i
- npm run prod
# Install Composer and project dependencies.
- mkdir -p ${COMPOSER_HOME}
- if [ -n "$GITHUB_TOKEN" ]; then cat $GITHUB_TOKEN |base64 -d > ${COMPOSER_HOME}/auth.json; fi
- composer install
# Generate an application key. Re-cache.
- php artisan key:generate
script:
# Sleep if we need to, in case we want to jump in and see what is going on during the test
- if [ -n "$DEBUG_PAUSE" ]; then echo "Pausing for $DEBUG_PAUSE seconds, so you can jump into the containers"; sleep $DEBUG_PAUSE; fi
# run laravel tests
- XDEBUG_MODE=coverage php vendor/bin/phpunit --coverage-text --colors=never
# run frontend tests
# if you have any task for testing frontend
# set it in your package.json script
# comment this out if you don't have a frontend test
# npm test

View File

@ -72,7 +72,8 @@ final class AttributeType extends Base {
* eg: ( 2.5.4.0 NAME 'objectClass' DESC 'RFC4512: object classes of the entity' EQUALITY objectIdentifierMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 ) * eg: ( 2.5.4.0 NAME 'objectClass' DESC 'RFC4512: object classes of the entity' EQUALITY objectIdentifierMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 )
*/ */
public function __construct(string $line) { public function __construct(string $line) {
Log::debug(sprintf('Parsing AttributeType [%s]',$line)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('Parsing AttributeType [%s]',$line));
parent::__construct($line); parent::__construct($line);
@ -94,7 +95,7 @@ final class AttributeType extends Base {
// @note Some schema's return a (' instead of a ( ' // @note Some schema's return a (' instead of a ( '
if ($strings[$i+1] != '(' && ! preg_match('/^\(/',$strings[$i+1])) { if ($strings[$i+1] != '(' && ! preg_match('/^\(/',$strings[$i+1])) {
do { do {
$this->name .= (strlen($this->name) ? ' ' : '').$strings[++$i]; $this->name .= ($this->name ? ' ' : '').$strings[++$i];
} while (! preg_match("/\'$/s",$strings[$i])); } while (! preg_match("/\'$/s",$strings[$i]));
@ -111,7 +112,7 @@ final class AttributeType extends Base {
else else
$i++; $i++;
$this->name .= (strlen($this->name) ? ' ' : '').$strings[++$i]; $this->name .= ($this->name ? ' ' : '').$strings[++$i];
} while (! preg_match("/\'$/s",$strings[$i])); } while (! preg_match("/\'$/s",$strings[$i]));
@ -125,55 +126,63 @@ final class AttributeType extends Base {
$this->name = preg_replace("/^\'(.*)\'$/",'$1',$this->name); $this->name = preg_replace("/^\'(.*)\'$/",'$1',$this->name);
Log::debug(sprintf('- Case NAME returned (%s)',$this->name),['aliases'=>$this->aliases]); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case NAME returned (%s)',$this->name),['aliases'=>$this->aliases]);
break; break;
case 'DESC': case 'DESC':
do { do {
$this->description .= (strlen($this->description) ? ' ' : '').$strings[++$i]; $this->description .= ($this->description ? ' ' : '').$strings[++$i];
} while (! preg_match("/\'$/s",$strings[$i])); } while (! preg_match("/\'$/s",$strings[$i]));
$this->description = preg_replace("/^\'(.*)\'$/",'$1',$this->description); $this->description = preg_replace("/^\'(.*)\'$/",'$1',$this->description);
Log::debug(sprintf('- Case DESC returned (%s)',$this->description)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case DESC returned (%s)',$this->description));
break; break;
case 'OBSOLETE': case 'OBSOLETE':
$this->is_obsolete = TRUE; $this->is_obsolete = TRUE;
Log::debug(sprintf('- Case OBSOLETE returned (%s)',$this->is_obsolete)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case OBSOLETE returned (%s)',$this->is_obsolete));
break; break;
case 'SUP': case 'SUP':
$i++; $i++;
$this->sup_attribute = preg_replace("/^\'(.*)\'$/",'$1',$strings[$i]); $this->sup_attribute = preg_replace("/^\'(.*)\'$/",'$1',$strings[$i]);
Log::debug(sprintf('- Case SUP returned (%s)',$this->sup_attribute)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case SUP returned (%s)',$this->sup_attribute));
break; break;
case 'EQUALITY': case 'EQUALITY':
$this->equality = $strings[++$i]; $this->equality = $strings[++$i];
Log::debug(sprintf('- Case EQUALITY returned (%s)',$this->equality)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case EQUALITY returned (%s)',$this->equality));
break; break;
case 'ORDERING': case 'ORDERING':
$this->ordering = $strings[++$i]; $this->ordering = $strings[++$i];
Log::debug(sprintf('- Case ORDERING returned (%s)',$this->ordering)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case ORDERING returned (%s)',$this->ordering));
break; break;
case 'SUBSTR': case 'SUBSTR':
$this->sub_str_rule = $strings[++$i]; $this->sub_str_rule = $strings[++$i];
Log::debug(sprintf('- Case SUBSTR returned (%s)',$this->sub_str_rule)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case SUBSTR returned (%s)',$this->sub_str_rule));
break; break;
case 'SYNTAX': case 'SYNTAX':
$this->syntax = $strings[++$i]; $this->syntax = $strings[++$i];
$this->syntax_oid = preg_replace('/{\d+}$/','',$this->syntax); $this->syntax_oid = preg_replace('/{\d+}$/','',$this->syntax);
Log::debug(sprintf('/ Evaluating SYNTAX returned (%s) [%s]',$this->syntax,$this->syntax_oid)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('/ Evaluating SYNTAX returned (%s) [%s]',$this->syntax,$this->syntax_oid));
// Does this SYNTAX string specify a max length (ie, 1.2.3.4{16}) // Does this SYNTAX string specify a max length (ie, 1.2.3.4{16})
$m = []; $m = [];
@ -190,36 +199,42 @@ final class AttributeType extends Base {
$this->syntax = preg_replace("/^\'(.*)\'$/",'$1',$this->syntax); $this->syntax = preg_replace("/^\'(.*)\'$/",'$1',$this->syntax);
$this->syntax_oid = preg_replace("/^\'(.*)\'$/",'$1',$this->syntax_oid); $this->syntax_oid = preg_replace("/^\'(.*)\'$/",'$1',$this->syntax_oid);
Log::debug(sprintf('- Case SYNTAX returned (%s) [%s] {%d}',$this->syntax,$this->syntax_oid,$this->max_length)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case SYNTAX returned (%s) [%s] {%d}',$this->syntax,$this->syntax_oid,$this->max_length));
break; break;
case 'SINGLE-VALUE': case 'SINGLE-VALUE':
$this->is_single_value = TRUE; $this->is_single_value = TRUE;
Log::debug(sprintf('- Case SINGLE-VALUE returned (%s)',$this->is_single_value)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case SINGLE-VALUE returned (%s)',$this->is_single_value));
break; break;
case 'COLLECTIVE': case 'COLLECTIVE':
$this->is_collective = TRUE; $this->is_collective = TRUE;
Log::debug(sprintf('- Case COLLECTIVE returned (%s)',$this->is_collective)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case COLLECTIVE returned (%s)',$this->is_collective));
break; break;
case 'NO-USER-MODIFICATION': case 'NO-USER-MODIFICATION':
$this->is_no_user_modification = TRUE; $this->is_no_user_modification = TRUE;
Log::debug(sprintf('- Case NO-USER-MODIFICATION returned (%s)',$this->is_no_user_modification)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case NO-USER-MODIFICATION returned (%s)',$this->is_no_user_modification));
break; break;
case 'USAGE': case 'USAGE':
$this->usage = $strings[++$i]; $this->usage = $strings[++$i];
Log::debug(sprintf('- Case USAGE returned (%s)',$this->usage)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case USAGE returned (%s)',$this->usage));
break; break;
// @note currently not captured // @note currently not captured
case 'X-ORDERED': case 'X-ORDERED':
Log::error(sprintf('- Case X-ORDERED returned (%s)',$strings[++$i])); if (static::DEBUG_VERBOSE)
Log::error(sprintf('- Case X-ORDERED returned (%s)',$strings[++$i]));
break; break;
// @note currently not captured // @note currently not captured
@ -227,17 +242,19 @@ final class AttributeType extends Base {
$value = ''; $value = '';
do { do {
$value .= (strlen($value) ? ' ' : '').$strings[++$i]; $value .= ($value ? ' ' : '').$strings[++$i];
} while (! preg_match("/\'$/s",$strings[$i])); } while (! preg_match("/\'$/s",$strings[$i]));
Log::error(sprintf('- Case X-ORIGIN returned (%s)',$value)); if (static::DEBUG_VERBOSE)
Log::error(sprintf('- Case X-ORIGIN returned (%s)',$value));
break; break;
default: default:
if (preg_match('/[\d\.]+/i',$strings[$i]) && ($i === 1)) { if (preg_match('/[\d\.]+/i',$strings[$i]) && ($i === 1)) {
$this->oid = $strings[$i]; $this->oid = $strings[$i];
Log::debug(sprintf('- Case default returned (%s)',$this->oid)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case default returned (%s)',$this->oid));
} elseif ($strings[$i]) } elseif ($strings[$i])
Log::alert(sprintf('! Case default discovered a value NOT parsed (%s)',$strings[$i]),['line'=>$line]); Log::alert(sprintf('! Case default discovered a value NOT parsed (%s)',$strings[$i]),['line'=>$line]);

View File

@ -11,17 +11,19 @@ use App\Exceptions\InvalidUsage;
* All schema items have at least two things in common: An OID and a Description. * All schema items have at least two things in common: An OID and a Description.
*/ */
abstract class Base { abstract class Base {
protected const DEBUG_VERBOSE = FALSE;
// Record the LDAP String // Record the LDAP String
private string $line; private string $line;
// The schema item's name. // The schema item's name.
protected ?string $name = NULL; protected string $name = '';
// The OID of this schema item. // The OID of this schema item.
protected string $oid; protected string $oid;
# The description of this schema item. # The description of this schema item.
protected ?string $description = NULL; protected string $description = '';
// Boolean value indicating whether this objectClass is obsolete // Boolean value indicating whether this objectClass is obsolete
private bool $is_obsolete = FALSE; private bool $is_obsolete = FALSE;

View File

@ -53,7 +53,8 @@ final class ObjectClass extends Base {
{ {
parent::__construct($line); parent::__construct($line);
Log::debug(sprintf('Parsing ObjectClass [%s]',$line)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('Parsing ObjectClass [%s]',$line));
$strings = preg_split('/[\s,]+/',$line,-1,PREG_SPLIT_DELIM_CAPTURE); $strings = preg_split('/[\s,]+/',$line,-1,PREG_SPLIT_DELIM_CAPTURE);
@ -93,7 +94,8 @@ final class ObjectClass extends Base {
$this->name = preg_replace("/^\'(.*)\'$/",'$1',$this->name); $this->name = preg_replace("/^\'(.*)\'$/",'$1',$this->name);
Log::debug(sprintf(sprintf('- Case NAME returned (%s)',$this->name))); if (static::DEBUG_VERBOSE)
Log::debug(sprintf(sprintf('- Case NAME returned (%s)',$this->name)));
break; break;
case 'DESC': case 'DESC':
@ -104,13 +106,15 @@ final class ObjectClass extends Base {
$this->description = preg_replace("/^\'(.*)\'$/",'$1',$this->description); $this->description = preg_replace("/^\'(.*)\'$/",'$1',$this->description);
Log::debug(sprintf('- Case DESC returned (%s)',$this->description)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case DESC returned (%s)',$this->description));
break; break;
case 'OBSOLETE': case 'OBSOLETE':
$this->is_obsolete = TRUE; $this->is_obsolete = TRUE;
Log::debug(sprintf('- Case OBSOLETE returned (%s)',$this->is_obsolete)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case OBSOLETE returned (%s)',$this->is_obsolete));
break; break;
case 'SUP': case 'SUP':
@ -129,25 +133,29 @@ final class ObjectClass extends Base {
} while (! preg_match('/\)+\)?/',$strings[$i+1])); } while (! preg_match('/\)+\)?/',$strings[$i+1]));
} }
Log::debug(sprintf('- Case SUP returned (%s)',$this->sup_classes->join(','))); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case SUP returned (%s)',$this->sup_classes->join(',')));
break; break;
case 'ABSTRACT': case 'ABSTRACT':
$this->type = self::OC_ABSTRACT; $this->type = self::OC_ABSTRACT;
Log::debug(sprintf('- Case ABSTRACT returned (%s)',$this->type)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case ABSTRACT returned (%s)',$this->type));
break; break;
case 'STRUCTURAL': case 'STRUCTURAL':
$this->type = self::OC_STRUCTURAL; $this->type = self::OC_STRUCTURAL;
Log::debug(sprintf('- Case STRUCTURAL returned (%s)',$this->type)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case STRUCTURAL returned (%s)',$this->type));
break; break;
case 'AUXILIARY': case 'AUXILIARY':
$this->type = self::OC_AUXILIARY; $this->type = self::OC_AUXILIARY;
Log::debug(sprintf('- Case AUXILIARY returned (%s)',$this->type)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case AUXILIARY returned (%s)',$this->type));
break; break;
case 'MUST': case 'MUST':
@ -155,7 +163,8 @@ final class ObjectClass extends Base {
$i = $this->parseList(++$i,$strings,$attrs); $i = $this->parseList(++$i,$strings,$attrs);
Log::debug(sprintf('= parseList returned %d (%s)',$i,$attrs->join(','))); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('= parseList returned %d (%s)',$i,$attrs->join(',')));
foreach ($attrs as $string) { foreach ($attrs as $string) {
$attr = new ObjectClassAttribute($string,$this->name); $attr = new ObjectClassAttribute($string,$this->name);
@ -168,7 +177,8 @@ final class ObjectClass extends Base {
$this->must_attrs->push($attr); $this->must_attrs->push($attr);
} }
Log::debug(sprintf('- Case MUST returned (%s) (%s)',$this->must_attrs->join(','),$this->may_force->join(','))); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case MUST returned (%s) (%s)',$this->must_attrs->join(','),$this->may_force->join(',')));
break; break;
case 'MAY': case 'MAY':
@ -176,20 +186,23 @@ final class ObjectClass extends Base {
$i = $this->parseList(++$i,$strings,$attrs); $i = $this->parseList(++$i,$strings,$attrs);
Log::debug(sprintf('parseList returned %d (%s)',$i,$attrs->join(','))); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('parseList returned %d (%s)',$i,$attrs->join(',')));
foreach ($attrs as $string) { foreach ($attrs as $string) {
$attr = new ObjectClassAttribute($string,$this->name); $attr = new ObjectClassAttribute($string,$this->name);
$this->may_attrs->push($attr); $this->may_attrs->push($attr);
} }
Log::debug(sprintf('- Case MAY returned (%s)',$this->may_attrs->join(','))); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case MAY returned (%s)',$this->may_attrs->join(',')));
break; break;
default: default:
if (preg_match('/[\d\.]+/i',$strings[$i]) && ($i === 1)) { if (preg_match('/[\d\.]+/i',$strings[$i]) && ($i === 1)) {
$this->oid = $strings[$i]; $this->oid = $strings[$i];
Log::debug(sprintf('- Case default returned (%s)',$this->oid)); if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case default returned (%s)',$this->oid));
} elseif ($strings[$i]) } elseif ($strings[$i])
Log::alert(sprintf('! Case default discovered a value NOT parsed (%s)',$strings[$i]),['line'=>$line]); Log::alert(sprintf('! Case default discovered a value NOT parsed (%s)',$strings[$i]),['line'=>$line]);

228
composer.lock generated
View File

@ -274,16 +274,16 @@
}, },
{ {
"name": "directorytree/ldaprecord", "name": "directorytree/ldaprecord",
"version": "v3.3.0", "version": "v3.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/DirectoryTree/LdapRecord.git", "url": "https://github.com/DirectoryTree/LdapRecord.git",
"reference": "17540a7740964418c1eba251d31369a276a48a76" "reference": "da3d5dff87d476a7ea9dd72d6a8972cfa907204c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/17540a7740964418c1eba251d31369a276a48a76", "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/da3d5dff87d476a7ea9dd72d6a8972cfa907204c",
"reference": "17540a7740964418c1eba251d31369a276a48a76", "reference": "da3d5dff87d476a7ea9dd72d6a8972cfa907204c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -346,7 +346,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-11-08T20:58:22+00:00" "time": "2024-01-09T12:49:35+00:00"
}, },
{ {
"name": "directorytree/ldaprecord-laravel", "name": "directorytree/ldaprecord-laravel",
@ -417,16 +417,16 @@
}, },
{ {
"name": "doctrine/inflector", "name": "doctrine/inflector",
"version": "2.0.8", "version": "2.0.9",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/inflector.git", "url": "https://github.com/doctrine/inflector.git",
"reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -488,7 +488,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/doctrine/inflector/issues", "issues": "https://github.com/doctrine/inflector/issues",
"source": "https://github.com/doctrine/inflector/tree/2.0.8" "source": "https://github.com/doctrine/inflector/tree/2.0.9"
}, },
"funding": [ "funding": [
{ {
@ -504,7 +504,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-06-16T13:40:37+00:00" "time": "2024-01-15T18:05:13+00:00"
}, },
{ {
"name": "doctrine/lexer", "name": "doctrine/lexer",
@ -1320,16 +1320,16 @@
}, },
{ {
"name": "laravel/framework", "name": "laravel/framework",
"version": "v10.39.0", "version": "v10.41.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/framework.git", "url": "https://github.com/laravel/framework.git",
"reference": "114926b07bfb5fbf2545c03aa2ce5c8c37be650c" "reference": "da31969bd35e6ee0bbcd9e876f88952dc754b012"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/114926b07bfb5fbf2545c03aa2ce5c8c37be650c", "url": "https://api.github.com/repos/laravel/framework/zipball/da31969bd35e6ee0bbcd9e876f88952dc754b012",
"reference": "114926b07bfb5fbf2545c03aa2ce5c8c37be650c", "reference": "da31969bd35e6ee0bbcd9e876f88952dc754b012",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1521,20 +1521,20 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2023-12-27T14:26:28+00:00" "time": "2024-01-16T15:23:58+00:00"
}, },
{ {
"name": "laravel/passport", "name": "laravel/passport",
"version": "v11.10.0", "version": "v11.10.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/passport.git", "url": "https://github.com/laravel/passport.git",
"reference": "966bc8e477d08c86a11dc4c5a86f85fa0abdb89b" "reference": "e1a651481cabff0ba174aaefbdc04a59e6a096ec"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/passport/zipball/966bc8e477d08c86a11dc4c5a86f85fa0abdb89b", "url": "https://api.github.com/repos/laravel/passport/zipball/e1a651481cabff0ba174aaefbdc04a59e6a096ec",
"reference": "966bc8e477d08c86a11dc4c5a86f85fa0abdb89b", "reference": "e1a651481cabff0ba174aaefbdc04a59e6a096ec",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1599,20 +1599,20 @@
"issues": "https://github.com/laravel/passport/issues", "issues": "https://github.com/laravel/passport/issues",
"source": "https://github.com/laravel/passport" "source": "https://github.com/laravel/passport"
}, },
"time": "2023-11-02T17:16:12+00:00" "time": "2024-01-10T14:44:24+00:00"
}, },
{ {
"name": "laravel/prompts", "name": "laravel/prompts",
"version": "v0.1.14", "version": "v0.1.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/prompts.git", "url": "https://github.com/laravel/prompts.git",
"reference": "2219fa9c4b944add1e825c3bdb8ecae8bc503bc6" "reference": "d814a27514d99b03c85aa42b22cfd946568636c1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/2219fa9c4b944add1e825c3bdb8ecae8bc503bc6", "url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1",
"reference": "2219fa9c4b944add1e825c3bdb8ecae8bc503bc6", "reference": "d814a27514d99b03c85aa42b22cfd946568636c1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1654,9 +1654,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/laravel/prompts/issues", "issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.1.14" "source": "https://github.com/laravel/prompts/tree/v0.1.15"
}, },
"time": "2023-12-27T04:18:09+00:00" "time": "2023-12-29T22:37:42+00:00"
}, },
{ {
"name": "laravel/serializable-closure", "name": "laravel/serializable-closure",
@ -1720,28 +1720,28 @@
}, },
{ {
"name": "laravel/ui", "name": "laravel/ui",
"version": "v4.3.0", "version": "v4.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/laravel/ui.git", "url": "https://github.com/laravel/ui.git",
"reference": "d166e09cdcb2e23836f694774cba77a32edb6007" "reference": "7335d7049b2cde345c029e9d2de839b80af62bc0"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/laravel/ui/zipball/d166e09cdcb2e23836f694774cba77a32edb6007", "url": "https://api.github.com/repos/laravel/ui/zipball/7335d7049b2cde345c029e9d2de839b80af62bc0",
"reference": "d166e09cdcb2e23836f694774cba77a32edb6007", "reference": "7335d7049b2cde345c029e9d2de839b80af62bc0",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/console": "^9.21|^10.0", "illuminate/console": "^9.21|^10.0|^11.0",
"illuminate/filesystem": "^9.21|^10.0", "illuminate/filesystem": "^9.21|^10.0|^11.0",
"illuminate/support": "^9.21|^10.0", "illuminate/support": "^9.21|^10.0|^11.0",
"illuminate/validation": "^9.21|^10.0", "illuminate/validation": "^9.21|^10.0|^11.0",
"php": "^8.0" "php": "^8.0"
}, },
"require-dev": { "require-dev": {
"orchestra/testbench": "^7.0|^8.0", "orchestra/testbench": "^7.0|^8.0|^9.0",
"phpunit/phpunit": "^9.3" "phpunit/phpunit": "^9.3|^10.4"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -1776,40 +1776,40 @@
"ui" "ui"
], ],
"support": { "support": {
"source": "https://github.com/laravel/ui/tree/v4.3.0" "source": "https://github.com/laravel/ui/tree/v4.4.0"
}, },
"time": "2023-12-19T14:46:09+00:00" "time": "2024-01-12T15:56:45+00:00"
}, },
{ {
"name": "lcobucci/clock", "name": "lcobucci/clock",
"version": "3.0.0", "version": "3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/lcobucci/clock.git", "url": "https://github.com/lcobucci/clock.git",
"reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc" "reference": "6f28b826ea01306b07980cb8320ab30b966cd715"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc", "url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715",
"reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc", "reference": "6f28b826ea01306b07980cb8320ab30b966cd715",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "~8.1.0 || ~8.2.0", "php": "~8.2.0 || ~8.3.0",
"psr/clock": "^1.0" "psr/clock": "^1.0"
}, },
"provide": { "provide": {
"psr/clock-implementation": "1.0" "psr/clock-implementation": "1.0"
}, },
"require-dev": { "require-dev": {
"infection/infection": "^0.26", "infection/infection": "^0.27",
"lcobucci/coding-standard": "^9.0", "lcobucci/coding-standard": "^11.0.0",
"phpstan/extension-installer": "^1.2", "phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^1.9.4", "phpstan/phpstan": "^1.10.25",
"phpstan/phpstan-deprecation-rules": "^1.1.1", "phpstan/phpstan-deprecation-rules": "^1.1.3",
"phpstan/phpstan-phpunit": "^1.3.2", "phpstan/phpstan-phpunit": "^1.3.13",
"phpstan/phpstan-strict-rules": "^1.4.4", "phpstan/phpstan-strict-rules": "^1.5.1",
"phpunit/phpunit": "^9.5.27" "phpunit/phpunit": "^10.2.3"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -1830,7 +1830,7 @@
"description": "Yet another clock abstraction", "description": "Yet another clock abstraction",
"support": { "support": {
"issues": "https://github.com/lcobucci/clock/issues", "issues": "https://github.com/lcobucci/clock/issues",
"source": "https://github.com/lcobucci/clock/tree/3.0.0" "source": "https://github.com/lcobucci/clock/tree/3.2.0"
}, },
"funding": [ "funding": [
{ {
@ -1842,7 +1842,7 @@
"type": "patreon" "type": "patreon"
} }
], ],
"time": "2022-12-19T15:00:24+00:00" "time": "2023-11-17T17:00:27+00:00"
}, },
{ {
"name": "lcobucci/jwt", "name": "lcobucci/jwt",
@ -2913,31 +2913,31 @@
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
"version": "v1.2.5", "version": "v1.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nette/schema.git", "url": "https://github.com/nette/schema.git",
"reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
"reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", "nette/utils": "^4.0",
"php": "7.1 - 8.3" "php": "8.1 - 8.3"
}, },
"require-dev": { "require-dev": {
"nette/tester": "^2.3 || ^2.4", "nette/tester": "^2.4",
"phpstan/phpstan-nette": "^1.0", "phpstan/phpstan-nette": "^1.0",
"tracy/tracy": "^2.7" "tracy/tracy": "^2.8"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.2-dev" "dev-master": "1.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -2969,22 +2969,22 @@
], ],
"support": { "support": {
"issues": "https://github.com/nette/schema/issues", "issues": "https://github.com/nette/schema/issues",
"source": "https://github.com/nette/schema/tree/v1.2.5" "source": "https://github.com/nette/schema/tree/v1.3.0"
}, },
"time": "2023-10-05T20:37:59+00:00" "time": "2023-12-11T11:54:22+00:00"
}, },
{ {
"name": "nette/utils", "name": "nette/utils",
"version": "v4.0.3", "version": "v4.0.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nette/utils.git", "url": "https://github.com/nette/utils.git",
"reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
"reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -3055,9 +3055,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nette/utils/issues", "issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v4.0.3" "source": "https://github.com/nette/utils/tree/v4.0.4"
}, },
"time": "2023-10-29T21:02:13+00:00" "time": "2024-01-17T16:50:36+00:00"
}, },
{ {
"name": "nunomaduro/termwind", "name": "nunomaduro/termwind",
@ -4258,20 +4258,20 @@
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
"version": "v6.4.0", "version": "v7.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/css-selector.git", "url": "https://github.com/symfony/css-selector.git",
"reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", "url": "https://api.github.com/repos/symfony/css-selector/zipball/bb51d46e53ef8d50d523f0c5faedba056a27943e",
"reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.2"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -4303,7 +4303,7 @@
"description": "Converts CSS selectors to XPath expressions", "description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/css-selector/tree/v6.4.0" "source": "https://github.com/symfony/css-selector/tree/v7.0.0"
}, },
"funding": [ "funding": [
{ {
@ -4319,7 +4319,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-10-31T08:40:20+00:00" "time": "2023-10-31T17:59:56+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@ -4465,24 +4465,24 @@
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v6.4.2", "version": "v7.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "e95216850555cd55e71b857eb9d6c2674124603a" "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e95216850555cd55e71b857eb9d6c2674124603a", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a",
"reference": "e95216850555cd55e71b857eb9d6c2674124603a", "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/event-dispatcher-contracts": "^2.5|^3" "symfony/event-dispatcher-contracts": "^2.5|^3"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<5.4", "symfony/dependency-injection": "<6.4",
"symfony/service-contracts": "<2.5" "symfony/service-contracts": "<2.5"
}, },
"provide": { "provide": {
@ -4491,13 +4491,13 @@
}, },
"require-dev": { "require-dev": {
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0", "symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/dependency-injection": "^6.4|^7.0",
"symfony/error-handler": "^5.4|^6.0|^7.0", "symfony/error-handler": "^6.4|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/expression-language": "^6.4|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/http-foundation": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3",
"symfony/stopwatch": "^5.4|^6.0|^7.0" "symfony/stopwatch": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -4525,7 +4525,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v6.4.2" "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.2"
}, },
"funding": [ "funding": [
{ {
@ -4541,7 +4541,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-27T22:16:42+00:00" "time": "2023-12-27T22:24:19+00:00"
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
@ -6092,20 +6092,20 @@
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
"version": "v6.4.2", "version": "v7.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/string.git", "url": "https://github.com/symfony/string.git",
"reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc" "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc", "url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5",
"reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc", "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=8.2",
"symfony/polyfill-ctype": "~1.8", "symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0",
@ -6115,11 +6115,11 @@
"symfony/translation-contracts": "<2.5" "symfony/translation-contracts": "<2.5"
}, },
"require-dev": { "require-dev": {
"symfony/error-handler": "^5.4|^6.0|^7.0", "symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^5.4|^6.0|^7.0", "symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.2|^7.0", "symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0", "symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^5.4|^6.0|^7.0" "symfony/var-exporter": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@ -6158,7 +6158,7 @@
"utf8" "utf8"
], ],
"support": { "support": {
"source": "https://github.com/symfony/string/tree/v6.4.2" "source": "https://github.com/symfony/string/tree/v7.0.2"
}, },
"funding": [ "funding": [
{ {
@ -6174,7 +6174,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-10T16:15:48+00:00" "time": "2023-12-10T16:54:46+00:00"
}, },
{ {
"name": "symfony/translation", "name": "symfony/translation",
@ -7844,16 +7844,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "10.5.5", "version": "10.5.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856" "reference": "08f4fa74d5fbfff1ef22abffee47aaedcaea227e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ed21115d505b4b4f7dc7b5651464e19a2c7f7856", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/08f4fa74d5fbfff1ef22abffee47aaedcaea227e",
"reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856", "reference": "08f4fa74d5fbfff1ef22abffee47aaedcaea227e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -7925,7 +7925,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy", "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.5" "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.8"
}, },
"funding": [ "funding": [
{ {
@ -7941,7 +7941,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-27T15:13:52+00:00" "time": "2024-01-19T07:07:27+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",
@ -9075,16 +9075,16 @@
}, },
{ {
"name": "spatie/laravel-ignition", "name": "spatie/laravel-ignition",
"version": "2.4.0", "version": "2.4.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/spatie/laravel-ignition.git", "url": "https://github.com/spatie/laravel-ignition.git",
"reference": "b9395ba48d3f30d42092cf6ceff75ed7256cd604" "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/b9395ba48d3f30d42092cf6ceff75ed7256cd604", "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/005e1e7b1232f3b22d7e7be3f602693efc7dba67",
"reference": "b9395ba48d3f30d42092cf6ceff75ed7256cd604", "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -9163,7 +9163,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2024-01-04T14:51:24+00:00" "time": "2024-01-12T13:14:58+00:00"
}, },
{ {
"name": "theseer/tokenizer", "name": "theseer/tokenizer",

View File

@ -1,10 +1,37 @@
FROM registry.dege.au/leenooks/php:8.1-fpm-ldap FROM dunglas/frankenphp:latest-php8.3-alpine
# Base
RUN apk add --no-cache bash
# Additional extensions:
RUN install-php-extensions \
ldap \
memcached
RUN curl -4 https://getcomposer.org/installer|php -- --install-dir=/usr/local/bin --filename=composer
ENV COMPOSER_HOME=/var/cache/composer
ENV SITE_USER=www-data
COPY docker/init-docker /sbin/init-docker
RUN chmod 550 /sbin/init-docker && chown ${SITE_USER}:0 /sbin/init-docker
COPY . /var/www/html/ COPY . /var/www/html/
WORKDIR /var/www/html
RUN mkdir -p ${COMPOSER_HOME} && \ RUN mkdir -p ${COMPOSER_HOME} \
([ -r auth.json ] && mv auth.json ${COMPOSER_HOME}) || true && \ && ([ -r auth.json ] && mv auth.json ${COMPOSER_HOME}) || true \
touch .composer.refresh && \ && touch .composer.refresh \
mv .env.example .env && \ && mv .env.example .env \
FORCE_PERMS=1 NGINX_START=FALSE /sbin/init && \ && FORCE_PERMS=1 /sbin/init-docker \
rm -rf ${COMPOSER_HOME}/* composer.lock && rm -rf ${COMPOSER_HOME}/* composer.lock
# Fix start up items
RUN sed -i -e 's/^{$CADDY_EXTRA_CONFIG}$/{$CADDY_EXTRA_CONFIG} /' /etc/caddy/Caddyfile
RUN chown ${SITE_USER} /config/caddy /data/caddy
USER ${SITE_USER}
# Control which port to open
ENV SERVER_NAME=:8080
EXPOSE 8080

172
docker/init-docker Executable file
View File

@ -0,0 +1,172 @@
#!/bin/bash
set -e
role=${CONTAINER_ROLE:-app}
env=${APP_ENV:-production}
php=${PHP_DIR:-/var/www/html}
composer=${COMPOSER_HOME:-/var/cache/composer}
SITE_USER=${SITE_USER:-www-data}
MEMCACHED_START=${MEMCACHED_START:-FALSE}
# To run a local queue, running jobs from the queue "hostname"
LOCAL_QUEUE=${LOCAL_QUEUE:-FALSE}
# Optional additional queues to run for
#LOCAL_QUEUES=
function mp() {
set +e
mountpoint -q $1
local mp=$?
set -e
echo ${mp}
}
function wait_for_db() {
# Wait for DB to be active
if [ -n "${DB_HOST}" -a -n "${DB_PORT}" ]; then
while ! wait-for-it -h ${DB_HOST} -p ${DB_PORT} -t 5 -q; do
echo "? Waiting for database at ${DB_HOST}:${DB_PORT}"
sleep 1;
done
echo "- DB is active on ${DB_HOST}:${DB_PORT}"
fi
}
# Run any container setup
[ -x /sbin/init-container ] && /sbin/init-container
# General Setup
if [ -x /usr/bin/memcached -a "${MEMCACHED_START}" == "TRUE" ]; then
echo "* Starting MEMCACHED..."
/usr/bin/memcached -d -P /run/memcached/memcached.pid -u memcached
fi
# Laravel Specific
if [ -r artisan -a -e ${php}/.env ]; then
echo "* Laravel Setup..."
mp=$(mp ${php})
echo " - [${php}] is a mount point [${mp}]"
# Only adjust perms if this is an external mountpoint
if [ -n "${FORCE_PERMS}" -o ${mp} -eq 0 ]; then
if [ -n "${FORCE_PERMS}" -o "${env}" != "local" -a -z "${SKIP_PERM}" ]; then
echo " - Setting Permissions..."
# Make sure our permissions are appropraite
find ${php} -type f -exec chmod 640 {} \;
find ${php} -type d -exec chmod 750 {} \;
find ${php}/public -type f -exec chmod 644 {} \;
find ${php}/public -type d -exec chmod 755 {} \;
chmod o+rx ${php}
chmod a+rx ${php}/artisan
chown -R ${SITE_USER}:www-data ${php}
#if [ "${SITE_USER}" -ne "www-data" ]; then
# echo " - Extended Permissions for ${SITE_USER}..."
# chown -R www-data:www-data ${php}/storage ${php}/bootstrap ${php}/composer.*
# [ -e ${php}/vendor ] && chown -R www-data:www-data ${php}/vendor
#fi
fi
fi
# See if we need to refresh our dependancies (only need if web dir is externally mounted)
if [[ -r composer.json && ( -e .composer.refresh || ! -d vendor ) ]]; then
echo " - Composer installing dependancies..."
rm -f ${php}/bootstrap/cache/*.php
if [ "${env}" != "local" ]; then
NODEV="--no-dev"
fi
mp=$(mp ${composer})
echo " - [${composer}] is a mount point [${mp}]"
if [ -n "${FORCE_PERMS}" -o ${mp} -eq 0 ]; then
[ -n "${FORCE_PERMS}" -o "${env}" != "local" -a -z "${SKIP_PERM}" ] && chown -R ${SITE_USER}:www-data ${composer}
[ ! -d ${php}/vendor ] && mkdir -m 750 ${php}/vendor && chown ${SITE_USER}:www-data ${php}/vendor
[ -n "${FORCE_PERMS}" -o "${env}" != "local" -a -z "${SKIP_PERM}" ] && chmod g+w ${php}
fi
su ${SITE_USER} -s /bin/sh -c "composer install --optimize-autoloader ${NODEV}" && ( test -e .composer.refresh && rm -f .composer.refresh )
[ -n "${FORCE_PERMS}" -o "${env}" != "local" -a -z "${SKIP_PERM}" ] && [ ${mp} -eq 0 ] && chmod g-w ${php}
fi
# We only check for non mount points, in case this container has the app inside
mp=$(mp ${php})
if [ ${mp} -eq 1 ]; then
echo " - Caching configuration..."
su ${SITE_USER} -s /bin/sh -c "(php artisan optimize)"
fi
if [ "${role}" = "app" ]; then
if [ "${env}" != "local" ]; then
if [ -z "${IGNORE_MIGRATION}" ]; then
if [ -r .migrate ]; then
echo " - Running migration..."
# If DB_HOST not set, source the env file
[ -z "${DB_HOST}" -a -r .env ] && . .env
wait_for_db
su ${SITE_USER} -s /bin/sh -c "php artisan migrate" && rm -f .migrate
fi
else
[ -r .migrate ] && echo "! NOTE: Migration ignored due to IGNORE_MIGRATION"
fi
# If passport is installed
if [ -d ${php}/vendor/laravel/passport ]; then
echo " - Generating OAUTH keys ..."
set +e
su ${SITE_USER} -s /bin/sh -c "php artisan passport:keys"
set -e
fi
fi
if [ "${LOCAL_QUEUE}" = "TRUE" ]; then
echo " - Starting local queue for [$(hostname)${LOCAL_QUEUES:+,${LOCAL_QUEUES}}] with job timeout of [${WORK_TIMEOUT:-90}], trying [${WORK_TRIES:-1}] times..."
su ${SITE_USER} -s /bin/sh -c "
(while true; do php ${PHP_OPTIONS} artisan queue:work --verbose --tries=${WORK_TRIES:-1} --timeout=${WORK_TIMEOUT:-90} --queue=$(hostname)${LOCAL_QUEUES:+,${LOCAL_QUEUES}} ${WORK_MEMORY:+--memory=${WORK_MEMORY}} ${WORK_ONCE:+--once}; done) &
"
fi
set +e
[ -x init-php.sh ] && su ${SITE_USER} -s /bin/sh "init-php.sh" &
exec /usr/local/bin/docker-php-entrypoint "$@"
elif [ "$role" = "queue" ]; then
QUEUE_CMD=work
if [ "${env}" == "local" ]; then
QUEUE_CMD=listen
fi
echo " - Running the queue..."
# We'll delay starting in case the app is caching
sleep 15
wait_for_db
su ${SITE_USER} -s /bin/sh -c "
while true; do
php ${PHP_OPTIONS} artisan queue:${QUEUE_CMD} --verbose --tries=${WORK_TRIES:-1} --timeout=${WORK_TIMEOUT:-90} ${WORK_QUEUES:+--queue=${WORK_QUEUES}} ${WORK_MEMORY:+--memory=${WORK_MEMORY}} ${WORK_ONCE:+--once}
done
"
elif [ "$role" = "scheduler" ]; then
echo " - Running the scheduler..."
# We'll delay starting in case the app is caching
sleep 15
su ${SITE_USER} -s /bin/sh -c "
while true; do
php ${PHP_OPTIONS} artisan schedule:work --verbose --no-interaction
done
"
fi
else
echo "? NO container role \"${role}\", AND/OR no laravel install, just starting php-fpm"
exec /usr/local/bin/docker-php-entrypoint "$@"
fi

View File

@ -1,6 +1,7 @@
dn: olcDatabase=mdb,cn=config dn: olcDatabase=mdb,cn=config
changetype: add
objectClass: olcDatabaseConfig objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDbDirectory: /var/lib/openldap/data
olcDatabase: mdb olcDatabase: mdb
olcLastMod: TRUE olcLastMod: TRUE
olcMonitoring: TRUE olcMonitoring: TRUE

View File

@ -1,6 +1,7 @@
dn: olcDatabase=mdb,cn=config dn: olcDatabase=mdb,cn=config
changetype: add
objectClass: olcDatabaseConfig objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDbDirectory: /var/lib/openldap/data
olcDatabase: mdb olcDatabase: mdb
olcLastMod: TRUE olcLastMod: TRUE
olcMonitoring: TRUE olcMonitoring: TRUE

View File

@ -1,6 +1,7 @@
dn: olcDatabase=mdb,cn=config dn: olcDatabase=mdb,cn=config
changetype: add
objectClass: olcDatabaseConfig objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDbDirectory: /var/lib/openldap/data
olcDatabase: mdb olcDatabase: mdb
olcLastMod: TRUE olcLastMod: TRUE
olcMonitoring: TRUE olcMonitoring: TRUE

View File

@ -1,6 +1,7 @@
dn: olcDatabase=mdb,cn=config dn: olcDatabase=mdb,cn=config
changetype: add
objectClass: olcDatabaseConfig objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDbDirectory: /var/lib/openldap/data
olcDatabase: mdb olcDatabase: mdb
olcLastMod: TRUE olcLastMod: TRUE
olcMonitoring: TRUE olcMonitoring: TRUE

View File

@ -0,0 +1,12 @@
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDbDirectory: /var/lib/openldap/data
olcDatabase: mdb
olcLastMod: TRUE
olcMonitoring: TRUE
olcSuffix: dc=Test
olcAccess: to dn.base="" by dn="cn=admin,dc=Test" write by * read
olcAccess: to * by dn="cn=admin,dc=Test" write by dn="cn=admin,dc=Test" write by * read
olcRootDN: cn=admin,dc=Test
olcRootPW: {SSHA}UCTtlcHOSqGCFuKtOCJAU8k8icNpVGiw

View File

@ -1,11 +0,0 @@
##
## Used for storing the next gid and next uid in the the directory
##
objectclass ( 1.3.6.1.4.1.7165.1.2.2.3 NAME 'uidPool' SUP top AUXILIARY
DESC 'Pool for allocating UNIX uids'
MUST ( uidNumber $ cn ) )
objectclass ( 1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' SUP top AUXILIARY
DESC 'Pool for allocating UNIX gids'
MUST ( gidNumber $ cn ) )

View File

@ -0,0 +1,4 @@
# Base DN
dn: c=AU
c: AU
objectclass: country

View File

@ -1,11 +1,4 @@
# LDIF Export for dc=example,dc=com # LDIF Export for dc=example,dc=com
# Server: C5: OpenLDAP 2.3.27: config (c5dev.leenooks.vpn)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 15
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on April 26, 2011 9:25 pm
# Version: 1.2.0.5
#version: 1 #version: 1
@ -146,3 +139,64 @@ c: US
description: United States of America description: United States of America
objectclass: country objectclass: country
objectclass: top objectclass: top
# Entry 16: c=JP,dc=example,dc=com
dn: c=JP,dc=example,dc=com
c: JP
description: Japan
description;lang-jp: 日本
objectclass: country
objectclass: top
#
dn:: b3U95Za25qWt6YOoLGM9SlAsZGM9ZXhhbXBsZSxkYz1jb20=
# dn:: ou=<JapaneseOU>,c=JP
objectclass: top
objectclass: organizationalUnit
ou:: 5Za25qWt6YOo
# ou:: <JapaneseOU>
ou;lang-ja:: 5Za25qWt6YOo
# ou;lang-ja:: <JapaneseOU>
#ou;lang-ja;x-phonetic:: 44GI44GE44GO44KH44GG44G2
# ou;lang-ja:: <JapaneseOU_in_phonetic_representation>
ou;lang-en: Sales
description: Japanese office
#
dn:: dWlkPXJvZ2FzYXdhcmEsb3U95Za25qWt6YOoLGM9SlAsZGM9ZXhhbXBsZSxkYz1jb20=
# dn:: uid=<uid>,ou=<JapaneseOU>,c=JP
userpassword: {SHA}O3HSv1MusyL4kTjP+HKI5uxuNoM=
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: rogasawara
mail: rogasawara@airius.co.jp
givenname;lang-ja:: 44Ot44OJ44OL44O8
# givenname;lang-ja:: <JapaneseGivenname>
sn;lang-ja:: 5bCP56yg5Y6f
# sn;lang-ja:: <JapaneseSn>
cn;lang-ja:: 5bCP56yg5Y6fIOODreODieODi+ODvA==
# cn;lang-ja:: <JapaneseCn>
title;lang-ja:: 5Za25qWt6YOoIOmDqOmVtw==
# title;lang-ja:: <JapaneseTitle>
preferredlanguage: ja
givenname:: 44Ot44OJ44OL44O8
# givenname:: <JapaneseGivenname>
sn:: 5bCP56yg5Y6f
# sn:: <JapaneseSn>
cn:: 5bCP56yg5Y6fIOODreODieODi+ODvA==
# cn:: <JapaneseCn>
title:: 5Za25qWt6YOoIOmDqOmVtw==
# title:: <JapaneseTitle>
#givenname;lang-ja;x-phonetic:: 44KN44Gp44Gr44O8
# givenname;lang-ja;x-phonetic:: <JapaneseGivenname_in_phonetic_representation_kana>
#sn;lang-ja;x-phonetic:: 44GK44GM44GV44KP44KJ
# sn;lang-ja;x-phonetic:: <JapaneseSn_in_phonetic_representation_kana>
#cn;lang-ja;x-phonetic:: 44GK44GM44GV44KP44KJIOOCjeOBqeOBq+ODvA==
# cn;lang-ja;x-phonetic:: <JapaneseCn_in_phonetic_representation_kana>
#title;lang-ja;x-phonetic:: 44GI44GE44GO44KH44GG44G2IOOBtuOBoeOCh+OBhg==
# title;lang-ja;x-phonetic:: <JapaneseTitle_in_phonetic_representation_kana>
givenname;lang-en: Rodney
sn;lang-en: Ogasawara
cn;lang-en: Rodney Ogasawara

View File

@ -1,11 +1,4 @@
# LDIF Export for dc=example.com # LDIF Export for dc=example.com
# Server: C5: OpenLDAP 2.3.27: config (c5dev.leenooks.vpn)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 23
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on April 26, 2011 9:13 pm
# Version: 1.2.0.5
#version: 1 #version: 1

View File

@ -1,11 +1,4 @@
# LDIF Export for o=Flintstones # LDIF Export for o=Flintstones
# Server: C5: OpenLDAP 2.3.27: config (c5dev.leenooks.vpn)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 12
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on April 26, 2011 9:03 pm
# Version: 1.2.0.5
#version: 1 #version: 1

View File

@ -1,11 +1,4 @@
# LDIF Export for o=Simpsons # LDIF Export for o=Simpsons
# Server: C5: OpenLDAP 2.3.27: config (c5dev.leenooks.vpn)
# Search Scope: sub
# Search Filter: (objectClass=*)
# Total Entries: 11
#
# Generated by phpLDAPadmin (http://phpldapadmin.sourceforge.net) on April 26, 2011 9:05 pm
# Version: 1.2.0.5
#version: 1 #version: 1

View File

@ -1,135 +1,135 @@
# LDIF Export for o=Test # LDIF Export for dc=Test
#version: 1 #version: 1
dn: o=Test #dn: dc=Test
o: Test #o: Test
objectclass: organization #objectclass: organization
dn: cn=user,o=Test dn: cn=user,dc=Test
cn: user cn: user
sn: Doe sn: Doe
objectclass: inetOrgPerson objectclass: inetOrgPerson
objectclass: top objectclass: top
dn: ou=Bad DNs,o=Test dn: ou=Bad DNs,dc=Test
objectclass: organizationalUnit objectclass: organizationalUnit
ou: Bad DNs ou: Bad DNs
#dn: c=double plus ++,ou=Bad DNs,o=Test #dn: c=double plus ++,ou=Bad DNs,dc=Test
#c: double plus ++ #c: double plus ++
#objectclass: country #objectclass: country
#dn: c=end dollar$,ou=Bad DNs,o=Test #dn: c=end dollar$,ou=Bad DNs,dc=Test
#c: end dollar$ #c: end dollar$
#objectclass: country #objectclass: country
dn: sn=sign@at+uid=multi-mixed,ou=Bad DNs,o=Test dn: sn=sign@at+uid=multi-mixed,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: sign@at sn: sign@at
uid: multi-mixed uid: multi-mixed
dn: uid=angle\3Cleft,ou=Bad DNs,o=Test dn: uid=angle\3Cleft,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: angle<left uid: angle<left
dn: uid=angle\3Eright,ou=Bad DNs,o=Test dn: uid=angle\3Eright,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: angle>right uid: angle>right
dn: uid=brace(left,ou=Bad DNs,o=Test dn: uid=brace(left,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: brace(left uid: brace(left
dn: uid=brace)right,ou=Bad DNs,o=Test dn: uid=brace)right,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: brace)right uid: brace)right
dn: uid=colon:full,ou=Bad DNs,o=Test dn: uid=colon:full,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: colon:full uid: colon:full
dn: uid=colon\3Bsemi,ou=Bad DNs,o=Test dn: uid=colon\3Bsemi,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: colon;semi uid: colon;semi
#dn: uid=multi+uid=sign@at,ou=Bad DNs,o=Test #dn: uid=multi+uid=sign@at,ou=Bad DNs,dc=Test
#cn: Test #cn: Test
#objectclass: inetOrgPerson #objectclass: inetOrgPerson
#sn: Test #sn: Test
#uid: multi #uid: multi
#uid: sign@at #uid: sign@at
#dn: uid=multi+uid=value,ou=Bad DNs,o=Test #dn: uid=multi+uid=value,ou=Bad DNs,dc=Test
#cn: Test #cn: Test
#objectclass: inetOrgPerson #objectclass: inetOrgPerson
#sn: Test #sn: Test
#uid: multi #uid: multi
#uid: value #uid: value
dn: uid=quote\22double,ou=Bad DNs,o=Test dn: uid=quote\22double,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: quote"double uid: quote"double
dn: uid=quote'single,ou=Bad DNs,o=Test dn: uid=quote'single,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: quote'single uid: quote'single
dn: uid=sign%percent,ou=Bad DNs,o=Test dn: uid=sign%percent,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: sign%percent uid: sign%percent
dn: uid=sign\2Bplus,ou=Bad DNs,o=Test dn: uid=sign\2Bplus,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: sign+plus uid: sign+plus
dn: uid=sign\2Ccomma,ou=Bad DNs,o=Test dn: uid=sign\2Ccomma,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: sign,comma uid: sign,comma
dn: uid=sign\3Bsemicolon@at,ou=Bad DNs,o=Test dn: uid=sign\3Bsemicolon@at,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: sign;semicolon@at uid: sign;semicolon@at
dn: uid=sign\3Dequal,ou=Bad DNs,o=Test dn: uid=sign\3Dequal,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: sign=equal uid: sign=equal
dn: uid=sign?question,ou=Bad DNs,o=Test dn: uid=sign?question,ou=Bad DNs,dc=Test
cn: Test cn: Test
objectclass: inetOrgPerson objectclass: inetOrgPerson
sn: Test sn: Test
uid: sign?question uid: sign?question
dn: uid=sign@at,ou=Bad DNs,o=Test #dn: uid=sign@at,ou=Bad DNs,dc=Test
cn: Test #cn: Test
objectclass: inetOrgPerson #objectclass: inetOrgPerson
sn: Test #sn: Test
uid: sign@at #uid: sign@at

View File

@ -1,18 +1,18 @@
# This is a Test-File for characters / encoding # This is a Test-File for characters / encoding
# 1. Change the # 1. Change the
# ,o=Test # ,dc=Test
# to avalue for your organisation # to avalue for your organisation
# 2. Import it with phpldapadmin # 2. Import it with phpldapadmin
# #
# pla-i18n, example.com # pla-i18n, example.com
# #
dn: ou=pla-i18n,o=Test dn: ou=pla-i18n,dc=Test
ou: pla-i18n ou: pla-i18n
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
# pl, pla-i18n, example.com # pl, pla-i18n, example.com
dn: ou=pl,ou=pla-i18n,o=Test dn: ou=pl,ou=pla-i18n,dc=Test
description:: IGRvcMOza2k= description:: IGRvcMOza2k=
description:: xITFu8WaxbnEhsWDxYHDk8SYIMSFxbzFm8W6xIfFhMWCw7PEmQ== description:: xITFu8WaxbnEhsWDxYHDk8SYIMSFxbzFm8W6xIfFhMWCw7PEmQ==
description:: V3NrYXrDs3drYQ== description:: V3NrYXrDs3drYQ==
@ -21,7 +21,7 @@ objectClass: organizationalUnit
ou: pl ou: pl
# ru, pla-i18n, example.com # ru, pla-i18n, example.com
dn: ou=ru,ou=pla-i18n,o=Test dn: ou=ru,ou=pla-i18n,dc=Test
description:: 0LfQstGD0YfQuNGCINC/0L7QtNC+0LHQvdC+ description:: 0LfQstGD0YfQuNGCINC/0L7QtNC+0LHQvdC+
description:: 0J/RgNC+0YHRgtCw0Y8g0YTQvtGA0LzQsCDQv9C+0LjRgdC6 description:: 0J/RgNC+0YHRgtCw0Y8g0YTQvtGA0LzQsCDQv9C+0LjRgdC6
objectClass: top objectClass: top
@ -29,21 +29,21 @@ objectClass: organizationalUnit
ou: ru ou: ru
# jp, pla-i18n, example.com # jp, pla-i18n, example.com
dn: ou=jp,ou=pla-i18n,o=Test dn: ou=jp,ou=pla-i18n,dc=Test
ou: jp ou: jp
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
description:: SVNPLTIwMjItSlDjga7lpJrlm73nsY3oqIDoqp7jgbjjga7mi6HlvLXmgKc= description:: SVNPLTIwMjItSlDjga7lpJrlm73nsY3oqIDoqp7jgbjjga7mi6HlvLXmgKc=
# pt-br, pla-i18n, example.com # pt-br, pla-i18n, example.com
dn: ou=pt-br,ou=pla-i18n,o=Test dn: ou=pt-br,ou=pla-i18n,dc=Test
ou: pt-br ou: pt-br
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
description:: VmVyIGFzIHJlcXVpc2nDp8O1ZXMgZW0gYWJlcnRv description:: VmVyIGFzIHJlcXVpc2nDp8O1ZXMgZW0gYWJlcnRv
# de, pla-i18n, example.com # de, pla-i18n, example.com
dn: ou=de,ou=pla-i18n,o=Test dn: ou=de,ou=pla-i18n,dc=Test
ou: de ou: de
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
@ -51,7 +51,7 @@ description:: U29uZGVyemVpY2hlbiDDtsOkw7zDnyDDlsOEw5w=
description:: w5bDliDDnMOcIMOEw4Q= description:: w5bDliDDnMOcIMOEw4Q=
# sv, pla-i18n, example.com # sv, pla-i18n, example.com
dn: ou=sv,ou=pla-i18n,o=Test dn: ou=sv,ou=pla-i18n,dc=Test
ou: sv ou: sv
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit
@ -59,7 +59,7 @@ description:: U8O2a29tZsOlbmc=
description:: bMOldGVyIHNvbQ== description:: bMOldGVyIHNvbQ==
# ca, pla-i18n, example.com # ca, pla-i18n, example.com
dn: ou=ca,ou=pla-i18n,o=Test dn: ou=ca,ou=pla-i18n,dc=Test
ou: ca ou: ca
objectClass: top objectClass: top
objectClass: organizationalUnit objectClass: organizationalUnit

View File

@ -3,9 +3,9 @@
#version: 1 #version: 1
# This entry already exists as a result of configuring the LDAP server # This entry already exists as a result of configuring the LDAP server
#dn: dc=Test dn: dc=Test
#dc: Test dc: Test
#objectclass: dNSDomain objectclass: dNSDomain
dn: cn=AdminUser,dc=Test dn: cn=AdminUser,dc=Test
cn: Admin User cn: Admin User

View File

@ -1,11 +0,0 @@
dn: olcDatabase=mdb,cn=config
changetype: add
objectClass: olcDatabaseConfig
olcDatabase: mdb
olcLastMod: TRUE
olcMonitoring: TRUE
olcSuffix: o=Test
olcAccess: to dn.base="" by dn="cn=admin,dc=Test" write by * read
olcAccess: to * by dn="cn=admin,o=Test" write by dn="cn=admin,dc=Test" write by * read
olcRootDN: cn=admin,o=Test
olcRootPW: {SSHA}e8xGdXmL+mSD3u/389YHeM+dpqFCUSyq

View File

@ -1,69 +1,61 @@
attributetype ( 1.3.6.1.4.1.15953.9.1.1 dn: cn=sudorole,cn=schema,cn=config
NAME 'sudoUser' objectClass: olcSchemaConfig
cn: sudorole
olcAttributeTypes: {0}( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser'
DESC 'User(s) who may run sudo' DESC 'User(s) who may run sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {1}( 1.3.6.1.4.1.15953.9.1.2
attributetype ( 1.3.6.1.4.1.15953.9.1.2
NAME 'sudoHost' NAME 'sudoHost'
DESC 'Host(s) who may run sudo' DESC 'Host(s) who may run sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {2}( 1.3.6.1.4.1.15953.9.1.3
attributetype ( 1.3.6.1.4.1.15953.9.1.3
NAME 'sudoCommand' NAME 'sudoCommand'
DESC 'Command(s) to be executed by sudo' DESC 'Command(s) to be executed by sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {3}( 1.3.6.1.4.1.15953.9.1.4
attributetype ( 1.3.6.1.4.1.15953.9.1.4
NAME 'sudoRunAs' NAME 'sudoRunAs'
DESC 'User(s) impersonated by sudo' DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {4}( 1.3.6.1.4.1.15953.9.1.5
attributetype ( 1.3.6.1.4.1.15953.9.1.5
NAME 'sudoOption' NAME 'sudoOption'
DESC 'Options(s) followed by sudo' DESC 'Options(s) followed by sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {5}( 1.3.6.1.4.1.15953.9.1.6
attributetype ( 1.3.6.1.4.1.15953.9.1.6
NAME 'sudoRunAsUser' NAME 'sudoRunAsUser'
DESC 'User(s) impersonated by sudo' DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {6}( 1.3.6.1.4.1.15953.9.1.7
attributetype ( 1.3.6.1.4.1.15953.9.1.7
NAME 'sudoRunAsGroup' NAME 'sudoRunAsGroup'
DESC 'Group(s) impersonated by sudo' DESC 'Group(s) impersonated by sudo'
EQUALITY caseExactIA5Match EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
olcAttributeTypes: {7}( 1.3.6.1.4.1.15953.9.1.8
attributetype ( 1.3.6.1.4.1.15953.9.1.8
NAME 'sudoNotBefore' NAME 'sudoNotBefore'
DESC 'Start of time interval for which the entry is valid' DESC 'Start of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
olcAttributeTypes: {8}( 1.3.6.1.4.1.15953.9.1.9
attributetype ( 1.3.6.1.4.1.15953.9.1.9
NAME 'sudoNotAfter' NAME 'sudoNotAfter'
DESC 'End of time interval for which the entry is valid' DESC 'End of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
olcAttributeTypes: {9} ( 1.3.6.1.4.1.15953.9.1.10
attributeTypes ( 1.3.6.1.4.1.15953.9.1.10
NAME 'sudoOrder' NAME 'sudoOrder'
DESC 'an integer to order the sudoRole entries' DESC 'an integer to order the sudoRole entries'
EQUALITY integerMatch EQUALITY integerMatch
ORDERING integerOrderingMatch ORDERING integerOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
olcObjectClasses: {0} ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL
objectclass ( 1.3.6.1.4.1.15953.9.2.1 NAME 'sudoRole' SUP top STRUCTURAL
DESC 'Sudoer Entries' DESC 'Sudoer Entries'
MUST ( cn ) MUST ( cn )
MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $ sudoOrder $ description ) ) MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $ sudoOrder $ description ) )

View File

@ -0,0 +1,12 @@
##
## Used for storing the next gid and next uid in the the directory
##
dn: cn=uidpool,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: uidpool
olcObjectClasses: {0}( 1.3.6.1.4.1.7165.1.2.2.3 NAME 'uidPool' SUP top AUXILIARY
DESC 'Pool for allocating UNIX uids'
MUST ( uidNumber $ cn ) )
olcObjectClasses: {1}( 1.3.6.1.4.1.7165.1.2.2.4 NAME 'gidPool' SUP top AUXILIARY
DESC 'Pool for allocating UNIX gids'
MUST ( gidNumber $ cn ) )