Commit Graph

322 Commits

Author SHA1 Message Date
Peter Hamilton bc3e81b577 Add KMIP 2.0-style attribute handling
This change adds a new Attributes object to the object hierarchy,
which replaces TemplateAttributes in KMIP 2.0. The old attribute
components, like the AttributeName and AttributeIndex, are no
longer used and are instead replaced with the KMIP TTLV tag for
the attributes in question. This brings the attribute encoding
process in line with the rest of the KMIP specification.

To support this change, additional attribute and enumeration
utility functions have been added to simply attribute building
and attribute/enumeration validity checking. New test cases
covering this new functionality are also included.
2019-02-22 09:59:05 -05:00
Peter Hamilton dcade2a264 Update object hierarchy read/write to support the KMIP version
This change updates the PyKMIP object hierarchy's read/write
method signatures to support propagation of the KMIP version. The
introduction of KMIP 2.0 introduces future KMIP message encodings
that break backwards compatibility; to support this, PyKMIP must
know what KMIP version is being used when encoding or decoding an
object; the KMIP version residing in the client or server alone
is now insufficient. Prior versions of KMIP, namely 1.0 - 1.4,
have been backwards compatible, obviating the need for the KMIP
version at encode/decode time. Going forward, this is no longer
true.

The PyKMIP client and server have been updated to include the
KMIP version when making calls to read/write, as have the
associated test cases covering this functionality.
2019-02-06 17:06:47 -05:00
Peter Hamilton f75a74922a Migrate from using assertRaisesRegexp to assertRaisesRegex 2019-01-28 10:38:05 -05:00
Peter Hamilton 4828e0d845 Fix AttributeError in client Rekey results with missing payloads
This change fixes a bug in the KMIPProxy client's support for the
Rekey operation. Specifically, if the operation fails and does not
return a payload, the client will still try to reference the
payload object when checking for TemplateAttribute data. This
causes an AttributeError since the payload is None. This change
fixes this and adds a unit test that covers this specific case.

Fixes #474
2018-12-07 08:58:36 -05:00
Peter Hamilton c5e4c4a290 Update the PyKMIP clients to support changing their KMIP version
This change updates the PyKMIP clients, adding support for getting
and setting the KMIP version they use when making KMIP requests.
You can now do:

>>> client.kmip_version

to get the KMIP version enumeration the client is using. Use:

>>> client.kmip_version = enums.KMIPVersion.KMIP_1_1

to set the KMIP version the client uses.

The client unit tests have been updated to check and cover these
changes.

Fixes #470
2018-12-04 15:01:24 -05:00
Peter Hamilton 40c064a290 Update the server to nominally support KMIP 1.3 and 1.4
This change updates the list of KMIP versions supported by the
server. While the server does not support any specific KMIP 1.3
or 1.4 features, the protocol formats are compatible across KMIP
1.0 to 1.4. Without this change, KMIP 1.3 and 1.4 requests for
older operations, like Create, Get, and Destroy, would fail.

This change also updates the server unit tests impacted by this
change.

