46 RDEBUG(
"Virtual server %s received request NOT IMPLEMENTED", server);
59 fr_pair_t *username, *parent_username = NULL;
62 username = fr_pair_find_by_num(&request->request_pairs, 0, FR_STRIPPED_USER_NAME);
63 if (!username) username = fr_pair_find_by_num(&request->request_pairs, 0, FR_USER_NAME);
65 if (request->parent) {
66 parent_username = fr_pair_find_by_num(&request->parent->request_pairs, 0, FR_STRIPPED_USER_NAME);
67 if (!parent_username) parent_username = fr_pair_find_by_num(&request->parent->request_pairs, 0, FR_USER_NAME);
73 if (username && parent_username) {
77 if (parent_username->
da->attr == FR_STRIPPED_USER_NAME) {
78 vp = fr_pair_find_by_num(&request->parent->request_pairs, 0, FR_USER_NAME);
87 if (strcmp(
vp->vp_strvalue, username->vp_strvalue) != 0) {
88 char const *outer, *inner;
90 outer = strchr(
vp->vp_strvalue,
'@');
99 if ((outer !=
vp->vp_strvalue) &&
100 ((
vp->vp_length < 10) || (memcmp(
vp->vp_strvalue,
"anonymous@", 10) != 0))) {
101 RWDEBUG(
"Outer User-Name is not anonymized. User privacy is compromised.");
107 }
else if ((
vp->vp_length < 9) || (memcmp(
vp->vp_strvalue,
"anonymous", 9) != 0)) {
108 RWDEBUG(
"Outer User-Name is not anonymized. User privacy is compromised.");
115 inner = strchr(username->vp_strvalue,
'@');
116 if (outer && inner) {
124 if (strcmp(outer, inner) != 0) {
125 size_t outer_len, inner_len;
127 outer_len =
vp->vp_length;
128 outer_len -= (outer -
vp->vp_strvalue);
130 inner_len = username->vp_length;
131 inner_len -= (inner - username->vp_strvalue);
137 if (inner_len > outer_len) {
140 suffix = inner + (inner_len - outer_len) - 1;
142 if ((*suffix !=
'.') ||
143 (strcmp(suffix + 1, outer) != 0)) {
144 RWDEBUG(
"Possible spoofing: Inner realm '%s' is not a "
145 "subdomain of the outer realm '%s'", inner, outer);
149 RWDEBUG(
"Possible spoofing: Inner realm and "
150 "outer realms are different");
156 RWDEBUG(
"Outer and inner identities are the same. User privacy is compromised.");
161 if (!request->async) {
162#ifdef STATIC_ANALYZER
167 request->async = talloc_memdup(request, request->parent->async,
sizeof(
fr_async_t));
168 talloc_set_name_const(request->async, talloc_get_name(request->parent->async));
171 RDEBUG(
"server %s {", server);
172 request->async->process(&
final,
173 MODULE_CTX(module_rlm_by_data(request->async->process_inst), NULL, NULL, NULL),
175 RDEBUG(
"} # server %s", server);
179 if (!request->reply->code ||
void log_request_pair_list(fr_log_lvl_t lvl, request_t *request, fr_pair_t const *parent, fr_pair_list_t const *vps, char const *prefix)
Print a fr_pair_list_t.
#define MODULE_CTX(_mi, _thread, _env_data, _rctx)
Wrapper to create a module_ctx_t as a compound literal.