60 |
60 |
/* public methods */
|
61 |
61 |
/*****************************************************************************/
|
62 |
62 |
|
63 |
|
static gint
|
|
63 |
static lasso_error_t
|
64 |
64 |
lasso_server_add_provider_helper(LassoServer *server, LassoProviderRole role,
|
65 |
65 |
const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain,
|
66 |
66 |
LassoProvider *(*provider_constructor)(LassoProviderRole role,
|
67 |
67 |
const char *metadata, const char *public_key, const char *ca_cert_chain))
|
68 |
68 |
{
|
69 |
69 |
LassoProvider *provider;
|
|
70 |
lasso_error_t rc = 0;
|
70 |
71 |
|
71 |
72 |
g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
|
72 |
73 |
g_return_val_if_fail(metadata != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
|
73 |
74 |
|
74 |
75 |
provider = provider_constructor(role, metadata, public_key, ca_cert_chain);
|
75 |
|
if (provider == NULL) {
|
76 |
|
return critical_error(LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED);
|
77 |
|
}
|
|
76 |
goto_cleanup_if_fail_with_rc(provider != NULL, critical_error(LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED));
|
|
77 |
|
78 |
78 |
provider->role = role;
|
79 |
79 |
|
80 |
|
if (LASSO_PROVIDER(server)->private_data->conformance == LASSO_PROTOCOL_SAML_2_0 &&
|
81 |
|
provider->private_data->conformance != LASSO_PROTOCOL_SAML_2_0) {
|
82 |
|
lasso_node_destroy(LASSO_NODE(provider));
|
83 |
|
return LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH;
|
|
80 |
if (LASSO_PROVIDER(server)->private_data->conformance == LASSO_PROTOCOL_SAML_2_0 && provider->private_data->conformance != LASSO_PROTOCOL_SAML_2_0) {
|
|
81 |
goto_cleanup_with_rc(LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH);
|
84 |
82 |
}
|
85 |
83 |
|
86 |
|
if (LASSO_PROVIDER(server)->private_data->conformance == LASSO_PROTOCOL_LIBERTY_1_2 &&
|
87 |
|
provider->private_data->conformance > LASSO_PROTOCOL_LIBERTY_1_2) {
|
88 |
|
lasso_node_destroy(LASSO_NODE(provider));
|
89 |
|
return LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH;
|
|
84 |
if (LASSO_PROVIDER(server)->private_data->conformance == LASSO_PROTOCOL_LIBERTY_1_2
|
|
85 |
&& provider->private_data->conformance > LASSO_PROTOCOL_LIBERTY_1_2) {
|
|
86 |
goto_cleanup_with_rc(LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH);
|
90 |
87 |
}
|
91 |
88 |
|
92 |
|
return lasso_server_add_provider2(server, provider);
|
|
89 |
lasso_server_add_provider2(server, provider);
|
|
90 |
|
|
91 |
cleanup:
|
|
92 |
lasso_release_gobject(provider);
|
|
93 |
return rc;
|
93 |
94 |
}
|
94 |
95 |
|
95 |
96 |
/**
|
... | ... | |
104 |
105 |
*
|
105 |
106 |
* Return value: 0 on success; a negative value if an error occured.
|
106 |
107 |
**/
|
107 |
|
gint
|
|
108 |
lasso_error_t
|
108 |
109 |
lasso_server_add_provider(LassoServer *server, LassoProviderRole role,
|
109 |
110 |
const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain)
|
110 |
111 |
{
|
... | ... | |
129 |
130 |
g_return_val_if_fail(provider->ProviderID, LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT);
|
130 |
131 |
g_return_val_if_fail(server->providers, LASSO_PARAM_ERROR_NON_INITIALIZED_OBJECT);
|
131 |
132 |
|
132 |
|
g_hash_table_insert(server->providers, g_strdup(provider->ProviderID), provider);
|
|
133 |
g_object_ref(provider);
|
|
134 |
g_hash_table_insert(server->providers, g_strdup(provider->ProviderID), g_object_ref(provider));
|
133 |
135 |
|
134 |
136 |
return 0;
|
135 |
137 |
}
|
136 |
|
-
|