diff options
Diffstat (limited to 'modules/openid/openid.inc')
-rw-r--r-- | modules/openid/openid.inc | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/modules/openid/openid.inc b/modules/openid/openid.inc index 74cd7c494..4d4163805 100644 --- a/modules/openid/openid.inc +++ b/modules/openid/openid.inc @@ -658,22 +658,26 @@ function openid_extract_namespace($response, $extension_namespace, $fallback_pre * * @param $values * An array as returned by openid_extract_namespace(..., OPENID_NS_AX). - * @param $aliases - * An array of aliases used in the fetch request. + * @param $uris + * An array of identifier URIs. * @return * An array of values. * @see http://openid.net/specs/openid-attribute-exchange-1_0.html#fetch_response */ -function openid_extract_ax_values($values, $aliases) { +function openid_extract_ax_values($values, $uris) { $output = array(); - foreach ($aliases as $alias) { - if (isset($values['count.' . $alias])) { - for ($i = 1; $i <= $values['count.' . $alias]; $i++) { - $output[] = $values['value.' . $alias . '.' . $i]; + foreach ($values as $key => $value) { + if (in_array($value, $uris) && preg_match('/^type\.([^.]+)$/', $key, $matches)) { + $alias = $matches[1]; + if (isset($values['count.' . $alias])) { + for ($i = 1; $i <= $values['count.' . $alias]; $i++) { + $output[] = $values['value.' . $alias . '.' . $i]; + } } - } - elseif (isset($values['value.' . $alias])) { - $output[] = $values['value.' . $alias]; + elseif (isset($values['value.' . $alias])) { + $output[] = $values['value.' . $alias]; + } + break; } } return $output; |