Skip to content

Commit

Permalink
cross-namespace owner references should be disallowed in SetControlle…
Browse files Browse the repository at this point in the history
…rReference()
  • Loading branch information
boylee1111 committed Nov 13, 2019
1 parent 47744b5 commit 7c75b06
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
4 changes: 4 additions & 0 deletions pkg/controller/controllerutil/controllerutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ func SetControllerReference(owner, object metav1.Object, scheme *runtime.Scheme)
return fmt.Errorf("%T is not a runtime.Object, cannot call SetControllerReference", owner)
}

if owner.GetNamespace() != "" && owner.GetNamespace() != object.GetNamespace() {
return fmt.Errorf("cross-namespace owner references are disallowed, owner's namespace %s, obj's namespace %s", owner.GetNamespace(), object.GetNamespace())
}

gvk, err := apiutil.GVKForObject(ro, scheme)
if err != nil {
return err
Expand Down
9 changes: 9 additions & 0 deletions pkg/controller/controllerutil/controllerutil_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,15 @@ var _ = Describe("Controllerutil", func() {
BlockOwnerDeletion: &t,
}))
})

It("should return an error if it's setting a cross-namespace owner reference", func() {
rs := &appsv1.ReplicaSet{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "namespace1"}}
dep := &extensionsv1beta1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: "foo", Namespace: "namespace2", UID: "foo-uid"}}

err := controllerutil.SetControllerReference(dep, rs, scheme.Scheme)

Expect(err).To(HaveOccurred())
})
})

Describe("CreateOrUpdate", func() {
Expand Down

0 comments on commit 7c75b06

Please sign in to comment.