diff options
Diffstat (limited to 'src/reclaim/plugin_rest_openid_connect.c')
-rw-r--r-- | src/reclaim/plugin_rest_openid_connect.c | 65 |
1 files changed, 37 insertions, 28 deletions
diff --git a/src/reclaim/plugin_rest_openid_connect.c b/src/reclaim/plugin_rest_openid_connect.c index 1846df901..99459427c 100644 --- a/src/reclaim/plugin_rest_openid_connect.c +++ b/src/reclaim/plugin_rest_openid_connect.c | |||
@@ -886,38 +886,47 @@ lookup_redirect_uri_result (void *cls, | |||
886 | struct GNUNET_CRYPTO_EcdsaPublicKey redirect_zone; | 886 | struct GNUNET_CRYPTO_EcdsaPublicKey redirect_zone; |
887 | 887 | ||
888 | handle->gns_op = NULL; | 888 | handle->gns_op = NULL; |
889 | if (1 != rd_count) | 889 | if (0 == rd_count) |
890 | { | 890 | { |
891 | handle->emsg = GNUNET_strdup("server_error"); | 891 | handle->emsg = GNUNET_strdup("server_error"); |
892 | handle->edesc = GNUNET_strdup("Server cannot generate ticket, redirect uri not found."); | 892 | handle->edesc = GNUNET_strdup("Server cannot generate ticket, redirect uri not found."); |
893 | GNUNET_SCHEDULER_add_now (&do_redirect_error, handle); | 893 | GNUNET_SCHEDULER_add_now (&do_redirect_error, handle); |
894 | return; | 894 | return; |
895 | } | 895 | } |
896 | tmp = GNUNET_strdup (rd->data); | 896 | for (int i = 0; i < rd_count; i++) |
897 | pos = strrchr (tmp, | 897 | { |
898 | (unsigned char) '.'); | 898 | if (0 != strcmp (rd[0].data, |
899 | *pos = '\0'; | 899 | handle->oidc->redirect_uri)) |
900 | handle->redirect_prefix = GNUNET_strdup (tmp); | 900 | continue; |
901 | tmp_key_str = pos + 1; | 901 | tmp = GNUNET_strdup (rd[0].data); |
902 | pos = strchr (tmp_key_str, | 902 | pos = strrchr (tmp, |
903 | (unsigned char) '/'); | 903 | (unsigned char) '.'); |
904 | *pos = '\0'; | 904 | *pos = '\0'; |
905 | handle->redirect_suffix = GNUNET_strdup (pos + 1); | 905 | handle->redirect_prefix = GNUNET_strdup (tmp); |
906 | 906 | tmp_key_str = pos + 1; | |
907 | GNUNET_STRINGS_string_to_data (tmp_key_str, | 907 | pos = strchr (tmp_key_str, |
908 | strlen (tmp_key_str), | 908 | (unsigned char) '/'); |
909 | &redirect_zone, | 909 | *pos = '\0'; |
910 | sizeof (redirect_zone)); | 910 | handle->redirect_suffix = GNUNET_strdup (pos + 1); |
911 | 911 | ||
912 | GNUNET_NAMESTORE_zone_to_name (handle->namestore_handle, | 912 | GNUNET_STRINGS_string_to_data (tmp_key_str, |
913 | &handle->priv_key, | 913 | strlen (tmp_key_str), |
914 | &redirect_zone, | 914 | &redirect_zone, |
915 | &get_client_name_error, | 915 | sizeof (redirect_zone)); |
916 | handle, | 916 | |
917 | &get_client_name_result, | 917 | GNUNET_NAMESTORE_zone_to_name (handle->namestore_handle, |
918 | handle); | 918 | &handle->priv_key, |
919 | GNUNET_free (tmp); | 919 | &redirect_zone, |
920 | 920 | &get_client_name_error, | |
921 | handle, | ||
922 | &get_client_name_result, | ||
923 | handle); | ||
924 | GNUNET_free (tmp); | ||
925 | return; | ||
926 | } | ||
927 | handle->emsg = GNUNET_strdup("server_error"); | ||
928 | handle->edesc = GNUNET_strdup("Server cannot generate ticket, redirect uri not found."); | ||
929 | GNUNET_SCHEDULER_add_now (&do_redirect_error, handle); | ||
921 | } | 930 | } |
922 | 931 | ||
923 | /** | 932 | /** |
@@ -940,9 +949,9 @@ oidc_ticket_issue_cb (void* cls, | |||
940 | return; | 949 | return; |
941 | } | 950 | } |
942 | handle->gns_op = GNUNET_GNS_lookup (handle->gns_handle, | 951 | handle->gns_op = GNUNET_GNS_lookup (handle->gns_handle, |
943 | handle->oidc->redirect_uri, | 952 | "+", |
944 | &handle->oidc->client_pkey, | 953 | &handle->oidc->client_pkey, |
945 | GNUNET_DNSPARSER_TYPE_TXT, | 954 | GNUNET_GNSRECORD_TYPE_RECLAIM_OIDC_REDIRECT, |
946 | GNUNET_GNS_LO_DEFAULT, | 955 | GNUNET_GNS_LO_DEFAULT, |
947 | &lookup_redirect_uri_result, | 956 | &lookup_redirect_uri_result, |
948 | handle); | 957 | handle); |