Closes #451
2018-12-04 12:42:00 -05:00
Peter Hamilton 9a5db6d5e1 Fix pending deprecation warnings caused by dependency upgrades
This change fixes various pending deprecation warnings throughout
the library caused by recent updates to different dependencies.
While PyKMIP no longer directly triggers these warnings, some
dependencies still do when run through the test suite.
2018-11-16 11:42:05 -05:00
Peter Hamilton 8abe3de8cb Remove invalid escape sequences
A recent style update to Python 3.6 adds deprecation W605, which
tightens the usage of invalid escape sequences. This patch removes
any instances of invalid escape sequences from the PyKMIP code
base, bringing the library back up to compliance with Python style.
2018-11-15 13:53:06 -05:00
Peter Hamilton b878dbfdf9
Merge pull request #438 from OpenKMIP/feat/update-access-denied-error
Raise PermissionDenied on access control violations
2018-05-17 15:55:16 -04:00
Peter Hamilton 8b99c74d0b Raise PermissionDenied on access control violations
This change changes the error the server uses when access control
violations occur, specifically swapping from the more agnostic
ItemNotFound to the more explicit PermissionDenied. This change
better conforms with the expected behavior of a KMIP server.
2018-05-17 14:23:07 -04:00
Peter Hamilton 008f86cfa9 Rename the 'default' policy section to 'preset'
This change tweaks the format of operation policy files, renaming
the 'default' section of each policy to 'preset'. This reinforces
the idea that this section of the policy is used only when group-
based access control is disabled. It also removes any ambiguity
between this section of the policy and the actual 'default'
policy built into the server.
2018-05-17 13:55:50 -04:00
Peter Hamilton b5e7323845 Add functional tests for server auth and access control
This change adds a new integration test suite, named 'functional',
that is specifically intended to test third-party authentication
and group-based access control with the PyKMIP server. A new tox
environment is added to handle running these tests separately from
the existing 'integration' test suite. New Travis CI configuration
and setup files have also been added to facilitate running these
tests automatically.
2018-05-09 01:21:03 -04:00
Peter Hamilton 3a7b880bdf Fix a denial-of-service bug by setting the server socket timeout
This change fixes a potential denial-of-service bug with the
server, setting a default timeout for all server sockets. This
allows the server to drop hung connections without blocking
forever. The interrupt triggered during accept calls is expected
and is now handled appropriately. Server unit tests have been
updated to reflect this change.

Closes #430
2018-04-24 21:57:20 -04:00
Peter Hamilton f9e32552f8 Add client support for custom configuration file paths
This change adds client support for setting custom configuration
file paths, allowing users and developers to place their settings
file wherever they want. All client demo scripts have been updated
to support a '-s' flag that can be used to set the configuration
file for the demo. Client unit tests have also been updated to
include this change.
2018-04-17 14:41:04 -04:00
Peter Hamilton 664c9964c8 Add Check support to the payload factories
This change adds Check payload support to the payload factories.
Payload factory unit tests have been updated to account for the
change.
2018-04-17 00:32:20 -04:00
Peter Hamilton cf0ec6c429 Add Rekey support to the payload factories
This change adds Rekey payload support to the payload factories.
Payload factory unit tests have been updated to account for the
change.

Fixes #424
2018-04-15 23:38:37 -04:00
Peter Hamilton 2e6384a067 Add server support for customizing the backend storage file
This change updates the server, adding in support for customizing
the backend storage file used to store all server data. The server
currently uses a simple SQLite database for storage. Prior versions
of the server kept this database file in /tmp, to emphasize the
testing focus of the server. This change loosens that restriction,
now allowing users to customize where the database file lives. A
new configuration option, 'database_path', has been added that will
override the default /tmp location for the database file. This
value can also be passed in if invoking the server via script using
the '-d' flag.
2018-04-16 14:14:10 -04:00
Peter Hamilton 5b5607a8c7 Add Rekey support to the ProxyKmipClient
This change adds Rekey operation support to the ProxyKmipClient.
The client unit test suite has been updated to cover the new code.

Closes #405
2018-04-15 23:26:13 -04:00
Peter Hamilton 66929198c3 Add Rekey support to the KMIPProxy client
This change adds Rekey operation support to the KMIPProxy client.
The client unit test suite has been updated to cover the new
additions.

Partially addresses #405
2018-04-15 16:45:53 -04:00
Peter Hamilton a604ae17b3
Merge pull request #420 from OpenKMIP/feat/add-rekey-payloads
Add the request and response payloads for the Rekey operation
2018-04-13 16:04:15 -04:00
Peter Hamilton 9be760a0a1
Merge pull request #416 from OpenKMIP/feat/add-policy-file-monitoring
Integrate policy file monitoring with the server
2018-04-13 09:34:32 -04:00
Peter Hamilton 412b452adf Add the request and response payloads for the Rekey operation
This change adds the request/response payloads for the Rekey
operation. Unit tests are included to cover the new payloads. The
payloads package is also updated to allow direct import of the
Rekey payloads going forward.

