123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /*
- * Dropbear - a SSH2 server
- *
- * Copyright (c) 2002,2003 Matt Johnston
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE. */
- #ifndef DROPBEAR_PUBKEY_H
- #define DROPBEAR_PUBKEY_H
- /* External Public Key API (EPKA) Plug-in Interface
- *
- * See:
- * https://github.com/fabriziobertocci/dropbear-epka
- * for additional information and examples about this API
- *
- */
- struct PluginInstance;
- struct PluginSession;
- /* API VERSION INFORMATION -
- * Dropbear will:
- * - Reject any plugin with a major version mismatch
- * - Load and print a warning if the plugin's minor version is HIGHER than
- * dropbear's minor version (assumes properties are added at the end of
- * PluginInstance or PluginSession). This is a case of plugin newer than dropbear.
- * - Reject if the plugin minor version is SMALLER than dropbear one (case
- * of plugin older than dropbear).
- * - Load (with no warnings) if version match.
- */
- #define DROPBEAR_PLUGIN_VERSION_MAJOR 1
- #define DROPBEAR_PLUGIN_VERSION_MINOR 0
- /* Creates an instance of the plugin.
- *
- * This is the main entry point of the plug-in and should be IMMUTABLE across
- * different API versions. Dropbear will check the version number
- * returned in the api_version to match the version it understands and reject
- * any plugin for which API major version does not match.
- *
- * If the version MINOR is different, dropbear will allow the plugin to run
- * only if: plugin_MINOR > dropbear_MINOR
- *
- * If plugin_MINOR < dropbear_MINOR or if the MAJOR version is different
- * dropbear will reject the plugin and terminate the execution.
- *
- * addrstring is the IP address of the client.
- *
- * Returns NULL in case of failure, otherwise a void * of the instance that need
- * to be passed to all the subsequent call to the plugin
- */
- typedef struct PluginInstance *(* PubkeyExtPlugin_newFn)(int verbose,
- const char *options,
- const char *addrstring);
- #define DROPBEAR_PUBKEY_PLUGIN_FNNAME_NEW "plugin_new"
- /* Validate a client through public key authentication
- *
- * If session has not been already created, creates it and store it
- * in *sessionInOut.
- * If session is a non-NULL, it will reuse it.
- *
- * Returns DROPBEAR_SUCCESS (0) if success or DROPBEAR_FAILURE (-1) if
- * authentication fails
- */
- typedef int (* PubkeyExtPlugin_checkPubKeyFn)(struct PluginInstance *PluginInstance,
- struct PluginSession **sessionInOut,
- const char* algo,
- unsigned int algolen,
- const unsigned char* keyblob,
- unsigned int keybloblen,
- const char *username);
- /* Notify the plugin that auth completed (after signature verification)
- */
- typedef void (* PubkeyExtPlugin_authSuccessFn)(struct PluginSession *session);
- /* Deletes a session
- * TODO: Add a reason why the session is terminated. See svr_dropbear_exit (in svr-session.c)
- */
- typedef void (* PubkeyExtPlugin_sessionDeleteFn)(struct PluginSession *session);
- /* Deletes the plugin instance */
- typedef void (* PubkeyExtPlugin_deleteFn)(struct PluginInstance *PluginInstance);
- /* The PluginInstance object - A simple container of the pointer to the functions used
- * by Dropbear.
- *
- * A plug-in can extend it to add its own properties
- *
- * The instance is created from the call to the plugin_new() function of the
- * shared library.
- * The delete_plugin function should delete the object.
- */
- struct PluginInstance {
- int api_version[2]; /* 0=Major, 1=Minor */
- PubkeyExtPlugin_checkPubKeyFn checkpubkey; /* mandatory */
- PubkeyExtPlugin_authSuccessFn auth_success; /* optional */
- PubkeyExtPlugin_sessionDeleteFn delete_session; /* mandatory */
- PubkeyExtPlugin_deleteFn delete_plugin; /* mandatory */
- };
- /*****************************************************************************
- * SESSION
- ****************************************************************************/
- /* Returns the options from the session.
- * The returned buffer will be destroyed when the session is deleted.
- * Option buffer string NULL-terminated
- */
- typedef char * (* PubkeyExtPlugin_getOptionsFn)(struct PluginSession *session);
- /* An SSH Session. Created during pre-auth and reused during the authentication.
- * The plug-in should delete this object (or any object extending it) from
- * the delete_session() function.
- *
- * Extend it to cache user and authentication information that can be
- * reused between pre-auth and auth (and to store whatever session-specific
- * variable you need to keep).
- *
- * Store any optional auth options in the auth_options property of the session.
- */
- struct PluginSession {
- struct PluginInstance * plugin_instance;
- PubkeyExtPlugin_getOptionsFn get_options;
- };
- #endif
|