// Unfreeze unfreezes the contents of a freezer.Channel // into a channel. func (c *Channel) Unfreeze(fc *freezer.Channel) { if fc.Name != nil { c.Name = *fc.Name } if fc.Position != nil { c.Position = int(*fc.Position) } if fc.InheritAcl != nil { c.ACL.InheritACL = *fc.InheritAcl } if fc.DescriptionBlob != nil { c.DescriptionBlob = *fc.DescriptionBlob } // Update ACLs if fc.Acl != nil { c.ACL.ACLs = nil for _, facl := range fc.Acl { aclEntry := acl.ACL{} if facl.ApplyHere != nil { aclEntry.ApplyHere = *facl.ApplyHere } if facl.ApplySubs != nil { aclEntry.ApplySubs = *facl.ApplySubs } if facl.UserId != nil { aclEntry.UserId = int(*facl.UserId) } else { aclEntry.UserId = -1 } if facl.Group != nil { aclEntry.Group = *facl.Group } if facl.Deny != nil { aclEntry.Deny = acl.Permission(*facl.Deny) } if facl.Allow != nil { aclEntry.Allow = acl.Permission(*facl.Allow) } c.ACL.ACLs = append(c.ACL.ACLs, aclEntry) } } // Update groups if fc.Groups != nil { c.ACL.Groups = make(map[string]acl.Group) for _, fgrp := range fc.Groups { if fgrp.Name == nil { continue } g := acl.Group{} if fgrp.Inherit != nil { g.Inherit = *fgrp.Inherit } if fgrp.Inheritable != nil { g.Inheritable = *fgrp.Inheritable } for _, uid := range fgrp.Add { g.Add[int(uid)] = true } for _, uid := range fgrp.Remove { g.Remove[int(uid)] = true } c.ACL.Groups[g.Name] = g } } // Hook up links, but make them point to the channel itself. // We can't be sure that the channels the links point to exist // yet, so we delay hooking up the map 'correctly' to later. if fc.Links != nil { c.Links = make(map[int]*Channel) for _, link := range fc.Links { c.Links[int(link)] = c } } }