syncbase/vsync:
1. Fixes nil pointer dereferencing in sync_state.
2. Fixes syncgroup authorization in the responder.
Bug fix for https://github.com/vanadium/issues/issues/1354
Change-Id: Ifae2d507287fe027ec80b652b3c60becb8782189
diff --git a/services/syncbase/vsync/responder.go b/services/syncbase/vsync/responder.go
index 8b79979..49c16f3 100644
--- a/services/syncbase/vsync/responder.go
+++ b/services/syncbase/vsync/responder.go
@@ -183,27 +183,24 @@
// Check permissions for the syncgroup.
var sg *interfaces.Syncgroup
sg, err = getSyncgroupByGid(ctx, rSt.st, sgid)
- if err != nil {
- vlog.Errorf("sync: authorizeAndFilterSyncgroups: accessing syncgroup information failed %v, err %v", sgid, err)
- continue
+ if err == nil {
+ err = authorize(ctx, rSt.call.Security(), sg)
}
- err = authorize(ctx, rSt.call.Security(), sg)
- if verror.ErrorID(err) == verror.ErrNoAccess.ID {
+ if err == nil {
+ if !rSt.sg {
+ for _, c := range sg.Spec.Collections {
+ allowedPfxs[toCollectionPrefixStr(c)] = struct{}{}
+ }
+ }
+ } else {
+ delete(rSt.sgIds, sgid)
if rSt.sg {
delete(rSt.initVecs, string(sgid))
}
- continue
- } else if err != nil {
- return err
+ if verror.ErrorID(err) != verror.ErrNoAccess.ID {
+ vlog.Errorf("sync: authorizeAndFilterSyncgroups: accessing/authorizing syncgroup failed %v, err %v", sgid, err)
+ }
}
-
- for _, c := range sg.Spec.Collections {
- allowedPfxs[toCollectionPrefixStr(c)] = struct{}{}
- }
- }
-
- if err != nil {
- return err
}
if rSt.sg {
diff --git a/services/syncbase/vsync/sync_state.go b/services/syncbase/vsync/sync_state.go
index 3dd55be..e63ce3b 100644
--- a/services/syncbase/vsync/sync_state.go
+++ b/services/syncbase/vsync/sync_state.go
@@ -453,7 +453,11 @@
sgoid := sgOID(id)
gv := ds.sggenvecs[sgoid]
genvecs[sgoid] = gv.DeepCopy()
- genvecs[sgoid][s.id] = ds.sgs[sgoid].checkptGen
+ var ckpt uint64 = 0
+ if info, ok := ds.sgs[sgoid]; ok {
+ ckpt = info.checkptGen
+ }
+ genvecs[sgoid][s.id] = ckpt
}
} else {
genvecs = ds.genvecs.DeepCopy()