request_key() - Unix 和 Linux 系统调用
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考     讨论论坛     关于 TP  

request_key() - Unix 和 Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

request_key - 从内核的关键管理设施请求密钥

语法

#include <keyutils.h> 

key_serial_t request_key(const char *type, const char *description, const char *callout_info, key_serial_t keyring);

描述

request_key() 请求内核查找与指定描述匹配的给定类型的密钥,如果成功,则将其附加到指定的密钥环并返回其序列号。

request_key() 首先递归搜索按线程特定密钥环、进程特定密钥环,然后是会话密钥环的顺序附加到调用进程的所有密钥环,以查找匹配的密钥。

如果request_key() 是从由request_key() 代表其他进程生成密钥调用的程序中调用,则接下来将搜索该其他进程的密钥环,使用该其他进程的 UID、GID、组和安全上下文来控制访问。

在递归搜索任何子密钥环之前,将检查每个密钥环中是否存在匹配的密钥。只有对调用方可搜索的密钥才能被找到,并且只有可搜索的密钥环才能被搜索。

如果找不到密钥,则如果设置了callout_info,则此函数将尝试进一步查找。在这种情况下,callout_info 将传递给用户空间服务(例如/sbin/request-key)以生成密钥。

如果这也失败,则将返回错误,并在指定的密钥环中安装一个临时的负密钥。这将在几秒钟后过期,但会导致后续对request_key() 的调用失败,直到它过期。

密钥环序列号可能是调用方具有写入权限的有效密钥环的序列号,也可能是特殊的密钥环 ID。

标签描述
KEY_SPEC_THREAD_KEYRING
 这指定了调用方的线程特定密钥环。
KEY_SPEC_PROCESS_KEYRING
 这指定了调用方的进程特定密钥环。
KEY_SPEC_SESSION_KEYRING
 这指定了调用方的会话特定密钥环。
KEY_SPEC_USER_KEYRING
 这指定了调用方的 UID 特定密钥环。
KEY_SPEC_USER_SESSION_KEYRING
 这指定了调用方的 UID 会话密钥环。
如果创建了密钥,无论它是有效密钥还是负密钥,它都将取代目标密钥环中任何其他相同类型和描述的密钥。

返回值

成功时,request_key() 返回找到的密钥的序列号。发生错误时,将返回-1,并且 errno 将设置为相应的错误。

错误

标签描述
ENOKEY 未找到匹配的密钥。
EKEYEXPIRED
 找到一个已过期的密钥,但无法获得替换。
EKEYREVOKED
 找到一个已吊销的密钥,但无法获得替换。
EKEYREJECTED
 生成新密钥的尝试被拒绝。
ENOMEM 内存不足以创建密钥。
EINTR 请求被信号中断。
EDQUOT 创建此密钥或将其链接到密钥环将超出此用户的密钥配额。
EACCES 用户无法修改密钥环。

链接

尽管这是一个 Linux 系统调用,但它不存在于libc中,而是在libkeyutils中可以找到。链接时,应向链接器指定-lkeyutils

另请参见



previous next Printer Friendly

广告


  

广告



广告