Author: dumindu
Date: Tue Feb 19 09:39:10 2008
New Revision: 13896
Log:
fixed redirect mechanism (UNAUTHORIZED_REDIRECT).
Modified:
trunk/solutions/identity/modules/mod-cspace/cspace_config.c
trunk/solutions/identity/modules/mod-cspace/mod_cspace.c
trunk/solutions/identity/modules/mod-cspace/mod_cspace.h
trunk/solutions/identity/modules/mod-cspace/process_request.c
Modified: trunk/solutions/identity/modules/mod-cspace/cspace_config.c
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/cspace_config.c (original)
+++ trunk/solutions/identity/modules/mod-cspace/cspace_config.c Tue Feb 19
09:39:10 2008
@@ -105,6 +105,15 @@
return NULL;
}
+static const char *cmd_cspace_redir_uri(cmd_parms *cmd, void *mconfig,
+ const char *arg)
+{
+ cspace_dir_cfg *cfg = (cspace_dir_cfg *)mconfig;
+ strcpy(cfg->redir_uri, arg);
+ return NULL;
+
+}
+
static const char *cmd_key_file(cmd_parms *cmd, void *mconfig,
const char *arg)
{
@@ -185,6 +194,8 @@
"Name of the XML token sent"),
AP_INIT_TAKE1("CardSpaceExemptURI", cmd_cspace_exempt_uri, NULL, OR_ALL,
"URI of login page in session managed case"),
+ AP_INIT_TAKE1("CardSpaceRedirectURI", cmd_cspace_redir_uri, NULL, OR_ALL,
+ "URI of login page in session managed case"),
/* SSLCertificateKeyFile cannot be used in 2.0 because that will make
* mod_ssl not to read that configuration directive.*/
/*AP_INIT_TAKE1("CardSpaceSSLKeyFile", cmd_key_file, NULL, RSRC_CONF,
@@ -283,6 +294,8 @@
(cspace_dir_cfg *)apr_palloc(p, sizeof(cspace_dir_cfg));
cfg->pool = p;
+
+ cfg->redir_uri[0] = '\0';
cfg->dirspec[0] = '\0';
cfg->use_cspace_auth = 0;
@@ -338,6 +351,10 @@
strcpy(merged_cfg->session_file, temp_char);
temp_char = NULL;
+ temp_char = (ocfg->redir_uri) ? ocfg->redir_uri : pcfg->redir_uri;
+ strcpy(merged_cfg->redir_uri, temp_char);
+ temp_char = NULL;
+
/*merged_cfg->session_ctx = ((ocfg->session_ctx) ? ocfg->session_ctx :
pcfg->session_ctx);*/
Modified: trunk/solutions/identity/modules/mod-cspace/mod_cspace.c
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/mod_cspace.c (original)
+++ trunk/solutions/identity/modules/mod-cspace/mod_cspace.c Tue Feb 19
09:39:10 2008
@@ -45,6 +45,8 @@
#define CARDSPACE_HEADER_PPID
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"
+static void remove_cspace_headers(request_rec *r);
+
void cspace_log_error(const char *msg, pc_log_level_t level, void *cb_ctx)
{
ap_log_error(APLOG_MARK, level, 0, (server_rec *)cb_ctx, msg);
@@ -72,7 +74,10 @@
*/
static int redirect(request_rec *r, char* url)
{
- return HTTP_UNAUTHORIZED;
+ /*remove_cspace_headers(r);
+ ap_internal_redirect(url, r);*/
+ return OK;
+ /*return HTTP_UNAUTHORIZED;*/
}
static int find_uri(const char *uri, apr_array_header_t *a)
@@ -231,7 +236,37 @@
}
-static int iterate_headers(void *rec, const char *key, const char *val)
+/*
+static int iterate_headers_remove(void *rec, const char *key, const char *val)
+{
+ if (ap_strstr_c(key, CARDSPACE_HEADER_PFX))
+ apr_table_unset(((request_rec *)rec)->subprocess_env, key);
+
+ return SUCC;
+}*/
+
+static void remove_cspace_headers(request_rec *r)
+{
+ const apr_array_header_t *hdr = apr_table_elts(r->subprocess_env);
+ apr_table_entry_t *elts = (apr_table_entry_t *)hdr->elts;
+
+ /*apr_table_entry_t *elts = (apr_table_entry_t *)
r->subprocess_env->a.elts;*/
+
+ int j = hdr->nelts;
+ int i;
+
+ for (i = 0; i < j; ++i) {
+ if (elts[i].key) {
+ if (ap_strstr_c(elts[i].key, CARDSPACE_HEADER_PFX)) {
+ apr_table_unset(r->subprocess_env, elts[i].key);
+ --i; --j; /* HACK: this was done according to the
+ impl of apr_table_unset */
+ }
+ }
+ }
+}
+
+static int iterate_headers_check(void *rec, const char *key, const char *val)
{
if (ap_strstr_c(key, CARDSPACE_HEADER_PFX))
return FAIL;
@@ -243,7 +278,7 @@
* added. is processing at the proxy a real use case?*/
static int check_valid_headers(request_rec *r)
{
- return apr_table_do(iterate_headers, NULL, r->subprocess_env, NULL);
+ return apr_table_do(iterate_headers_check, NULL, r->subprocess_env, NULL);
}
static int set_cookie(request_rec *r, const char* session_id)
@@ -362,7 +397,7 @@
cspace_svr_cfg *svr_cfg)
{
/*TODO*/
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
static int handle_nosession_sso(request_rec *r, cspace_dir_cfg *dir_cfg,
@@ -392,7 +427,7 @@
if ((cspace_login_arg_avail(r)) && (r->method_number == M_POST)) {
/*TODO*/
}
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
static int process_token(const char *buf, request_rec *r,
@@ -639,7 +674,7 @@
if (allowed_flag) {
return OK;
} else {
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
#if 0
@@ -683,7 +718,7 @@
}
#endif
} else {
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
}
} else {
@@ -696,7 +731,7 @@
return ret;
}
}
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
static int handle_nosession_nosso(request_rec *r, cspace_dir_cfg *dir_cfg,
@@ -737,7 +772,7 @@
cspace_log_error("could not extract the token from the request",
APLOG_NOTICE, r->server);
- /*Should it be UNAUTHORIZED_REDIRECT(r, NULL) that should go here*/
+ /*Should it be UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri) that
should go here*/
if (ret != OK)
return ret;
}
@@ -770,14 +805,14 @@
if (strcmp(ap_http_scheme(r), "https") != 0) {
cspace_log_error("https scheme expected for cardspace requests",
APLOG_NOTICE, r->server);
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
/*Don't send us CARDSPACE headers*/
if (!check_valid_headers(r)) {
cspace_log_error("client sent cardspace headers. denied access",
APLOG_NOTICE, r->server);
- return UNAUTHORIZED_REDIRECT(r, NULL);
+ return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri);
}
if (dir_cfg->session) {
@@ -796,7 +831,7 @@
}
/* unreachable code*/
- /* return UNAUTHORIZED_REDIRECT(r, NULL); */
+ /* return UNAUTHORIZED_REDIRECT(r, dir_cfg->redir_uri); */
}
char data[] =
"MIIDRDCCAq2gAwIBAgIJAIhSvW2QQbDDMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYDVQQGEwJMSzEQMA4GA1UECBMHV2VzdGVybjEeMBwGA1UEChMVV1NPMiBMYW5rYSAoUHZ0KSBMdGQuMREwDwYDVQQLEwhTZWN1cml0eTEiMCAGA1UEAxMZV1NPMiBJZGVudGl0eSBTb2x1dGlvbiBDQTEkMCIGCSqGSIb3DQEJARYVaWRlbnRpdHktZGV2QHdzbzIub3JnMB4XDTA3MDkyODEyNTkzNloXDTI0MDMwMjEyNTkzNlowezELMAkGA1UEBhMCTEsxEDAOBgNVBAgTB1dlc3Rlcm4xEDAOBgNVBAcTB0NvbG9tYm8xDTALBgNVBAoTBFdTTzIxGjAYBgNVBAsTEUlkZW50aXR5IFNvbHV0aW9uMR0wGwYDVQQDExRpZGVudGl0eS5say53c28yLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUgh+jegaVAoCBbYg9gsUzxlpoD7UeX3R39rMpqQpAsTtCC7Jks1CCpF1jFttyPcXagRoOL6xXAbpjKyyzU08DoC8Gsnzlmj8nyPw1n8hr5e1g+5ZMxf7S+P5Op7QzASoQUQhMyEOlM24KtombTsg+0YZV4g7YndauDckNSIGlUCAwEAAaOBrTCBqjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUOq/5DXiozYJeuwbT8VFH3rHjoVYwHwYDVR0jBBgwFoAU2NAfBYUWO847BEWZGDwwBtsmB2swLwYJYIZIAYb4QgEEBCIWIGh0dHA6Ly9jYS5pcy53c28yLm9yZy9jYS1jcmwucGVtMA0GCSqGSIb3DQEBBQUAA4GBAANDXhknYtcrXReWSkvkUJgUvfEWlBnB93SUC8G5JYjojDCjGYeb3kSVJGtUqO3U4M3iXNFJHdoVD7ytrNSoR9KlbSsk5OXeK/zSIZ9Dj18NMeAXk6nIu8Zj4sbN6MIDhHBCpR9T3lUe4JmkgNp78l/eibH9btEq/e+mp5UXVcQ/";
Modified: trunk/solutions/identity/modules/mod-cspace/mod_cspace.h
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/mod_cspace.h (original)
+++ trunk/solutions/identity/modules/mod-cspace/mod_cspace.h Tue Feb 19
09:39:10 2008
@@ -43,6 +43,7 @@
char dirspec[256]; /*TODO: remove MAGIC numbers*/
apr_array_header_t *login_page;
char session_file[1024]; /*TODO: remove MAGIC numbers*/
+ char redir_uri[1024]; /*TODO: remove MAGIC numbers*/
char xml_token[CSPACE_XML_TOKEN_LEN_MAX];
/*void *session_ctx;*/ /*of session_ctx_t type*/
} cspace_dir_cfg;
@@ -70,7 +71,7 @@
#define cfg_dir_printf(st, cfg, nl)
#endif
-const command_rec cspace_cmds[13];
+const command_rec cspace_cmds[14];
void *cspace_svr_cfg_create(apr_pool_t *p, server_rec *s);
Modified: trunk/solutions/identity/modules/mod-cspace/process_request.c
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/process_request.c
(original)
+++ trunk/solutions/identity/modules/mod-cspace/process_request.c Tue Feb
19 09:39:10 2008
@@ -62,7 +62,7 @@
/* "/saml:Assertion/dsig:Signature/dsig:KeyInfo/dsig:X509Data/
* dsig:X509Certificate" */
-#define XPATH_X509_CERT XPATH_X509_DATA ":" X509_CERT
+#define XPATH_X509_CERT XPATH_X509_DATA "/" DSIG_PFX ":" X509_CERT
/* "/enc:EncryptedData" */
#define XPATH_ENC_DATA "/" ENC_PFX ":" ENCRYPTED_DATA
_______________________________________________
Identity-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/identity-dev