| .\" |
| .\" Copyright (C) 2011 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 Licence |
| .\" as published by the Free Software Foundation; either version |
| .\" 2 of the Licence, or (at your option) any later version. |
| .\" |
| .TH RECURSIVE_KEY_SCAN 3 "10 Mar 2011" Linux "Linux Key Utility Calls" |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH NAME |
| recursive_key_scan, recursive_session_key_scan \- apply a function to all keys in a keyring tree |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH SYNOPSIS |
| .nf |
| .B #include <keyutils.h> |
| .sp |
| .BI "typedef int (*" recursive_key_scanner_t ")(key_serial_t " parent , |
| .BI " key_serial_t " key ", char *" desc ", int " desc_len ", void *" data ");" |
| .sp |
| .BI "long recursive_key_scan(key_serial_t " keyring , |
| .BI " recursive_key_scanner_t " func ", void *" data ");" |
| .br |
| .BI "long recursive_session_key_scan(recursive_key_scanner_t " func , |
| .BI " void *" data ");" |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH DESCRIPTION |
| .BR recursive_key_scan () |
| performs a depth-first recursive scan of the specified |
| .I keyring |
| tree and applies |
| .I func |
| to every link found in the accessible keyrings in that tree. |
| .I data |
| is passed to each invocation of func. |
| .P |
| The return values of |
| .I func |
| are summed and returned as the overall return value. Errors are ignored. |
| Inaccessible keyrings are not scanned, but links to them are still passed to |
| func. |
| .P |
| .BR recursive_session_key_scan () |
| works exactly like |
| .BR recursive_key_scan () |
| with the caller's session keyring specified as the starting keyring. |
| .P |
| The callback function is called for each link found in all the keyrings in the |
| nominated tree and so may be called multiple times for a particular key if that |
| key has multiple links to it. |
| .P |
| The callback function is passed the following parameters: |
| .TP |
| .B parent |
| The keyring containing the link or 0 for the initial key. |
| .TP |
| .BR key |
| The key to which the link points. |
| .TP |
| .BR desc " and " desc_len |
| A pointer to the raw description and its length as retrieved with |
| .BR keyctl_describe_alloc (). |
| These will be NULL and \-1 respectively if the description couldn't be |
| retrieved and |
| .I errno |
| will retain the error from |
| .BR keyctl_describe_alloc (). |
| .TP |
| .B data |
| The data passed to the scanner function. |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH RETURN VALUE |
| These functions return the sum of the results of the callback functions they |
| invoke. |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH ERRORS |
| Ignored. |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH LINKING |
| When linking, |
| .B \-lkeyutils |
| should be specified to the linker. |
| .\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" |
| .SH SEE ALSO |
| .ad l |
| .nh |
| .BR keyctl (3), |
| .BR keyctl_describe_alloc (3), |
| .BR keyrings (7) |