Commit Graph

10 Commits

Author SHA1 Message Date
Kyle Isom
29dd3b2411 Fix the concurrent map write error. (#177)
+ Add a lock to the keycache.
+ Ensure that all instantiations of keycaches use New, rather
  than the old keycache.Cache{make()} construct. This no longer
  works with the lock in place.
+ Update travis to run the race detector on a few specific packages
  that should help identify this type of problem in the future.
2016-12-06 15:41:18 -08:00
Gábor Lipták
6b9fad5e9d Cleanup Go Report Card warnings 2016-11-09 17:21:39 -05:00
Kyle Isom
510b7ba9f6 Implementation of a file-backed persistence store. (#160)
This is a rather large change. It consists of the following changes:

+ Direct access to the keycache has been removed from the core
  package. This forces all interaction with the cache to go
  through the Cryptor, which is required for persistence. The
  Cryptor needs to know when the cache has changed, and the only
  way to do this effectively is to make the Cryptor responsible
  for managing the keycache.

+ A new persist package has been added. This provides a Store
  interface, for which two implementations are provided. The
  first is a null persister: this is used when no persistence
  is configured. The second is a file-backed persistence store.

+ The Cryptor now persists the cache every time it changes.

Additionally, a number of missing returns in a function in the core
package have been added.
2016-08-04 17:12:08 -07:00
Andrew Buss
24fc3bb7d8 Fix "invalid key size 0" when decrypting after a delegation expires
The keycache does not remove active delegations when uses drops to zero;
rather it only removes these when Refresh is called.

So Valid returns true even if the user's delegation has expired,
so fullMatch is not set to false in unwrapKey,
so DecryptKey fails since the keycache refreshes and finds the delegation has expired,
so tmpKeyValue is left empty and decryptErr is set.

Since decryptErr is only used to break out of the inner loop, and
fullMatch wasn't set to false, no error is returned from unwrapKey.
So aesKey in DecryptKey is an empty string, causing an error when
passed to aes.NewCipher.

This commit actively removes a delegation from the keycache when it
is used for the last time, and properly handles errors thrown by
DecryptKey in unwrapKey.
2015-12-04 02:15:53 -08:00
ejcx
c9a381d5c2 Multiple delegations to redoctober
The idea is to create a new type (to avoid ugly string parsing) and
then, instead of iterating through delegations with the username, iterate
through the delegations and look for your username and matching slot. Also
in cases we don't have the slot (everything but delegation), find the slot
when we match a user.
2015-11-11 08:26:26 -08:00
Kyle Isom
923804458d goimports and go vet cleanups. 2015-05-07 15:35:07 -07:00
Brendan Mc
e61103147c Minimized global state and made user type an option. 2015-05-01 16:10:55 -07:00
Nick Sullivan
8e910c2035 Changes to delegation model
- decryption can happen by non-admins
- encrypted files can be given labels
- delegation can limit decryption to specific users and labels
2015-04-09 17:15:44 -07:00
Nick Sullivan
669d7279c2 Make testcode play nice with go vet 2013-11-26 12:15:37 -08:00
Albert Strasheim
9c5d08f665 Make repository work with go get 2013-11-21 12:01:25 -08:00