diff --git a/server/accounts.go b/server/accounts.go index 9a89c62449f..07f76608671 100644 --- a/server/accounts.go +++ b/server/accounts.go @@ -4028,17 +4028,13 @@ func (dr *DirAccResolver) apply(opts ...DirResOption) error { return nil } -func NewDirAccResolver(path string, limit int64, syncInterval time.Duration, delete bool, opts ...DirResOption) (*DirAccResolver, error) { +func NewDirAccResolver(path string, limit int64, syncInterval time.Duration, deleteType deleteType, opts ...DirResOption) (*DirAccResolver, error) { if limit == 0 { limit = math.MaxInt64 } if syncInterval <= 0 { syncInterval = time.Minute } - deleteType := NoDelete - if delete { - deleteType = RenameDeleted - } store, err := NewExpiringDirJWTStore(path, false, true, deleteType, 0, limit, false, 0, nil) if err != nil { return nil, err diff --git a/server/opts.go b/server/opts.go index 8bf29a79599..df37ec9289e 100644 --- a/server/opts.go +++ b/server/opts.go @@ -1127,6 +1127,8 @@ func (o *Options) processConfigFileLine(k string, v interface{}, errors *[]error } case map[string]interface{}: del := false + hdel := false + hdel_set := false dir := "" dirType := "" limit := int64(0) @@ -1146,6 +1148,11 @@ func (o *Options) processConfigFileLine(k string, v interface{}, errors *[]error _, v := unwrapValue(v, <) del = v.(bool) } + if v, ok := v["hard_delete"]; ok { + _, v := unwrapValue(v, <) + hdel_set = true + hdel = v.(bool) + } if v, ok := v["limit"]; ok { _, v := unwrapValue(v, <) limit = v.(int64) @@ -1186,12 +1193,23 @@ func (o *Options) processConfigFileLine(k string, v interface{}, errors *[]error if del { *errors = append(*errors, &configErr{tk, "CACHE does not accept allow_delete"}) } + if hdel_set { + *errors = append(*errors, &configErr{tk, "CACHE does not accept hard_delete"}) + } res, err = NewCacheDirAccResolver(dir, limit, ttl, opts...) case "FULL": if ttl != 0 { *errors = append(*errors, &configErr{tk, "FULL does not accept ttl"}) } - res, err = NewDirAccResolver(dir, limit, sync, del, opts...) + deleteType := NoDelete + if del { + if hdel { + deleteType = HardDelete + } else { + deleteType = RenameDeleted + } + } + res, err = NewDirAccResolver(dir, limit, sync, deleteType, opts...) } if err != nil { *errors = append(*errors, &configErr{tk, err.Error()})