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

廣告


  

廣告



廣告