diff --git a/lasso/errors.c b/lasso/errors.c index ec64168e..671fc1c2 100644 --- a/lasso/errors.c +++ b/lasso/errors.c @@ -109,6 +109,8 @@ lasso_strerror(int error_code) return "Missing SAML artifact"; case LASSO_DS_ERROR_INVALID_SIGALG: return "Invalid signature algorithm."; + case LASSO_REGISTRY_ERROR_KEY_EXISTS: + return "Key alreadys exists in the registry"; case LASSO_LOGOUT_ERROR_UNSUPPORTED_PROFILE: return "Unsupported protocol profile"; case LASSO_LOGIN_ERROR_NO_DEFAULT_ENDPOINT: diff --git a/lasso/errors.h b/lasso/errors.h index b725c4f0..b357b937 100644 --- a/lasso/errors.h +++ b/lasso/errors.h @@ -167,3 +167,5 @@ #define LASSO_DST_ERROR_MODIFY_PARTIALLY_FAILED -1304 /* Modify partially failed : some items were correctly processed */ #define LASSO_DST_ERROR_NEW_DATA_MISSING -1305 /* Missing new data */ +/* Lasso registry */ +#define LASSO_REGISTRY_ERROR_KEY_EXISTS -1400 /* Key alreadys exists in the registry */ diff --git a/lasso/registry.c b/lasso/registry.c index 8d7e6489..7fdc3bde 100644 --- a/lasso/registry.c +++ b/lasso/registry.c @@ -214,9 +214,12 @@ const char* lasso_registry_get_mapping(LassoRegistry *registry, const char *from const char *ret = NULL; from_ns_quark = g_quark_try_string(from_namespace); - to_ns_quark = g_quark_try_string(from_name); + to_ns_quark = g_quark_try_string(to_namespace); + + if (from_ns_quark == 0 || to_ns_quark == 0) { + return NULL; + } - g_return_val_if_fail(from_ns_quark != 0 && to_ns_quark != 0, NULL); ret = lasso_registry_get_functional_mapping(registry->functional_mapping, from_ns_quark, from_name, to_ns_quark); if (ret == NULL) { ret = lasso_registry_get_direct_mapping(registry->direct_mapping, from_ns_quark, from_name, to_ns_quark); @@ -230,7 +233,8 @@ const char* lasso_registry_get_mapping(LassoRegistry *registry, const char *from * * Add a new mapping from a QName to a QName. * - * Return value: 0 if successfull, -1 if it already exists, -2 if arguments + * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if it already exists, + * LASSO_PARAM_ERROR_INVALID_VALUE if arguments * are invalid. */ gint lasso_registry_add_direct_mapping(LassoRegistry *registry, const char *from_namespace, @@ -238,10 +242,10 @@ gint lasso_registry_add_direct_mapping(LassoRegistry *registry, const char *from { LassoRegistryDirectMappingRecord *a_record; - g_return_val_if_fail(registry && from_namespace && from_name && to_namespace && to_name, -2); + g_return_val_if_fail(registry && from_namespace && from_name && to_namespace && to_name, LASSO_PARAM_ERROR_INVALID_VALUE); if (lasso_registry_get_mapping(registry, from_namespace, from_name, to_namespace)) { - return -1; + return LASSO_REGISTRY_ERROR_KEY_EXISTS; } a_record = g_new0(LassoRegistryDirectMappingRecord, 1); a_record->from_namespace = g_quark_from_string(from_namespace); @@ -263,7 +267,8 @@ gint lasso_registry_add_direct_mapping(LassoRegistry *registry, const char *from * translation_function. This functions is not forced to return a value for * any string, it can return NULL. * - * Return value: 0 if successfull, -1 otherwise. + * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, + * LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid. */ gint lasso_registry_add_functional_mapping(LassoRegistry *registry, const char *from_namespace, const char *to_namespace, LassoRegistryTranslationFunction translation_function) @@ -271,11 +276,11 @@ gint lasso_registry_add_functional_mapping(LassoRegistry *registry, const char * LassoRegistryFunctionalMappingRecord *a_record; GQuark to_ns_quark, from_ns_quark; - g_return_val_if_fail(registry != NULL && from_namespace != NULL && to_namespace != NULL, -2); + g_return_val_if_fail(registry != NULL && from_namespace != NULL && to_namespace != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); from_ns_quark = g_quark_from_string(from_namespace); to_ns_quark = g_quark_from_string(to_namespace); if (lasso_registry_get_translation_function(registry->functional_mapping, from_ns_quark, to_ns_quark)) { - return -1; + return LASSO_REGISTRY_ERROR_KEY_EXISTS; } a_record = g_new0(LassoRegistryFunctionalMappingRecord, 1); a_record->from_namespace = from_ns_quark; @@ -296,8 +301,8 @@ gint lasso_registry_add_functional_mapping(LassoRegistry *registry, const char * * * Add a new mapping from a QName to a QName. * - * Return value: 0 if successfull, -1 if it already exists, -2 if arguments - * are invalid. + * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, + * LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid. */ gint lasso_registry_default_add_direct_mapping(const char *from_namespace, const char *from_name, const char *to_namespace, const char *to_name) @@ -318,7 +323,8 @@ gint lasso_registry_default_add_direct_mapping(const char *from_namespace, * the default mapping. This functions is not forced to return a value for any string, it can return * NULL. * - * Return value: 0 if successfull, -1 otherwise. + * Return value: 0 if successfull, LASSO_REGISTRY_ERROR_KEY_EXISTS if this mapping is already registered, + * LASSO_PARAM_ERROR_INVALID_VALUE if one the argument is invalid. */ gint lasso_registry_default_add_functional_mapping(const char *from_namespace, const char *to_namespace, LassoRegistryTranslationFunction translation_function) diff --git a/tests/basic_tests.c b/tests/basic_tests.c index 83441dec..00880bd3 100644 --- a/tests/basic_tests.c +++ b/tests/basic_tests.c @@ -83,13 +83,15 @@ START_TEST(test06_registry_direct_mapping) const char *name; gint r; - r = lasso_registry_default_add_direct_mapping(LASSO_LIB_HREF, - "test", LASSO_LASSO_HREF, - "LassoTestClass"); + r = lasso_registry_default_add_direct_mapping(LASSO_LIB_HREF, "test", LASSO_LASSO_HREF, + "LassoTestClass"); fail_unless(r == 0, "lasso_registry_default_add_direct_mapping should return 0 for new mappings"); name = lasso_registry_default_get_mapping(LASSO_LIB_HREF, "test", LASSO_LASSO_HREF); fail_unless(name != NULL, "lasso_registry_default_get_mapping should return the recent mapping"); fail_unless(strcmp(name, "LassoTestClass") == 0, "lasso_registry_default_get_mapping should return LassoTestClass"); + r = lasso_registry_default_add_direct_mapping(LASSO_LIB_HREF, "test", LASSO_LASSO_HREF, + "LassoTestClass"); + fail_unless(r == LASSO_REGISTRY_ERROR_KEY_EXISTS, "lasso_registry_default_add_direct_mapping should return LASSO_REGISTRY_KEY_EXISTS when done two times"); } END_TEST @@ -117,6 +119,8 @@ START_TEST(test07_registry_functional_mapping) name = lasso_registry_default_get_mapping(LASSO_LIB_HREF, "Assertion", LASSO_LASSO_HREF); fail_unless(name != NULL, "lasso_registry_default_get_mapping should return the recent mapping"); fail_unless(strcmp(name, "LassoAssertion") == 0, "lasso_registry_default_get_mapping should return LassoAssertion"); + r = lasso_registry_default_add_functional_mapping(LASSO_LIB_HREF, LASSO_LASSO_HREF, trad); + fail_unless(r == LASSO_REGISTRY_ERROR_KEY_EXISTS, "lasso_registry_default_add_functional_mapping should return LASSO_REGISTRY_KEY_EXISTS when done two times"); } END_TEST