blob: b241f7058f43e3c4020f3219341a756aefbbe40c [file] [log] [blame]
.\"
.\" Copyright (C) 2019 Red Hat, Inc. All Rights Reserved.
.\" Written by David Howells (dhowells@redhat.com)
.\"
.\" This program is free software; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License
.\" as published by the Free Software Foundation; either version
.\" 2 of the License, or (at your option) any later version.
.\"
.TH KEYCTL_MOVE 3 "29 May 2019" Linux "Linux Key Management Calls"
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH NAME
keyctl_move \- Move a key between keyrings
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH SYNOPSIS
.nf
.B #include <keyutils.h>
.sp
.BI "long keyctl_move(key_serial_t " key ", key_serial_t " from_keyring ","
.br
.BI " key_serial_t " to_keyring ", unsigned int " flags ");"
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH DESCRIPTION
.BR keyctl_move ()
atomically unlinks
.I key
from
.I from_keyring
and links it into
.I to_keyring
in a single operation. Depending on the flags set, a link to any matching key
in to_keyring may get displaced.
.P
.I flags
is a bitwise-OR of zero or more of the following flags:
.P
.TP
.B KEYCTL_MOVE_EXCL
If there's a matching key in to_keyring, don't displace it but rather return
an error.
.P
The caller must have
.B write
permission on both keyring to be able create or remove links in them.
.P
The caller must have
.B link
permission on a key to be able to create a new link to it.
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH RETURN VALUE
On success
.BR keyctl_move ()
return
.BR 0 .
On error, the value
.B -1
will be returned and
.I errno
will have been set to an appropriate error.
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH ERRORS
.TP
.B ENOKEY
The key or one of the keyrings specified are invalid.
.TP
.B ENOKEY
A key with the same type and description is present in to_keyring and
KEYCTL_MOVE_EXCL is set.
.TP
.B EKEYEXPIRED
The key or one of the keyrings specified have expired.
.TP
.B EKEYREVOKED
The key or one of the keyrings specified have been revoked.
.TP
.B EACCES
The key exists, but is not
.B linkable
by the calling process.
.TP
.B EACCES
The keyrings exist, but are not
.B writable
by the calling process.
.TP
.B ENOMEM
Insufficient memory to effect the changes.
.TP
.B EDQUOT
Expanding to_keyring would exceed the keyring owner's quota.
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH LINKING
This is a library function that can be found in
.IR libkeyutils .
When linking,
.B \-lkeyutils
should be specified to the linker.
.\"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH SEE ALSO
.ad l
.nh
.BR keyctl (1),
.BR add_key (2),
.BR keyctl (2),
.BR request_key (2),
.BR keyctl (3),
.BR keyrings (7),
.BR keyutils (7)