mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 10:37:56 +00:00 
			
		
		
		
	Don't hash time.Time values in return data maps, they may be useful for reconciling values and are not generally secret
This commit is contained in:
		| @@ -207,21 +207,15 @@ func (w *hashWalker) Struct(v reflect.Value) error { | |||||||
| 		return errors.New("time.Time value in a non map key cannot be hashed for audits") | 		return errors.New("time.Time value in a non map key cannot be hashed for audits") | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Override location to be a MapValue. loc is set to None since we |  | ||||||
| 	// already "entered" the struct. We could do better here by keeping |  | ||||||
| 	// a stack of locations and checking the last entry. |  | ||||||
| 	w.loc = reflectwalk.MapValue |  | ||||||
|  |  | ||||||
| 	// Create a string value of the time. IMPORTANT: this must never change | 	// Create a string value of the time. IMPORTANT: this must never change | ||||||
| 	// across Vault versions or the hash value of equivalent time.Time will | 	// across Vault versions or the hash value of equivalent time.Time will | ||||||
| 	// change. | 	// change. | ||||||
| 	strVal := v.Interface().(time.Time).UTC().Format(time.RFC3339Nano) | 	strVal := v.Interface().(time.Time).Format(time.RFC3339Nano) | ||||||
|  |  | ||||||
| 	// Walk it as if it were a primitive value with the string value. | 	// Set the map value to the string instead of the time.Time object | ||||||
| 	// This will replace the currenty map value (which is a time.Time). | 	m := w.cs[len(w.cs)-1] | ||||||
| 	if err := w.Primitive(reflect.ValueOf(strVal)); err != nil { | 	mk := w.csData.(reflect.Value) | ||||||
| 		return err | 	m.SetMapIndex(mk, reflect.ValueOf(strVal)) | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// Skip this entry so that we don't walk the struct. | 	// Skip this entry so that we don't walk the struct. | ||||||
| 	return reflectwalk.SkipEntry | 	return reflectwalk.SkipEntry | ||||||
|   | |||||||
| @@ -143,7 +143,7 @@ func TestHash(t *testing.T) { | |||||||
|  |  | ||||||
| 					// Responses can contain time values, so test that with | 					// Responses can contain time values, so test that with | ||||||
| 					// a known fixed value. | 					// a known fixed value. | ||||||
| 					"bar": time.Unix(1494264707, 0), | 					"bar": now, | ||||||
| 				}, | 				}, | ||||||
| 				WrapInfo: &wrapping.ResponseWrapInfo{ | 				WrapInfo: &wrapping.ResponseWrapInfo{ | ||||||
| 					TTL:             60, | 					TTL:             60, | ||||||
| @@ -155,7 +155,7 @@ func TestHash(t *testing.T) { | |||||||
| 			&logical.Response{ | 			&logical.Response{ | ||||||
| 				Data: map[string]interface{}{ | 				Data: map[string]interface{}{ | ||||||
| 					"foo": "hmac-sha256:f9320baf0249169e73850cd6156ded0106e2bb6ad8cab01b7bbbebe6d1065317", | 					"foo": "hmac-sha256:f9320baf0249169e73850cd6156ded0106e2bb6ad8cab01b7bbbebe6d1065317", | ||||||
| 					"bar": "hmac-sha256:b09b815a7d1c3bbcf702f9c9a50ef6408d0935bea0154383a128ca8743eb06fc", | 					"bar": now.Format(time.RFC3339Nano), | ||||||
| 				}, | 				}, | ||||||
| 				WrapInfo: &wrapping.ResponseWrapInfo{ | 				WrapInfo: &wrapping.ResponseWrapInfo{ | ||||||
| 					TTL:             60, | 					TTL:             60, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jeff Mitchell
					Jeff Mitchell