Merge branch 'main' into patch-1
This commit is contained in:
commit
4f3c081401
12
.github/workflows/codeql-analysis.yml
vendored
12
.github/workflows/codeql-analysis.yml
vendored
@ -1,3 +1,7 @@
|
|||||||
|
# See https://codeql.github.com and https://github.com/github/codeql-action
|
||||||
|
# This action runs GitHub's industry-leading semantic code analysis engine, CodeQL, against a
|
||||||
|
# repository's source code to find security vulnerabilities. It then automatically uploads the
|
||||||
|
# results to GitHub so they can be displayed in the repository's security tab.
|
||||||
name: "CodeQL"
|
name: "CodeQL"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
@ -25,11 +29,11 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v1
|
uses: github/codeql-action/init@v2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@ -40,7 +44,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v1
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@ -54,4 +58,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v1
|
uses: github/codeql-action/analyze@v2
|
||||||
|
55
.github/workflows/scorecards.yml
vendored
55
.github/workflows/scorecards.yml
vendored
@ -1,55 +0,0 @@
|
|||||||
name: Scorecards supply-chain security
|
|
||||||
on:
|
|
||||||
# Only the default branch is supported.
|
|
||||||
branch_protection_rule:
|
|
||||||
schedule:
|
|
||||||
- cron: '29 11 * * 3'
|
|
||||||
push:
|
|
||||||
branches: [ main, release* ]
|
|
||||||
|
|
||||||
# Declare default permissions as read only.
|
|
||||||
permissions: read-all
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analysis:
|
|
||||||
name: Scorecards analysis
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
# Needed to upload the results to code-scanning dashboard.
|
|
||||||
security-events: write
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: "Checkout code"
|
|
||||||
uses: actions/checkout@a12a3943b4bdde767164f792f33f40b04645d846 # v3.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
|
|
||||||
- name: "Run analysis"
|
|
||||||
uses: ossf/scorecard-action@c1aec4ac820532bab364f02a81873c555a0ba3a1 # v1.0.4
|
|
||||||
with:
|
|
||||||
results_file: results.sarif
|
|
||||||
results_format: sarif
|
|
||||||
# Read-only PAT token. To create it,
|
|
||||||
# follow the steps in https://github.com/ossf/scorecard-action#pat-token-creation.
|
|
||||||
repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
|
|
||||||
# Publish the results to enable scorecard badges. For more details, see
|
|
||||||
# https://github.com/ossf/scorecard-action#publishing-results.
|
|
||||||
# For private repositories, `publish_results` will automatically be set to `false`,
|
|
||||||
# regardless of the value entered here.
|
|
||||||
publish_results: true
|
|
||||||
|
|
||||||
# Upload the results as artifacts (optional).
|
|
||||||
- name: "Upload artifact"
|
|
||||||
uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v3.0.0
|
|
||||||
with:
|
|
||||||
name: SARIF file
|
|
||||||
path: results.sarif
|
|
||||||
retention-days: 5
|
|
||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
|
||||||
- name: "Upload to code-scanning"
|
|
||||||
uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # v1.0.26
|
|
||||||
with:
|
|
||||||
sarif_file: results.sarif
|
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.17/README.adoc
generated
8
generated/1.17/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-17-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-17-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-17-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-17-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.18/README.adoc
generated
8
generated/1.18/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-18-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-18-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-18-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-18-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.19/README.adoc
generated
8
generated/1.19/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-19-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-19-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-19-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-19-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.20/README.adoc
generated
8
generated/1.20/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-20-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-20-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-20-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-20-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.21/README.adoc
generated
8
generated/1.21/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-21-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-21-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-21-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-21-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.22/README.adoc
generated
8
generated/1.22/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-22-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-22-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-22-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-22-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.23/README.adoc
generated
8
generated/1.23/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-23-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-23-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-23-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-23-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.24/README.adoc
generated
8
generated/1.24/README.adoc
generated
@ -1062,7 +1062,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-24-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-24-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1252,8 +1253,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-24-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-24-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
4
generated/1.24/apis/go.mod
generated
4
generated/1.24/apis/go.mod
generated
@ -4,6 +4,6 @@ module go.pinniped.dev/generated/1.24/apis
|
|||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
k8s.io/api v0.24.13
|
k8s.io/api v0.24.14
|
||||||
k8s.io/apimachinery v0.24.13
|
k8s.io/apimachinery v0.24.14
|
||||||
)
|
)
|
||||||
|
21
generated/1.24/apis/go.sum
generated
21
generated/1.24/apis/go.sum
generated
@ -122,6 +122,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -136,8 +137,9 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY
|
|||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -146,6 +148,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -163,15 +166,18 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
@ -183,6 +189,7 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
|
|||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -232,10 +239,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
k8s.io/api v0.24.13 h1:6/qDorlsRXw6hKulA27cRnEdRvyeU7Uwh5ZjNEWW6xA=
|
k8s.io/api v0.24.14 h1:plWo5FZi1VJ7XC2NEeKyGS946e252vijDlqxeiN0cBk=
|
||||||
k8s.io/api v0.24.13/go.mod h1:/mLQGqqQfifk0y9wSL76n1LH97NI9HSjKOwxZeBxLFY=
|
k8s.io/api v0.24.14/go.mod h1:dmyjYMJoi/FOIyH1RwYpgskcrl1RRmqsBfDVbB9VpqQ=
|
||||||
k8s.io/apimachinery v0.24.13 h1:ju8KJuoUDKlWQfFUDLFbJRiCiDVnj5yoqKSITyx7z+4=
|
k8s.io/apimachinery v0.24.14 h1:i7GrBju4O0onF1+jqXXPVmfXWilplxWYkTNU6G/h6Cs=
|
||||||
k8s.io/apimachinery v0.24.13/go.mod h1:Yg8GIoNnVG9af59MrlKMm4Unsw3EBj+MfEBvfSid2/4=
|
k8s.io/apimachinery v0.24.14/go.mod h1:Yyft+DTAvOmHyT332HkCMoTKroxYDEEx7NRLsdCYDoc=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -4305,7 +4305,7 @@ func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.Op
|
|||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
"name": {
|
"name": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "The header field name",
|
Description: "The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header.",
|
||||||
Default: "",
|
Default: "",
|
||||||
Type: []string{"string"},
|
Type: []string{"string"},
|
||||||
Format: "",
|
Format: "",
|
||||||
|
4
generated/1.24/client/go.mod
generated
4
generated/1.24/client/go.mod
generated
@ -5,8 +5,8 @@ go 1.13
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
go.pinniped.dev/generated/1.24/apis v0.0.0
|
go.pinniped.dev/generated/1.24/apis v0.0.0
|
||||||
k8s.io/apimachinery v0.24.13
|
k8s.io/apimachinery v0.24.14
|
||||||
k8s.io/client-go v0.24.13
|
k8s.io/client-go v0.24.14
|
||||||
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
|
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42
|
||||||
)
|
)
|
||||||
|
|
||||||
|
29
generated/1.24/client/go.sum
generated
29
generated/1.24/client/go.sum
generated
@ -301,6 +301,7 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -340,8 +341,9 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd
|
|||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
@ -367,6 +369,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -413,12 +416,14 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -428,8 +433,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@ -486,6 +492,7 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -622,12 +629,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.24.13 h1:6/qDorlsRXw6hKulA27cRnEdRvyeU7Uwh5ZjNEWW6xA=
|
k8s.io/api v0.24.14 h1:plWo5FZi1VJ7XC2NEeKyGS946e252vijDlqxeiN0cBk=
|
||||||
k8s.io/api v0.24.13/go.mod h1:/mLQGqqQfifk0y9wSL76n1LH97NI9HSjKOwxZeBxLFY=
|
k8s.io/api v0.24.14/go.mod h1:dmyjYMJoi/FOIyH1RwYpgskcrl1RRmqsBfDVbB9VpqQ=
|
||||||
k8s.io/apimachinery v0.24.13 h1:ju8KJuoUDKlWQfFUDLFbJRiCiDVnj5yoqKSITyx7z+4=
|
k8s.io/apimachinery v0.24.14 h1:i7GrBju4O0onF1+jqXXPVmfXWilplxWYkTNU6G/h6Cs=
|
||||||
k8s.io/apimachinery v0.24.13/go.mod h1:Yg8GIoNnVG9af59MrlKMm4Unsw3EBj+MfEBvfSid2/4=
|
k8s.io/apimachinery v0.24.14/go.mod h1:Yyft+DTAvOmHyT332HkCMoTKroxYDEEx7NRLsdCYDoc=
|
||||||
k8s.io/client-go v0.24.13 h1:wlyue6MHZ4qcja8NGEoCWLaou6qlCbv+kmj3lBfROIo=
|
k8s.io/client-go v0.24.14 h1:vwnWSAPLNN+IHi8yt08Q8InP71JXG5ix8YrBE32OOZU=
|
||||||
k8s.io/client-go v0.24.13/go.mod h1:HjvA0mAO9iijaL8KuZZlLNdxILsvaYpYM1KtyOllUQk=
|
k8s.io/client-go v0.24.14/go.mod h1:/loTxPCTlfIOw1qAgzj7lGyFfXiHBPVWet+NB/+e2ho=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.25/README.adoc
generated
8
generated/1.25/README.adoc
generated
@ -1058,7 +1058,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-25-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-25-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1248,8 +1249,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-25-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-25-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
4
generated/1.25/apis/go.mod
generated
4
generated/1.25/apis/go.mod
generated
@ -4,6 +4,6 @@ module go.pinniped.dev/generated/1.25/apis
|
|||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
k8s.io/api v0.25.9
|
k8s.io/api v0.25.10
|
||||||
k8s.io/apimachinery v0.25.9
|
k8s.io/apimachinery v0.25.10
|
||||||
)
|
)
|
||||||
|
21
generated/1.25/apis/go.sum
generated
21
generated/1.25/apis/go.sum
generated
@ -133,6 +133,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -150,8 +151,9 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx
|
|||||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -160,6 +162,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -181,16 +184,19 @@ golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
@ -203,6 +209,7 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -251,10 +258,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
k8s.io/api v0.25.9 h1:XuJ2bz2F52jZmp3YjUcp/pozH8kY1BlBHdXnoOXBP3U=
|
k8s.io/api v0.25.10 h1:YfcmWMKDnWpzKV2byP+fu0v00yNTS4+cqw4g0ndUsJA=
|
||||||
k8s.io/api v0.25.9/go.mod h1:9YRWzD0cRHzfsnf9e5OQsQ4Un6cbZ//Xv3jo44YKm2Y=
|
k8s.io/api v0.25.10/go.mod h1:7inWacs1rgsi5uLOONfUmo4on+tVkkuJZNsMLouGAhA=
|
||||||
k8s.io/apimachinery v0.25.9 h1:MPjgTz4dbAKJ/KiHIvDeYkFfIn7ueihqvT520HkV7v4=
|
k8s.io/apimachinery v0.25.10 h1:uvPXar0BVg9g2R5a5kTjMuHCjLxC5LiAclSrLOP8Q20=
|
||||||
k8s.io/apimachinery v0.25.9/go.mod h1:ZTl0drTQaFi5gMM3snYI5tWV1XJmRH1gfnDx2QCLsxk=
|
k8s.io/apimachinery v0.25.10/go.mod h1:PJ+6cm50BMETqCCJx1RXQIXaq937SUdAq2vVKCGDZXU=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -4311,7 +4311,7 @@ func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.Op
|
|||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
"name": {
|
"name": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "The header field name",
|
Description: "The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header.",
|
||||||
Default: "",
|
Default: "",
|
||||||
Type: []string{"string"},
|
Type: []string{"string"},
|
||||||
Format: "",
|
Format: "",
|
||||||
|
4
generated/1.25/client/go.mod
generated
4
generated/1.25/client/go.mod
generated
@ -5,8 +5,8 @@ go 1.13
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
go.pinniped.dev/generated/1.25/apis v0.0.0
|
go.pinniped.dev/generated/1.25/apis v0.0.0
|
||||||
k8s.io/apimachinery v0.25.9
|
k8s.io/apimachinery v0.25.10
|
||||||
k8s.io/client-go v0.25.9
|
k8s.io/client-go v0.25.10
|
||||||
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
29
generated/1.25/client/go.sum
generated
29
generated/1.25/client/go.sum
generated
@ -336,6 +336,7 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -380,8 +381,9 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
|
|||||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
@ -411,6 +413,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -468,12 +471,14 @@ golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -483,8 +488,9 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@ -547,6 +553,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -713,12 +720,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.25.9 h1:XuJ2bz2F52jZmp3YjUcp/pozH8kY1BlBHdXnoOXBP3U=
|
k8s.io/api v0.25.10 h1:YfcmWMKDnWpzKV2byP+fu0v00yNTS4+cqw4g0ndUsJA=
|
||||||
k8s.io/api v0.25.9/go.mod h1:9YRWzD0cRHzfsnf9e5OQsQ4Un6cbZ//Xv3jo44YKm2Y=
|
k8s.io/api v0.25.10/go.mod h1:7inWacs1rgsi5uLOONfUmo4on+tVkkuJZNsMLouGAhA=
|
||||||
k8s.io/apimachinery v0.25.9 h1:MPjgTz4dbAKJ/KiHIvDeYkFfIn7ueihqvT520HkV7v4=
|
k8s.io/apimachinery v0.25.10 h1:uvPXar0BVg9g2R5a5kTjMuHCjLxC5LiAclSrLOP8Q20=
|
||||||
k8s.io/apimachinery v0.25.9/go.mod h1:ZTl0drTQaFi5gMM3snYI5tWV1XJmRH1gfnDx2QCLsxk=
|
k8s.io/apimachinery v0.25.10/go.mod h1:PJ+6cm50BMETqCCJx1RXQIXaq937SUdAq2vVKCGDZXU=
|
||||||
k8s.io/client-go v0.25.9 h1:U0S3nc71NRfHXiA0utyCkPt3Mv1SWpQw0g5VfBCv5xg=
|
k8s.io/client-go v0.25.10 h1:FhTgEpCDboGjByXnoEj/kiHK12SC+fjRMrkNKn72/aU=
|
||||||
k8s.io/client-go v0.25.9/go.mod h1:tmPyOtpbbkneXj65EYZ4sXun1BE/2F2XlRABVj9CBgc=
|
k8s.io/client-go v0.25.10/go.mod h1:zqpG8XvdsDK7q/Dh83v2M3LgTVj8sAbT3BT0JnANjME=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.26/README.adoc
generated
8
generated/1.26/README.adoc
generated
@ -1058,7 +1058,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-26-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-26-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1248,8 +1249,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-26-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-26-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
4
generated/1.26/apis/go.mod
generated
4
generated/1.26/apis/go.mod
generated
@ -4,6 +4,6 @@ module go.pinniped.dev/generated/1.26/apis
|
|||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
k8s.io/api v0.26.4
|
k8s.io/api v0.26.5
|
||||||
k8s.io/apimachinery v0.26.4
|
k8s.io/apimachinery v0.26.5
|
||||||
)
|
)
|
||||||
|
21
generated/1.26/apis/go.sum
generated
21
generated/1.26/apis/go.sum
generated
@ -138,6 +138,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -156,8 +157,9 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su
|
|||||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -166,6 +168,7 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -188,18 +191,21 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
@ -213,6 +219,7 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -262,10 +269,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
k8s.io/api v0.26.4 h1:qSG2PmtcD23BkYiWfoYAcak870eF/hE7NNYBYavTT94=
|
k8s.io/api v0.26.5 h1:Npao/+sMSng6nkEcNydgH3BNo4s5YoBg7iw35HM7Hcw=
|
||||||
k8s.io/api v0.26.4/go.mod h1:WwKEXU3R1rgCZ77AYa7DFksd9/BAIKyOmRlbVxgvjCk=
|
k8s.io/api v0.26.5/go.mod h1:O7ICW7lj6+ZQQQ3cxekgCoW+fnGo5kWT0nTHkLZ5grc=
|
||||||
k8s.io/apimachinery v0.26.4 h1:rZccKdBLg9vP6J09JD+z8Yr99Ce8gk3Lbi9TCx05Jzs=
|
k8s.io/apimachinery v0.26.5 h1:hTQVhJao2piX7vSgCn4Lwd6E0o/+TJIH4NqRf+q4EmE=
|
||||||
k8s.io/apimachinery v0.26.4/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I=
|
k8s.io/apimachinery v0.26.5/go.mod h1:HUvk6wrOP4v22AIYqeCGSQ6xWCHo41J9d6psb3temAg=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -4343,7 +4343,7 @@ func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.Op
|
|||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
"name": {
|
"name": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "The header field name",
|
Description: "The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header.",
|
||||||
Default: "",
|
Default: "",
|
||||||
Type: []string{"string"},
|
Type: []string{"string"},
|
||||||
Format: "",
|
Format: "",
|
||||||
|
4
generated/1.26/client/go.mod
generated
4
generated/1.26/client/go.mod
generated
@ -5,8 +5,8 @@ go 1.13
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
go.pinniped.dev/generated/1.26/apis v0.0.0
|
go.pinniped.dev/generated/1.26/apis v0.0.0
|
||||||
k8s.io/apimachinery v0.26.4
|
k8s.io/apimachinery v0.26.5
|
||||||
k8s.io/client-go v0.26.4
|
k8s.io/client-go v0.26.5
|
||||||
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280
|
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280
|
||||||
)
|
)
|
||||||
|
|
||||||
|
29
generated/1.26/client/go.sum
generated
29
generated/1.26/client/go.sum
generated
@ -274,6 +274,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -312,8 +313,9 @@ golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su
|
|||||||
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||||
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
|
||||||
|
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
@ -332,6 +334,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
|
|||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -373,13 +376,15 @@ golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
|
||||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
|
||||||
|
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -388,8 +393,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
|
||||||
|
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
@ -442,6 +448,7 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -556,12 +563,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.26.4 h1:qSG2PmtcD23BkYiWfoYAcak870eF/hE7NNYBYavTT94=
|
k8s.io/api v0.26.5 h1:Npao/+sMSng6nkEcNydgH3BNo4s5YoBg7iw35HM7Hcw=
|
||||||
k8s.io/api v0.26.4/go.mod h1:WwKEXU3R1rgCZ77AYa7DFksd9/BAIKyOmRlbVxgvjCk=
|
k8s.io/api v0.26.5/go.mod h1:O7ICW7lj6+ZQQQ3cxekgCoW+fnGo5kWT0nTHkLZ5grc=
|
||||||
k8s.io/apimachinery v0.26.4 h1:rZccKdBLg9vP6J09JD+z8Yr99Ce8gk3Lbi9TCx05Jzs=
|
k8s.io/apimachinery v0.26.5 h1:hTQVhJao2piX7vSgCn4Lwd6E0o/+TJIH4NqRf+q4EmE=
|
||||||
k8s.io/apimachinery v0.26.4/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I=
|
k8s.io/apimachinery v0.26.5/go.mod h1:HUvk6wrOP4v22AIYqeCGSQ6xWCHo41J9d6psb3temAg=
|
||||||
k8s.io/client-go v0.26.4 h1:/7P/IbGBuT73A+G97trf44NTPSNqvuBREpOfdLbHvD4=
|
k8s.io/client-go v0.26.5 h1:e8Z44pafL/c6ayF/6qYEypbJoDSakaFxhJ9lqULEJEo=
|
||||||
k8s.io/client-go v0.26.4/go.mod h1:6qOItWm3EwxJdl/8p5t7FWtWUOwyMdA8N9ekbW4idpI=
|
k8s.io/client-go v0.26.5/go.mod h1:/CYyNt+ZLMvWqMF8h1SvkUXz2ujFWQLwdDrdiQlZ5X0=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
8
generated/1.27/README.adoc
generated
8
generated/1.27/README.adoc
generated
@ -1058,7 +1058,8 @@ ActiveDirectoryIdentityProvider describes the configuration of an upstream Micro
|
|||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". Optional, when not specified it will be based on the result of a query for the defaultNamingContext (see https://docs.microsoft.com/en-us/windows/win32/adschema/rootdse). The default behavior searches your entire domain for groups. It may make sense to specify a subtree as a search base if you wish to exclude some groups for security reasons or to make searches faster.
|
||||||
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
| *`filter`* __string__ | Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})". This searches nested groups by default. Note that nested group search can be slow for some Active Directory servers. To disable it, you can set the filter to "(&(objectClass=group)(member={})"
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-27-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-27-apis-supervisor-idp-v1alpha1-activedirectoryidentityprovidergroupsearchattributes[$$ActiveDirectoryIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
@ -1248,8 +1249,9 @@ LDAPIdentityProvider describes the configuration of an upstream Lightweight Dire
|
|||||||
[cols="25a,75a", options="header"]
|
[cols="25a,75a", options="header"]
|
||||||
|===
|
|===
|
||||||
| Field | Description
|
| Field | Description
|
||||||
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter and Attributes are ignored.
|
| *`base`* __string__ | Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and authenticated users will not belong to any groups from the LDAP provider. Also, when not specified, the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
| *`filter`* __string__ | Filter is the LDAP search filter which should be applied when searching for groups for a user. The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the value of an attribute of the user entry found as a result of the user search. Which attribute's value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter. For more information about LDAP filters, see https://ldap.com/ldap-filters. Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used. Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
|
| *`userAttributeForFilter`* __string__ | UserAttributeForFilter specifies which attribute's value from the user entry found as a result of the user search will be used to replace the "{}" placeholder(s) in the group search Filter. For example, specifying "uid" as the UserAttributeForFilter while specifying "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing the "{}" placeholder in the Filter with the value of the user's "uid" attribute. Optional. When not specified, the default will act as if "dn" were specified. For example, leaving UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-27-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
| *`attributes`* __xref:{anchor_prefix}-go-pinniped-dev-generated-1-27-apis-supervisor-idp-v1alpha1-ldapidentityprovidergroupsearchattributes[$$LDAPIdentityProviderGroupSearchAttributes$$]__ | Attributes specifies how the group's information should be read from each LDAP entry which was found as the result of the group search.
|
||||||
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
| *`skipGroupRefresh`* __boolean__ | The user's group membership is refreshed as they interact with the supervisor to obtain new credentials (as their old credentials expire). This allows group membership changes to be quickly reflected into Kubernetes clusters. Since group membership is often used to bind authorization policies, it is important to keep the groups observed in Kubernetes clusters in-sync with the identity provider.
|
||||||
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
In some environments, frequent group membership queries may result in a significant performance impact on the identity provider and/or the supervisor. The best approach to handle performance impacts is to tweak the group query to be more performant, for example by disabling nested group search or by using a more targeted group search base.
|
||||||
|
4
generated/1.27/apis/go.mod
generated
4
generated/1.27/apis/go.mod
generated
@ -4,6 +4,6 @@ module go.pinniped.dev/generated/1.27/apis
|
|||||||
go 1.13
|
go 1.13
|
||||||
|
|
||||||
require (
|
require (
|
||||||
k8s.io/api v0.27.1
|
k8s.io/api v0.27.2
|
||||||
k8s.io/apimachinery v0.27.1
|
k8s.io/apimachinery v0.27.2
|
||||||
)
|
)
|
||||||
|
10
generated/1.27/apis/go.sum
generated
10
generated/1.27/apis/go.sum
generated
@ -301,17 +301,17 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
k8s.io/api v0.27.1 h1:Z6zUGQ1Vd10tJ+gHcNNNgkV5emCyW+v2XTmn+CLjSd0=
|
k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo=
|
||||||
k8s.io/api v0.27.1/go.mod h1:z5g/BpAiD+f6AArpqNjkY+cji8ueZDU/WV1jcj5Jk4E=
|
k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4=
|
||||||
k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc=
|
k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg=
|
||||||
k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM=
|
k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||||
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
|
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
|
||||||
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||||
k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY=
|
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg=
|
||||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||||
k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY=
|
k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY=
|
||||||
k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -4463,7 +4463,7 @@ func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.Op
|
|||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
"name": {
|
"name": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "The header field name",
|
Description: "The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header.",
|
||||||
Default: "",
|
Default: "",
|
||||||
Type: []string{"string"},
|
Type: []string{"string"},
|
||||||
Format: "",
|
Format: "",
|
||||||
|
6
generated/1.27/client/go.mod
generated
6
generated/1.27/client/go.mod
generated
@ -5,9 +5,9 @@ go 1.13
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
go.pinniped.dev/generated/1.27/apis v0.0.0
|
go.pinniped.dev/generated/1.27/apis v0.0.0
|
||||||
k8s.io/apimachinery v0.27.1
|
k8s.io/apimachinery v0.27.2
|
||||||
k8s.io/client-go v0.27.1
|
k8s.io/client-go v0.27.2
|
||||||
k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a
|
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f
|
||||||
)
|
)
|
||||||
|
|
||||||
replace go.pinniped.dev/generated/1.27/apis => ../apis
|
replace go.pinniped.dev/generated/1.27/apis => ../apis
|
||||||
|
16
generated/1.27/client/go.sum
generated
16
generated/1.27/client/go.sum
generated
@ -594,20 +594,20 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.27.1 h1:Z6zUGQ1Vd10tJ+gHcNNNgkV5emCyW+v2XTmn+CLjSd0=
|
k8s.io/api v0.27.2 h1:+H17AJpUMvl+clT+BPnKf0E3ksMAzoBBg7CntpSuADo=
|
||||||
k8s.io/api v0.27.1/go.mod h1:z5g/BpAiD+f6AArpqNjkY+cji8ueZDU/WV1jcj5Jk4E=
|
k8s.io/api v0.27.2/go.mod h1:ENmbocXfBT2ADujUXcBhHV55RIT31IIEvkntP6vZKS4=
|
||||||
k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc=
|
k8s.io/apimachinery v0.27.2 h1:vBjGaKKieaIreI+oQwELalVG4d8f3YAMNpWLzDXkxeg=
|
||||||
k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM=
|
k8s.io/apimachinery v0.27.2/go.mod h1:XNfZ6xklnMCOGGFNqXG7bUrQCoR04dh/E7FprV6pb+E=
|
||||||
k8s.io/client-go v0.27.1 h1:oXsfhW/qncM1wDmWBIuDzRHNS2tLhK3BZv512Nc59W8=
|
k8s.io/client-go v0.27.2 h1:vDLSeuYvCHKeoQRhCXjxXO45nHVv2Ip4Fe0MfioMrhE=
|
||||||
k8s.io/client-go v0.27.1/go.mod h1:f8LHMUkVb3b9N8bWturc+EDtVVVwZ7ueTVquFAJb2vA=
|
k8s.io/client-go v0.27.2/go.mod h1:tY0gVmUsHrAmjzHX9zs7eCjxcBsf8IiNe7KQ52biTcQ=
|
||||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||||
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||||
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
|
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
|
||||||
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||||
k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg=
|
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f h1:2kWPakN3i/k81b0gvD5C5FJ2kxm1WrQFanWchyKuqGg=
|
||||||
k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY=
|
k8s.io/kube-openapi v0.0.0-20230501164219-8b0f38b5fd1f/go.mod h1:byini6yhqGC14c3ebc/QwanvYwhuMWF6yz2F8uwW8eg=
|
||||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||||
k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY=
|
k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY=
|
||||||
k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||||
|
@ -107,10 +107,11 @@ spec:
|
|||||||
description: Filter is the ActiveDirectory search filter which
|
description: Filter is the ActiveDirectory search filter which
|
||||||
should be applied when searching for groups for a user. The
|
should be applied when searching for groups for a user. The
|
||||||
pattern "{}" must occur in the filter at least once and will
|
pattern "{}" must occur in the filter at least once and will
|
||||||
be dynamically replaced by the dn (distinguished name) of the
|
be dynamically replaced by the value of an attribute of the
|
||||||
user entry found as a result of the user search. E.g. "member={}"
|
user entry found as a result of the user search. Which attribute's
|
||||||
or "&(objectClass=groupOfNames)(member={})". For more information
|
value is used to replace the placeholder(s) depends on the value
|
||||||
about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
of UserAttributeForFilter. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
the default will act as if the filter were specified as "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -142,6 +143,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this Active Directory identity
|
description: 'Host is the hostname of this Active Directory identity
|
||||||
|
@ -96,15 +96,16 @@ spec:
|
|||||||
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
used as the search base when searching for groups. E.g. "ou=groups,dc=example,dc=com".
|
||||||
When not specified, no group search will be performed and authenticated
|
When not specified, no group search will be performed and authenticated
|
||||||
users will not belong to any groups from the LDAP provider.
|
users will not belong to any groups from the LDAP provider.
|
||||||
Also, when not specified, the values of Filter and Attributes
|
Also, when not specified, the values of Filter, UserAttributeForFilter,
|
||||||
are ignored.
|
Attributes, and SkipGroupRefresh are ignored.
|
||||||
type: string
|
type: string
|
||||||
filter:
|
filter:
|
||||||
description: Filter is the LDAP search filter which should be
|
description: Filter is the LDAP search filter which should be
|
||||||
applied when searching for groups for a user. The pattern "{}"
|
applied when searching for groups for a user. The pattern "{}"
|
||||||
must occur in the filter at least once and will be dynamically
|
must occur in the filter at least once and will be dynamically
|
||||||
replaced by the dn (distinguished name) of the user entry found
|
replaced by the value of an attribute of the user entry found
|
||||||
as a result of the user search. E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
as a result of the user search. Which attribute's value is used
|
||||||
|
to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
Note that the dn (distinguished name) is not an attribute of
|
Note that the dn (distinguished name) is not an attribute of
|
||||||
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
an entry, so "dn={}" cannot be used. Optional. When not specified,
|
||||||
@ -134,6 +135,20 @@ spec:
|
|||||||
carefully read all release notes before upgrading to ensure
|
carefully read all release notes before upgrading to ensure
|
||||||
that the meaning of this field has not changed."
|
that the meaning of this field has not changed."
|
||||||
type: boolean
|
type: boolean
|
||||||
|
userAttributeForFilter:
|
||||||
|
description: UserAttributeForFilter specifies which attribute's
|
||||||
|
value from the user entry found as a result of the user search
|
||||||
|
will be used to replace the "{}" placeholder(s) in the group
|
||||||
|
search Filter. For example, specifying "uid" as the UserAttributeForFilter
|
||||||
|
while specifying "&(objectClass=posixGroup)(memberUid={})" as
|
||||||
|
the Filter would search for groups by replacing the "{}" placeholder
|
||||||
|
in the Filter with the value of the user's "uid" attribute.
|
||||||
|
Optional. When not specified, the default will act as if "dn"
|
||||||
|
were specified. For example, leaving UserAttributeForFilter
|
||||||
|
unspecified while specifying "&(objectClass=groupOfNames)(member={})"
|
||||||
|
as the Filter would search for groups by replacing the "{}"
|
||||||
|
placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
type: string
|
||||||
type: object
|
type: object
|
||||||
host:
|
host:
|
||||||
description: 'Host is the hostname of this LDAP identity provider,
|
description: 'Host is the hostname of this LDAP identity provider,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -114,9 +114,10 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
|
|
||||||
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
// Filter is the ActiveDirectory search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about ActiveDirectory filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// E.g. "member={}" or "&(objectClass=groupOfNames)(member={})".
|
||||||
|
// For more information about ActiveDirectory filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the filter were specified as
|
// Optional. When not specified, the default will act as if the filter were specified as
|
||||||
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
// "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={})".
|
||||||
@ -127,6 +128,17 @@ type ActiveDirectoryIdentityProviderGroupSearch struct {
|
|||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
// Attributes specifies how the group's information should be read from each ActiveDirectory entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
@ -101,20 +101,31 @@ type LDAPIdentityProviderGroupSearch struct {
|
|||||||
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
// Base is the dn (distinguished name) that should be used as the search base when searching for groups. E.g.
|
||||||
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
// "ou=groups,dc=example,dc=com". When not specified, no group search will be performed and
|
||||||
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
// authenticated users will not belong to any groups from the LDAP provider. Also, when not specified,
|
||||||
// the values of Filter and Attributes are ignored.
|
// the values of Filter, UserAttributeForFilter, Attributes, and SkipGroupRefresh are ignored.
|
||||||
// +optional
|
// +optional
|
||||||
Base string `json:"base,omitempty"`
|
Base string `json:"base,omitempty"`
|
||||||
|
|
||||||
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
// Filter is the LDAP search filter which should be applied when searching for groups for a user.
|
||||||
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
// The pattern "{}" must occur in the filter at least once and will be dynamically replaced by the
|
||||||
// dn (distinguished name) of the user entry found as a result of the user search. E.g. "member={}" or
|
// value of an attribute of the user entry found as a result of the user search. Which attribute's
|
||||||
// "&(objectClass=groupOfNames)(member={})". For more information about LDAP filters, see
|
// value is used to replace the placeholder(s) depends on the value of UserAttributeForFilter.
|
||||||
// https://ldap.com/ldap-filters.
|
// For more information about LDAP filters, see https://ldap.com/ldap-filters.
|
||||||
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
// Note that the dn (distinguished name) is not an attribute of an entry, so "dn={}" cannot be used.
|
||||||
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
// Optional. When not specified, the default will act as if the Filter were specified as "member={}".
|
||||||
// +optional
|
// +optional
|
||||||
Filter string `json:"filter,omitempty"`
|
Filter string `json:"filter,omitempty"`
|
||||||
|
|
||||||
|
// UserAttributeForFilter specifies which attribute's value from the user entry found as a result of
|
||||||
|
// the user search will be used to replace the "{}" placeholder(s) in the group search Filter.
|
||||||
|
// For example, specifying "uid" as the UserAttributeForFilter while specifying
|
||||||
|
// "&(objectClass=posixGroup)(memberUid={})" as the Filter would search for groups by replacing
|
||||||
|
// the "{}" placeholder in the Filter with the value of the user's "uid" attribute.
|
||||||
|
// Optional. When not specified, the default will act as if "dn" were specified. For example, leaving
|
||||||
|
// UserAttributeForFilter unspecified while specifying "&(objectClass=groupOfNames)(member={})" as the Filter
|
||||||
|
// would search for groups by replacing the "{}" placeholder(s) with the dn (distinguished name) of the user.
|
||||||
|
// +optional
|
||||||
|
UserAttributeForFilter string `json:"userAttributeForFilter,omitempty"`
|
||||||
|
|
||||||
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
// Attributes specifies how the group's information should be read from each LDAP entry which was found as
|
||||||
// the result of the group search.
|
// the result of the group search.
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -4463,7 +4463,7 @@ func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.Op
|
|||||||
Properties: map[string]spec.Schema{
|
Properties: map[string]spec.Schema{
|
||||||
"name": {
|
"name": {
|
||||||
SchemaProps: spec.SchemaProps{
|
SchemaProps: spec.SchemaProps{
|
||||||
Description: "The header field name",
|
Description: "The header field name. This will be canonicalized upon output, so case-variant names will be understood as the same header.",
|
||||||
Default: "",
|
Default: "",
|
||||||
Type: []string{"string"},
|
Type: []string{"string"},
|
||||||
Format: "",
|
Format: "",
|
||||||
|
6
go.mod
6
go.mod
@ -28,8 +28,8 @@ require (
|
|||||||
github.com/sclevine/spec v1.4.0
|
github.com/sclevine/spec v1.4.0
|
||||||
github.com/spf13/cobra v1.7.0
|
github.com/spf13/cobra v1.7.0
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
github.com/stretchr/testify v1.8.3
|
github.com/stretchr/testify v1.8.4
|
||||||
github.com/tdewolff/minify/v2 v2.12.5
|
github.com/tdewolff/minify/v2 v2.12.6
|
||||||
go.uber.org/zap v1.24.0
|
go.uber.org/zap v1.24.0
|
||||||
golang.org/x/crypto v0.9.0
|
golang.org/x/crypto v0.9.0
|
||||||
golang.org/x/net v0.10.0
|
golang.org/x/net v0.10.0
|
||||||
@ -123,7 +123,7 @@ require (
|
|||||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
github.com/stoewer/go-strcase v1.2.0 // indirect
|
github.com/stoewer/go-strcase v1.2.0 // indirect
|
||||||
github.com/subosito/gotenv v1.4.0 // indirect
|
github.com/subosito/gotenv v1.4.0 // indirect
|
||||||
github.com/tdewolff/parse/v2 v2.6.5 // indirect
|
github.com/tdewolff/parse/v2 v2.6.6 // indirect
|
||||||
go.etcd.io/etcd/api/v3 v3.5.7 // indirect
|
go.etcd.io/etcd/api/v3 v3.5.7 // indirect
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.7 // indirect
|
go.etcd.io/etcd/client/pkg/v3 v3.5.7 // indirect
|
||||||
go.etcd.io/etcd/client/v3 v3.5.7 // indirect
|
go.etcd.io/etcd/client/v3 v3.5.7 // indirect
|
||||||
|
16
go.sum
16
go.sum
@ -547,17 +547,18 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs=
|
github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs=
|
||||||
github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo=
|
github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo=
|
||||||
github.com/tdewolff/minify/v2 v2.12.5 h1:s2KDBt/D/3ayE3gcqQF8VIgTmYgkx+btuLvVAeePzZM=
|
github.com/tdewolff/minify/v2 v2.12.6 h1:kw5FU0ErJyd7fs+TMojIlBvLyEjsN93wP1n8NUOs320=
|
||||||
github.com/tdewolff/minify/v2 v2.12.5/go.mod h1:i8QXtVyL7Ddwc4I5gqzvgBqKlTMgMNTbiXaPO4Iqg+A=
|
github.com/tdewolff/minify/v2 v2.12.6/go.mod h1:ZRKTheiOGyLSK8hOZWWv+YoJAECzDivNgAlVYDHp/Ws=
|
||||||
github.com/tdewolff/parse/v2 v2.6.5 h1:lYvWBk55GkqKl0JJenGpmrgu/cPHQQ6/Mm1hBGswoGQ=
|
github.com/tdewolff/parse/v2 v2.6.6 h1:Yld+0CrKUJaCV78DL1G2nk3C9lKrxyRTux5aaK/AkDo=
|
||||||
github.com/tdewolff/parse/v2 v2.6.5/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs=
|
github.com/tdewolff/parse/v2 v2.6.6/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs=
|
||||||
github.com/tdewolff/test v1.0.7 h1:8Vs0142DmPFW/bQeHRP3MV19m1gvndjUb1sn8yy74LM=
|
|
||||||
github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
|
github.com/tdewolff/test v1.0.7/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
|
||||||
|
github.com/tdewolff/test v1.0.9 h1:SswqJCmeN4B+9gEAi/5uqT0qpi1y2/2O47V/1hhGZT0=
|
||||||
|
github.com/tdewolff/test v1.0.9/go.mod h1:6DAvZliBAAnD7rhVgwaM7DE5/d9NMOAJ09SqYqeK4QE=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE=
|
||||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
@ -843,6 +844,7 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
|
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
|
||||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
1.27.1
|
1.27.2
|
||||||
1.26.4
|
1.26.5
|
||||||
1.25.9
|
1.25.10
|
||||||
1.24.13
|
1.24.14
|
||||||
1.23.17
|
1.23.17
|
||||||
1.22.17
|
1.22.17
|
||||||
1.21.14
|
1.21.14
|
||||||
|
@ -17,21 +17,11 @@ function lint_cmd() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_cmd() {
|
function test_cmd() {
|
||||||
if [ -x "$(command -v gotest)" ]; then
|
echo "go test -count 1 -race ./..."
|
||||||
cmd='gotest'
|
|
||||||
else
|
|
||||||
cmd='go test'
|
|
||||||
fi
|
|
||||||
echo "${cmd} -count 1 -race ./..."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function unittest_cmd() {
|
function unittest_cmd() {
|
||||||
if [ -x "$(command -v gotest)" ]; then
|
echo "go test -short -race ./..."
|
||||||
cmd='gotest'
|
|
||||||
else
|
|
||||||
cmd='go test'
|
|
||||||
fi
|
|
||||||
echo "${cmd} -short -race ./..."
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function with_modules() {
|
function with_modules() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Copyright 2020-2022 the Pinniped contributors. All Rights Reserved.
|
# Copyright 2020-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -420,6 +420,7 @@ export PINNIPED_TEST_LDAP_USER_EMAIL_ATTRIBUTE_VALUE="pinny.ldap@example.com"
|
|||||||
export PINNIPED_TEST_LDAP_EXPECTED_DIRECT_GROUPS_DN="cn=ball-game-players,ou=beach-groups,ou=groups,dc=pinniped,dc=dev;cn=seals,ou=groups,dc=pinniped,dc=dev"
|
export PINNIPED_TEST_LDAP_EXPECTED_DIRECT_GROUPS_DN="cn=ball-game-players,ou=beach-groups,ou=groups,dc=pinniped,dc=dev;cn=seals,ou=groups,dc=pinniped,dc=dev"
|
||||||
export PINNIPED_TEST_LDAP_EXPECTED_INDIRECT_GROUPS_DN="cn=pinnipeds,ou=groups,dc=pinniped,dc=dev;cn=mammals,ou=groups,dc=pinniped,dc=dev"
|
export PINNIPED_TEST_LDAP_EXPECTED_INDIRECT_GROUPS_DN="cn=pinnipeds,ou=groups,dc=pinniped,dc=dev;cn=mammals,ou=groups,dc=pinniped,dc=dev"
|
||||||
export PINNIPED_TEST_LDAP_EXPECTED_DIRECT_GROUPS_CN="ball-game-players;seals"
|
export PINNIPED_TEST_LDAP_EXPECTED_DIRECT_GROUPS_CN="ball-game-players;seals"
|
||||||
|
export PINNIPED_TEST_LDAP_EXPECTED_DIRECT_POSIX_GROUPS_CN="ball-game-players-posix;seals-posix"
|
||||||
export PINNIPED_TEST_LDAP_EXPECTED_INDIRECT_GROUPS_CN="pinnipeds;mammals"
|
export PINNIPED_TEST_LDAP_EXPECTED_INDIRECT_GROUPS_CN="pinnipeds;mammals"
|
||||||
export PINNIPED_TEST_CLI_OIDC_ISSUER=https://dex.tools.svc.cluster.local/dex
|
export PINNIPED_TEST_CLI_OIDC_ISSUER=https://dex.tools.svc.cluster.local/dex
|
||||||
export PINNIPED_TEST_CLI_OIDC_ISSUER_CA_BUNDLE="${test_ca_bundle_pem}"
|
export PINNIPED_TEST_CLI_OIDC_ISSUER_CA_BUNDLE="${test_ca_bundle_pem}"
|
||||||
|
@ -688,7 +688,7 @@ func TestImpersonator(t *testing.T) {
|
|||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
|
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute)
|
||||||
t.Cleanup(cancel)
|
t.Cleanup(cancel)
|
||||||
|
|
||||||
// we need to create this listener ourselves because the API server
|
// we need to create this listener ourselves because the API server
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Package activedirectoryupstreamwatcher implements a controller which watches ActiveDirectoryIdentityProviders.
|
// Package activedirectoryupstreamwatcher implements a controller which watches ActiveDirectoryIdentityProviders.
|
||||||
@ -203,6 +203,10 @@ func (g *activeDirectoryUpstreamGenericLDAPGroupSearch) Filter() string {
|
|||||||
return g.groupSearch.Filter
|
return g.groupSearch.Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *activeDirectoryUpstreamGenericLDAPGroupSearch) UserAttributeForFilter() string {
|
||||||
|
return g.groupSearch.UserAttributeForFilter
|
||||||
|
}
|
||||||
|
|
||||||
func (g *activeDirectoryUpstreamGenericLDAPGroupSearch) GroupNameAttribute() string {
|
func (g *activeDirectoryUpstreamGenericLDAPGroupSearch) GroupNameAttribute() string {
|
||||||
if len(g.groupSearch.Attributes.GroupName) == 0 {
|
if len(g.groupSearch.Attributes.GroupName) == 0 {
|
||||||
return defaultActiveDirectoryGroupNameAttributeName
|
return defaultActiveDirectoryGroupNameAttributeName
|
||||||
@ -329,10 +333,11 @@ func (c *activeDirectoryWatcherController) validateUpstream(ctx context.Context,
|
|||||||
UIDAttribute: adUpstreamImpl.Spec().UserSearch().UIDAttribute(),
|
UIDAttribute: adUpstreamImpl.Spec().UserSearch().UIDAttribute(),
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: spec.GroupSearch.Base,
|
Base: spec.GroupSearch.Base,
|
||||||
Filter: adUpstreamImpl.Spec().GroupSearch().Filter(),
|
Filter: adUpstreamImpl.Spec().GroupSearch().Filter(),
|
||||||
GroupNameAttribute: adUpstreamImpl.Spec().GroupSearch().GroupNameAttribute(),
|
UserAttributeForFilter: adUpstreamImpl.Spec().GroupSearch().UserAttributeForFilter(),
|
||||||
SkipGroupRefresh: spec.GroupSearch.SkipGroupRefresh,
|
GroupNameAttribute: adUpstreamImpl.Spec().GroupSearch().GroupNameAttribute(),
|
||||||
|
SkipGroupRefresh: spec.GroupSearch.SkipGroupRefresh,
|
||||||
},
|
},
|
||||||
Dialer: c.ldapDialer,
|
Dialer: c.ldapDialer,
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2020-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2020-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package activedirectoryupstreamwatcher
|
package activedirectoryupstreamwatcher
|
||||||
@ -149,20 +149,25 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
now := metav1.NewTime(time.Now().UTC())
|
now := metav1.NewTime(time.Now().UTC())
|
||||||
|
|
||||||
const (
|
const (
|
||||||
testNamespace = "test-namespace"
|
testNamespace = "test-namespace"
|
||||||
testName = "test-name"
|
testName = "test-name"
|
||||||
testResourceUID = "test-uid"
|
testResourceUID = "test-uid"
|
||||||
testSecretName = "test-bind-secret"
|
|
||||||
testBindUsername = "test-bind-username"
|
testHost = "ldap.example.com:123"
|
||||||
testBindPassword = "test-bind-password"
|
|
||||||
testHost = "ldap.example.com:123"
|
testBindSecretName = "test-bind-secret"
|
||||||
testUserSearchBase = "test-user-search-base"
|
testBindUsername = "test-bind-username"
|
||||||
testUserSearchFilter = "test-user-search-filter"
|
testBindPassword = "test-bind-password"
|
||||||
testGroupSearchBase = "test-group-search-base"
|
|
||||||
testGroupSearchFilter = "test-group-search-filter"
|
testUserSearchBase = "test-user-search-base"
|
||||||
testUsernameAttrName = "test-username-attr"
|
testUserSearchFilter = "test-user-search-filter"
|
||||||
testGroupNameAttrName = "test-group-name-attr"
|
testUserSearchUsernameAttrName = "test-username-attr"
|
||||||
testUIDAttrName = "test-uid-attr"
|
testUserSearchUIDAttrName = "test-uid-attr"
|
||||||
|
|
||||||
|
testGroupSearchBase = "test-group-search-base"
|
||||||
|
testGroupSearchFilter = "test-group-search-filter"
|
||||||
|
testGroupSearchUserAttributeForFilter = "test-group-search-filter-user-attr-for-filter"
|
||||||
|
testGroupSearchNameAttrName = "test-group-name-attr"
|
||||||
)
|
)
|
||||||
|
|
||||||
testValidSecretData := map[string][]byte{"username": []byte(testBindUsername), "password": []byte(testBindPassword)}
|
testValidSecretData := map[string][]byte{"username": []byte(testBindUsername), "password": []byte(testBindPassword)}
|
||||||
@ -177,20 +182,21 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Spec: v1alpha1.ActiveDirectoryIdentityProviderSpec{
|
Spec: v1alpha1.ActiveDirectoryIdentityProviderSpec{
|
||||||
Host: testHost,
|
Host: testHost,
|
||||||
TLS: &v1alpha1.TLSSpec{CertificateAuthorityData: testCABundleBase64Encoded},
|
TLS: &v1alpha1.TLSSpec{CertificateAuthorityData: testCABundleBase64Encoded},
|
||||||
Bind: v1alpha1.ActiveDirectoryIdentityProviderBind{SecretName: testSecretName},
|
Bind: v1alpha1.ActiveDirectoryIdentityProviderBind{SecretName: testBindSecretName},
|
||||||
UserSearch: v1alpha1.ActiveDirectoryIdentityProviderUserSearch{
|
UserSearch: v1alpha1.ActiveDirectoryIdentityProviderUserSearch{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
Attributes: v1alpha1.ActiveDirectoryIdentityProviderUserSearchAttributes{
|
Attributes: v1alpha1.ActiveDirectoryIdentityProviderUserSearchAttributes{
|
||||||
Username: testUsernameAttrName,
|
Username: testUserSearchUsernameAttrName,
|
||||||
UID: testUIDAttrName,
|
UID: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
GroupSearch: v1alpha1.ActiveDirectoryIdentityProviderGroupSearch{
|
GroupSearch: v1alpha1.ActiveDirectoryIdentityProviderGroupSearch{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
Attributes: v1alpha1.ActiveDirectoryIdentityProviderGroupSearchAttributes{
|
Attributes: v1alpha1.ActiveDirectoryIdentityProviderGroupSearchAttributes{
|
||||||
GroupName: testGroupNameAttrName,
|
GroupName: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
SkipGroupRefresh: false,
|
SkipGroupRefresh: false,
|
||||||
},
|
},
|
||||||
@ -213,13 +219,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -252,7 +259,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Reason: "Success",
|
Reason: "Success",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
||||||
testHost, testBindUsername, testSecretName, secretVersion),
|
testHost, testBindUsername, testBindSecretName, secretVersion),
|
||||||
ObservedGeneration: gen,
|
ObservedGeneration: gen,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -324,7 +331,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
|
|
||||||
validBindUserSecret := func(secretVersion string) *corev1.Secret {
|
validBindUserSecret := func(secretVersion string) *corev1.Secret {
|
||||||
return &corev1.Secret{
|
return &corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: testSecretName, Namespace: testNamespace, ResourceVersion: secretVersion},
|
ObjectMeta: metav1.ObjectMeta{Name: testBindSecretName, Namespace: testNamespace, ResourceVersion: secretVersion},
|
||||||
Type: corev1.SecretTypeBasicAuth,
|
Type: corev1.SecretTypeBasicAuth,
|
||||||
Data: testValidSecretData,
|
Data: testValidSecretData,
|
||||||
}
|
}
|
||||||
@ -417,7 +424,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Status: "False",
|
Status: "False",
|
||||||
LastTransitionTime: now,
|
LastTransitionTime: now,
|
||||||
Reason: "SecretNotFound",
|
Reason: "SecretNotFound",
|
||||||
Message: fmt.Sprintf(`secret "%s" not found`, testSecretName),
|
Message: fmt.Sprintf(`secret "%s" not found`, testBindSecretName),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -429,7 +436,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
name: "secret has wrong type",
|
name: "secret has wrong type",
|
||||||
inputUpstreams: []runtime.Object{validUpstream},
|
inputUpstreams: []runtime.Object{validUpstream},
|
||||||
inputSecrets: []runtime.Object{&corev1.Secret{
|
inputSecrets: []runtime.Object{&corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: testSecretName, Namespace: testNamespace},
|
ObjectMeta: metav1.ObjectMeta{Name: testBindSecretName, Namespace: testNamespace},
|
||||||
Type: "some-other-type",
|
Type: "some-other-type",
|
||||||
Data: testValidSecretData,
|
Data: testValidSecretData,
|
||||||
}},
|
}},
|
||||||
@ -445,7 +452,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Status: "False",
|
Status: "False",
|
||||||
LastTransitionTime: now,
|
LastTransitionTime: now,
|
||||||
Reason: "SecretWrongType",
|
Reason: "SecretWrongType",
|
||||||
Message: fmt.Sprintf(`referenced Secret "%s" has wrong type "some-other-type" (should be "kubernetes.io/basic-auth")`, testSecretName),
|
Message: fmt.Sprintf(`referenced Secret "%s" has wrong type "some-other-type" (should be "kubernetes.io/basic-auth")`, testBindSecretName),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -457,7 +464,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
name: "secret is missing key",
|
name: "secret is missing key",
|
||||||
inputUpstreams: []runtime.Object{validUpstream},
|
inputUpstreams: []runtime.Object{validUpstream},
|
||||||
inputSecrets: []runtime.Object{&corev1.Secret{
|
inputSecrets: []runtime.Object{&corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: testSecretName, Namespace: testNamespace},
|
ObjectMeta: metav1.ObjectMeta{Name: testBindSecretName, Namespace: testNamespace},
|
||||||
Type: corev1.SecretTypeBasicAuth,
|
Type: corev1.SecretTypeBasicAuth,
|
||||||
}},
|
}},
|
||||||
wantErr: controllerlib.ErrSyntheticRequeue.Error(),
|
wantErr: controllerlib.ErrSyntheticRequeue.Error(),
|
||||||
@ -472,7 +479,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Status: "False",
|
Status: "False",
|
||||||
LastTransitionTime: now,
|
LastTransitionTime: now,
|
||||||
Reason: "SecretMissingKeys",
|
Reason: "SecretMissingKeys",
|
||||||
Message: fmt.Sprintf(`referenced Secret "%s" is missing required keys ["username" "password"]`, testSecretName),
|
Message: fmt.Sprintf(`referenced Secret "%s" is missing required keys ["username" "password"]`, testBindSecretName),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -555,13 +562,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -624,13 +632,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: "sAMAccountName",
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: "sAMAccountName",
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -696,13 +705,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -725,7 +735,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Reason: "Success",
|
Reason: "Success",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
||||||
"ldap.example.com", testBindUsername, testSecretName, "4242"),
|
"ldap.example.com", testBindUsername, testBindSecretName, "4242"),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
searchBaseFoundInConfigCondition(1234),
|
searchBaseFoundInConfigCondition(1234),
|
||||||
@ -745,7 +755,7 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Reason: "Success",
|
Reason: "Success",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
||||||
"ldap.example.com", testBindUsername, testSecretName, "4242"),
|
"ldap.example.com", testBindUsername, testBindSecretName, "4242"),
|
||||||
},
|
},
|
||||||
SearchBaseFoundCondition: condPtr(withoutTime(searchBaseFoundInConfigCondition(0))),
|
SearchBaseFoundCondition: condPtr(withoutTime(searchBaseFoundInConfigCondition(0))),
|
||||||
}},
|
}},
|
||||||
@ -775,13 +785,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -838,13 +849,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -988,13 +1000,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: exampleDefaultNamingContext,
|
Base: exampleDefaultNamingContext,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1137,13 +1150,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: exampleDefaultNamingContext,
|
Base: exampleDefaultNamingContext,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1208,13 +1222,14 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: exampleDefaultNamingContext,
|
Base: exampleDefaultNamingContext,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1477,9 +1492,10 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UIDAttribute: "objectGUID",
|
UIDAttribute: "objectGUID",
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={}))",
|
Filter: "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={}))",
|
||||||
GroupNameAttribute: "sAMAccountName",
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: "sAMAccountName",
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
GroupAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"sAMAccountName": groupSAMAccountNameWithDomainSuffix},
|
GroupAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"sAMAccountName": groupSAMAccountNameWithDomainSuffix},
|
||||||
@ -1537,9 +1553,10 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UIDAttribute: "objectGUID",
|
UIDAttribute: "objectGUID",
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: exampleDefaultNamingContext,
|
Base: exampleDefaultNamingContext,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1600,9 +1617,10 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UIDAttribute: "objectGUID",
|
UIDAttribute: "objectGUID",
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1663,9 +1681,10 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UIDAttribute: "objectGUID",
|
UIDAttribute: "objectGUID",
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: exampleDefaultNamingContext,
|
Base: exampleDefaultNamingContext,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1874,9 +1893,10 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UIDAttribute: "objectGUID",
|
UIDAttribute: "objectGUID",
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: exampleDefaultNamingContext,
|
Base: exampleDefaultNamingContext,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
@ -1931,14 +1951,15 @@ func TestActiveDirectoryUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
SkipGroupRefresh: true,
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
|
SkipGroupRefresh: true,
|
||||||
},
|
},
|
||||||
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
UIDAttributeParsingOverrides: map[string]func(*ldap.Entry) (string, error){"objectGUID": microsoftUUIDFromBinaryAttr("objectGUID")},
|
||||||
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
RefreshAttributeChecks: map[string]func(*ldap.Entry, provider.RefreshAttributes) error{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Package ldapupstreamwatcher implements a controller which watches LDAPIdentityProviders.
|
// Package ldapupstreamwatcher implements a controller which watches LDAPIdentityProviders.
|
||||||
@ -115,6 +115,10 @@ func (g *ldapUpstreamGenericLDAPGroupSearch) Filter() string {
|
|||||||
return g.groupSearch.Filter
|
return g.groupSearch.Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *ldapUpstreamGenericLDAPGroupSearch) UserAttributeForFilter() string {
|
||||||
|
return g.groupSearch.UserAttributeForFilter
|
||||||
|
}
|
||||||
|
|
||||||
func (g *ldapUpstreamGenericLDAPGroupSearch) GroupNameAttribute() string {
|
func (g *ldapUpstreamGenericLDAPGroupSearch) GroupNameAttribute() string {
|
||||||
return g.groupSearch.Attributes.GroupName
|
return g.groupSearch.Attributes.GroupName
|
||||||
}
|
}
|
||||||
@ -236,10 +240,11 @@ func (c *ldapWatcherController) validateUpstream(ctx context.Context, upstream *
|
|||||||
UIDAttribute: spec.UserSearch.Attributes.UID,
|
UIDAttribute: spec.UserSearch.Attributes.UID,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: spec.GroupSearch.Base,
|
Base: spec.GroupSearch.Base,
|
||||||
Filter: spec.GroupSearch.Filter,
|
Filter: spec.GroupSearch.Filter,
|
||||||
GroupNameAttribute: spec.GroupSearch.Attributes.GroupName,
|
UserAttributeForFilter: spec.GroupSearch.UserAttributeForFilter,
|
||||||
SkipGroupRefresh: spec.GroupSearch.SkipGroupRefresh,
|
GroupNameAttribute: spec.GroupSearch.Attributes.GroupName,
|
||||||
|
SkipGroupRefresh: spec.GroupSearch.SkipGroupRefresh,
|
||||||
},
|
},
|
||||||
Dialer: c.ldapDialer,
|
Dialer: c.ldapDialer,
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2020-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2020-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package ldapupstreamwatcher
|
package ldapupstreamwatcher
|
||||||
@ -148,20 +148,25 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
now := metav1.NewTime(time.Now().UTC())
|
now := metav1.NewTime(time.Now().UTC())
|
||||||
|
|
||||||
const (
|
const (
|
||||||
testNamespace = "test-namespace"
|
testNamespace = "test-namespace"
|
||||||
testName = "test-name"
|
testName = "test-name"
|
||||||
testResourceUID = "test-resource-uid"
|
testResourceUID = "test-resource-uid"
|
||||||
testSecretName = "test-bind-secret"
|
|
||||||
testBindUsername = "test-bind-username"
|
testHost = "ldap.example.com:123"
|
||||||
testBindPassword = "test-bind-password"
|
|
||||||
testHost = "ldap.example.com:123"
|
testBindSecretName = "test-bind-secret"
|
||||||
testUserSearchBase = "test-user-search-base"
|
testBindUsername = "test-bind-username"
|
||||||
testUserSearchFilter = "test-user-search-filter"
|
testBindPassword = "test-bind-password"
|
||||||
testGroupSearchBase = "test-group-search-base"
|
|
||||||
testGroupSearchFilter = "test-group-search-filter"
|
testUserSearchBase = "test-user-search-base"
|
||||||
testUsernameAttrName = "test-username-attr"
|
testUserSearchFilter = "test-user-search-filter"
|
||||||
testGroupNameAttrName = "test-group-name-attr"
|
testUserSearchUsernameAttrName = "test-username-attr"
|
||||||
testUIDAttrName = "test-uid-attr"
|
testUserSearchUIDAttrName = "test-uid-attr"
|
||||||
|
|
||||||
|
testGroupSearchBase = "test-group-search-base"
|
||||||
|
testGroupSearchFilter = "test-group-search-filter"
|
||||||
|
testGroupSearchUserAttributeForFilter = "test-group-search-filter-user-attr-for-filter"
|
||||||
|
testGroupSearchNameAttrName = "test-group-name-attr"
|
||||||
)
|
)
|
||||||
|
|
||||||
testValidSecretData := map[string][]byte{"username": []byte(testBindUsername), "password": []byte(testBindPassword)}
|
testValidSecretData := map[string][]byte{"username": []byte(testBindUsername), "password": []byte(testBindPassword)}
|
||||||
@ -181,20 +186,21 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Spec: v1alpha1.LDAPIdentityProviderSpec{
|
Spec: v1alpha1.LDAPIdentityProviderSpec{
|
||||||
Host: testHost,
|
Host: testHost,
|
||||||
TLS: &v1alpha1.TLSSpec{CertificateAuthorityData: testCABundleBase64Encoded},
|
TLS: &v1alpha1.TLSSpec{CertificateAuthorityData: testCABundleBase64Encoded},
|
||||||
Bind: v1alpha1.LDAPIdentityProviderBind{SecretName: testSecretName},
|
Bind: v1alpha1.LDAPIdentityProviderBind{SecretName: testBindSecretName},
|
||||||
UserSearch: v1alpha1.LDAPIdentityProviderUserSearch{
|
UserSearch: v1alpha1.LDAPIdentityProviderUserSearch{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
Attributes: v1alpha1.LDAPIdentityProviderUserSearchAttributes{
|
Attributes: v1alpha1.LDAPIdentityProviderUserSearchAttributes{
|
||||||
Username: testUsernameAttrName,
|
Username: testUserSearchUsernameAttrName,
|
||||||
UID: testUIDAttrName,
|
UID: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
GroupSearch: v1alpha1.LDAPIdentityProviderGroupSearch{
|
GroupSearch: v1alpha1.LDAPIdentityProviderGroupSearch{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
Attributes: v1alpha1.LDAPIdentityProviderGroupSearchAttributes{
|
Attributes: v1alpha1.LDAPIdentityProviderGroupSearchAttributes{
|
||||||
GroupName: testGroupNameAttrName,
|
GroupName: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
SkipGroupRefresh: false,
|
SkipGroupRefresh: false,
|
||||||
},
|
},
|
||||||
@ -217,13 +223,14 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,7 +257,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Reason: "Success",
|
Reason: "Success",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
||||||
testHost, testBindUsername, testSecretName, secretVersion),
|
testHost, testBindUsername, testBindSecretName, secretVersion),
|
||||||
ObservedGeneration: gen,
|
ObservedGeneration: gen,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,7 +289,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
|
|
||||||
validBindUserSecret := func(secretVersion string) *corev1.Secret {
|
validBindUserSecret := func(secretVersion string) *corev1.Secret {
|
||||||
return &corev1.Secret{
|
return &corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: testSecretName, Namespace: testNamespace, ResourceVersion: secretVersion},
|
ObjectMeta: metav1.ObjectMeta{Name: testBindSecretName, Namespace: testNamespace, ResourceVersion: secretVersion},
|
||||||
Type: corev1.SecretTypeBasicAuth,
|
Type: corev1.SecretTypeBasicAuth,
|
||||||
Data: testValidSecretData,
|
Data: testValidSecretData,
|
||||||
}
|
}
|
||||||
@ -346,7 +353,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Status: "False",
|
Status: "False",
|
||||||
LastTransitionTime: now,
|
LastTransitionTime: now,
|
||||||
Reason: "SecretNotFound",
|
Reason: "SecretNotFound",
|
||||||
Message: fmt.Sprintf(`secret "%s" not found`, testSecretName),
|
Message: fmt.Sprintf(`secret "%s" not found`, testBindSecretName),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -358,7 +365,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
name: "secret has wrong type",
|
name: "secret has wrong type",
|
||||||
inputUpstreams: []runtime.Object{validUpstream},
|
inputUpstreams: []runtime.Object{validUpstream},
|
||||||
inputSecrets: []runtime.Object{&corev1.Secret{
|
inputSecrets: []runtime.Object{&corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: testSecretName, Namespace: testNamespace},
|
ObjectMeta: metav1.ObjectMeta{Name: testBindSecretName, Namespace: testNamespace},
|
||||||
Type: "some-other-type",
|
Type: "some-other-type",
|
||||||
Data: testValidSecretData,
|
Data: testValidSecretData,
|
||||||
}},
|
}},
|
||||||
@ -374,7 +381,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Status: "False",
|
Status: "False",
|
||||||
LastTransitionTime: now,
|
LastTransitionTime: now,
|
||||||
Reason: "SecretWrongType",
|
Reason: "SecretWrongType",
|
||||||
Message: fmt.Sprintf(`referenced Secret "%s" has wrong type "some-other-type" (should be "kubernetes.io/basic-auth")`, testSecretName),
|
Message: fmt.Sprintf(`referenced Secret "%s" has wrong type "some-other-type" (should be "kubernetes.io/basic-auth")`, testBindSecretName),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -386,7 +393,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
name: "secret is missing key",
|
name: "secret is missing key",
|
||||||
inputUpstreams: []runtime.Object{validUpstream},
|
inputUpstreams: []runtime.Object{validUpstream},
|
||||||
inputSecrets: []runtime.Object{&corev1.Secret{
|
inputSecrets: []runtime.Object{&corev1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{Name: testSecretName, Namespace: testNamespace},
|
ObjectMeta: metav1.ObjectMeta{Name: testBindSecretName, Namespace: testNamespace},
|
||||||
Type: corev1.SecretTypeBasicAuth,
|
Type: corev1.SecretTypeBasicAuth,
|
||||||
}},
|
}},
|
||||||
wantErr: controllerlib.ErrSyntheticRequeue.Error(),
|
wantErr: controllerlib.ErrSyntheticRequeue.Error(),
|
||||||
@ -401,7 +408,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Status: "False",
|
Status: "False",
|
||||||
LastTransitionTime: now,
|
LastTransitionTime: now,
|
||||||
Reason: "SecretMissingKeys",
|
Reason: "SecretMissingKeys",
|
||||||
Message: fmt.Sprintf(`referenced Secret "%s" is missing required keys ["username" "password"]`, testSecretName),
|
Message: fmt.Sprintf(`referenced Secret "%s" is missing required keys ["username" "password"]`, testBindSecretName),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -484,13 +491,14 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -548,13 +556,14 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -571,7 +580,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Reason: "Success",
|
Reason: "Success",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
||||||
"ldap.example.com", testBindUsername, testSecretName, "4242"),
|
"ldap.example.com", testBindUsername, testBindSecretName, "4242"),
|
||||||
ObservedGeneration: 1234,
|
ObservedGeneration: 1234,
|
||||||
},
|
},
|
||||||
tlsConfigurationValidLoadedTrueCondition(1234),
|
tlsConfigurationValidLoadedTrueCondition(1234),
|
||||||
@ -590,7 +599,7 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
Reason: "Success",
|
Reason: "Success",
|
||||||
Message: fmt.Sprintf(
|
Message: fmt.Sprintf(
|
||||||
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
`successfully able to connect to "%s" and bind as user "%s" [validated with Secret "%s" at version "%s"]`,
|
||||||
"ldap.example.com", testBindUsername, testSecretName, "4242"),
|
"ldap.example.com", testBindUsername, testBindSecretName, "4242"),
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
@ -619,13 +628,14 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -675,13 +685,14 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1077,14 +1088,15 @@ func TestLDAPUpstreamWatcherControllerSync(t *testing.T) {
|
|||||||
UserSearch: upstreamldap.UserSearchConfig{
|
UserSearch: upstreamldap.UserSearchConfig{
|
||||||
Base: testUserSearchBase,
|
Base: testUserSearchBase,
|
||||||
Filter: testUserSearchFilter,
|
Filter: testUserSearchFilter,
|
||||||
UsernameAttribute: testUsernameAttrName,
|
UsernameAttribute: testUserSearchUsernameAttrName,
|
||||||
UIDAttribute: testUIDAttrName,
|
UIDAttribute: testUserSearchUIDAttrName,
|
||||||
},
|
},
|
||||||
GroupSearch: upstreamldap.GroupSearchConfig{
|
GroupSearch: upstreamldap.GroupSearchConfig{
|
||||||
Base: testGroupSearchBase,
|
Base: testGroupSearchBase,
|
||||||
Filter: testGroupSearchFilter,
|
Filter: testGroupSearchFilter,
|
||||||
GroupNameAttribute: testGroupNameAttrName,
|
UserAttributeForFilter: testGroupSearchUserAttributeForFilter,
|
||||||
SkipGroupRefresh: true,
|
GroupNameAttribute: testGroupSearchNameAttrName,
|
||||||
|
SkipGroupRefresh: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
package upstreamwatchers
|
package upstreamwatchers
|
||||||
@ -126,6 +126,7 @@ type UpstreamGenericLDAPUserSearch interface {
|
|||||||
type UpstreamGenericLDAPGroupSearch interface {
|
type UpstreamGenericLDAPGroupSearch interface {
|
||||||
Base() string
|
Base() string
|
||||||
Filter() string
|
Filter() string
|
||||||
|
UserAttributeForFilter() string
|
||||||
GroupNameAttribute() string
|
GroupNameAttribute() string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2021-2022 the Pinniped contributors. All Rights Reserved.
|
// Copyright 2021-2023 the Pinniped contributors. All Rights Reserved.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Package upstreamldap implements an abstraction of upstream LDAP IDP interactions.
|
// Package upstreamldap implements an abstraction of upstream LDAP IDP interactions.
|
||||||
@ -149,6 +149,10 @@ type GroupSearchConfig struct {
|
|||||||
// Filter is the filter to use for the group search in the upstream LDAP IDP. Empty means to use `member={}`.
|
// Filter is the filter to use for the group search in the upstream LDAP IDP. Empty means to use `member={}`.
|
||||||
Filter string
|
Filter string
|
||||||
|
|
||||||
|
// UserAttributeForFilter is the name of the user attribute whose value should be used to replace the placeholder
|
||||||
|
// in the Filter. Empty means to use 'dn'.
|
||||||
|
UserAttributeForFilter string
|
||||||
|
|
||||||
// GroupNameAttribute is the attribute in the LDAP group entry from which the group name should be
|
// GroupNameAttribute is the attribute in the LDAP group entry from which the group name should be
|
||||||
// retrieved. Empty means to use 'cn'.
|
// retrieved. Empty means to use 'cn'.
|
||||||
GroupNameAttribute string
|
GroupNameAttribute string
|
||||||
@ -166,13 +170,13 @@ type Provider struct {
|
|||||||
var _ provider.UpstreamLDAPIdentityProviderI = &Provider{}
|
var _ provider.UpstreamLDAPIdentityProviderI = &Provider{}
|
||||||
var _ authenticators.UserAuthenticator = &Provider{}
|
var _ authenticators.UserAuthenticator = &Provider{}
|
||||||
|
|
||||||
// Create a Provider. The config is not a pointer to ensure that a copy of the config is created,
|
// New creates a Provider. The config is not a pointer to ensure that a copy of the config is created,
|
||||||
// making the resulting Provider use an effectively read-only configuration.
|
// making the resulting Provider use an effectively read-only configuration.
|
||||||
func New(config ProviderConfig) *Provider {
|
func New(config ProviderConfig) *Provider {
|
||||||
return &Provider{c: config}
|
return &Provider{c: config}
|
||||||
}
|
}
|
||||||
|
|
||||||
// A reader for the config. Returns a copy of the config to keep the underlying config read-only.
|
// GetConfig is a reader for the config. Returns a copy of the config to keep the underlying config read-only.
|
||||||
func (p *Provider) GetConfig() ProviderConfig {
|
func (p *Provider) GetConfig() ProviderConfig {
|
||||||
return p.c
|
return p.c
|
||||||
}
|
}
|
||||||
@ -245,7 +249,15 @@ func (p *Provider) PerformRefresh(ctx context.Context, storedRefreshAttributes p
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
mappedGroupNames, err := p.searchGroupsForUserDN(conn, userDN)
|
var groupSearchUserAttributeForFilterValue string
|
||||||
|
if p.useGroupSearchUserAttributeForFilter() {
|
||||||
|
groupSearchUserAttributeForFilterValue, err = p.getSearchResultAttributeValue(p.c.GroupSearch.UserAttributeForFilter, userEntry, newUsername)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mappedGroupNames, err := p.searchGroupsForUserMembership(conn, userDN, groupSearchUserAttributeForFilterValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -358,7 +370,7 @@ func (p *Provider) tlsConfig() (*tls.Config, error) {
|
|||||||
return ptls.DefaultLDAP(rootCAs), nil
|
return ptls.DefaultLDAP(rootCAs), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// A name for this upstream provider.
|
// GetName returns a name for this upstream provider.
|
||||||
func (p *Provider) GetName() string {
|
func (p *Provider) GetName() string {
|
||||||
return p.c.Name
|
return p.c.Name
|
||||||
}
|
}
|
||||||
@ -367,7 +379,7 @@ func (p *Provider) GetResourceUID() types.UID {
|
|||||||
return p.c.ResourceUID
|
return p.c.ResourceUID
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a URL which uniquely identifies this LDAP provider, e.g. "ldaps://host.example.com:1234?base=user-search-base".
|
// GetURL returns a URL which uniquely identifies this LDAP provider, e.g. "ldaps://host.example.com:1234?base=user-search-base".
|
||||||
// This URL is not used for connecting to the provider, but rather is used for creating a globally unique user
|
// This URL is not used for connecting to the provider, but rather is used for creating a globally unique user
|
||||||
// identifier by being combined with the user's UID, since user UIDs are only unique within one provider.
|
// identifier by being combined with the user's UID, since user UIDs are only unique within one provider.
|
||||||
func (p *Provider) GetURL() *url.URL {
|
func (p *Provider) GetURL() *url.URL {
|
||||||
@ -412,7 +424,7 @@ func (p *Provider) DryRunAuthenticateUser(ctx context.Context, username string,
|
|||||||
return p.authenticateUserImpl(ctx, username, grantedScopes, endUserBindFunc)
|
return p.authenticateUserImpl(ctx, username, grantedScopes, endUserBindFunc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Authenticate an end user and return their mapped username, groups, and UID. Implements authenticators.UserAuthenticator.
|
// AuthenticateUser authenticates an end user and returns their mapped username, groups, and UID. Implements authenticators.UserAuthenticator.
|
||||||
func (p *Provider) AuthenticateUser(ctx context.Context, username, password string, grantedScopes []string) (*authenticators.Response, bool, error) {
|
func (p *Provider) AuthenticateUser(ctx context.Context, username, password string, grantedScopes []string) (*authenticators.Response, bool, error) {
|
||||||
endUserBindFunc := func(conn Conn, foundUserDN string) error {
|
endUserBindFunc := func(conn Conn, foundUserDN string) error {
|
||||||
return conn.Bind(foundUserDN, password)
|
return conn.Bind(foundUserDN, password)
|
||||||
@ -463,13 +475,13 @@ func (p *Provider) authenticateUserImpl(ctx context.Context, username string, gr
|
|||||||
return response, true, nil
|
return response, true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Provider) searchGroupsForUserDN(conn Conn, userDN string) ([]string, error) {
|
func (p *Provider) searchGroupsForUserMembership(conn Conn, userDN string, groupSearchUserAttributeForFilterValue string) ([]string, error) {
|
||||||
// If we do not have group search configured, skip this search.
|
// If we do not have group search configured, skip this search.
|
||||||
if len(p.c.GroupSearch.Base) == 0 {
|
if len(p.c.GroupSearch.Base) == 0 {
|
||||||
return []string{}, nil
|
return []string{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
searchResult, err := conn.SearchWithPaging(p.groupSearchRequest(userDN), groupSearchPageSize)
|
searchResult, err := conn.SearchWithPaging(p.groupSearchRequest(userDN, groupSearchUserAttributeForFilterValue), groupSearchPageSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf(`error searching for group memberships for user with DN %q: %w`, userDN, err)
|
return nil, fmt.Errorf(`error searching for group memberships for user with DN %q: %w`, userDN, err)
|
||||||
}
|
}
|
||||||
@ -594,7 +606,15 @@ func (p *Provider) searchAndBindUser(conn Conn, username string, grantedScopes [
|
|||||||
|
|
||||||
var mappedGroupNames []string
|
var mappedGroupNames []string
|
||||||
if slices.Contains(grantedScopes, oidcapi.ScopeGroups) {
|
if slices.Contains(grantedScopes, oidcapi.ScopeGroups) {
|
||||||
mappedGroupNames, err = p.searchGroupsForUserDN(conn, userEntry.DN)
|
var groupSearchUserAttributeForFilterValue string
|
||||||
|
if p.useGroupSearchUserAttributeForFilter() {
|
||||||
|
groupSearchUserAttributeForFilterValue, err = p.getSearchResultAttributeValue(p.c.GroupSearch.UserAttributeForFilter, userEntry, username)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mappedGroupNames, err = p.searchGroupsForUserMembership(conn, userEntry.DN, groupSearchUserAttributeForFilterValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -668,7 +688,7 @@ func (p *Provider) userSearchRequest(username string) *ldap.SearchRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Provider) groupSearchRequest(userDN string) *ldap.SearchRequest {
|
func (p *Provider) groupSearchRequest(userDN string, groupSearchUserAttributeForFilterValue string) *ldap.SearchRequest {
|
||||||
// See https://ldap.com/the-ldap-search-operation for general documentation of LDAP search options.
|
// See https://ldap.com/the-ldap-search-operation for general documentation of LDAP search options.
|
||||||
return &ldap.SearchRequest{
|
return &ldap.SearchRequest{
|
||||||
BaseDN: p.c.GroupSearch.Base,
|
BaseDN: p.c.GroupSearch.Base,
|
||||||
@ -677,7 +697,7 @@ func (p *Provider) groupSearchRequest(userDN string) *ldap.SearchRequest {
|
|||||||
SizeLimit: 0, // unlimited size because we will search with paging
|
SizeLimit: 0, // unlimited size because we will search with paging
|
||||||
TimeLimit: 90,
|
TimeLimit: 90,
|
||||||
TypesOnly: false,
|
TypesOnly: false,
|
||||||
Filter: p.groupSearchFilter(userDN),
|
Filter: p.groupSearchFilter(userDN, groupSearchUserAttributeForFilterValue),
|
||||||
Attributes: p.groupSearchRequestedAttributes(),
|
Attributes: p.groupSearchRequestedAttributes(),
|
||||||
Controls: nil, // nil because ldap.SearchWithPaging() will set the appropriate controls for us
|
Controls: nil, // nil because ldap.SearchWithPaging() will set the appropriate controls for us
|
||||||
}
|
}
|
||||||
@ -698,6 +718,11 @@ func (p *Provider) refreshUserSearchRequest(dn string) *ldap.SearchRequest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Provider) useGroupSearchUserAttributeForFilter() bool {
|
||||||
|
return len(p.c.GroupSearch.UserAttributeForFilter) > 0 &&
|
||||||
|
p.c.GroupSearch.UserAttributeForFilter != distinguishedNameAttributeName
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Provider) userSearchRequestedAttributes() []string {
|
func (p *Provider) userSearchRequestedAttributes() []string {
|
||||||
attributes := make([]string, 0, len(p.c.RefreshAttributeChecks)+2)
|
attributes := make([]string, 0, len(p.c.RefreshAttributeChecks)+2)
|
||||||
if p.c.UserSearch.UsernameAttribute != distinguishedNameAttributeName {
|
if p.c.UserSearch.UsernameAttribute != distinguishedNameAttributeName {
|
||||||
@ -706,6 +731,9 @@ func (p *Provider) userSearchRequestedAttributes() []string {
|
|||||||
if p.c.UserSearch.UIDAttribute != distinguishedNameAttributeName {
|
if p.c.UserSearch.UIDAttribute != distinguishedNameAttributeName {
|
||||||
attributes = append(attributes, p.c.UserSearch.UIDAttribute)
|
attributes = append(attributes, p.c.UserSearch.UIDAttribute)
|
||||||
}
|
}
|
||||||
|
if p.useGroupSearchUserAttributeForFilter() {
|
||||||
|
attributes = append(attributes, p.c.GroupSearch.UserAttributeForFilter)
|
||||||
|
}
|
||||||
for k := range p.c.RefreshAttributeChecks {
|
for k := range p.c.RefreshAttributeChecks {
|
||||||
attributes = append(attributes, k)
|
attributes = append(attributes, k)
|
||||||
}
|
}
|
||||||
@ -733,15 +761,20 @@ func (p *Provider) userSearchFilter(username string) string {
|
|||||||
return interpolateSearchFilter(p.c.UserSearch.Filter, safeUsername)
|
return interpolateSearchFilter(p.c.UserSearch.Filter, safeUsername)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Provider) groupSearchFilter(userDN string) string {
|
func (p *Provider) groupSearchFilter(userDN string, groupSearchUserAttributeForFilterValue string) string {
|
||||||
// The DN can contain characters that are considered special characters by LDAP searches, so it should be
|
valueToInterpolate := userDN
|
||||||
// escaped before being included in the search filter to prevent bad search syntax.
|
if p.useGroupSearchUserAttributeForFilter() {
|
||||||
// E.g. for the DN `CN=My User (Admin),OU=Users,OU=my,DC=my,DC=domain` we must escape the parens.
|
// Instead of using the DN in placeholder substitution, use the value of the specified attribute.
|
||||||
safeUserDN := p.escapeForSearchFilter(userDN)
|
valueToInterpolate = groupSearchUserAttributeForFilterValue
|
||||||
if len(p.c.GroupSearch.Filter) == 0 {
|
|
||||||
return fmt.Sprintf("(member=%s)", safeUserDN)
|
|
||||||
}
|
}
|
||||||
return interpolateSearchFilter(p.c.GroupSearch.Filter, safeUserDN)
|
// The value to interpolate can contain characters that are considered special characters by LDAP searches,
|
||||||
|
// so it should be escaped before being included in the search filter to prevent bad search syntax.
|
||||||
|
// E.g. for the DN `CN=My User (Admin),OU=Users,OU=my,DC=my,DC=domain` we must escape the parens.
|
||||||
|
escapedValueToInterpolate := p.escapeForSearchFilter(valueToInterpolate)
|
||||||
|
if len(p.c.GroupSearch.Filter) == 0 {
|
||||||
|
return fmt.Sprintf("(member=%s)", escapedValueToInterpolate)
|
||||||
|
}
|
||||||
|
return interpolateSearchFilter(p.c.GroupSearch.Filter, escapedValueToInterpolate)
|
||||||
}
|
}
|
||||||
|
|
||||||
func interpolateSearchFilter(filterFormat, valueToInterpolateIntoFilter string) string {
|
func interpolateSearchFilter(filterFormat, valueToInterpolateIntoFilter string) string {
|
||||||
|
@ -56,11 +56,13 @@ const (
|
|||||||
testUserDNWithSpecialCharsEscaped = `user DN with \2a \5c special characters \28\29`
|
testUserDNWithSpecialCharsEscaped = `user DN with \2a \5c special characters \28\29`
|
||||||
|
|
||||||
expectedGroupSearchPageSize = uint32(250)
|
expectedGroupSearchPageSize = uint32(250)
|
||||||
|
|
||||||
|
testGroupSearchFilterInterpolationSpec = "(some-group-filter=%s-and-more-filter=%s)"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
testUserSearchFilterInterpolated = fmt.Sprintf("(some-user-filter=%s-and-more-filter=%s)", testUpstreamUsername, testUpstreamUsername)
|
testUserSearchFilterInterpolated = fmt.Sprintf("(some-user-filter=%s-and-more-filter=%s)", testUpstreamUsername, testUpstreamUsername)
|
||||||
testGroupSearchFilterInterpolated = fmt.Sprintf("(some-group-filter=%s-and-more-filter=%s)", testUserSearchResultDNValue, testUserSearchResultDNValue)
|
testGroupSearchFilterInterpolated = fmt.Sprintf(testGroupSearchFilterInterpolationSpec, testUserSearchResultDNValue, testUserSearchResultDNValue)
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestEndUserAuthentication(t *testing.T) {
|
func TestEndUserAuthentication(t *testing.T) {
|
||||||
@ -714,6 +716,236 @@ func TestEndUserAuthentication(t *testing.T) {
|
|||||||
},
|
},
|
||||||
wantError: testutil.WantExactErrorString("found 0 values for attribute \"some-attribute-to-check-during-refresh\" while searching for user \"some-upstream-username\", but expected 1 result"),
|
wantError: testutil.WantExactErrorString("found 0 values for attribute \"some-attribute-to-check-during-refresh\" while searching for user \"some-upstream-username\", but expected 1 result"),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUIDAttribute, []string{testUserSearchResultUIDAttributeValue}),
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue"}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to interpolate the attr's value into the filter instead of interpolating the default (user's dn)
|
||||||
|
r.Filter = fmt.Sprintf(testGroupSearchFilterInterpolationSpec, "someUserAttrValue", "someUserAttrValue")
|
||||||
|
}), expectedGroupSearchPageSize).
|
||||||
|
Return(exampleGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
bindEndUserMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testUserSearchResultDNValue, testUpstreamPassword).Times(1)
|
||||||
|
},
|
||||||
|
wantAuthResponse: expectedAuthResponse(nil),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but groups scope is not granted so skips validating UserAttributeForFilter attribute value",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
grantedScopes: []string{}, // no groups scope
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(exampleUserSearchResult, nil).Times(1) // result does not contain someUserAttrName, but does not matter since group search is skipped
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
bindEndUserMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testUserSearchResultDNValue, testUpstreamPassword).Times(1)
|
||||||
|
},
|
||||||
|
wantAuthResponse: expectedAuthResponse(func(r *authenticators.Response) {
|
||||||
|
info := r.User.(*user.DefaultInfo)
|
||||||
|
info.Groups = nil
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but that attribute is not returned by the user search",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(exampleUserSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantError: testutil.WantExactErrorString("found 0 values for attribute \"someUserAttrName\" while searching for user \"some-upstream-username\", but expected 1 result"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but that attribute is returned by the user search with an empty value",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUIDAttribute, []string{testUserSearchResultUIDAttributeValue}),
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{""}), // empty value!
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantError: testutil.WantExactErrorString("found empty value for attribute \"someUserAttrName\" while searching for user \"some-upstream-username\", but expected value to be non-empty"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but that attribute is returned by the user search with multiple values",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUIDAttribute, []string{testUserSearchResultUIDAttributeValue}),
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue1", "someUserAttrValue2"}), // oops, multiple values!
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantError: testutil.WantExactErrorString("found 2 values for attribute \"someUserAttrName\" while searching for user \"some-upstream-username\", but expected 1 result"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to dn, it should act the same as when it is not set",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "dn"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(nil)).Return(exampleUserSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(nil), expectedGroupSearchPageSize).
|
||||||
|
Return(exampleGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
bindEndUserMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testUserSearchResultDNValue, testUpstreamPassword).Times(1)
|
||||||
|
},
|
||||||
|
wantAuthResponse: expectedAuthResponse(nil),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn and the value of that attr contains special characters which need to be escaped for an LDAP filter",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUIDAttribute, []string{testUserSearchResultUIDAttributeValue}),
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue&(abc)"}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to interpolate the attr's value into the filter instead of interpolating the default (user's dn)
|
||||||
|
r.Filter = fmt.Sprintf(testGroupSearchFilterInterpolationSpec, `someUserAttrValue&\28abc\29`, `someUserAttrValue&\28abc\29`)
|
||||||
|
}), expectedGroupSearchPageSize).
|
||||||
|
Return(exampleGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
bindEndUserMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testUserSearchResultDNValue, testUpstreamPassword).Times(1)
|
||||||
|
},
|
||||||
|
wantAuthResponse: expectedAuthResponse(nil),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but the group search filter is not set",
|
||||||
|
username: testUpstreamUsername,
|
||||||
|
password: testUpstreamPassword,
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.Filter = ""
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
searchMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName"}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUIDAttribute, []string{testUserSearchResultUIDAttributeValue}),
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue&(abc)"}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to interpolate the attr's value into the filter instead of interpolating the default (user's dn)
|
||||||
|
r.Filter = `(member=someUserAttrValue&\28abc\29)` // note that "member={}" is the default group search filter
|
||||||
|
}), expectedGroupSearchPageSize).
|
||||||
|
Return(exampleGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
bindEndUserMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testUserSearchResultDNValue, testUpstreamPassword).Times(1)
|
||||||
|
},
|
||||||
|
wantAuthResponse: expectedAuthResponse(nil),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "when dial fails",
|
name: "when dial fails",
|
||||||
username: testUpstreamUsername,
|
username: testUpstreamUsername,
|
||||||
@ -1486,7 +1718,8 @@ func TestUpstreamRefresh(t *testing.T) {
|
|||||||
}),
|
}),
|
||||||
setupMocks: func(conn *mockldapconn.MockConn) {
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
conn.EXPECT().Search(expectedUserSearch(nil)).Return(happyPathUserSearchResult, nil).Times(1) // note that group search is not expected
|
conn.EXPECT().Search(expectedUserSearch(nil)).Return(happyPathUserSearchResult, nil).Times(1)
|
||||||
|
// note that group search is not expected
|
||||||
conn.EXPECT().Close().Times(1)
|
conn.EXPECT().Close().Times(1)
|
||||||
},
|
},
|
||||||
wantGroups: nil, // do not update groups
|
wantGroups: nil, // do not update groups
|
||||||
@ -1497,11 +1730,240 @@ func TestUpstreamRefresh(t *testing.T) {
|
|||||||
setupMocks: func(conn *mockldapconn.MockConn) {
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
conn.EXPECT().Search(expectedUserSearch(nil)).Return(happyPathUserSearchResult, nil).Times(1)
|
conn.EXPECT().Search(expectedUserSearch(nil)).Return(happyPathUserSearchResult, nil).Times(1)
|
||||||
|
// note that group search is not expected
|
||||||
conn.EXPECT().Close().Times(1)
|
conn.EXPECT().Close().Times(1)
|
||||||
},
|
},
|
||||||
grantedScopes: []string{},
|
grantedScopes: []string{},
|
||||||
wantGroups: nil,
|
wantGroups: nil,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "happy path where group search is configured but skipGroupRefresh is set, when the UserAttributeForFilter is set to something other than dn, still skips group refresh, and skips validating UserAttributeForFilter attribute value",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.SkipGroupRefresh = true
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(happyPathUserSearchResult, nil).Times(1)
|
||||||
|
// note that group search is not expected
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantGroups: nil, // do not update groups
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "happy path where group search is configured but groups scope isn't included, when the UserAttributeForFilter is set to something other than dn, still skips group refresh, and skips validating UserAttributeForFilter attribute value",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(happyPathUserSearchResult, nil).Times(1)
|
||||||
|
// note that group search is not expected
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
grantedScopes: []string{},
|
||||||
|
wantGroups: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "happy path when the UserAttributeForFilter is set to something other than dn",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
{
|
||||||
|
Name: testUserSearchUIDAttribute,
|
||||||
|
ByteValues: [][]byte{[]byte(testUserSearchResultUIDAttributeValue)},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: pwdLastSetAttribute,
|
||||||
|
Values: []string{"132801740800000000"},
|
||||||
|
ByteValues: [][]byte{[]byte("132801740800000000")},
|
||||||
|
},
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue"}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to interpolate the attr's value into the filter instead of interpolating the default (user's dn)
|
||||||
|
r.Filter = fmt.Sprintf(testGroupSearchFilterInterpolationSpec, "someUserAttrValue", "someUserAttrValue")
|
||||||
|
}), expectedGroupSearchPageSize).Return(happyPathGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantGroups: []string{testGroupSearchResultGroupNameAttributeValue1, testGroupSearchResultGroupNameAttributeValue2},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "happy path when the UserAttributeForFilter is set to something other than dn but the group search filter is not set",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.Filter = ""
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
{
|
||||||
|
Name: testUserSearchUIDAttribute,
|
||||||
|
ByteValues: [][]byte{[]byte(testUserSearchResultUIDAttributeValue)},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: pwdLastSetAttribute,
|
||||||
|
Values: []string{"132801740800000000"},
|
||||||
|
ByteValues: [][]byte{[]byte("132801740800000000")},
|
||||||
|
},
|
||||||
|
// additionally get back the attr from the user search
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue&(abc)"}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to interpolate the attr's value into the filter instead of interpolating the default (user's dn)
|
||||||
|
r.Filter = `(member=someUserAttrValue&\28abc\29)` // member={} is the default, and special chars are escaped
|
||||||
|
}), expectedGroupSearchPageSize).Return(happyPathGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantGroups: []string{testGroupSearchResultGroupNameAttributeValue1, testGroupSearchResultGroupNameAttributeValue2},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but that attribute is not returned by the user search",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
{
|
||||||
|
Name: testUserSearchUIDAttribute,
|
||||||
|
ByteValues: [][]byte{[]byte(testUserSearchResultUIDAttributeValue)},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: pwdLastSetAttribute,
|
||||||
|
Values: []string{"132801740800000000"},
|
||||||
|
ByteValues: [][]byte{[]byte("132801740800000000")},
|
||||||
|
},
|
||||||
|
// did not return "someUserAttrName" attribute
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantErr: "found 0 values for attribute \"someUserAttrName\" while searching for user \"some-upstream-username-value\", but expected 1 result",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but that attribute is returned by the user search with an empty value",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
{
|
||||||
|
Name: testUserSearchUIDAttribute,
|
||||||
|
ByteValues: [][]byte{[]byte(testUserSearchResultUIDAttributeValue)},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: pwdLastSetAttribute,
|
||||||
|
Values: []string{"132801740800000000"},
|
||||||
|
ByteValues: [][]byte{[]byte("132801740800000000")},
|
||||||
|
},
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{""}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantErr: "found empty value for attribute \"someUserAttrName\" while searching for user \"some-upstream-username-value\", but expected value to be non-empty",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "when the UserAttributeForFilter is set to something other than dn but that attribute is returned by the user search with a multiple values",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "someUserAttrName"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(func(r *ldap.SearchRequest) {
|
||||||
|
// need to additionally ask for the attribute when performing user search
|
||||||
|
r.Attributes = []string{testUserSearchUsernameAttribute, testUserSearchUIDAttribute, "someUserAttrName", pwdLastSetAttribute}
|
||||||
|
})).Return(&ldap.SearchResult{
|
||||||
|
Entries: []*ldap.Entry{
|
||||||
|
{
|
||||||
|
DN: testUserSearchResultDNValue,
|
||||||
|
Attributes: []*ldap.EntryAttribute{
|
||||||
|
ldap.NewEntryAttribute(testUserSearchUsernameAttribute, []string{testUserSearchResultUsernameAttributeValue}),
|
||||||
|
{
|
||||||
|
Name: testUserSearchUIDAttribute,
|
||||||
|
ByteValues: [][]byte{[]byte(testUserSearchResultUIDAttributeValue)},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: pwdLastSetAttribute,
|
||||||
|
Values: []string{"132801740800000000"},
|
||||||
|
ByteValues: [][]byte{[]byte("132801740800000000")},
|
||||||
|
},
|
||||||
|
ldap.NewEntryAttribute("someUserAttrName", []string{"someUserAttrValue1", "someUserAttrValue2"}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantErr: "found 2 values for attribute \"someUserAttrName\" while searching for user \"some-upstream-username-value\", but expected 1 result",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "happy path when the UserAttributeForFilter is set to dn, it should act the same as when it is not set",
|
||||||
|
providerConfig: providerConfig(func(p *ProviderConfig) {
|
||||||
|
p.GroupSearch.UserAttributeForFilter = "dn"
|
||||||
|
}),
|
||||||
|
setupMocks: func(conn *mockldapconn.MockConn) {
|
||||||
|
conn.EXPECT().Bind(testBindUsername, testBindPassword).Times(1)
|
||||||
|
conn.EXPECT().Search(expectedUserSearch(nil)).Return(happyPathUserSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().SearchWithPaging(expectedGroupSearch(nil), expectedGroupSearchPageSize).Return(happyPathGroupSearchResult, nil).Times(1)
|
||||||
|
conn.EXPECT().Close().Times(1)
|
||||||
|
},
|
||||||
|
wantGroups: []string{testGroupSearchResultGroupNameAttributeValue1, testGroupSearchResultGroupNameAttributeValue2},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "error where dial fails",
|
name: "error where dial fails",
|
||||||
providerConfig: providerConfig(nil),
|
providerConfig: providerConfig(nil),
|
||||||
|
@ -131,9 +131,18 @@ spec:
|
|||||||
|
|
||||||
# Specify the search filter which should be applied when searching for
|
# Specify the search filter which should be applied when searching for
|
||||||
# groups for a user. "{}" will be replaced by the dn (distinguished
|
# groups for a user. "{}" will be replaced by the dn (distinguished
|
||||||
# name) of the user entry found as a result of the user search.
|
# name) of the user entry found as a result of the user search, or by
|
||||||
|
# the attribute specified by userAttributeForFilter below.
|
||||||
filter: "&(objectClass=group)(member={})"
|
filter: "&(objectClass=group)(member={})"
|
||||||
|
|
||||||
|
# Specify what user attribute should be used to replace the "{}"
|
||||||
|
# placeholder in the group search filter. This defaults to "dn".
|
||||||
|
# For example, if you wanted to instead use posixGroups, you
|
||||||
|
# would set the group search filter to
|
||||||
|
# "&(objectClass=posixGroup)(memberUid={})" and set the
|
||||||
|
# userAttributeForFilter to "uid".
|
||||||
|
userAttributeForFilter: "dn"
|
||||||
|
|
||||||
# Specify which fields from each group entry should be used upon
|
# Specify which fields from each group entry should be used upon
|
||||||
# successful login.
|
# successful login.
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -101,9 +101,18 @@ spec:
|
|||||||
|
|
||||||
# Specify the search filter which should be applied when searching for
|
# Specify the search filter which should be applied when searching for
|
||||||
# groups for a user. "{}" will be replaced by the dn (distinguished
|
# groups for a user. "{}" will be replaced by the dn (distinguished
|
||||||
# name) of the user entry found as a result of the user search.
|
# name) of the user entry found as a result of the user search, or by
|
||||||
|
# the attribute specified by userAttributeForFilter below.
|
||||||
filter: "&(objectClass=groupOfNames)(member={})"
|
filter: "&(objectClass=groupOfNames)(member={})"
|
||||||
|
|
||||||
|
# Specify what user attribute should be used to replace the "{}"
|
||||||
|
# placeholder in the group search filter. This defaults to "dn".
|
||||||
|
# For example, if you wanted to instead use posixGroups, you
|
||||||
|
# would set the group search filter to
|
||||||
|
# "&(objectClass=posixGroup)(memberUid={})" and set the
|
||||||
|
# userAttributeForFilter to "uid".
|
||||||
|
userAttributeForFilter: "dn"
|
||||||
|
|
||||||
# Specify which fields from each group entry should be used upon
|
# Specify which fields from each group entry should be used upon
|
||||||
# successful login.
|
# successful login.
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -247,9 +247,18 @@ spec:
|
|||||||
|
|
||||||
# Specify the search filter which should be applied when searching for
|
# Specify the search filter which should be applied when searching for
|
||||||
# groups for a user. "{}" will be replaced by the dn (distinguished
|
# groups for a user. "{}" will be replaced by the dn (distinguished
|
||||||
# name) of the user entry found as a result of the user search.
|
# name) of the user entry found as a result of the user search, or by
|
||||||
|
# the attribute specified by userAttributeForFilter below.
|
||||||
filter: "&(objectClass=groupOfNames)(member={})"
|
filter: "&(objectClass=groupOfNames)(member={})"
|
||||||
|
|
||||||
|
# Specify what user attribute should be used to replace the "{}"
|
||||||
|
# placeholder in the group search filter. This defaults to "dn".
|
||||||
|
# For example, if you wanted to instead use posixGroups, you
|
||||||
|
# would set the group search filter to
|
||||||
|
# "&(objectClass=posixGroup)(memberUid={})" and set the
|
||||||
|
# userAttributeForFilter to "uid".
|
||||||
|
userAttributeForFilter: "dn"
|
||||||
|
|
||||||
# Specify which fields from each group entry should be used upon
|
# Specify which fields from each group entry should be used upon
|
||||||
# successful login.
|
# successful login.
|
||||||
attributes:
|
attributes:
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user