lasso/Makefile.am

This commit is contained in:
Valery Febvre 2004-04-04 15:47:26 +00:00
parent 3374f800eb
commit 80960808a8
5 changed files with 507 additions and 409 deletions

View File

@ -1,162 +1,169 @@
#include <lasso/protocols/register_name_identifier.h>
LassoNode *lasso_build_full_registerNameIdentifierRequest(const xmlChar *requestID,
const xmlChar *majorVersion,
const xmlChar *minorVersion,
const xmlChar *issueInstant,
const xmlChar *providerID,
LassoNode *idpProvidedNameIdentifer,
LassoNode *spProvidedNameIdentifier,
LassoNode *oldProvidedNameIdentifier,
const xmlChar *relayState)
LassoNode *
lasso_build_full_registerNameIdentifierRequest(const xmlChar *requestID,
const xmlChar *majorVersion,
const xmlChar *minorVersion,
const xmlChar *issueInstant,
const xmlChar *providerID,
LassoNode *idpProvidedNameIdentifer,
LassoNode *spProvidedNameIdentifier,
LassoNode *oldProvidedNameIdentifier,
const xmlChar *relayState)
{
LassoNode *request;
LassoNode *request;
request = lasso_lib_register_name_identifier_request_new();
if (requestID != NULL) {
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
requestID);
}
else {
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
(const xmlChar *)lasso_build_unique_id(32));
}
if (majorVersion != NULL) {
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
majorVersion);
}
else {
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMajorVersion);
}
if (minorVersion != NULL){
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
minorVersion);
}
else {
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMinorVersion);
}
if (issueInstant != NULL){
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
issueInstant);
}
else{
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lasso_get_current_time());
}
lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
providerID);
lasso_lib_register_name_identifier_request_set_idp_provided_name_identifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
idpProvidedNameIdentifer);
lasso_lib_register_name_identifier_request_set_sp_provided_name_identifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
spProvidedNameIdentifier);
lasso_lib_register_name_identifier_request_set_old_provided_name_identifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
oldProvidedNameIdentifier);
request = lasso_lib_register_name_identifier_request_new();
if(requestID!=NULL){
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
requestID);
}
else{
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
(const xmlChar *)lasso_build_unique_id(32));
}
if(majorVersion!=NULL){
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
majorVersion);
}
else{
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMajorVersion);
}
if(minorVersion!=NULL){
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
minorVersion);
}
else{
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMinorVersion);
}
if(issueInstant!=NULL){
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
issueInstant);
}
else{
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lasso_get_current_time());
}
lasso_lib_register_name_identifier_request_set_providerID(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), providerID);
lasso_lib_register_name_identifier_request_set_idp_provided_name_identifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), idpProvidedNameIdentifer);
lasso_lib_register_name_identifier_request_set_sp_provided_name_identifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), spProvidedNameIdentifier);
lasso_lib_register_name_identifier_request_set_old_provided_name_identifier(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), oldProvidedNameIdentifier);
if(relayState){
lasso_lib_register_name_identifier_request_set_relayState(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request), relayState);
}
return(request);
}
LassoNode *lasso_build_registerNameIdentifierRequest(const xmlChar *providerID,
LassoNode *idpProvidedNameIdentifer,
LassoNode *spProvidedNameIdentifier,
LassoNode *oldProvidedNameIdentifier,
const xmlChar *relayState)
{
LassoNode *request;
request = lasso_build_full_registerNameIdentifierRequest(NULL,
NULL,
NULL,
NULL,
providerID,
idpProvidedNameIdentifer,
spProvidedNameIdentifier,
oldProvidedNameIdentifier,
if (relayState != NULL) {
lasso_lib_register_name_identifier_request_set_relayState(LASSO_LIB_REGISTER_NAME_IDENTIFIER_REQUEST(request),
relayState);
return(request);
}
return (request);
}
LassoNode *lasso_build_full_registerNameIdentifierResponse(const xmlChar *responseID,
const xmlChar *majorVersion,
const xmlChar *minorVersion,
const xmlChar *issueInstant,
const xmlChar *inResponseTo,
const xmlChar *recipient,
const xmlChar *providerID,
const xmlChar *statusCodeValue,
const xmlChar *relayState)
LassoNode *
lasso_build_registerNameIdentifierRequest(const xmlChar *providerID,
LassoNode *idpProvidedNameIdentifer,
LassoNode *spProvidedNameIdentifier,
LassoNode *oldProvidedNameIdentifier,
const xmlChar *relayState)
{
LassoNode *response, *ss, *ssc;
LassoNode *request;
response = lasso_lib_register_name_identifier_response_new();
request = lasso_build_full_registerNameIdentifierRequest(NULL,
NULL,
NULL,
NULL,
providerID,
idpProvidedNameIdentifer,
spProvidedNameIdentifier,
oldProvidedNameIdentifier,
relayState);
return (request);
}
if(responseID!=NULL){
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
responseID);
}
else{
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
(const xmlChar *)lasso_build_unique_id(32));
}
if(majorVersion!=NULL){
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
majorVersion);
}
else{
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMajorVersion);
}
if(minorVersion!=NULL){
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
minorVersion);
}
else{
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMinorVersion);
}
if(issueInstant!=NULL){
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
issueInstant);
}
else{
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lasso_get_current_time());
}
lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
inResponseTo);
lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
recipient);
lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response),
providerID);
ss = lasso_samlp_status_new();
ssc = lasso_samlp_status_code_new();
lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(ssc), statusCodeValue);
lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(ss), LASSO_SAMLP_STATUS_CODE(ssc));
lasso_samlp_response_set_status(LASSO_SAMLP_RESPONSE(response), LASSO_SAMLP_STATUS(ss));
if(relayState){
lasso_lib_status_response_set_relayState(LASSO_LIB_STATUS_RESPONSE(response), relayState);
}
return(response);
LassoNode *
lasso_build_full_registerNameIdentifierResponse(const xmlChar *responseID,
const xmlChar *majorVersion,
const xmlChar *minorVersion,
const xmlChar *issueInstant,
const xmlChar *inResponseTo,
const xmlChar *recipient,
const xmlChar *providerID,
const xmlChar *statusCodeValue,
const xmlChar *relayState)
{
LassoNode *response, *ss, *ssc;
response = lasso_lib_register_name_identifier_response_new();
if (responseID != NULL) {
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
responseID);
}
else {
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
(const xmlChar *)lasso_build_unique_id(32));
}
if (majorVersion != NULL) {
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
majorVersion);
}
else {
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMajorVersion);
}
if (minorVersion != NULL) {
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
minorVersion);
}
else {
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMinorVersion);
}
if (issueInstant != NULL) {
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
issueInstant);
}
else {
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lasso_get_current_time());
}
lasso_samlp_response_abstract_set_inResponseTo(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
inResponseTo);
lasso_samlp_response_abstract_set_recipient(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
recipient);
lasso_lib_status_response_set_providerID(LASSO_LIB_STATUS_RESPONSE(response),
providerID);
ss = lasso_samlp_status_new();
ssc = lasso_samlp_status_code_new();
lasso_samlp_status_code_set_value(LASSO_SAMLP_STATUS_CODE(ssc), statusCodeValue);
lasso_samlp_status_set_statusCode(LASSO_SAMLP_STATUS(ss), LASSO_SAMLP_STATUS_CODE(ssc));
lasso_samlp_response_set_status(LASSO_SAMLP_RESPONSE(response), LASSO_SAMLP_STATUS(ss));
if (relayState != NULL) {
lasso_lib_status_response_set_relayState(LASSO_LIB_STATUS_RESPONSE(response), relayState);
}
return (response);
}
LassoNode *lasso_build_registerNameIdentifierResponse(LassoNode *request,

View File

@ -1,5 +1,34 @@
#ifndef __REGISTER_NAME_IDENTIFIER_H__
#define __REGISTER_NAME_IDENTIFIER_H__
/* $Id$
*
* Lasso - A free implementation of the Liberty Alliance specifications.
*
* Copyright (C) 2004 Entr'ouvert
* http://lasso.entrouvert.org
*
* Authors: Valery Febvre <vfebvre@easter-eggs.com>
* Nicolas Clapies <nclapies@entrouvert.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __LASSO_REGISTER_NAME_IDENTIFIER_H__
#define __LASSO_REGISTER_NAME_IDENTIFIER_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include <lasso/lasso.h>
@ -34,4 +63,8 @@ LassoNode *lasso_build_registerNameIdentifierResponse(LassoNode *request,
const xmlChar *statusCodeValue,
const xmlChar *relayState);
#endif /* __REGISTER_NAME_IDENTIFIER_H__ */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __LASSO_REGISTER_NAME_IDENTIFIER_H__ */

View File

@ -25,93 +25,240 @@
#include <lasso/protocols/single_sign_on_and_federation.h>
LassoNode *lasso_build_authnRequest_must_autenthicate(gboolean verifySignature,
const xmlChar *query,
const xmlChar *rsapub,
const xmlChar *rsakey,
gboolean isAuthenticated,
gboolean isPassive,
gboolean mustAuthenticate,
GPtrArray *authenticationMethods,
xmlChar *authnContextComparison)
static LassoNode *
lasso_build_full_authnRequest(const xmlChar *requestID,
const xmlChar *majorVersion,
const xmlChar *minorVersion,
const xmlChar *issueInstant,
const xmlChar *providerID,
const xmlChar *nameIDPolicy,
const xmlChar *forceAuthn,
const xmlChar *isPassive,
const xmlChar *protocolProfile,
const xmlChar *assertionConsumerServiceID,
GPtrArray *authnContextClassRefs,
GPtrArray *authnContextStatementRefs,
const xmlChar *authnContextComparison,
const xmlChar *relayState,
gint proxyCount,
GPtrArray *idpList,
const xmlChar *consent)
{
LassoNode *req;
GData *gd;
int result;
gboolean forceAuthn;
LassoNode *request, *authn_context, *scoping;
gint i;
if(verifySignature==TRUE){
result = lasso_str_verify(query, rsapub, rsakey);
if(result==-1){
return(NULL);
}
}
/* create a new AuthnRequestinstance */
request = lasso_lib_authn_request_new();
/* RequestID */
if (requestID != NULL) {
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
requestID);
}
else {
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
(const xmlChar *)lasso_build_unique_id(32));
}
gd = lasso_query_to_dict(query);
if(gd!=NULL){
req = lasso_build_full_authnRequest(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "NameIDPolicy"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd,
"AssertionConsumerServiceID"),
0),
NULL, // AuthnContextClassRef
NULL, // AuthnContextStatementRef
NULL, // AuthnContextComparison
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0),
NULL, // ProxyCount
NULL, // IDPList
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0));
/* MajorVersion */
if (majorVersion != NULL) {
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
majorVersion);
}
else {
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMajorVersion);
}
g_datalist_clear(&gd);
}
/* MinorVersion */
if (minorVersion != NULL) {
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
minorVersion);
}
else {
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMinorVersion);
}
if(req==NULL){
return(NULL);
}
/* IssueInstant */
if (issueInstant != NULL) {
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
issueInstant);
}
else {
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lasso_get_current_time());
}
if(g_strcmp("true", lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0))){
isPassive = TRUE;
}
else{
isPassive = FALSE;
}
/* ProviderID */
lasso_lib_authn_request_set_providerID(LASSO_LIB_AUTHN_REQUEST(request),
providerID);
if(g_strcmp("true", lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0))){
forceAuthn = TRUE;
}
else{
forceAuthn= FALSE;
}
/* NameIDPolicy */
if (nameIDPolicy != NULL) {
lasso_lib_authn_request_set_nameIDPolicy(LASSO_LIB_AUTHN_REQUEST(request), nameIDPolicy);
}
/* ForceAuthn */
if (forceAuthn != NULL) {
lasso_lib_authn_request_set_forceAuthn(LASSO_LIB_AUTHN_REQUEST(request), forceAuthn);
}
/* IsPassive */
if (isPassive != NULL) {
lasso_lib_authn_request_set_isPassive(LASSO_LIB_AUTHN_REQUEST(request), isPassive);
}
if((forceAuthn=TRUE)||(isAuthenticated)){
mustAuthenticate = TRUE;
}
/* ProtocolProfile */
if (protocolProfile != NULL) {
lasso_lib_authn_request_set_protocolProfile(LASSO_LIB_AUTHN_REQUEST(request), protocolProfile);
}
/* AssertionConsumerServiceID */
if (assertionConsumerServiceID != NULL) {
lasso_lib_authn_request_set_assertionConsumerServiceID(LASSO_LIB_AUTHN_REQUEST(request),
assertionConsumerServiceID);
}
mustAuthenticate = FALSE;
/* AuthnContext */
if (authnContextClassRefs != NULL || authnContextStatementRefs != NULL) {
/* create a new AuthnContext instance */
authn_context = lasso_lib_request_authn_context_new();
/* AuthnContextClassRefs */
if (authnContextClassRefs != NULL) {
for(i=0; i<authnContextClassRefs->len; i++) {
lasso_lib_request_authn_context_add_authnContextClassRef(LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context),
lasso_g_ptr_array_index(authnContextClassRefs, i));
}
}
/* AuthnContextStatementRefs */
for(i=0; i<authnContextStatementRefs->len; i++) {
lasso_lib_request_authn_context_add_authnContextStatementRef(LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context),
lasso_g_ptr_array_index(authnContextStatementRefs, i));
}
/* AuthnContextComparison */
if (authnContextComparison != NULL) {
lasso_lib_request_authn_context_set_authnContextComparison(LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context),
authnContextComparison);
}
/* Add AuthnContext to AuthnRequest */
lasso_lib_authn_request_set_requestAuthnContext(LASSO_LIB_AUTHN_REQUEST(request),
LASSO_LIB_REQUEST_AUTHN_CONTEXT(authn_context));
}
return(req);
/* RelayState */
if (relayState != NULL) {
lasso_lib_authn_request_set_relayState(LASSO_LIB_AUTHN_REQUEST(request), relayState);
}
/* Scoping */
if (proxyCount > 0) {
/* create a new Scoping instance */
scoping = lasso_lib_scoping_new();
/* ProxyCount */
lasso_lib_scoping_set_proxyCount(LASSO_LIB_SCOPING(scoping), proxyCount);
lasso_lib_authn_request_set_scoping(LASSO_LIB_AUTHN_REQUEST(request),
LASSO_LIB_SCOPING(scoping));
}
/* consent */
if (consent != NULL) {
lasso_lib_authn_request_set_consent(LASSO_LIB_AUTHN_REQUEST(request), consent);
}
return (request);
}
LassoNode *lasso_build_authnRequest(const xmlChar *providerID,
const xmlChar *nameIDPolicy,
const xmlChar *forceAuthn,
const xmlChar *isPassive,
const xmlChar *protocolProfile,
const xmlChar *assertionConsumerServiceID,
const xmlChar **authnContextClassRefs,
const xmlChar **authnContextStatementRefs,
const xmlChar *authnContextComparison,
const xmlChar *relayState,
const xmlChar *proxyCount,
const xmlChar **idpList,
const xmlChar *consent)
LassoNode *
lasso_build_authnRequest_must_autenthicate(gboolean verifySignature,
xmlChar *query,
const xmlChar *rsapub,
const xmlChar *rsakey,
gboolean isAuthenticated,
gboolean *isPassive,
gboolean *mustAuthenticate,
GPtrArray *authenticationMethods,
xmlChar *authnContextComparison)
{
LassoNode *req;
GData *gd;
gboolean forceAuthn = FALSE;
gint proxyCount = 0;
if (verifySignature == TRUE){
if (lasso_str_verify(query, rsapub, rsakey) != 1) {
return (NULL);
}
}
gd = lasso_query_to_dict(query);
if (gd != NULL) {
/* if ProxyCount exists, convert into integer */
if (lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProxyCount"), 0) != NULL) {
proxyCount = atoi(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProxyCount"), 0));
}
req = lasso_build_full_authnRequest(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RequestID"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MajorVersion"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "MinorVersion"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IssueInstance"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProviderID"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "NameIDPolicy"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ProtocolProfile"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "AssertionConsumerServiceID"), 0),
(GPtrArray *)g_datalist_get_data(&gd, "AuthnContextClassRef"),
(GPtrArray *)g_datalist_get_data(&gd, "AuthnContextStatementRef"),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "AuthnContextComparison"), 0),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "RelayState"), 0),
proxyCount,
(GPtrArray *)g_datalist_get_data(&gd, "IDPList"),
lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "consent"), 0));
g_datalist_clear(&gd);
}
lasso_node_dump(req, "iso-8859-1", 1);
if (req == NULL) {
return (NULL);
}
if (xmlStrEqual(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "IsPassive"), 0), "true")) {
*isPassive = TRUE;
}
else {
*isPassive = FALSE;
}
if (xmlStrEqual(lasso_g_ptr_array_index((GPtrArray *)g_datalist_get_data(&gd, "ForceAuthn"), 0), "true")){
forceAuthn = TRUE;
}
else {
forceAuthn = FALSE;
}
*mustAuthenticate = FALSE;
if ((forceAuthn == TRUE) || (isAuthenticated == TRUE)) {
*mustAuthenticate = TRUE;
}
return (req);
}
LassoNode *
lasso_build_authnRequest(const xmlChar *providerID,
const xmlChar *nameIDPolicy,
const xmlChar *forceAuthn,
const xmlChar *isPassive,
const xmlChar *protocolProfile,
const xmlChar *assertionConsumerServiceID,
GPtrArray *authnContextClassRefs,
GPtrArray *authnContextStatementRefs,
const xmlChar *authnContextComparison,
const xmlChar *relayState,
gint proxyCount,
GPtrArray *idpList,
const xmlChar *consent)
{
return (lasso_build_full_authnRequest(NULL,
NULL,
@ -132,188 +279,99 @@ LassoNode *lasso_build_authnRequest(const xmlChar *providerID,
consent));
}
LassoNode *lasso_build_full_authnRequest(const xmlChar *requestID,
const xmlChar *majorVersion,
const xmlChar *minorVersion,
const xmlChar *issueInstant,
const xmlChar *providerID,
const xmlChar *nameIDPolicy,
const xmlChar *forceAuthn,
const xmlChar *isPassive,
const xmlChar *protocolProfile,
const xmlChar *assertionConsumerServiceID,
const xmlChar **authnContextClassRefs,
const xmlChar **authnContextStatementRefs,
const xmlChar *authnContextComparison,
const xmlChar *relayState,
const xmlChar *proxyCount,
const xmlChar **idpList,
const xmlChar *consent)
LassoNode *
lasso_build_full_authnResponse(LassoNode *request,
const xmlChar *providerID)
{
LassoNode *request;
LassoNode *response;
// build AuthnRequest class
request = lasso_lib_authn_request_new();
if (requestID != NULL) {
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
requestID);
}
else {
lasso_samlp_request_abstract_set_requestID(LASSO_SAMLP_REQUEST_ABSTRACT(request),
response = lasso_lib_authn_response_new();
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
(const xmlChar *)lasso_build_unique_id(32));
}
if (majorVersion != NULL) {
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
majorVersion);
}
else {
lasso_samlp_request_abstract_set_majorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMajorVersion);
}
if (minorVersion != NULL) {
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
minorVersion);
}
else {
lasso_samlp_request_abstract_set_minorVersion(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lassoLibMinorVersion);
}
if (issueInstant != NULL) {
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
issueInstant);
}
else {
lasso_samlp_request_abstract_set_issueInstance(LASSO_SAMLP_REQUEST_ABSTRACT(request),
lasso_get_current_time());
}
lasso_lib_authn_request_set_providerID(LASSO_LIB_AUTHN_REQUEST(request),
providerID);
if(nameIDPolicy != NULL) {
lasso_lib_authn_request_set_nameIDPolicy(LASSO_LIB_AUTHN_REQUEST(request), nameIDPolicy);
}
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMajorVersion);
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMinorVersion);
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lasso_get_current_time());
if(forceAuthn != NULL) {
lasso_lib_authn_request_set_forceAuthn(LASSO_LIB_AUTHN_REQUEST(request), forceAuthn);
}
lasso_lib_authn_response_set_providerID(LASSO_LIB_AUTHN_RESPONSE(response), providerID);
if(isPassive != NULL) {
lasso_lib_authn_request_set_isPassive(LASSO_LIB_AUTHN_REQUEST(request), isPassive);
}
return(response);
}
if(protocolProfile != NULL) {
lasso_lib_authn_request_set_protocolProfile(LASSO_LIB_AUTHN_REQUEST(request), protocolProfile);
}
LassoNode *
lasso_build_full_response(LassoNode *request,
const xmlChar *providerID)
{
LassoNode *response;
response = lasso_samlp_response_new();
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
(const xmlChar *)lasso_build_unique_id(32));
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoSamlMajorVersion);
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoSamlMinorVersion);
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lasso_get_current_time());
if(assertionConsumerServiceID != NULL) {
lasso_lib_authn_request_set_assertionConsumerServiceID(LASSO_LIB_AUTHN_REQUEST(request),
assertionConsumerServiceID);
}
return (response);
}
if(relayState != NULL) {
lasso_lib_authn_request_set_relayState(LASSO_LIB_AUTHN_REQUEST(request), relayState);
}
LassoNode *
lasso_build_assertion(const xmlChar *inResponseTo,
const xmlChar *issuer)
{
LassoNode *assertion, *subject;
assertion = lasso_lib_assertion_new();
lasso_saml_assertion_set_assertionID(LASSO_SAML_ASSERTION(assertion),
(const xmlChar *)lasso_build_unique_id(32));
lasso_saml_assertion_set_majorVersion(LASSO_SAML_ASSERTION(assertion),
lassoLibMajorVersion);
lasso_saml_assertion_set_minorVersion(LASSO_SAML_ASSERTION(assertion),
lassoLibMajorVersion);
lasso_saml_assertion_set_issueInstance(LASSO_SAML_ASSERTION(assertion),
lasso_get_current_time());
if(consent != NULL) {
lasso_lib_authn_request_set_consent(LASSO_LIB_AUTHN_REQUEST(request), consent);
}
return (request);
lasso_lib_assertion_set_inResponseTo(LASSO_LIB_ASSERTION(assertion),
inResponseTo);
lasso_saml_assertion_set_issuer(LASSO_SAML_ASSERTION(assertion),
issuer);
return (assertion);
}
LassoNode *lasso_build_full_authnResponse(LassoNode *request,
const xmlChar *providerID)
LassoNode *
lasso_build_authenticationStatement(const xmlChar *authenticationMethod,
LassoNode *nameIdentifier,
LassoNode *idpProvidedNameIdentifier)
{
LassoNode *response;
response = lasso_lib_authn_response_new();
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
(const xmlChar *)lasso_build_unique_id(32));
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMajorVersion);
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoLibMinorVersion);
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lasso_get_current_time());
lasso_lib_authn_response_set_providerID(response, providerID);
return(response);
}
LassoNode *lasso_build_full_response(LassoNode *request,
const xmlChar *providerID)
{
LassoNode *response;
response = lasso_samlp_response_new();
lasso_samlp_response_abstract_set_responseID(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
(const xmlChar *)lasso_build_unique_id(32));
lasso_samlp_response_abstract_set_majorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoSamlMajorVersion);
lasso_samlp_response_abstract_set_minorVersion(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lassoSamlMinorVersion);
lasso_samlp_response_abstract_set_issueInstance(LASSO_SAMLP_RESPONSE_ABSTRACT(response),
lasso_get_current_time());
return(response);
}
LassoNode *lasso_build_assertion(const xmlChar *inResponseTo,
const xmlChar *issuer)
{
LassoNode *assertion, *subject;
assertion = lasso_lib_assertion_new();
lasso_saml_assertion_set_assertionID(LASSO_SAML_ASSERTION(assertion),
(const xmlChar *)lasso_build_unique_id(32));
lasso_saml_assertion_set_majorVersion(LASSO_SAML_ASSERTION(assertion),
lassoLibMajorVersion);
lasso_saml_assertion_set_minorVersion(LASSO_SAML_ASSERTION(assertion),
lassoLibMajorVersion);
lasso_saml_assertion_set_issueInstance(LASSO_SAML_ASSERTION(assertion),
lasso_get_current_time());
lasso_lib_assertion_set_inResponseTo(LASSO_LIB_ASSERTION(assertion),
inResponseTo);
lasso_saml_assertion_set_issuer(LASSO_SAML_ASSERTION(assertion),
issuer);
return(assertion);
}
LassoNode *lasso_build_authenticationStatement(const xmlChar *authenticationMethod,
LassoNode *nameIdentifier,
LassoNode *idpProvidedNameIdentifier)
{
LassoNode *statement, *subject;
statement = lasso_lib_authentication_statement_new();
lasso_saml_authentication_statement_set_authenticationMethod(LASSO_SAML_AUTHENTICATION_STATEMENT(statement), authenticationMethod);
lasso_saml_authentication_statement_set_authenticationInstant(LASSO_SAML_AUTHENTICATION_STATEMENT(statement), lasso_get_current_time());
subject = lasso_lib_subject_new();
lasso_saml_subject_set_nameIdentifier(LASSO_SAML_SUBJECT(subject),
LASSO_SAML_NAME_IDENTIFIER(nameIdentifier));
lasso_lib_subject_set_idpProvidedNameIdentifier(LASSO_LIB_SUBJECT(subject),
LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpProvidedNameIdentifier));
lasso_saml_subject_statement_abstract_set_subject(LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(statement),
LASSO_SAML_SUBJECT(subject));
return(statement);
LassoNode *statement, *subject;
statement = lasso_lib_authentication_statement_new();
lasso_saml_authentication_statement_set_authenticationMethod(LASSO_SAML_AUTHENTICATION_STATEMENT(statement),
authenticationMethod);
lasso_saml_authentication_statement_set_authenticationInstant(LASSO_SAML_AUTHENTICATION_STATEMENT(statement),
lasso_get_current_time());
subject = lasso_lib_subject_new();
lasso_saml_subject_set_nameIdentifier(LASSO_SAML_SUBJECT(subject),
LASSO_SAML_NAME_IDENTIFIER(nameIdentifier));
lasso_lib_subject_set_idpProvidedNameIdentifier(LASSO_LIB_SUBJECT(subject),
LASSO_LIB_IDP_PROVIDED_NAME_IDENTIFIER(idpProvidedNameIdentifier));
lasso_saml_subject_statement_abstract_set_subject(LASSO_SAML_SUBJECT_STATEMENT_ABSTRACT(statement),
LASSO_SAML_SUBJECT(subject));
return (statement);
}

