Compare commits

..

No commits in common. "3f2cd5688422c4ff5ad7ef4f8d9de540553e2e52" and "14f895a9642c75db1734303fe61fceca8271c756" have entirely different histories.

28 changed files with 374 additions and 695 deletions

View File

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

View File

@ -1,144 +0,0 @@
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 }}

20
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,20 @@
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

27
.gitlab-docker-x86_64.yml Normal file
View File

@ -0,0 +1,27 @@
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

51
.gitlab-test.yml Normal file
View File

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

View File

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

View File

@ -53,8 +53,7 @@ final class ObjectClass extends Base {
{
parent::__construct($line);
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('Parsing ObjectClass [%s]',$line));
Log::debug(sprintf('Parsing ObjectClass [%s]',$line));
$strings = preg_split('/[\s,]+/',$line,-1,PREG_SPLIT_DELIM_CAPTURE);
@ -94,8 +93,7 @@ final class ObjectClass extends Base {
$this->name = preg_replace("/^\'(.*)\'$/",'$1',$this->name);
if (static::DEBUG_VERBOSE)
Log::debug(sprintf(sprintf('- Case NAME returned (%s)',$this->name)));
Log::debug(sprintf(sprintf('- Case NAME returned (%s)',$this->name)));
break;
case 'DESC':
@ -106,15 +104,13 @@ final class ObjectClass extends Base {
$this->description = preg_replace("/^\'(.*)\'$/",'$1',$this->description);
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case DESC returned (%s)',$this->description));
Log::debug(sprintf('- Case DESC returned (%s)',$this->description));
break;
case 'OBSOLETE':
$this->is_obsolete = TRUE;
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case OBSOLETE returned (%s)',$this->is_obsolete));
Log::debug(sprintf('- Case OBSOLETE returned (%s)',$this->is_obsolete));
break;
case 'SUP':
@ -133,29 +129,25 @@ final class ObjectClass extends Base {
} while (! preg_match('/\)+\)?/',$strings[$i+1]));
}
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case SUP returned (%s)',$this->sup_classes->join(',')));
Log::debug(sprintf('- Case SUP returned (%s)',$this->sup_classes->join(',')));
break;
case 'ABSTRACT':
$this->type = self::OC_ABSTRACT;
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case ABSTRACT returned (%s)',$this->type));
Log::debug(sprintf('- Case ABSTRACT returned (%s)',$this->type));
break;
case 'STRUCTURAL':
$this->type = self::OC_STRUCTURAL;
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case STRUCTURAL returned (%s)',$this->type));
Log::debug(sprintf('- Case STRUCTURAL returned (%s)',$this->type));
break;
case 'AUXILIARY':
$this->type = self::OC_AUXILIARY;
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case AUXILIARY returned (%s)',$this->type));
Log::debug(sprintf('- Case AUXILIARY returned (%s)',$this->type));
break;
case 'MUST':
@ -163,8 +155,7 @@ final class ObjectClass extends Base {
$i = $this->parseList(++$i,$strings,$attrs);
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('= parseList returned %d (%s)',$i,$attrs->join(',')));
Log::debug(sprintf('= parseList returned %d (%s)',$i,$attrs->join(',')));
foreach ($attrs as $string) {
$attr = new ObjectClassAttribute($string,$this->name);
@ -177,8 +168,7 @@ final class ObjectClass extends Base {
$this->must_attrs->push($attr);
}
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case MUST returned (%s) (%s)',$this->must_attrs->join(','),$this->may_force->join(',')));
Log::debug(sprintf('- Case MUST returned (%s) (%s)',$this->must_attrs->join(','),$this->may_force->join(',')));
break;
case 'MAY':
@ -186,23 +176,20 @@ final class ObjectClass extends Base {
$i = $this->parseList(++$i,$strings,$attrs);
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('parseList returned %d (%s)',$i,$attrs->join(',')));
Log::debug(sprintf('parseList returned %d (%s)',$i,$attrs->join(',')));
foreach ($attrs as $string) {
$attr = new ObjectClassAttribute($string,$this->name);
$this->may_attrs->push($attr);
}
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case MAY returned (%s)',$this->may_attrs->join(',')));
Log::debug(sprintf('- Case MAY returned (%s)',$this->may_attrs->join(',')));
break;
default:
if (preg_match('/[\d\.]+/i',$strings[$i]) && ($i === 1)) {
$this->oid = $strings[$i];
if (static::DEBUG_VERBOSE)
Log::debug(sprintf('- Case default returned (%s)',$this->oid));
Log::debug(sprintf('- Case default returned (%s)',$this->oid));
} elseif ($strings[$i])
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",
"version": "v3.3.1",
"version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/DirectoryTree/LdapRecord.git",
"reference": "da3d5dff87d476a7ea9dd72d6a8972cfa907204c"
"reference": "17540a7740964418c1eba251d31369a276a48a76"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/da3d5dff87d476a7ea9dd72d6a8972cfa907204c",
"reference": "da3d5dff87d476a7ea9dd72d6a8972cfa907204c",
"url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/17540a7740964418c1eba251d31369a276a48a76",
"reference": "17540a7740964418c1eba251d31369a276a48a76",
"shasum": ""
},
"require": {
@ -346,7 +346,7 @@
"type": "github"
}
],
"time": "2024-01-09T12:49:35+00:00"
"time": "2023-11-08T20:58:22+00:00"
},
{
"name": "directorytree/ldaprecord-laravel",
@ -417,16 +417,16 @@
},
{
"name": "doctrine/inflector",
"version": "2.0.9",
"version": "2.0.8",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65"
"reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
"reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff",
"shasum": ""
},
"require": {
@ -488,7 +488,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
"source": "https://github.com/doctrine/inflector/tree/2.0.9"
"source": "https://github.com/doctrine/inflector/tree/2.0.8"
},
"funding": [
{
@ -504,7 +504,7 @@
"type": "tidelift"
}
],
"time": "2024-01-15T18:05:13+00:00"
"time": "2023-06-16T13:40:37+00:00"
},
{
"name": "doctrine/lexer",
@ -1320,16 +1320,16 @@
},
{
"name": "laravel/framework",
"version": "v10.41.0",
"version": "v10.39.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "da31969bd35e6ee0bbcd9e876f88952dc754b012"
"reference": "114926b07bfb5fbf2545c03aa2ce5c8c37be650c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/da31969bd35e6ee0bbcd9e876f88952dc754b012",
"reference": "da31969bd35e6ee0bbcd9e876f88952dc754b012",
"url": "https://api.github.com/repos/laravel/framework/zipball/114926b07bfb5fbf2545c03aa2ce5c8c37be650c",
"reference": "114926b07bfb5fbf2545c03aa2ce5c8c37be650c",
"shasum": ""
},
"require": {
@ -1521,20 +1521,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2024-01-16T15:23:58+00:00"
"time": "2023-12-27T14:26:28+00:00"
},
{
"name": "laravel/passport",
"version": "v11.10.1",
"version": "v11.10.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/passport.git",
"reference": "e1a651481cabff0ba174aaefbdc04a59e6a096ec"
"reference": "966bc8e477d08c86a11dc4c5a86f85fa0abdb89b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/passport/zipball/e1a651481cabff0ba174aaefbdc04a59e6a096ec",
"reference": "e1a651481cabff0ba174aaefbdc04a59e6a096ec",
"url": "https://api.github.com/repos/laravel/passport/zipball/966bc8e477d08c86a11dc4c5a86f85fa0abdb89b",
"reference": "966bc8e477d08c86a11dc4c5a86f85fa0abdb89b",
"shasum": ""
},
"require": {
@ -1599,20 +1599,20 @@
"issues": "https://github.com/laravel/passport/issues",
"source": "https://github.com/laravel/passport"
},
"time": "2024-01-10T14:44:24+00:00"
"time": "2023-11-02T17:16:12+00:00"
},
{
"name": "laravel/prompts",
"version": "v0.1.15",
"version": "v0.1.14",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
"reference": "d814a27514d99b03c85aa42b22cfd946568636c1"
"reference": "2219fa9c4b944add1e825c3bdb8ecae8bc503bc6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1",
"reference": "d814a27514d99b03c85aa42b22cfd946568636c1",
"url": "https://api.github.com/repos/laravel/prompts/zipball/2219fa9c4b944add1e825c3bdb8ecae8bc503bc6",
"reference": "2219fa9c4b944add1e825c3bdb8ecae8bc503bc6",
"shasum": ""
},
"require": {
@ -1654,9 +1654,9 @@
],
"support": {
"issues": "https://github.com/laravel/prompts/issues",
"source": "https://github.com/laravel/prompts/tree/v0.1.15"
"source": "https://github.com/laravel/prompts/tree/v0.1.14"
},
"time": "2023-12-29T22:37:42+00:00"
"time": "2023-12-27T04:18:09+00:00"
},
{
"name": "laravel/serializable-closure",
@ -1720,28 +1720,28 @@
},
{
"name": "laravel/ui",
"version": "v4.4.0",
"version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/ui.git",
"reference": "7335d7049b2cde345c029e9d2de839b80af62bc0"
"reference": "d166e09cdcb2e23836f694774cba77a32edb6007"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/ui/zipball/7335d7049b2cde345c029e9d2de839b80af62bc0",
"reference": "7335d7049b2cde345c029e9d2de839b80af62bc0",
"url": "https://api.github.com/repos/laravel/ui/zipball/d166e09cdcb2e23836f694774cba77a32edb6007",
"reference": "d166e09cdcb2e23836f694774cba77a32edb6007",
"shasum": ""
},
"require": {
"illuminate/console": "^9.21|^10.0|^11.0",
"illuminate/filesystem": "^9.21|^10.0|^11.0",
"illuminate/support": "^9.21|^10.0|^11.0",
"illuminate/validation": "^9.21|^10.0|^11.0",
"illuminate/console": "^9.21|^10.0",
"illuminate/filesystem": "^9.21|^10.0",
"illuminate/support": "^9.21|^10.0",
"illuminate/validation": "^9.21|^10.0",
"php": "^8.0"
},
"require-dev": {
"orchestra/testbench": "^7.0|^8.0|^9.0",
"phpunit/phpunit": "^9.3|^10.4"
"orchestra/testbench": "^7.0|^8.0",
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
@ -1776,40 +1776,40 @@
"ui"
],
"support": {
"source": "https://github.com/laravel/ui/tree/v4.4.0"
"source": "https://github.com/laravel/ui/tree/v4.3.0"
},
"time": "2024-01-12T15:56:45+00:00"
"time": "2023-12-19T14:46:09+00:00"
},
{
"name": "lcobucci/clock",
"version": "3.2.0",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/lcobucci/clock.git",
"reference": "6f28b826ea01306b07980cb8320ab30b966cd715"
"reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/lcobucci/clock/zipball/6f28b826ea01306b07980cb8320ab30b966cd715",
"reference": "6f28b826ea01306b07980cb8320ab30b966cd715",
"url": "https://api.github.com/repos/lcobucci/clock/zipball/039ef98c6b57b101d10bd11d8fdfda12cbd996dc",
"reference": "039ef98c6b57b101d10bd11d8fdfda12cbd996dc",
"shasum": ""
},
"require": {
"php": "~8.2.0 || ~8.3.0",
"php": "~8.1.0 || ~8.2.0",
"psr/clock": "^1.0"
},
"provide": {
"psr/clock-implementation": "1.0"
},
"require-dev": {
"infection/infection": "^0.27",
"lcobucci/coding-standard": "^11.0.0",
"phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^1.10.25",
"phpstan/phpstan-deprecation-rules": "^1.1.3",
"phpstan/phpstan-phpunit": "^1.3.13",
"phpstan/phpstan-strict-rules": "^1.5.1",
"phpunit/phpunit": "^10.2.3"
"infection/infection": "^0.26",
"lcobucci/coding-standard": "^9.0",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.9.4",
"phpstan/phpstan-deprecation-rules": "^1.1.1",
"phpstan/phpstan-phpunit": "^1.3.2",
"phpstan/phpstan-strict-rules": "^1.4.4",
"phpunit/phpunit": "^9.5.27"
},
"type": "library",
"autoload": {
@ -1830,7 +1830,7 @@
"description": "Yet another clock abstraction",
"support": {
"issues": "https://github.com/lcobucci/clock/issues",
"source": "https://github.com/lcobucci/clock/tree/3.2.0"
"source": "https://github.com/lcobucci/clock/tree/3.0.0"
},
"funding": [
{
@ -1842,7 +1842,7 @@
"type": "patreon"
}
],
"time": "2023-11-17T17:00:27+00:00"
"time": "2022-12-19T15:00:24+00:00"
},
{
"name": "lcobucci/jwt",
@ -2913,31 +2913,31 @@
},
{
"name": "nette/schema",
"version": "v1.3.0",
"version": "v1.2.5",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
"reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188"
"reference": "0462f0166e823aad657c9224d0f849ecac1ba10a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
"reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188",
"url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a",
"reference": "0462f0166e823aad657c9224d0f849ecac1ba10a",
"shasum": ""
},
"require": {
"nette/utils": "^4.0",
"php": "8.1 - 8.3"
"nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
"php": "7.1 - 8.3"
},
"require-dev": {
"nette/tester": "^2.4",
"nette/tester": "^2.3 || ^2.4",
"phpstan/phpstan-nette": "^1.0",
"tracy/tracy": "^2.8"
"tracy/tracy": "^2.7"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
"dev-master": "1.2-dev"
}
},
"autoload": {
@ -2969,22 +2969,22 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
"source": "https://github.com/nette/schema/tree/v1.3.0"
"source": "https://github.com/nette/schema/tree/v1.2.5"
},
"time": "2023-12-11T11:54:22+00:00"
"time": "2023-10-05T20:37:59+00:00"
},
{
"name": "nette/utils",
"version": "v4.0.4",
"version": "v4.0.3",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
"reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218"
"reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
"reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218",
"url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015",
"reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015",
"shasum": ""
},
"require": {
@ -3055,9 +3055,9 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v4.0.4"
"source": "https://github.com/nette/utils/tree/v4.0.3"
},
"time": "2024-01-17T16:50:36+00:00"
"time": "2023-10-29T21:02:13+00:00"
},
{
"name": "nunomaduro/termwind",
@ -4258,20 +4258,20 @@
},
{
"name": "symfony/css-selector",
"version": "v7.0.0",
"version": "v6.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e"
"reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/bb51d46e53ef8d50d523f0c5faedba056a27943e",
"reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4",
"reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4",
"shasum": ""
},
"require": {
"php": ">=8.2"
"php": ">=8.1"
},
"type": "library",
"autoload": {
@ -4303,7 +4303,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/css-selector/tree/v7.0.0"
"source": "https://github.com/symfony/css-selector/tree/v6.4.0"
},
"funding": [
{
@ -4319,7 +4319,7 @@
"type": "tidelift"
}
],
"time": "2023-10-31T17:59:56+00:00"
"time": "2023-10-31T08:40:20+00:00"
},
{
"name": "symfony/deprecation-contracts",
@ -4465,24 +4465,24 @@
},
{
"name": "symfony/event-dispatcher",
"version": "v7.0.2",
"version": "v6.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a"
"reference": "e95216850555cd55e71b857eb9d6c2674124603a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a",
"reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/e95216850555cd55e71b857eb9d6c2674124603a",
"reference": "e95216850555cd55e71b857eb9d6c2674124603a",
"shasum": ""
},
"require": {
"php": ">=8.2",
"php": ">=8.1",
"symfony/event-dispatcher-contracts": "^2.5|^3"
},
"conflict": {
"symfony/dependency-injection": "<6.4",
"symfony/dependency-injection": "<5.4",
"symfony/service-contracts": "<2.5"
},
"provide": {
@ -4491,13 +4491,13 @@
},
"require-dev": {
"psr/log": "^1|^2|^3",
"symfony/config": "^6.4|^7.0",
"symfony/dependency-injection": "^6.4|^7.0",
"symfony/error-handler": "^6.4|^7.0",
"symfony/expression-language": "^6.4|^7.0",
"symfony/http-foundation": "^6.4|^7.0",
"symfony/config": "^5.4|^6.0|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0",
"symfony/error-handler": "^5.4|^6.0|^7.0",
"symfony/expression-language": "^5.4|^6.0|^7.0",
"symfony/http-foundation": "^5.4|^6.0|^7.0",
"symfony/service-contracts": "^2.5|^3",
"symfony/stopwatch": "^6.4|^7.0"
"symfony/stopwatch": "^5.4|^6.0|^7.0"
},
"type": "library",
"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",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/event-dispatcher/tree/v7.0.2"
"source": "https://github.com/symfony/event-dispatcher/tree/v6.4.2"
},
"funding": [
{
@ -4541,7 +4541,7 @@
"type": "tidelift"
}
],
"time": "2023-12-27T22:24:19+00:00"
"time": "2023-12-27T22:16:42+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@ -6092,20 +6092,20 @@
},
{
"name": "symfony/string",
"version": "v7.0.2",
"version": "v6.4.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5"
"reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5",
"reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5",
"url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc",
"reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc",
"shasum": ""
},
"require": {
"php": ">=8.2",
"php": ">=8.1",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0",
@ -6115,11 +6115,11 @@
"symfony/translation-contracts": "<2.5"
},
"require-dev": {
"symfony/error-handler": "^6.4|^7.0",
"symfony/http-client": "^6.4|^7.0",
"symfony/intl": "^6.4|^7.0",
"symfony/error-handler": "^5.4|^6.0|^7.0",
"symfony/http-client": "^5.4|^6.0|^7.0",
"symfony/intl": "^6.2|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^6.4|^7.0"
"symfony/var-exporter": "^5.4|^6.0|^7.0"
},
"type": "library",
"autoload": {
@ -6158,7 +6158,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.0.2"
"source": "https://github.com/symfony/string/tree/v6.4.2"
},
"funding": [
{
@ -6174,7 +6174,7 @@
"type": "tidelift"
}
],
"time": "2023-12-10T16:54:46+00:00"
"time": "2023-12-10T16:15:48+00:00"
},
{
"name": "symfony/translation",
@ -7844,16 +7844,16 @@
},
{
"name": "phpunit/phpunit",
"version": "10.5.8",
"version": "10.5.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "08f4fa74d5fbfff1ef22abffee47aaedcaea227e"
"reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/08f4fa74d5fbfff1ef22abffee47aaedcaea227e",
"reference": "08f4fa74d5fbfff1ef22abffee47aaedcaea227e",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ed21115d505b4b4f7dc7b5651464e19a2c7f7856",
"reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856",
"shasum": ""
},
"require": {
@ -7925,7 +7925,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.8"
"source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.5"
},
"funding": [
{
@ -7941,7 +7941,7 @@
"type": "tidelift"
}
],
"time": "2024-01-19T07:07:27+00:00"
"time": "2023-12-27T15:13:52+00:00"
},
{
"name": "sebastian/cli-parser",
@ -9075,16 +9075,16 @@
},
{
"name": "spatie/laravel-ignition",
"version": "2.4.1",
"version": "2.4.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-ignition.git",
"reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67"
"reference": "b9395ba48d3f30d42092cf6ceff75ed7256cd604"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/005e1e7b1232f3b22d7e7be3f602693efc7dba67",
"reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67",
"url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/b9395ba48d3f30d42092cf6ceff75ed7256cd604",
"reference": "b9395ba48d3f30d42092cf6ceff75ed7256cd604",
"shasum": ""
},
"require": {
@ -9163,7 +9163,7 @@
"type": "github"
}
],
"time": "2024-01-12T13:14:58+00:00"
"time": "2024-01-04T14:51:24+00:00"
},
{
"name": "theseer/tokenizer",

View File

@ -1,37 +1,10 @@
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
FROM registry.dege.au/leenooks/php:8.1-fpm-ldap
COPY . /var/www/html/
WORKDIR /var/www/html
RUN mkdir -p ${COMPOSER_HOME} \
&& ([ -r auth.json ] && mv auth.json ${COMPOSER_HOME}) || true \
&& touch .composer.refresh \
&& mv .env.example .env \
&& FORCE_PERMS=1 /sbin/init-docker \
&& 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
RUN mkdir -p ${COMPOSER_HOME} && \
([ -r auth.json ] && mv auth.json ${COMPOSER_HOME}) || true && \
touch .composer.refresh && \
mv .env.example .env && \
FORCE_PERMS=1 NGINX_START=FALSE /sbin/init && \
rm -rf ${COMPOSER_HOME}/* composer.lock

View File

@ -1,172 +0,0 @@
#!/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,12 +0,0 @@
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,61 +1,69 @@
dn: cn=sudorole,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: sudorole
olcAttributeTypes: {0}( 1.3.6.1.4.1.15953.9.1.1 NAME 'sudoUser'
attributetype ( 1.3.6.1.4.1.15953.9.1.1
NAME 'sudoUser'
DESC 'User(s) who may run sudo'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
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'
DESC 'Host(s) who may run sudo'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
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'
DESC 'Command(s) to be executed by sudo'
EQUALITY caseExactIA5Match
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'
DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match
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'
DESC 'Options(s) followed by sudo'
EQUALITY caseExactIA5Match
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'
DESC 'User(s) impersonated by sudo'
EQUALITY caseExactIA5Match
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'
DESC 'Group(s) impersonated by sudo'
EQUALITY caseExactIA5Match
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'
DESC 'Start of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
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'
DESC 'End of time interval for which the entry is valid'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
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'
DESC 'an integer to order the sudoRole entries'
EQUALITY integerMatch
ORDERING integerOrderingMatch
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'
MUST ( cn )
MAY ( sudoUser $ sudoHost $ sudoCommand $ sudoRunAs $ sudoRunAsUser $ sudoRunAsGroup $ sudoOption $ sudoNotBefore $ sudoNotAfter $ sudoOrder $ description ) )

View File

@ -0,0 +1,11 @@
##
## 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

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

View File

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

View File

@ -1,4 +1,11 @@
# 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
@ -139,64 +146,3 @@ c: US
description: United States of America
objectclass: country
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,4 +1,11 @@
# 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

View File

@ -1,4 +1,11 @@
# 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

View File

@ -1,4 +1,11 @@
# 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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,11 @@
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,12 +0,0 @@
##
## 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 ) )