Partially addresses #405
2018-04-12 22:34:58 -04:00
Peter Hamilton 33d1aabf76
Merge pull request #419 from OpenKMIP/bug/fix-create-key-pair-masks
Fix cryptographic usage mask handling for CreateKeyPair
2018-04-11 22:17:00 -04:00
Peter Hamilton 950e98569e Fix cryptographic usage mask handling for CreateKeyPair
This change fixes how the ProxyKmipClient handles cryptographic
usage mask values for the CreateKeyPair operation. Originally,
both Encrypt and Decrypt were set by default for both public and
private keys. This is incorrect behavior for certain algorithms.
Now, only the masks specified by the caller are set on the key
pair.

Fixes #412
2018-04-11 21:51:32 -04:00
Peter Hamilton 25f6cc9e5c Add cryptographic usage mask support for DeriveKey
This change updates the ProxyKmipClient support for the DeriveKey
operation, now allowing the caller to specify a list of
CryptographicUsageMask enumerations to set on the newly derived
key.

Fixes #417
2018-04-11 20:44:20 -04:00
Peter Hamilton 05b5b8411a Integrate policy file monitoring with the server
This change updates the server, integrating policy file monitoring
and restructuring the engine. The top-level server entity now
handles loading policy files using the PolicyDirectoryMonitor
subprocess. A shared memory dictionary is used to share newly
modified policy data across the session threads managed by the
server and used by the engine. The legacy policy loading code in
the engine has been removed.

Unit tests have been added and modified for both the server and
engine to verify the functionality of these modifications.
2018-04-11 13:42:44 -04:00
Peter Hamilton 055483d663 Add a policy directory monitor
This change adds a PolicyDirectoryMonitor subprocess that can be
used by the server to continuously monitor and load operation
policies from the configured operation policy directory. The
monitor tracks policy file modifications, file creation, and file
deletion, restoring legacy policies from existing policy files
should the current file backing a policy get deleted. Changes to
existing policies are detected and updated as soon as the backing
policy file is saved to disk.

An extensive unit test is included to exercise the different
operating conditions the monitor may encounter.
2018-04-10 14:32:27 -04:00
Peter Hamilton 804a59d75d Add Check support to the ProxyKmipClient
This change adds Check operation support to the ProxyKmipClient.
The client unit test suite has been updated to cover the new code.

Partially addresses #405
2018-04-06 19:47:10 -04:00
Peter Hamilton 822b889f2e Add Check support to the KMIPProxy client
This change adds Check operation support to the KMIPProxy client.
The client unit test suite has been updated to cover the new
additions.

Partially addresses #405
2018-04-06 00:02:36 -04:00
Peter Hamilton 74f20428f6 Fix a client bug for cryptographic parameter handling
This change fixes a bug with the ProxyKmipClient handling of
cryptographic parameters, specifically handling the case where
no cryptographic parameters are provided for an operation method
call. When no parameters are specified, None is now correctly
propagated through to request handling. A client unit test has
been added to cover this fix.

Fixes #406
2018-04-02 13:03:02 -04:00
Peter Hamilton 1a093f141e Update the server session to use the auth plugin framework
This change updates how the server session handles message
processing, adding support for the new authentication plugin
framework. Session unit tests have been updated to account for
this change.
2018-03-30 09:08:39 -04:00
Peter Hamilton f145662e1f Update ProxyKmipClient register to support name attributes
This change updates the ProxyKmipClient support for the Register
operation, adding the ability to register Name attributes with
the managed object being registered. This matches the functionality
available when using the Create operation.