View File

@ -5,7 +5,8 @@
* Copyright (C) 2004 Entr'ouvert
* http://lasso.entrouvert.org
*
* Author: Valery Febvre <vfebvre@easter-eggs.com>
* Authors: Valery Febvre <vfebvre@easter-eggs.com>
* Nicolas Clapies <nclapies@entrouvert.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -32,12 +33,12 @@ extern "C" {
#include <lasso/lasso.h>
LassoNode *lasso_build_authnRequest_must_autenthicate(gboolean verifySignature,
const xmlChar *query,
xmlChar *query,
const xmlChar *rsapub,
const xmlChar *rsakey,
gboolean isAuthenticated,
gboolean isPassive,
gboolean mustAuthenticate,
gboolean *isPassive,
gboolean *mustAuthenticate,
GPtrArray *authenticationMethods,
xmlChar *authnContextComparison);
@ -47,12 +48,12 @@ LassoNode *lasso_build_authnRequest(const xmlChar *providerID,
const xmlChar *isPassive,
const xmlChar *protocolProfile,
const xmlChar *assertionConsumerServiceID,
const xmlChar **authnContextClassRefs,
const xmlChar **authnContextStatementRefs,
GPtrArray *authnContextClassRefs,
GPtrArray *authnContextStatementRefs,
const xmlChar *authnContextComparison,
const xmlChar *relayState,
const xmlChar *proxyCount,
const xmlChar **idpList,
gint proxyCount,
GPtrArray *idpList,
const xmlChar *consent);
LassoNode *lasso_build_full_authnResponse(LassoNode *request,

View File

@ -1,5 +1,5 @@
NULL =
SUBDIRS = schema bindings protocols
SUBDIRS = schema protocols
liblassoincludedir = $(includedir)/lasso
@ -32,7 +32,6 @@ liblasso_la_SOURCES = \
liblasso_la_LIBADD = \
$(top_builddir)/lasso/schema/liblasso-schema.la \
$(top_builddir)/lasso/bindings/liblasso-bindings.la \
$(top_builddir)/lasso/protocols/liblasso-protocols.la \
$(GLIB_LIBS) \
$(LIBXSLT_LIBS) \