Provided by: libkeyutils-dev_1.6.1-2ubuntu3_amd64 bug


       recursive_key_scan, recursive_session_key_scan - apply a function to all keys in a keyring


       #include <keyutils.h>

       typedef int (*recursive_key_scanner_t)(key_serial_t parent,
           key_serial_t key, char *desc, int desc_len, void *data);

       long recursive_key_scan(key_serial_t keyring,
           recursive_key_scanner_t func, void *data);
       long recursive_session_key_scan(recursive_key_scanner_t func,
           void *data);


       recursive_key_scan() performs a depth-first recursive scan of the specified  keyring  tree
       and  applies  func  to  every link found in the accessible keyrings in that tree.  data is
       passed to each invocation of func.

       The return values of 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

       recursive_session_key_scan() works exactly like  recursive_key_scan()  with  the  caller's
       session keyring specified as the starting keyring.

       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.

       The callback function is passed the following parameters:

       parent The keyring containing the link or 0 for the initial key.

       key    The key to which the link points.

       desc and desc_len
              A   pointer   to   the   raw   description   and   its  length  as  retrieved  with
              keyctl_describe_alloc().  These will be NULL and -1 respectively if the description
              couldn't be retrieved and errno will retain the error from keyctl_describe_alloc().

       data   The data passed to the scanner function.


       These functions return the sum of the results of the callback functions they invoke.




       When linking, -lkeyutils should be specified to the linker.


       keyctl(3), keyctl_describe_alloc(3), keyrings(7)