Fixes #400
2018-03-22 11:03:03 -04:00
Peter Hamilton e215ddbe7b Update server config handling to parse auth plugin settings
This change updates server configuration handling, allowing the
server to parse and store configuration settings for authentication
plugins. Unit tests have been added to cover the new functionality.
2018-03-19 16:52:34 -04:00
Peter Hamilton 98f5ba39e3 Add an authentication plugin framework
This change adds an authentication plugin framework to be used by
the PyKMIP server. This framework will allow the server to query
third-party authentication systems for user identity information,
improving the access control model for the server. The initial
plugin provided queries an instance of the new SLUGS library.
2018-03-06 22:53:29 -05:00
Peter Hamilton 5c5012f524 Add AttestationCredential support
This change adds an implementation of the AttestationCredential
introduced in KMIP 1.2. The underlying Nonce struct is included.
Unit test suites for both objects are provided. Finally, the
Credential struct has also been updated to support the new
credential type.
2018-03-03 09:34:43 -05:00
Peter Hamilton 8d492fcda4 Update the Authentication object
This change updates the Authentication object, taking into account
the recent changes made to the Credential object hierarchy. A new
comprehensive unit test suite has been added for the Authentication
object. Usage of the object in the PyKMIP server has also been
updated to reflect these changes.
2018-02-26 10:23:25 -05:00
Peter Hamilton 86b23a9d53 Update the Credential objects
This change updates the implementation of the Credential objects.
The UsernamePassword and Device credentials are now first-class
objects and, along with the base Credential, have been restructured
to match the current struct style. Comprehensive unit test suites
for each class have been added. Additionally, the credential
factory code and its usage in the KMIPProxy class and associated
test suites have been updated to reflect this change.
2018-02-25 10:29:52 -05:00
Peter Hamilton dd4a078cc1 Update the ProtocolVersion implementation
This change updates the implementation of the ProtocolVersion
struct, bringing it inline with the current struct style. All
uses of the struct have been updated to reflect these changes,
as have the struct unit tests.
2018-02-22 13:35:11 -05:00
Peter Hamilton 61347d80b6 Update the server to support group-based operation policies
This change updates the PyKMIP server, allowing it to process and
use group-based operation policies. The server still supports the
original operation policy file format, so no immediate difference
should be apparent to users. Future documentation changes will
explain group-based policy files and how they should be used.
2018-02-19 12:12:40 -05:00
Peter Hamilton b84af4f88d Add payload for the Poll operation
This change adds the request payload for the Poll operation. A unit
test suite for the payload is included. The payload can be imported
directly from the payloads package.
2017-12-08 13:10:34 -05:00
Peter Hamilton 42da7f1d15 Add payloads for the ObtainLease operation
This change adds request and response payloads for the ObtainLease
operation. Unit test suites are included for both payloads and
both payloads can be imported directly from the payloads package.
2017-12-08 11:36:25 -05:00
Peter Hamilton 827b682583 Add payloads for the Recover operation
This change adds request and response payloads for the Recover
operation. Unit test suites are included for both payloads and
both payloads can be imported directly from the payloads package.
2017-12-08 08:43:06 -05:00
Peter Hamilton 53cbab7396 Add payloads for the Check operation
This change adds the request and response payloads needed for the
Check operation. Unit tests have been added to cover the new
payload structures.
2017-12-08 06:26:25 -05:00
Peter Hamilton 4c4bddc521 Add payloads for the GetUsageAllocation operation
This change adds request and response payloads for the
GetUsageAllocation operation. Unit test suites are included for
both payloads and both payloads can be imported directly from the
payloads package.
2017-12-08 05:58:40 -05:00
Peter Hamilton f23dde88cf Add payloads for the Cancel operation
This change adds request and response payloads for the Cancel
operation. Unit test suites are included for both payloads. Both
payloads can be imported directly from the payloads package.
2017-12-08 05:09:44 -05:00
Peter Hamilton 54b1df7726 Remove unused error code
This change removes unused exceptions defined in core/errors.py,
along with the errors.py module itself. The few used items from
this file are migrated over to core/exceptions.py. Any dependent
code is updated, dropping the use of errors.py and adding in the
use of exceptions.py.
2017-12-07 20:59:23 -05:00
Peter Hamilton 0b08301606 Add payloads for the Archive operation
This change adds request and response payloads for the Archive
operation. Unit test suites are included for both payloads and
both payloads can be imported directly from the payloads package.
2017-12-07 19:04:36 -05:00
Peter Hamilton 187ed7e924 Remove dead KeyFactory code
This change removes the KeyFactory code from the factories package.
It was unused and has been replaced with direct key object creation
where needed.
2017-12-07 18:15:54 -05:00
Peter Hamilton e77dcadf41 Fixing violations of E722 for flake8 checks
This change fixes violations of E722, the use of except without
specifying an exception type. For now the high-level Exception
class is used as a generic catchall. In the future these cases
will be updated to handle the specific exceptions expected.
2017-10-23 08:43:36 -04:00
Peter Hamilton 626798b327 Merge pull request #355 from OpenKMIP/feat/remove-client-api
Remove the KmipClient API class
2017-10-24 09:42:24 -04:00