mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-10-29 09:42:25 +00:00
sdk/ldaputil: add connection_timeout configurable (#20144)
* sdk/ldaputil: add connection_timeout configurable * changelog * Update doc * Fix test * Change default to 30s
This commit is contained in:
@@ -832,6 +832,7 @@ func testAccStepConfigUrl(t *testing.T, cfg *ldaputil.ConfigEntry) logicaltest.T
|
|||||||
"case_sensitive_names": true,
|
"case_sensitive_names": true,
|
||||||
"token_policies": "abc,xyz",
|
"token_policies": "abc,xyz",
|
||||||
"request_timeout": cfg.RequestTimeout,
|
"request_timeout": cfg.RequestTimeout,
|
||||||
|
"connection_timeout": cfg.ConnectionTimeout,
|
||||||
"username_as_alias": cfg.UsernameAsAlias,
|
"username_as_alias": cfg.UsernameAsAlias,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -854,6 +855,7 @@ func testAccStepConfigUrlWithAuthBind(t *testing.T, cfg *ldaputil.ConfigEntry) l
|
|||||||
"case_sensitive_names": true,
|
"case_sensitive_names": true,
|
||||||
"token_policies": "abc,xyz",
|
"token_policies": "abc,xyz",
|
||||||
"request_timeout": cfg.RequestTimeout,
|
"request_timeout": cfg.RequestTimeout,
|
||||||
|
"connection_timeout": cfg.ConnectionTimeout,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -874,6 +876,7 @@ func testAccStepConfigUrlWithDiscover(t *testing.T, cfg *ldaputil.ConfigEntry) l
|
|||||||
"case_sensitive_names": true,
|
"case_sensitive_names": true,
|
||||||
"token_policies": "abc,xyz",
|
"token_policies": "abc,xyz",
|
||||||
"request_timeout": cfg.RequestTimeout,
|
"request_timeout": cfg.RequestTimeout,
|
||||||
|
"connection_timeout": cfg.ConnectionTimeout,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -891,6 +894,7 @@ func testAccStepConfigUrlNoGroupDN(t *testing.T, cfg *ldaputil.ConfigEntry) logi
|
|||||||
"discoverdn": true,
|
"discoverdn": true,
|
||||||
"case_sensitive_names": true,
|
"case_sensitive_names": true,
|
||||||
"request_timeout": cfg.RequestTimeout,
|
"request_timeout": cfg.RequestTimeout,
|
||||||
|
"connection_timeout": cfg.ConnectionTimeout,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -911,6 +915,7 @@ func testAccStepConfigUrlWarningCheck(t *testing.T, cfg *ldaputil.ConfigEntry, o
|
|||||||
"case_sensitive_names": true,
|
"case_sensitive_names": true,
|
||||||
"token_policies": "abc,xyz",
|
"token_policies": "abc,xyz",
|
||||||
"request_timeout": cfg.RequestTimeout,
|
"request_timeout": cfg.RequestTimeout,
|
||||||
|
"connection_timeout": cfg.ConnectionTimeout,
|
||||||
},
|
},
|
||||||
Check: func(response *logical.Response) error {
|
Check: func(response *logical.Response) error {
|
||||||
if len(response.Warnings) == 0 {
|
if len(response.Warnings) == 0 {
|
||||||
@@ -1192,6 +1197,7 @@ func TestLdapAuthBackend_ConfigUpgrade(t *testing.T) {
|
|||||||
"token_period": "5m",
|
"token_period": "5m",
|
||||||
"token_explicit_max_ttl": "24h",
|
"token_explicit_max_ttl": "24h",
|
||||||
"request_timeout": cfg.RequestTimeout,
|
"request_timeout": cfg.RequestTimeout,
|
||||||
|
"connection_timeout": cfg.ConnectionTimeout,
|
||||||
},
|
},
|
||||||
Storage: storage,
|
Storage: storage,
|
||||||
Connection: &logical.Connection{},
|
Connection: &logical.Connection{},
|
||||||
@@ -1233,6 +1239,7 @@ func TestLdapAuthBackend_ConfigUpgrade(t *testing.T) {
|
|||||||
CaseSensitiveNames: falseBool,
|
CaseSensitiveNames: falseBool,
|
||||||
UsePre111GroupCNBehavior: new(bool),
|
UsePre111GroupCNBehavior: new(bool),
|
||||||
RequestTimeout: cfg.RequestTimeout,
|
RequestTimeout: cfg.RequestTimeout,
|
||||||
|
ConnectionTimeout: cfg.ConnectionTimeout,
|
||||||
UsernameAsAlias: false,
|
UsernameAsAlias: false,
|
||||||
DerefAliases: "never",
|
DerefAliases: "never",
|
||||||
},
|
},
|
||||||
|
|||||||
4
changelog/20144.txt
Normal file
4
changelog/20144.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
```release-note:improvement
|
||||||
|
sdk/ldaputil: added `connection_timeout` to tune connection timeout duration
|
||||||
|
for all LDAP plugins.
|
||||||
|
```
|
||||||
@@ -31,6 +31,12 @@ func (c *Client) DialLDAP(cfg *ConfigEntry) (Connection, error) {
|
|||||||
var retErr *multierror.Error
|
var retErr *multierror.Error
|
||||||
var conn Connection
|
var conn Connection
|
||||||
urls := strings.Split(cfg.Url, ",")
|
urls := strings.Split(cfg.Url, ",")
|
||||||
|
|
||||||
|
// Default timeout in the pacakge is 60 seconds, which we default to on our
|
||||||
|
// end. This is useful if you want to take advantage of the URL list to increase
|
||||||
|
// availability of LDAP.
|
||||||
|
ldap.DefaultTimeout = time.Duration(cfg.ConnectionTimeout) * time.Second
|
||||||
|
|
||||||
for _, uut := range urls {
|
for _, uut := range urls {
|
||||||
u, err := url.Parse(uut)
|
u, err := url.Parse(uut)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -239,6 +239,12 @@ Default: ({{.UserAttr}}={{.Username}})`,
|
|||||||
Default: "90s",
|
Default: "90s",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"connection_timeout": {
|
||||||
|
Type: framework.TypeDurationSecond,
|
||||||
|
Description: "Timeout, in seconds, when attempting to connect to the LDAP server before trying the next URL in the configuration.",
|
||||||
|
Default: "30s",
|
||||||
|
},
|
||||||
|
|
||||||
"dereference_aliases": {
|
"dereference_aliases": {
|
||||||
Type: framework.TypeString,
|
Type: framework.TypeString,
|
||||||
Description: "When aliases should be dereferenced on search operations. Accepted values are 'never', 'finding', 'searching', 'always'. Defaults to 'never'.",
|
Description: "When aliases should be dereferenced on search operations. Accepted values are 'never', 'finding', 'searching', 'always'. Defaults to 'never'.",
|
||||||
@@ -411,6 +417,10 @@ func NewConfigEntry(existing *ConfigEntry, d *framework.FieldData) (*ConfigEntry
|
|||||||
cfg.RequestTimeout = d.Get("request_timeout").(int)
|
cfg.RequestTimeout = d.Get("request_timeout").(int)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, ok := d.Raw["connection_timeout"]; ok || !hadExisting {
|
||||||
|
cfg.ConnectionTimeout = d.Get("connection_timeout").(int)
|
||||||
|
}
|
||||||
|
|
||||||
if _, ok := d.Raw["dereference_aliases"]; ok || !hadExisting {
|
if _, ok := d.Raw["dereference_aliases"]; ok || !hadExisting {
|
||||||
cfg.DerefAliases = d.Get("dereference_aliases").(string)
|
cfg.DerefAliases = d.Get("dereference_aliases").(string)
|
||||||
}
|
}
|
||||||
@@ -441,6 +451,7 @@ type ConfigEntry struct {
|
|||||||
UseTokenGroups bool `json:"use_token_groups"`
|
UseTokenGroups bool `json:"use_token_groups"`
|
||||||
UsePre111GroupCNBehavior *bool `json:"use_pre111_group_cn_behavior"`
|
UsePre111GroupCNBehavior *bool `json:"use_pre111_group_cn_behavior"`
|
||||||
RequestTimeout int `json:"request_timeout"`
|
RequestTimeout int `json:"request_timeout"`
|
||||||
|
ConnectionTimeout int `json:"connection_timeout"`
|
||||||
DerefAliases string `json:"dereference_aliases"`
|
DerefAliases string `json:"dereference_aliases"`
|
||||||
|
|
||||||
// These json tags deviate from snake case because there was a past issue
|
// These json tags deviate from snake case because there was a past issue
|
||||||
@@ -479,6 +490,7 @@ func (c *ConfigEntry) PasswordlessMap() map[string]interface{} {
|
|||||||
"use_token_groups": c.UseTokenGroups,
|
"use_token_groups": c.UseTokenGroups,
|
||||||
"anonymous_group_search": c.AnonymousGroupSearch,
|
"anonymous_group_search": c.AnonymousGroupSearch,
|
||||||
"request_timeout": c.RequestTimeout,
|
"request_timeout": c.RequestTimeout,
|
||||||
|
"connection_timeout": c.ConnectionTimeout,
|
||||||
"username_as_alias": c.UsernameAsAlias,
|
"username_as_alias": c.UsernameAsAlias,
|
||||||
"dereference_aliases": c.DerefAliases,
|
"dereference_aliases": c.DerefAliases,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,15 +74,16 @@ func testConfig(t *testing.T) *ConfigEntry {
|
|||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
return &ConfigEntry{
|
return &ConfigEntry{
|
||||||
Url: "ldap://138.91.247.105",
|
Url: "ldap://138.91.247.105",
|
||||||
UserDN: "example,com",
|
UserDN: "example,com",
|
||||||
BindDN: "kitty",
|
BindDN: "kitty",
|
||||||
BindPassword: "cats",
|
BindPassword: "cats",
|
||||||
TLSMaxVersion: "tls12",
|
TLSMaxVersion: "tls12",
|
||||||
TLSMinVersion: "tls12",
|
TLSMinVersion: "tls12",
|
||||||
RequestTimeout: 30,
|
RequestTimeout: 30,
|
||||||
ClientTLSCert: "",
|
ConnectionTimeout: 15,
|
||||||
ClientTLSKey: "",
|
ClientTLSCert: "",
|
||||||
|
ClientTLSKey: "",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,6 +142,7 @@ var jsonConfig = []byte(`{
|
|||||||
"tls_max_version": "tls12",
|
"tls_max_version": "tls12",
|
||||||
"tls_min_version": "tls12",
|
"tls_min_version": "tls12",
|
||||||
"request_timeout": 30,
|
"request_timeout": 30,
|
||||||
|
"connection_timeout": 15,
|
||||||
"ClientTLSCert": "",
|
"ClientTLSCert": "",
|
||||||
"ClientTLSKey": ""
|
"ClientTLSKey": ""
|
||||||
}`)
|
}`)
|
||||||
@@ -171,6 +173,7 @@ var jsonConfigDefault = []byte(`
|
|||||||
"use_pre111_group_cn_behavior": null,
|
"use_pre111_group_cn_behavior": null,
|
||||||
"username_as_alias": false,
|
"username_as_alias": false,
|
||||||
"request_timeout": 90,
|
"request_timeout": 90,
|
||||||
|
"connection_timeout": 30,
|
||||||
"dereference_aliases": "never",
|
"dereference_aliases": "never",
|
||||||
"CaseSensitiveNames": false,
|
"CaseSensitiveNames": false,
|
||||||
"ClientTLSCert": "",
|
"ClientTLSCert": "",
|
||||||
|
|||||||
@@ -35,6 +35,9 @@ This endpoint configures the LDAP auth method.
|
|||||||
names will be normalized to lower case. Case will still be preserved when
|
names will be normalized to lower case. Case will still be preserved when
|
||||||
sending the username to the LDAP server at login time; this is only for
|
sending the username to the LDAP server at login time; this is only for
|
||||||
matching local user/group definitions.
|
matching local user/group definitions.
|
||||||
|
- `connection_timeout` `(integer: 30 or string: "30s")` - Timeout, in seconds,
|
||||||
|
when attempting to connect to the LDAP server before trying the next URL in
|
||||||
|
the configuration.
|
||||||
- `request_timeout` `(integer: 90 or string: "90s")` - Timeout, in seconds, for
|
- `request_timeout` `(integer: 90 or string: "90s")` - Timeout, in seconds, for
|
||||||
the connection when making requests against the server before returning back
|
the connection when making requests against the server before returning back
|
||||||
an error.
|
an error.
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ text that fulfills those requirements. `{{PASSWORD}}` must appear exactly once a
|
|||||||
### Connection parameters
|
### Connection parameters
|
||||||
|
|
||||||
- `url` (string, optional) - The LDAP server to connect to. Examples: `ldaps://ldap.myorg.com`, `ldaps://ldap.myorg.com:636`. This can also be a comma-delineated list of URLs, e.g. `ldaps://ldap.myorg.com,ldaps://ldap.myorg.com:636`, in which case the servers will be tried in-order if there are errors during the connection process. Default is `ldap://127.0.0.1`.
|
- `url` (string, optional) - The LDAP server to connect to. Examples: `ldaps://ldap.myorg.com`, `ldaps://ldap.myorg.com:636`. This can also be a comma-delineated list of URLs, e.g. `ldaps://ldap.myorg.com,ldaps://ldap.myorg.com:636`, in which case the servers will be tried in-order if there are errors during the connection process. Default is `ldap://127.0.0.1`.
|
||||||
|
- `connection_timeout` `(integer: 30 or string: "30s")` - Timeout, in seconds, when attempting to connect to the LDAP server before trying the next URL in the configuration.
|
||||||
- `request_timeout` `(integer: 90 or string: "90s")` - Timeout, in seconds, for the connection when making requests against the server before returning back an error.
|
- `request_timeout` `(integer: 90 or string: "90s")` - Timeout, in seconds, for the connection when making requests against the server before returning back an error.
|
||||||
- `starttls` (bool, optional) - If true, issues a `StartTLS` command after establishing an unencrypted connection.
|
- `starttls` (bool, optional) - If true, issues a `StartTLS` command after establishing an unencrypted connection.
|
||||||
- `insecure_tls` - (bool, optional) - If true, skips LDAP server SSL certificate verification - insecure, use with caution!
|
- `insecure_tls` - (bool, optional) - If true, skips LDAP server SSL certificate verification - insecure, use with caution!
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ to search and change entry passwords in LDAP.
|
|||||||
string for authentication. The constructed UPN will appear as `[binddn]@[upndomain]`. For
|
string for authentication. The constructed UPN will appear as `[binddn]@[upndomain]`. For
|
||||||
example, if `upndomain=example.com` and `binddn=admin`, the UPN string `admin@example.com`
|
example, if `upndomain=example.com` and `binddn=admin`, the UPN string `admin@example.com`
|
||||||
will be used to log in to Active Directory.
|
will be used to log in to Active Directory.
|
||||||
|
- `connection_timeout` `(integer: 30 or string: "30s")` - Timeout, in seconds,
|
||||||
|
when attempting to connect to the LDAP server before trying the next URL in
|
||||||
|
the configuration.
|
||||||
- `request_timeout` `(integer: 90, string: "90s" <optional>)` - Timeout, in seconds, for the connection when
|
- `request_timeout` `(integer: 90, string: "90s" <optional>)` - Timeout, in seconds, for the connection when
|
||||||
making requests against the server before returning back an error.
|
making requests against the server before returning back an error.
|
||||||
- `starttls` `(bool: <optional>)` - If true, issues a `StartTLS` command after establishing an unencrypted connection.
|
- `starttls` `(bool: <optional>)` - If true, issues a `StartTLS` command after establishing an unencrypted connection.
|
||||||
|
|||||||
Reference in New Issue
Block a user