NAME
ENGINE_ctrl
,
ENGINE_cmd_is_executable
,
ENGINE_ctrl_cmd
,
ENGINE_ctrl_cmd_string
,
ENGINE_set_ctrl_function
,
ENGINE_get_ctrl_function
,
ENGINE_set_cmd_defns
,
ENGINE_get_cmd_defns
—
control commands for ENGINE
objects
SYNOPSIS
#include
<openssl/engine.h>
int
ENGINE_ctrl
(ENGINE *e,
int cmd, long i,
void *p, void (*f)(void));
int
ENGINE_cmd_is_executable
(ENGINE
*e, int cmd);
int
ENGINE_ctrl_cmd
(ENGINE *e,
const char *cmd_name, long i,
void *p, void (*f)(void),
int cmd_optional);
int
ENGINE_ctrl_cmd_string
(ENGINE
*e, const char *cmd_name, const
char *arg, int cmd_optional);
typedef int
(*ENGINE_CTRL_FUNC_PTR)
(ENGINE
*e, int cmd, long i,
void *p, void (*f)(void));
int
ENGINE_set_ctrl_function
(ENGINE
*e, ENGINE_CTRL_FUNC_PTR ctrl_f);
ENGINE_CTRL_FUNC_PTR
ENGINE_get_ctrl_function
(const ENGINE
*e);
int
ENGINE_set_cmd_defns
(ENGINE *e,
const ENGINE_CMD_DEFN *defns);
const ENGINE_CMD_DEFN *
ENGINE_get_cmd_defns
(const ENGINE
*e);
DESCRIPTION
ENGINE_ctrl
()
calls the built-in or user-defined cmd for the engine
e, passing the arguments i and
p.
User-defined commands can be used before ENGINE_init(3) to provide data required for initialization or at any time to modify the behaviour of an engine.
Most built-in commands operate on
user-defined commands installed with
ENGINE_set_cmd_defns
(),
either using the p argument to indicate the
user-defined command with the command name cmd_name or
using the i argument to indicate the user-defined
command with the command number cmd_num. The
cmd arguments to call the built-in commands are as
follows:
ENGINE_CTRL_GET_CMD_FLAGS
- Return the cmd_flags of the user-defined command
with the number i, or a number less than or equal to
0 if an error occurs or the command number does not exist. A return value
of 0 indicates failure if e is
NULL
or has a reference count of 0, or success if e is valid. ENGINE_CTRL_GET_CMD_FROM_NAME
- Return the positive command number of the user-defined command with the name p, or a number less than or equal to 0 if an error occurs or no matching name is found.
ENGINE_CTRL_GET_DESC_FROM_CMD
- Copy the description of the user-defined command with the number
i into the buffer p and
NUL-terminate it. It is the reponsability of the caller to make sure that
the buffer p is large enough, either by calling
ENGINE_CTRL_GET_DESC_LEN_FROM_CMD
first or using knowledge about the array passed toENGINE_set_cmd_defns
(). The return value is the number of bytes written including the terminating NUL byte, or a number less than or equal to 0 if an error occurs. ENGINE_CTRL_GET_DESC_LEN_FROM_CMD
- Return the length in bytes excluding the terminating NUL
byte of the description of the user-defined command with the number
i, or a number less than or equal to 0 if an error
occurs. A return value of 0 indicates failure if e
is
NULL
or has a reference count of 0, or success if e is valid. ENGINE_CTRL_GET_FIRST_CMD_TYPE
- Return the positive command number of the first user-defined command
installed with
ENGINE_set_cmd_defns
() or a number less than or equal to 0 if an error occurs or no user-defined command has been installed. ENGINE_CTRL_GET_NAME_FROM_CMD
- Copy the name of the user-defined command with the number
i into the buffer p and
NUL-terminate it. It is the reponsability of the caller to make sure that
the buffer p is large enough, either by calling
ENGINE_CTRL_GET_NAME_LEN_FROM_CMD
first or using knowledge about the array passed toENGINE_set_cmd_defns
(). The return value is the number of bytes written including the terminating NUL byte, or a number less than or equal to 0 if an error occurs. ENGINE_CTRL_GET_NAME_LEN_FROM_CMD
- Return the length in bytes excluding the terminating
NULL byte of the name of the user-defined command with the number
i, or a number less than or equal to 0 if an error
occurs. A return value of 0 indicates failure if e
is
NULL
or has a reference count of 0, or success if e is valid. ENGINE_CTRL_GET_NEXT_CMD_TYPE
- Return the positive command number of the next user-defined command after
the user-defined command with the number i, or a
number less than or equal to 0 if an error occurs or if
i is the last user-defined command. Together with
ENGINE_CTRL_GET_FIRST_CMD_TYPE
, this can be used to iterate the user-defined commands installed withENGINE_set_cmd_defns
(). ENGINE_CTRL_HAS_CTRL_FUNCTION
- Return 1 if e has its own
ctrl_f installed with
ENGINE_set_ctrl_function
() or 0 otherwise.
ENGINE_ctrl_cmd
()
translates the cmd_name of a user-defined command to a
cmd number and calls
ENGINE_ctrl
() on it. If
cmd_optional is non-zero, lack of a
ctrl_f in e and translation
failure with ENGINE_CTRL_GET_CMD_FROM_NAME
are
considered success, and the command has no effect. Otherwise, these problems
cause ENGINE_ctrl_cmd
() to fail.
Neither
ENGINE_ctrl
()
nor ENGINE_ctrl_cmd
() ever call the
f callback, but merely pass it on as an argument to
the engine-specific ctrl_f control function. It is up
to ctrl_f how to use it, or alternatively to ignore it
as well.
ENGINE_ctrl_cmd_string
()
translates the cmd_name of a user-defined command to a
cmd number. If that command has the
ENGINE_CMD_FLAG_NO_INPUT
flag set,
arg must be NULL
and
ENGINE_ctrl
() is called with i
set to 0 and p set to NULL
.
Otherwise, arg must not be
NULL
. If the command accepts string input,
i is set to 0 and arg is passed
as the p argument to
ENGINE_ctrl
(). Otherwise, arg
is converted with strtol(3) and passed as the i argument to
ENGINE_ctrl
(), setting p to
NULL
.
ENGINE_set_ctrl_function
()
installs ctrl_f as the engine-specific control
function for e. Future calls to
ENGINE_ctrl
() will call that function, passing on
their arguments unchanged, if the cmd is not built-in
to the library or if the
ENGINE_FLAGS_MANUAL_CMD_CTRL
flag is set in
e. Let the ctrl_f return
positive values on success or negative values on failure. Avoid return
values of 0 because they cause dangerous ambiguity. In particular,
ENGINE_ctrl_cmd
() and
ENGINE_ctrl_cmd_string
() cannot be used with
user-defined commands that may return 0 on success.
ENGINE_set_cmd_defns
()
install an array of command definitions in e.
The structure ENGINE_CMD_DEFN has the following fields:
- unsigned int cmd_num
- A positive, unique, monotonically increasing command number. Avoid using
numbers below
ENGINE_CMD_BASE
. - const char *cmd_name
- The unique name of the command.
- const char *cmd_desc
- A short description of the command.
- unsigned int cmd_flags
- The bitwise OR of zero or more of the following flags:
ENGINE_CMD_FLAG_NUMERIC
- The command uses i.
ENGINE_CMD_FLAG_STRING
- The command uses p.
ENGINE_CMD_FLAG_NO_INPUT
- The command neither uses i nor p.
ENGINE_CMD_FLAG_INTERNAL
- This flag has no effect and is only provided for compatibility.
The last element of defns does not specify a
command, but must have a cmd_num of 0 and a
cmd_name of NULL
to indicate
the end of the array.
RETURN VALUES
For ENGINE_ctrl
(), positive return values
indicate success and negative return values indicate failure. The meaning of
a zero return value depends on the particular cmd and
may indicate both success and failure, which is pathetic.
Regardless of the cmd,
ENGINE_ctrl
() returns 0 if e
is NULL
or has a reference count of 0. This is quite
unfortunate for commands like
ENGINE_CTRL_GET_CMD_FLAGS
where 0 may indicate
success, so make sure e is valid before issuing a
control command.
For built-in commands except
ENGINE_CTRL_HAS_CTRL_FUNCTION
,
ENGINE_ctrl
() returns -1 if
ENGINE_FLAGS_MANUAL_CMD_CTRL
is set but no
ctrl_f has been installed with
ENGINE_set_ctrl_function
().
For commands that are not built in,
ENGINE_ctrl
() returns 0 if no
ctrl_f has been installed with
ENGINE_set_ctrl_function
().
ENGINE_cmd_is_executable
() returns 1 if
the user-defined cmd is executable and has at least
one of the flags ENGINE_CMD_FLAG_NUMERIC
,
ENGINE_CMD_FLAG_STRING
, and
ENGINE_CMD_FLAG_NO_INPUT
set, or 0 otherwise.
ENGINE_ctrl_cmd
() and
ENGINE_ctrl_cmd_string
() return 1 on success or 0 on
error.
ENGINE_set_ctrl_function
() and
ENGINE_set_cmd_defns
() always return 1.
ENGINE_get_ctrl_function
() returns a
pointer to the function ctrl_f installed with
ENGINE_set_ctrl_function
(), or
NULL
if none has been installed.
ENGINE_get_cmd_defns
() returns the array
of command definitions installed in e or
NULL
if none is installed.
SEE ALSO
ENGINE_add(3), ENGINE_init(3), ENGINE_new(3), ENGINE_register_RSA(3), ENGINE_set_flags(3), ENGINE_set_RSA(3)
HISTORY
ENGINE_ctrl
(),
ENGINE_set_ctrl_function
(), and
ENGINE_get_ctrl_function
() first appeared in OpenSSL
0.9.7 and have been available since OpenBSD 2.9.
ENGINE_cmd_is_executable
(),
ENGINE_ctrl_cmd
(),
ENGINE_ctrl_cmd_string
(),
ENGINE_set_cmd_defns
(), and
ENGINE_get_cmd_defns
() first appeared in OpenSSL
0.9.7 and have been available since OpenBSD 3.2.