Add container plugin features
This commit is contained in:
@@ -42,6 +42,8 @@ ENUM(plugin_feature_names, FEATURE_NONE, FEATURE_CUSTOM,
|
||||
"PUBKEY_ENCRYPT",
|
||||
"CERT_DECODE",
|
||||
"CERT_ENCODE",
|
||||
"CONTAINER_DECODE",
|
||||
"CONTAINER_ENCODE",
|
||||
"EAP_SERVER",
|
||||
"EAP_CLIENT",
|
||||
"XAUTH_SERVER",
|
||||
@@ -83,6 +85,8 @@ u_int32_t plugin_feature_hash(plugin_feature_t *feature)
|
||||
case FEATURE_PUBKEY_ENCRYPT:
|
||||
case FEATURE_CERT_DECODE:
|
||||
case FEATURE_CERT_ENCODE:
|
||||
case FEATURE_CONTAINER_DECODE:
|
||||
case FEATURE_CONTAINER_ENCODE:
|
||||
case FEATURE_EAP_SERVER:
|
||||
case FEATURE_EAP_PEER:
|
||||
data = chunk_from_thing(feature->arg);
|
||||
@@ -143,6 +147,9 @@ bool plugin_feature_matches(plugin_feature_t *a, plugin_feature_t *b)
|
||||
case FEATURE_CERT_DECODE:
|
||||
case FEATURE_CERT_ENCODE:
|
||||
return a->arg.cert == b->arg.cert;
|
||||
case FEATURE_CONTAINER_DECODE:
|
||||
case FEATURE_CONTAINER_ENCODE:
|
||||
return a->arg.container == b->arg.container;
|
||||
case FEATURE_EAP_SERVER:
|
||||
case FEATURE_EAP_PEER:
|
||||
return a->arg.eap == b->arg.eap;
|
||||
@@ -267,6 +274,14 @@ char* plugin_feature_get_string(plugin_feature_t *feature)
|
||||
return str;
|
||||
}
|
||||
break;
|
||||
case FEATURE_CONTAINER_DECODE:
|
||||
case FEATURE_CONTAINER_ENCODE:
|
||||
if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
|
||||
container_type_names, feature->arg.container) > 0)
|
||||
{
|
||||
return str;
|
||||
}
|
||||
break;
|
||||
case FEATURE_EAP_SERVER:
|
||||
case FEATURE_EAP_PEER:
|
||||
if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
|
||||
@@ -385,6 +400,12 @@ bool plugin_feature_load(plugin_t *plugin, plugin_feature_t *feature,
|
||||
feature->arg.cert, reg->arg.reg.final,
|
||||
reg->arg.reg.f);
|
||||
break;
|
||||
case FEATURE_CONTAINER_DECODE:
|
||||
case FEATURE_CONTAINER_ENCODE:
|
||||
lib->creds->add_builder(lib->creds, CRED_CONTAINER,
|
||||
feature->arg.container, reg->arg.reg.final,
|
||||
reg->arg.reg.f);
|
||||
break;
|
||||
case FEATURE_DATABASE:
|
||||
lib->db->add_database(lib->db, reg->arg.reg.f);
|
||||
break;
|
||||
@@ -454,6 +475,10 @@ bool plugin_feature_unload(plugin_t *plugin, plugin_feature_t *feature,
|
||||
case FEATURE_CERT_ENCODE:
|
||||
lib->creds->remove_builder(lib->creds, reg->arg.reg.f);
|
||||
break;
|
||||
case FEATURE_CONTAINER_DECODE:
|
||||
case FEATURE_CONTAINER_ENCODE:
|
||||
lib->creds->remove_builder(lib->creds, reg->arg.reg.f);
|
||||
break;
|
||||
case FEATURE_DATABASE:
|
||||
lib->db->remove_database(lib->db, reg->arg.reg.f);
|
||||
break;
|
||||
|
||||
@@ -29,6 +29,7 @@ typedef struct plugin_feature_t plugin_feature_t;
|
||||
#include <library.h>
|
||||
#include <eap/eap.h>
|
||||
#include <plugins/plugin.h>
|
||||
#include <credentials/containers/container.h>
|
||||
|
||||
/**
|
||||
* Callback function of a plugin to (un-)register a specified feature.
|
||||
@@ -133,6 +134,10 @@ struct plugin_feature_t {
|
||||
FEATURE_CERT_DECODE,
|
||||
/** generating certificates */
|
||||
FEATURE_CERT_ENCODE,
|
||||
/** parsing containers */
|
||||
FEATURE_CONTAINER_DECODE,
|
||||
/** generating containers */
|
||||
FEATURE_CONTAINER_ENCODE,
|
||||
/** EAP server implementation */
|
||||
FEATURE_EAP_SERVER,
|
||||
/** EAP peer implementation */
|
||||
@@ -186,6 +191,8 @@ struct plugin_feature_t {
|
||||
encryption_scheme_t pubkey_encrypt;
|
||||
/** FEATURE_CERT_DECODE/ENCODE */
|
||||
certificate_type_t cert;
|
||||
/** FEATURE_CONTAINER_DECODE/ENCODE */
|
||||
container_type_t container;
|
||||
/** FEATURE_EAP_SERVER/CLIENT */
|
||||
eap_type_t eap;
|
||||
/** FEATURE_DATABASE */
|
||||
@@ -281,6 +288,8 @@ struct plugin_feature_t {
|
||||
#define _PLUGIN_FEATURE_PUBKEY_ENCRYPT(kind, scheme) __PLUGIN_FEATURE(kind, PUBKEY_ENCRYPT, .pubkey_encrypt = scheme)
|
||||
#define _PLUGIN_FEATURE_CERT_DECODE(kind, type) __PLUGIN_FEATURE(kind, CERT_DECODE, .cert = type)
|
||||
#define _PLUGIN_FEATURE_CERT_ENCODE(kind, type) __PLUGIN_FEATURE(kind, CERT_ENCODE, .cert = type)
|
||||
#define _PLUGIN_FEATURE_CONTAINER_DECODE(kind, type) __PLUGIN_FEATURE(kind, CONTAINER_DECODE, .container = type)
|
||||
#define _PLUGIN_FEATURE_CONTAINER_ENCODE(kind, type) __PLUGIN_FEATURE(kind, CONTAINER_ENCODE, .container = type)
|
||||
#define _PLUGIN_FEATURE_EAP_SERVER(kind, type) __PLUGIN_FEATURE(kind, EAP_SERVER, .eap = type)
|
||||
#define _PLUGIN_FEATURE_EAP_PEER(kind, type) __PLUGIN_FEATURE(kind, EAP_PEER, .eap = type)
|
||||
#define _PLUGIN_FEATURE_DATABASE(kind, type) __PLUGIN_FEATURE(kind, DATABASE, .database = type)
|
||||
@@ -304,6 +313,8 @@ struct plugin_feature_t {
|
||||
#define _PLUGIN_FEATURE_REGISTER_PUBKEY(type, f, final) __PLUGIN_FEATURE_REGISTER_BUILDER(type, f, final)
|
||||
#define _PLUGIN_FEATURE_REGISTER_CERT_DECODE(type, f, final)__PLUGIN_FEATURE_REGISTER_BUILDER(type, f, final)
|
||||
#define _PLUGIN_FEATURE_REGISTER_CERT_ENCODE(type, f, final)__PLUGIN_FEATURE_REGISTER_BUILDER(type, f, final)
|
||||
#define _PLUGIN_FEATURE_REGISTER_CONTAINER_DECODE(type, f, final)__PLUGIN_FEATURE_REGISTER_BUILDER(type, f, final)
|
||||
#define _PLUGIN_FEATURE_REGISTER_CONTAINER_ENCODE(type, f, final)__PLUGIN_FEATURE_REGISTER_BUILDER(type, f, final)
|
||||
#define _PLUGIN_FEATURE_REGISTER_DATABASE(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
|
||||
#define _PLUGIN_FEATURE_REGISTER_FETCHER(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user