Author: dumindu
Date: Wed Feb 13 22:52:51 2008
New Revision: 13721
Log:
Fixed the white_list_validator
Added:
trunk/solutions/identity/modules/mod-cspace/mod_cspace_defines.h
trunk/solutions/identity/modules/mod-cspace/test/
trunk/solutions/identity/modules/mod-cspace/test/a.out (contents, props
changed)
trunk/solutions/identity/modules/mod-cspace/test/build.sh
trunk/solutions/identity/modules/mod-cspace/test/cert.pem
trunk/solutions/identity/modules/mod-cspace/test/test_validator.c
Modified:
trunk/solutions/identity/modules/mod-cspace/cspace_validator.c
trunk/solutions/identity/modules/mod-cspace/mod_cspace.h
Modified: trunk/solutions/identity/modules/mod-cspace/cspace_validator.c
==============================================================================
--- trunk/solutions/identity/modules/mod-cspace/cspace_validator.c
(original)
+++ trunk/solutions/identity/modules/mod-cspace/cspace_validator.c Wed Feb
13 22:52:51 2008
@@ -1,5 +1,5 @@
#include <openssl/ssl.h>
-#include "mod_cspace.h"
+#include "mod_cspace_defines.h"
#include "cspace_validator.h"
/* In validating the saml token using xmlsec we anyway need the CA cert
@@ -32,6 +32,29 @@
const char *ppid, const char *cert,
const void *user_data);
+static X509 *x509_create_with_buffer(unsigned char *input, int length)
+{
+ BIO *b64, *bmem;
+ X509 *x509 = NULL;
+ char *buffer = NULL;
+ /*TODO: replace mallocs with apr_palloc when used with apache*/
+ buffer = (char *)malloc(length);
+ memset(buffer, 0, length);
+
+ b64 = BIO_new(BIO_f_base64());
+ BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
+ bmem = BIO_new_mem_buf(input, length);
+ bmem = BIO_push(b64, bmem);
+
+ x509 = d2i_X509_bio(bmem, NULL);
+ BIO_free_all(bmem);
+ free(buffer);
+ return x509;
+}
+
+
+#define MAXARR 1024
+
static int white_list_validator(const char *uri, const char *issuer,
const char *ppid, const char *cert,
const char *w_list)
@@ -39,70 +62,65 @@
FILE *fp = NULL;
SSL_CTX *ctx = NULL;
X509 *needle = NULL;
- X509 *search_cert = NULL;
- X509_NAME *needle_name = NULL;
- X509_STORE *haystack = NULL;
- X509_OBJECT *search_obj = NULL;
+ X509 *(haystack[MAXARR]); /* TODO: this list should be made static */
+ int i = 0, j = 0;
- if((fp = fopen (cert, "r"))) {
+ /*if((fp = fopen (cert, "r"))) {
if(!(needle = d2i_X509_fp(fp, NULL))) {
fseek(fp, 0, SEEK_SET);
needle = PEM_read_X509( fp, NULL, NULL, NULL );
}
} else {
return FAIL;
- }
-
- if (needle && needle->cert_info) {
- needle_name = needle->cert_info->subject;
- }
-
- ctx = SSL_CTX_new(NULL);
- if (!ctx) {
- return FAIL;
- }
+ }*/
- SSL_CTX_use_certificate_chain_file(ctx, w_list);
+ needle = x509_create_with_buffer((void *)cert, strlen(cert));
- haystack = SSL_CTX_get_cert_store(ctx);
-
- if(haystack && needle_name) {
- search_obj = X509_OBJECT_retrieve_by_subject(haystack->objs,
- X509_LU_X509,
- needle_name);
+ /*ideally we would do this file read only once per server init*/
+ i=0;
+ if ((fp = fopen (w_list, "r"))) {
+ while (!feof(fp)) {
+ if (i < MAXARR) {
+ haystack[i++] = PEM_read_X509(fp, NULL, NULL, NULL);
+ } else {
+ break;
+ }
+ }
+ } else {
+ return FAIL;
}
- if (search_obj) {
- search_cert = (search_obj->data).x509;
- if (search_cert &&
- (M_ASN1_BIT_STRING_cmp(search_cert->signature,
+ for (j=0; j<i; j++) {
+ if (haystack[j] &&
+ (M_ASN1_BIT_STRING_cmp(haystack[j]->signature,
needle->signature) == 0)) {
-
- if (ctx) {
- SSL_CTX_free(ctx);
- }
if (needle) {
X509_free(needle);
}
-
- fclose(fp);
+
+ /* free the haystack */
+ for (j=0; j<i; j++) {
+ free(haystack[i]);
+ }
+ fclose(fp);
+
return SUCC;
}
}
- if (ctx) {
- SSL_CTX_free(ctx);
- }
-
- if (needle) {
+ if (needle) {
X509_free(needle);
}
+ /* free the haystack */
+ for (j=0; j<i; j++) {
+ free(haystack[i]);
+ }
+
fclose(fp);
- /* FREE_CTX() */
return FAIL;
}
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 Wed Feb 13
22:52:51 2008
@@ -8,6 +8,7 @@
#include "http_config.h"
#include "session.h"
#include "process_request.h"
+#include "mod_cspace_defines.h"
/*#define DONT_INCLUDE_CS_PFX_IN_HEADERS*/
@@ -16,11 +17,6 @@
#define ap_http_scheme(r) ap_http_method(r)
#endif
-#ifndef FAIL
- #define FAIL 0
- #define SUCC !(FAIL)
-#endif
-
#define CSPACE_DEFAULT_LOGIN_ARG "__mod_cspace_login__"
#define CSPACE_DEFAULT_LOGIN_AMP_ARG "&__mod_cspace_login__"
Added: trunk/solutions/identity/modules/mod-cspace/mod_cspace_defines.h
==============================================================================
--- (empty file)
+++ trunk/solutions/identity/modules/mod-cspace/mod_cspace_defines.h Wed Feb
13 22:52:51 2008
@@ -0,0 +1,9 @@
+#ifndef _MOD_CSPACE_DEFINES_H_
+#define _MOD_CSPACE_DEFINES_H_
+
+#ifndef FAIL
+ #define FAIL 0
+ #define SUCC !(FAIL)
+#endif
+
+#endif
Added: trunk/solutions/identity/modules/mod-cspace/test/a.out
==============================================================================
Binary file. No diff available.
Added: trunk/solutions/identity/modules/mod-cspace/test/build.sh
==============================================================================
--- (empty file)
+++ trunk/solutions/identity/modules/mod-cspace/test/build.sh Wed Feb 13
22:52:51 2008
@@ -0,0 +1,2 @@
+gcc *.c -I../ `xmlsec1-config --cflags` `xmlsec1-config --libs` -g
+
Added: trunk/solutions/identity/modules/mod-cspace/test/cert.pem
==============================================================================
--- (empty file)
+++ trunk/solutions/identity/modules/mod-cspace/test/cert.pem Wed Feb 13
22:52:51 2008
@@ -0,0 +1,45 @@
+-----BEGIN CERTIFICATE-----
+MIIDZTCCAs6gAwIBAgIJAIhSvW2QQbDBMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
+VQQGEwJMSzEQMA4GA1UECBMHV2VzdGVybjEeMBwGA1UEChMVV1NPMiBMYW5rYSAo
+UHZ0KSBMdGQuMREwDwYDVQQLEwhTZWN1cml0eTEiMCAGA1UEAxMZV1NPMiBJZGVu
+dGl0eSBTb2x1dGlvbiBDQTEkMCIGCSqGSIb3DQEJARYVaWRlbnRpdHktZGV2QHdz
+bzIub3JnMB4XDTA3MDkyMTEyMjE0MFoXDTI0MDIyNDEyMjE0MFowgZsxCzAJBgNV
+BAYTAkxLMRAwDgYDVQQIEwdXZXN0ZXJuMRAwDgYDVQQHEwdDb2xvbWJvMR4wHAYD
+VQQKExVXU08yIExhbmthIChQdnQpIEx0ZC4xETAPBgNVBAsTCFNlY3VyaXR5MQ8w
+DQYDVQQDEwZjbGllbnQxJDAiBgkqhkiG9w0BCQEWFWlkZW50aXR5LWRldkB3c28y
+Lm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr/lI0b4l4+X7Op+9SrF4
+ZcDnMTRQnAkwUn5Vcd0Qmgi+RQ8Rb5Y/MT879B1mSVQHd2AYsD/EEP3lwTzPmw7J
+J6gQ1ceNdhIwmwX/VleBjCB3CZGpYoMN7OXcPWz5/1m2m7ZRVngJz09+wIQ6zUvQ
+NMFncO3Rz2+OTKxkyguSxpMCAwEAAaOBrTCBqjAJBgNVHRMEAjAAMCwGCWCGSAGG
++EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU
+LmgqoC6toIdLBMTrEjXJfiYG5ywwHwYDVR0jBBgwFoAU2NAfBYUWO847BEWZGDww
+BtsmB2swLwYJYIZIAYb4QgEEBCIWIGh0dHA6Ly9jYS5pcy53c28yLm9yZy9jYS1j
+cmwucGVtMA0GCSqGSIb3DQEBBQUAA4GBAIDa0yhwqbzmycN6Yj99OnXLYu37VJ+e
+Fn6kl2IrNljJ45/uv/3f4EeIJ6fK7kcgQCzjFivTdGeSsTvJjXQIEppyUniYFYYD
+WQGbUChd9UXmNSP+VvDWGss8LVvMHRxvuzXTDvZiw4rbsL2y9SmCBGzBVpdbTfwT
+C+Ed1lzxzJhv
+-----END CERTIFICATE-----
+
+
+-----BEGIN CERTIFICATE-----
+MIIDaDCCAtGgAwIBAgIJAIhSvW2QQbDAMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
+VQQGEwJMSzEQMA4GA1UECBMHV2VzdGVybjEeMBwGA1UEChMVV1NPMiBMYW5rYSAo
+UHZ0KSBMdGQuMREwDwYDVQQLEwhTZWN1cml0eTEiMCAGA1UEAxMZV1NPMiBJZGVu
+dGl0eSBTb2x1dGlvbiBDQTEkMCIGCSqGSIb3DQEJARYVaWRlbnRpdHktZGV2QHdz
+bzIub3JnMB4XDTA3MDkyMTEyMTg1NVoXDTI0MDIyNDEyMTg1NVowgZ4xCzAJBgNV
+BAYTAkxLMRAwDgYDVQQIEwdXZXN0ZXJuMRAwDgYDVQQHEwdDb2xvbWJvMR4wHAYD
+VQQKExVXU08yIExhbmthIChQdnQpIEx0ZC4xETAPBgNVBAsTCFNlY3VyaXR5MRIw
+EAYDVQQDEwlsb2NhbGhvc3QxJDAiBgkqhkiG9w0BCQEWFWlkZW50aXR5LWRldkB3
+c28yLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr+h7tKoABQeQfWXp
+sYU8XAb8iiuiQdKoBYp5DoJNSAut2Qdv/+Vyw29lgGhQM6ppT8ANlyizw2Y9+63X
+ijzrMdSgivjCS08+/RLzUCkGYkm1qiUxJ54T3kEacG/TNtvmK852vlpj9Od8v/HD
+O4Wk1j8ZtDCZSUueu9wt+Nb8fX8CAwEAAaOBrTCBqjAJBgNVHRMEAjAAMCwGCWCG
+SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E
+FgQUQqdG1Edj6WtNRQTfIQovgaqgYYIwHwYDVR0jBBgwFoAU2NAfBYUWO847BEWZ
+GDwwBtsmB2swLwYJYIZIAYb4QgEEBCIWIGh0dHA6Ly9jYS5pcy53c28yLm9yZy9j
+YS1jcmwucGVtMA0GCSqGSIb3DQEBBQUAA4GBAEfDja8hOhscNicycR8cKZ5p2++L
+N9iEj2ytsmLnpTvvDsk1hIH8nmsCtZ9fZ+5V+x6+FXt2a/lPtyEjEPDnVUlNRrpg
+wXSbJWO4vCQAbndkKcM2k+Ann+NmcIlA8Q0tZnNNp1tegNc892Yp4T7AYz1dt9kY
+Jtc2KiXYXbK63pID
+-----END CERTIFICATE-----
+
Added: trunk/solutions/identity/modules/mod-cspace/test/test_validator.c
==============================================================================
--- (empty file)
+++ trunk/solutions/identity/modules/mod-cspace/test/test_validator.c Wed Feb
13 22:52:51 2008
@@ -0,0 +1,32 @@
+#include <openssl/ssl.h>
+#include <stdio.h>
+#include "cspace_validator.h"
+
+const char *cert =
"MIIDRDCCAq2gAwIBAgIJAIhSvW2QQbDDMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYDVQQGEwJMSzEQMA4GA1UECBMHV2VzdGVybjEeMBwGA1UEChMVV1NPMiBMYW5rYSAoUHZ0KSBMdGQuMREwDwYDVQQLEwhTZWN1cml0eTEiMCAGA1UEAxMZV1NPMiBJZGVudGl0eSBTb2x1dGlvbiBDQTEkMCIGCSqGSIb3DQEJARYVaWRlbnRpdHktZGV2QHdzbzIub3JnMB4XDTA3MDkyODEyNTkzNloXDTI0MDMwMjEyNTkzNlowezELMAkGA1UEBhMCTEsxEDAOBgNVBAgTB1dlc3Rlcm4xEDAOBgNVBAcTB0NvbG9tYm8xDTALBgNVBAoTBFdTTzIxGjAYBgNVBAsTEUlkZW50aXR5IFNvbHV0aW9uMR0wGwYDVQQDExRpZGVudGl0eS5say53c28yLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUgh+jegaVAoCBbYg9gsUzxlpoD7UeX3R39rMpqQpAsTtCC7Jks1CCpF1jFttyPcXagRoOL6xXAbpjKyyzU08DoC8Gsnzlmj8nyPw1n8hr5e1g+5ZMxf7S+P5Op7QzASoQUQhMyEOlM24KtombTsg+0YZV4g7YndauDckNSIGlUCAwEAAaOBrTCBqjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUOq/5DXiozYJeuwbT8VFH3rHjoVYwHwYDVR0jBBgwFoAU2NAfBYUWO847BEWZGDwwBtsmB2swLwYJYIZIAYb4QgEEBCIWIGh0dHA6Ly9jYS5pcy53c28yLm9yZy9jYS1jcmwucGVtMA0GCSqGSIb3DQEBBQUAA4GBAANDXhknYtcrXReWSkvkUJgUvfEWlBnB93SUC8G5JYjojDCjGYeb3kSVJGtUqO3U4M3iXNFJHdoVD7ytrNSoR9KlbSsk5OXeK/zSIZ9Dj18NMeAXk6nIu8Zj4sbN6MIDhHBCpR9T3lUe4JmkgNp78l/eibH9btEq/e+mp5UXVcQ/";
+
+const char *cert_ok =
"MIIDaDCCAtGgAwIBAgIJAIhSvW2QQbDAMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD"
+
"VQQGEwJMSzEQMA4GA1UECBMHV2VzdGVybjEeMBwGA1UEChMVV1NPMiBMYW5rYSAo"
+
"UHZ0KSBMdGQuMREwDwYDVQQLEwhTZWN1cml0eTEiMCAGA1UEAxMZV1NPMiBJZGVu"
+
"dGl0eSBTb2x1dGlvbiBDQTEkMCIGCSqGSIb3DQEJARYVaWRlbnRpdHktZGV2QHdz"
+
"bzIub3JnMB4XDTA3MDkyMTEyMTg1NVoXDTI0MDIyNDEyMTg1NVowgZ4xCzAJBgNV"
+
"BAYTAkxLMRAwDgYDVQQIEwdXZXN0ZXJuMRAwDgYDVQQHEwdDb2xvbWJvMR4wHAYD"
+
"VQQKExVXU08yIExhbmthIChQdnQpIEx0ZC4xETAPBgNVBAsTCFNlY3VyaXR5MRIw"
+
"EAYDVQQDEwlsb2NhbGhvc3QxJDAiBgkqhkiG9w0BCQEWFWlkZW50aXR5LWRldkB3"
+
"c28yLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr+h7tKoABQeQfWXp"
+
"sYU8XAb8iiuiQdKoBYp5DoJNSAut2Qdv/+Vyw29lgGhQM6ppT8ANlyizw2Y9+63X"
+
"ijzrMdSgivjCS08+/RLzUCkGYkm1qiUxJ54T3kEacG/TNtvmK852vlpj9Od8v/HD"
+
"O4Wk1j8ZtDCZSUueu9wt+Nb8fX8CAwEAAaOBrTCBqjAJBgNVHRMEAjAAMCwGCWCG"
+
"SAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4E"
+
"FgQUQqdG1Edj6WtNRQTfIQovgaqgYYIwHwYDVR0jBBgwFoAU2NAfBYUWO847BEWZ"
+
"GDwwBtsmB2swLwYJYIZIAYb4QgEEBCIWIGh0dHA6Ly9jYS5pcy53c28yLm9yZy9j"
+
"YS1jcmwucGVtMA0GCSqGSIb3DQEBBQUAA4GBAEfDja8hOhscNicycR8cKZ5p2++L"
+
"N9iEj2ytsmLnpTvvDsk1hIH8nmsCtZ9fZ+5V+x6+FXt2a/lPtyEjEPDnVUlNRrpg"
+
"wXSbJWO4vCQAbndkKcM2k+Ann+NmcIlA8Q0tZnNNp1tegNc892Yp4T7AYz1dt9kY"
+ "Jtc2KiXYXbK63pID";
+
+int main() {
+ SSL_library_init();
+ printf("%d\n", validate_with_op_mode("white", "uri", "issuer", "ppid",
cert_ok, "cert.pem"));
+
+ return 0;
+}
_______________________________________________
Identity-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/identity-dev