/usr/include/mysql/plugin_keyring.h is in libmysqlclient-dev 5.7.25-0ubuntu0.16.04.2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | /* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved.
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; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#ifndef MYSQL_PLUGIN_KEYRING_INCLUDED
#define MYSQL_PLUGIN_KEYRING_INCLUDED
/**
API for keyring plugin. (MYSQL_KEYRING_PLUGIN)
*/
#include "plugin.h"
#define MYSQL_KEYRING_INTERFACE_VERSION 0x0101
/**
The descriptor structure for the plugin, that is referred from
st_mysql_plugin.
*/
struct st_mysql_keyring
{
int interface_version;
/*!
Add key to the keyring.
Obfuscates and adds the key to the keyring. The key is associated with
key_id and user_id (unique key identifier).
@param[in] key_id id of the key to store
@param[in] key_type type of the key to store
@param[in] user_id id of the owner of the key
@param[in] key the key itself to be stored. The memory of the key is
copied by the keyring, thus the key itself can be freed
after it was stored in the keyring.
@param[in] key_len the length of the key to be stored
@return Operation status
@retval 0 OK
@retval 1 ERROR
*/
my_bool (*mysql_key_store)(const char *key_id, const char *key_type,
const char* user_id, const void *key, size_t key_len);
/*!
Fetches key from the keyring.
De-obfuscates and retrieves key associated with key_id and user_id from the
keyring.
@param[in] key_id id of the key to fetch
@param[out] key_type type of the fetched key
@param[in] user_id id of the owner of the key
@param[out] key the fetched key itself. The memory for this key is
allocated by the keyring and needs to be freed by the
user when no longer needed. Prior to freeing the memory
it needs to be obfuscated or zeroed.
@param[out] key_len the length of the fetched key
@return Operation status
@retval 0 OK
@retval 1 ERROR
*/
my_bool (*mysql_key_fetch)(const char *key_id, char **key_type,
const char *user_id, void **key, size_t *key_len);
/*!
Removes key from the keyring.
Removes the key associated with key_id and user_id from the
keyring.
@param[in] key_id id of the key to remove
@param[in] user_id id of the owner of the key to remove
@return Operation status
@retval 0 OK
@retval 1 ERROR
*/
my_bool (*mysql_key_remove)(const char *key_id, const char *user_id);
/*!
Generates and stores the key.
Generates a random key of length key_len, associates it with key_id, user_id
and stores it in the keyring.
@param[in] key_id id of the key to generate
@param[in] key_type type of the key to generate
@param[in] user_id id of the owner of the generated key
@param[in] key_len length of the key to generate
@return Operation status
@retval 0 OK
@retval 1 ERROR
*/
my_bool (*mysql_key_generate)(const char *key_id, const char *key_type,
const char *user_id, size_t key_len);
/**
Keys_iterator object refers to an iterator which is used to iterate
on a list which refers to Key_metadata. Key_metadata hold information
about individual keys keyd_id and user_id. Keys_iterator should be used
in following sequence only.
void* iterator_ptr;
char key_id[64]= { 0 };
char user_id[64]= { 0 };
plugin_handle->mysql_key_iterator_init(&iterator_ptr);
if (iterator_ptr == NULL)
report error;
while (!(plugin_handle->mysql_key_iterator_get_key(iterator_ptr,
key_id, user_id)))
{
Fetch the keys.
Perform operations on the fetched keys.
..
}
plugin_handle->mysql_key_iterator_deinit(iterator_ptr);
init() method accepts a void pointer which is the made to point to
Keys_iterator instance. Keys_iterator instance internal pointer points
to Key_metadata list. This list holds information about all keys stored
in the backed end data store of keyring plugin. After call to init()
please check iterator_ptr.
get_key() method accepts the above iterator_ptr as IN param and then
fills the passes in key_id and user_id with valid values. This can be
used to fetch actual key information. Every call to this method will
change internal pointers to advance to next position, so that the next
call will fetch the next key.
deinit() method frees all internal pointers along with iterator_ptr.
*/
/**
Initialize an iterator.
@param[out] key_iterator Iterator used to fetch individual keys
from key_container.
@return VOID
*/
void (*mysql_key_iterator_init)(void** key_iterator);
/**
Deinitialize an iterator.
@param[in] key_iterator Iterator used to fetch individual keys
from key_container.
@return VOID
*/
void (*mysql_key_iterator_deinit)(void* key_iterator);
/**
Get details of key. Every call to this service will change
internal pointers to advance to next position, so that the next call
will fetch the next key. In case iterator moves to the end, this service
will return error.
@param[in] key_iterator Iterator used to fetch individual keys
from key_container.
@param[out] key_id id of the key
@param[out] user_id id of the owner
@return Operation status
@retval 0 OK
@retval 1 ERROR
*/
bool (*mysql_key_iterator_get_key)(void* key_iterator, char *key_id, char *user_id);
};
#endif
|