diff --git a/keyring.go b/keyring.go index 7896694..5c5a9b9 100644 --- a/keyring.go +++ b/keyring.go @@ -179,9 +179,14 @@ func SetKeyringTTL(kr NamedKeyring, nsecs uint) error { return err } +// Link an object to a keyring +func Link(parent Keyring, child Id) error { + return keyctl_Link(keyId(child.Id()), keyId(parent.Id())) +} + // Unlink an object from a keyring func Unlink(parent Keyring, child Id) error { - return keyctl_Unlink(keyId(parent.Id()), keyId(child.Id())) + return keyctl_Unlink(keyId(child.Id()), keyId(parent.Id())) } // Unlink a named keyring from its parent. diff --git a/sys_linux.go b/sys_linux.go index 85383b4..0c4c194 100644 --- a/sys_linux.go +++ b/sys_linux.go @@ -102,6 +102,14 @@ func keyctl_Read(id keyId, b *byte, size int) (int32, error) { return int32(v1), nil } +func keyctl_Link(id, ring keyId) error { + _, _, errno := syscall.Syscall(syscall_keyctl, uintptr(keyctlLink), uintptr(id), uintptr(ring)) + if errno != 0 { + return errno + } + return nil +} + func keyctl_Unlink(id, ring keyId) error { _, _, errno := syscall.Syscall(syscall_keyctl, uintptr(keyctlUnlink), uintptr(id), uintptr(ring)) if errno != 0 {