Skip to content

Commit 2075c09

Browse files
committed
code: refactor util.c: factor out util/url.c
Signed-off-by: Hans Zandbelt <[email protected]>
1 parent b476a1d commit 2075c09

26 files changed

+461
-413
lines changed

Makefile.am

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ libauth_openidc_la_SOURCES = \
5151
src/util/jwt.c \
5252
src/util/pcre_subst.c \
5353
src/util/random.c \
54+
src/util/url.c \
5455
src/util/util.c \
5556
src/metrics.c \
5657
src/oauth.c \

src/handle/authz.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ static authz_status oidc_authz_24_unauthorized_user(request_rec *r) {
553553
break;
554554
}
555555

556-
oidc_request_authenticate_user(r, c, NULL, oidc_util_current_url(r, oidc_cfg_x_forwarded_headers_get(c)), NULL,
556+
oidc_request_authenticate_user(r, c, NULL, oidc_util_url_cur(r, oidc_cfg_x_forwarded_headers_get(c)), NULL,
557557
NULL, NULL, oidc_cfg_dir_path_auth_request_params_get(r),
558558
oidc_cfg_dir_path_scope_get(r));
559559

@@ -758,7 +758,7 @@ static int oidc_authz_22_unauthorized_user(request_rec *r) {
758758
OIDC_METRICS_COUNTER_INC(r, c, OM_AUTHZ_ACTION_AUTH);
759759
}
760760

761-
return oidc_request_authenticate_user(r, c, NULL, oidc_util_current_url(r, oidc_cfg_x_forwarded_headers_get(c)),
761+
return oidc_request_authenticate_user(r, c, NULL, oidc_util_url_cur(r, oidc_cfg_x_forwarded_headers_get(c)),
762762
NULL, NULL, NULL, oidc_cfg_dir_path_auth_request_params_get(r),
763763
oidc_cfg_dir_path_scope_get(r));
764764
}

src/handle/content.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ int oidc_content_handler(request_rec *r) {
6464
return DECLINED;
6565
}
6666

67-
if (oidc_util_request_matches_url(r, oidc_util_redirect_uri(r, c)) == TRUE) {
67+
if (oidc_util_url_cur_matches(r, oidc_util_url_redirect_uri(r, c)) == TRUE) {
6868

6969
/* requests to the redirect URI are handled and finished here */
7070
rc = OK;
@@ -81,7 +81,7 @@ int oidc_content_handler(request_rec *r) {
8181
/* HTML body has been generated and stored in the request state */
8282
rc = oidc_util_html_content_send(r);
8383

84-
} else if (oidc_util_request_has_parameter(r, OIDC_REDIRECT_URI_REQUEST_INFO)) {
84+
} else if (oidc_util_url_has_parameter(r, OIDC_REDIRECT_URI_REQUEST_INFO)) {
8585

8686
OIDC_METRICS_COUNTER_INC(r, c, OM_CONTENT_REQUEST_INFO);
8787

@@ -104,14 +104,14 @@ int oidc_content_handler(request_rec *r) {
104104
/* free resources allocated for the session */
105105
oidc_session_free(r, session);
106106

107-
} else if (oidc_util_request_has_parameter(r, OIDC_REDIRECT_URI_REQUEST_DPOP)) {
107+
} else if (oidc_util_url_has_parameter(r, OIDC_REDIRECT_URI_REQUEST_DPOP)) {
108108

109109
OIDC_METRICS_COUNTER_INC(r, c, OM_CONTENT_REQUEST_DPOP);
110110

111111
/* handle request to create a DPoP proof */
112112
rc = oidc_dpop_request(r, c);
113113

114-
} else if (oidc_util_request_has_parameter(r, OIDC_REDIRECT_URI_REQUEST_JWKS)) {
114+
} else if (oidc_util_url_has_parameter(r, OIDC_REDIRECT_URI_REQUEST_JWKS)) {
115115

116116
OIDC_METRICS_COUNTER_INC(r, c, OM_CONTENT_REQUEST_JWKS);
117117

src/handle/discovery.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ apr_byte_t oidc_is_discovery_response(request_rec *r, oidc_cfg_t *cfg) {
7070
* prereq: this is a call to the configured redirect_uri, now see if:
7171
* the OIDC_DISC_OP_PARAM is present
7272
*/
73-
return oidc_util_request_has_parameter(r, OIDC_DISC_OP_PARAM) ||
74-
oidc_util_request_has_parameter(r, OIDC_DISC_USER_PARAM);
73+
return oidc_util_url_has_parameter(r, OIDC_DISC_OP_PARAM) ||
74+
oidc_util_url_has_parameter(r, OIDC_DISC_USER_PARAM);
7575
}
7676

7777
static const char *oidc_discovery_csrf_cookie_samesite(request_rec *r, oidc_cfg_t *c) {
@@ -105,7 +105,7 @@ int oidc_discovery_request(request_rec *r, oidc_cfg_t *cfg) {
105105
oidc_debug(r, "enter");
106106

107107
/* obtain the URL we're currently accessing, to be stored in the state/session */
108-
char *current_url = oidc_util_current_url(r, oidc_cfg_x_forwarded_headers_get(cfg));
108+
char *current_url = oidc_util_url_cur(r, oidc_cfg_x_forwarded_headers_get(cfg));
109109
const char *method = oidc_original_request_method(r, cfg, FALSE);
110110

111111
/* generate CSRF token */
@@ -125,7 +125,7 @@ int oidc_discovery_request(request_rec *r, oidc_cfg_t *cfg) {
125125
apr_psprintf(r->pool, "%s%s%s=%s&%s=%s&%s=%s&%s=%s", discover_url,
126126
strchr(discover_url, OIDC_CHAR_QUERY) != NULL ? OIDC_STR_AMP : OIDC_STR_QUERY,
127127
OIDC_DISC_RT_PARAM, oidc_http_url_encode(r, current_url), OIDC_DISC_RM_PARAM, method,
128-
OIDC_DISC_CB_PARAM, oidc_http_url_encode(r, oidc_util_redirect_uri(r, cfg)),
128+
OIDC_DISC_CB_PARAM, oidc_http_url_encode(r, oidc_util_url_redirect_uri(r, cfg)),
129129
OIDC_CSRF_NAME, oidc_http_url_encode(r, csrf));
130130

131131
if (path_scopes != NULL)
@@ -169,7 +169,7 @@ int oidc_discovery_request(request_rec *r, oidc_cfg_t *cfg) {
169169
// TODO: html escape (especially & character)
170170

171171
char *href = apr_psprintf(
172-
r->pool, "%s?%s=%s&amp;%s=%s&amp;%s=%s&amp;%s=%s", oidc_util_redirect_uri(r, cfg),
172+
r->pool, "%s?%s=%s&amp;%s=%s&amp;%s=%s&amp;%s=%s", oidc_util_url_redirect_uri(r, cfg),
173173
OIDC_DISC_OP_PARAM, oidc_http_url_encode(r, issuer), OIDC_DISC_RT_PARAM,
174174
oidc_http_url_encode(r, current_url), OIDC_DISC_RM_PARAM, method, OIDC_CSRF_NAME, csrf);
175175

@@ -193,7 +193,7 @@ int oidc_discovery_request(request_rec *r, oidc_cfg_t *cfg) {
193193
}
194194

195195
/* add an option to enter an account or issuer name for dynamic OP discovery */
196-
s = apr_psprintf(r->pool, "%s<form method=\"get\" action=\"%s\">\n", s, oidc_util_redirect_uri(r, cfg));
196+
s = apr_psprintf(r->pool, "%s<form method=\"get\" action=\"%s\">\n", s, oidc_util_url_redirect_uri(r, cfg));
197197
s = apr_psprintf(r->pool, "%s<p><input type=\"hidden\" name=\"%s\" value=\"%s\"><p>\n", s, OIDC_DISC_RT_PARAM,
198198
current_url);
199199
s = apr_psprintf(r->pool, "%s<p><input type=\"hidden\" name=\"%s\" value=\"%s\"><p>\n", s, OIDC_DISC_RM_PARAM,
@@ -242,7 +242,7 @@ static int oidc_discovery_target_link_uri_match(request_rec *r, oidc_cfg_t *cfg,
242242
}
243243

244244
apr_uri_t r_uri;
245-
apr_uri_parse(r->pool, oidc_util_redirect_uri(r, cfg), &r_uri);
245+
apr_uri_parse(r->pool, oidc_util_url_redirect_uri(r, cfg), &r_uri);
246246

247247
if (oidc_cfg_cookie_domain_get(cfg) == NULL) {
248248
/* cookie_domain set: see if the target_link_uri matches the redirect_uri host (because the session
@@ -311,13 +311,13 @@ int oidc_discovery_response(request_rec *r, oidc_cfg_t *c) {
311311
char *error_str = NULL;
312312
char *error_description = NULL;
313313

314-
oidc_util_request_parameter_get(r, OIDC_DISC_OP_PARAM, &issuer);
315-
oidc_util_request_parameter_get(r, OIDC_DISC_USER_PARAM, &user);
316-
oidc_util_request_parameter_get(r, OIDC_DISC_RT_PARAM, &target_link_uri);
317-
oidc_util_request_parameter_get(r, OIDC_DISC_LH_PARAM, &login_hint);
318-
oidc_util_request_parameter_get(r, OIDC_DISC_SC_PARAM, &path_scopes);
319-
oidc_util_request_parameter_get(r, OIDC_DISC_AR_PARAM, &auth_request_params);
320-
oidc_util_request_parameter_get(r, OIDC_CSRF_NAME, &csrf_query);
314+
oidc_util_url_parameter_get(r, OIDC_DISC_OP_PARAM, &issuer);
315+
oidc_util_url_parameter_get(r, OIDC_DISC_USER_PARAM, &user);
316+
oidc_util_url_parameter_get(r, OIDC_DISC_RT_PARAM, &target_link_uri);
317+
oidc_util_url_parameter_get(r, OIDC_DISC_LH_PARAM, &login_hint);
318+
oidc_util_url_parameter_get(r, OIDC_DISC_SC_PARAM, &path_scopes);
319+
oidc_util_url_parameter_get(r, OIDC_DISC_AR_PARAM, &auth_request_params);
320+
oidc_util_url_parameter_get(r, OIDC_CSRF_NAME, &csrf_query);
321321
csrf_cookie = oidc_http_get_cookie(r, OIDC_CSRF_NAME);
322322

323323
/* do CSRF protection if not 3rd party initiated SSO */
@@ -347,7 +347,7 @@ int oidc_discovery_response(request_rec *r, oidc_cfg_t *c) {
347347
" is not set.",
348348
HTTP_INTERNAL_SERVER_ERROR);
349349
}
350-
target_link_uri = apr_pstrdup(r->pool, oidc_util_absolute_url(r, c, oidc_cfg_default_sso_url_get(c)));
350+
target_link_uri = apr_pstrdup(r->pool, oidc_util_url_abs(r, c, oidc_cfg_default_sso_url_get(c)));
351351
}
352352

353353
/* do open redirect prevention, step 1 */
@@ -428,7 +428,7 @@ int oidc_discovery_response(request_rec *r, oidc_cfg_t *c) {
428428
if (issuer[n - 1] == OIDC_CHAR_FORWARD_SLASH)
429429
issuer[n - 1] = '\0';
430430

431-
if (oidc_util_request_has_parameter(r, "test-config")) {
431+
if (oidc_util_url_has_parameter(r, "test-config")) {
432432
json_t *j_provider = NULL;
433433
oidc_metadata_provider_get(r, c, issuer, &j_provider, csrf_cookie != NULL);
434434
if (j_provider)
@@ -439,7 +439,7 @@ int oidc_discovery_response(request_rec *r, oidc_cfg_t *c) {
439439
/* try and get metadata from the metadata directories for the selected OP */
440440
if ((oidc_metadata_get(r, c, issuer, &provider, csrf_cookie != NULL) == TRUE) && (provider != NULL)) {
441441

442-
if (oidc_util_request_has_parameter(r, "test-jwks-uri")) {
442+
if (oidc_util_url_has_parameter(r, "test-jwks-uri")) {
443443
json_t *j_jwks = NULL;
444444
apr_byte_t force_refresh = TRUE;
445445
oidc_metadata_jwks_get(r, c, oidc_cfg_provider_jwks_uri_get(provider),

src/handle/dpop.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,25 +87,25 @@ int oidc_dpop_request(request_rec *r, oidc_cfg_t *c) {
8787
}
8888

8989
/* retrieve the access token parameter */
90-
oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_DPOP, &s_access_token);
90+
oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_DPOP, &s_access_token);
9191
if (s_access_token == NULL) {
9292
oidc_error(r, "\"access_token\" value to the \"%s\" parameter is missing",
9393
OIDC_REDIRECT_URI_REQUEST_DPOP);
9494
goto end;
9595
}
9696

9797
/* retrieve the URL parameter */
98-
oidc_util_request_parameter_get(r, OIDC_DPOP_PARAM_URL, &s_url);
98+
oidc_util_url_parameter_get(r, OIDC_DPOP_PARAM_URL, &s_url);
9999
if (s_url == NULL) {
100100
oidc_error(r, "\"url\" parameter is missing");
101101
goto end;
102102
}
103103

104104
/* retrieve the optional nonce parameter */
105-
oidc_util_request_parameter_get(r, OIDC_DPOP_PARAM_NONCE, &s_nonce);
105+
oidc_util_url_parameter_get(r, OIDC_DPOP_PARAM_NONCE, &s_nonce);
106106

107107
/* parse the optional HTTP method parameter */
108-
oidc_util_request_parameter_get(r, OIDC_DPOP_PARAM_METHOD, &s_method);
108+
oidc_util_url_parameter_get(r, OIDC_DPOP_PARAM_METHOD, &s_method);
109109
if (_oidc_strnatcasecmp(s_method, "post") == 0)
110110
s_method = "POST";
111111
else if ((_oidc_strnatcasecmp(s_method, "get") == 0) || (s_method == NULL))

src/handle/info.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ int oidc_info_request(request_rec *r, oidc_cfg_t *c, oidc_session_t *session, ap
6161
apr_byte_t b_extend_session = TRUE;
6262
apr_time_t t_interval = -1;
6363

64-
oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_INFO, &s_format);
65-
oidc_util_request_parameter_get(r, OIDC_INFO_PARAM_ACCESS_TOKEN_REFRESH_INTERVAL, &s_interval);
66-
oidc_util_request_parameter_get(r, OIDC_INFO_PARAM_EXTEND_SESSION, &s_extend_session);
64+
oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_INFO, &s_format);
65+
oidc_util_url_parameter_get(r, OIDC_INFO_PARAM_ACCESS_TOKEN_REFRESH_INTERVAL, &s_interval);
66+
oidc_util_url_parameter_get(r, OIDC_INFO_PARAM_EXTEND_SESSION, &s_extend_session);
6767
if ((s_extend_session) && (_oidc_strcmp(s_extend_session, "false") == 0))
6868
b_extend_session = FALSE;
6969

src/handle/logout.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ int oidc_logout_request(request_rec *r, oidc_cfg_t *c, oidc_session_t *session,
218218
char *sid, *iss;
219219
oidc_provider_t *provider = NULL;
220220

221-
if (oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_SID, &sid) != FALSE) {
221+
if (oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_SID, &sid) != FALSE) {
222222

223-
if (oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_ISS, &iss) != FALSE) {
223+
if (oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_ISS, &iss) != FALSE) {
224224
provider = oidc_get_provider_for_issuer(r, c, iss, FALSE);
225225
} else {
226226
/*
@@ -454,7 +454,7 @@ int oidc_logout(request_rec *r, oidc_cfg_t *c, oidc_session_t *session) {
454454
char *id_token_hint = NULL;
455455
char *s_logout_request = NULL;
456456

457-
oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_LOGOUT, &url);
457+
oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_LOGOUT, &url);
458458

459459
oidc_debug(r, "enter (url=%s)", url);
460460

@@ -466,7 +466,7 @@ int oidc_logout(request_rec *r, oidc_cfg_t *c, oidc_session_t *session) {
466466

467467
if ((url == NULL) || (_oidc_strcmp(url, "") == 0)) {
468468

469-
url = apr_pstrdup(r->pool, oidc_util_absolute_url(r, c, oidc_cfg_default_slo_url_get(c)));
469+
url = apr_pstrdup(r->pool, oidc_util_url_abs(r, c, oidc_cfg_default_slo_url_get(c)));
470470

471471
} else {
472472

src/handle/refresh.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,8 @@ int oidc_refresh_token_request(request_rec *r, oidc_cfg_t *c, oidc_session_t *se
319319
oidc_provider_t *provider = NULL;
320320

321321
/* get the command passed to the session management handler */
322-
oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_REFRESH, &return_to);
323-
oidc_util_request_parameter_get(r, OIDC_PROTO_ACCESS_TOKEN, &r_access_token);
322+
oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_REFRESH, &return_to);
323+
oidc_util_url_parameter_get(r, OIDC_PROTO_ACCESS_TOKEN, &r_access_token);
324324

325325
/* check the input parameters */
326326
if (return_to == NULL) {

src/handle/request.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ apr_byte_t oidc_request_check_cookie_domain(request_rec *r, oidc_cfg_t *c, const
5656
apr_uri_t r_uri;
5757
_oidc_memset(&r_uri, 0, sizeof(apr_uri_t));
5858
apr_uri_parse(r->pool, original_url, &o_uri);
59-
apr_uri_parse(r->pool, oidc_util_redirect_uri(r, c), &r_uri);
59+
apr_uri_parse(r->pool, oidc_util_url_redirect_uri(r, c), &r_uri);
6060
if ((_oidc_strnatcasecmp(o_uri.scheme, r_uri.scheme) != 0) &&
6161
(_oidc_strnatcasecmp(r_uri.scheme, "https") == 0)) {
6262
oidc_error(r,
@@ -252,7 +252,7 @@ int oidc_request_authenticate_user(request_rec *r, oidc_cfg_t *c, oidc_provider_
252252

253253
/* send off to the OpenID Connect Provider */
254254
// TODO: maybe show intermediate/progress screen "redirecting to"
255-
rc = oidc_proto_request_auth(r, provider, login_hint, oidc_util_redirect_uri(r, c), state, proto_state,
255+
rc = oidc_proto_request_auth(r, provider, login_hint, oidc_util_url_redirect_uri(r, c), state, proto_state,
256256
id_token_hint, code_challenge, auth_request_params, path_scope);
257257

258258
OIDC_METRICS_TIMING_ADD(r, c, OM_AUTHN_REQUEST);

src/handle/request_uri.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
int oidc_request_uri(request_rec *r, oidc_cfg_t *c) {
5353

5454
char *request_ref = NULL;
55-
oidc_util_request_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_REQUEST_URI, &request_ref);
55+
oidc_util_url_parameter_get(r, OIDC_REDIRECT_URI_REQUEST_REQUEST_URI, &request_ref);
5656
if (request_ref == NULL) {
5757
oidc_error(r, "no \"%s\" parameter found", OIDC_REDIRECT_URI_REQUEST_REQUEST_URI);
5858
return HTTP_BAD_REQUEST;

0 commit comments

Comments
 (0)