~ubuntu-branches/ubuntu/hardy/lasso/hardy

« back to all changes in this revision

Viewing changes to lasso/id-ff/profile.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Bienia
  • Date: 2007-07-31 21:35:26 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20070731213526-oc6jw5mprcd5tjyy
Tags: 2.0.0-1ubuntu1
* Merge from debian unstable. Remaining changes:
  + debian/control:
    - Modify Maintainer value to match DebianMaintainerField spec.
* debian/rules:
  + Add CC=gcc-4.2 to the configure call else configure won't find jni.h
    from libgcj8-dev.
* configure{,.ac}:
  + Add missing quotes around the value for PHP[45]_LIBS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: profile.c,v 1.63 2005/11/21 18:51:52 fpeters Exp $
 
1
/* $Id: profile.c,v 1.76 2007/01/06 22:55:44 fpeters Exp $
2
2
 *
3
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
4
 *
32
32
 
33
33
#include <lasso/id-ff/profile.h>
34
34
#include <lasso/id-ff/profileprivate.h>
 
35
#include <lasso/id-ff/providerprivate.h>
 
36
 
 
37
#include <lasso/saml-2.0/profileprivate.h>
35
38
 
36
39
/*****************************************************************************/
37
40
/* public functions                                                          */
53
56
{
54
57
        LassoProvider *remote_provider;
55
58
        LassoFederation *federation;
 
59
        char *name_id_sp_name_qualifier;
56
60
 
57
61
        g_return_val_if_fail(LASSO_IS_PROFILE(profile), NULL);
58
62
 
65
69
        if (remote_provider == NULL)
66
70
                return NULL;
67
71
 
 
72
        if (remote_provider->private_data->affiliation_id) {
 
73
                name_id_sp_name_qualifier = remote_provider->private_data->affiliation_id;
 
74
        } else {
 
75
                name_id_sp_name_qualifier = profile->remote_providerID;
 
76
        }
 
77
 
68
78
        federation = g_hash_table_lookup(
69
 
                        profile->identity->federations, profile->remote_providerID);
 
79
                        profile->identity->federations,
 
80
                        name_id_sp_name_qualifier);
70
81
        if (federation == NULL)
71
82
                return NULL;
72
83
 
129
140
                }
130
141
        } else if (strcmp(name, "Modify") == 0) {
131
142
                if (strcmp((char*)ns->href, LASSO_DISCO_HREF) == 0) {
132
 
                        type =LASSO_REQUEST_TYPE_DISCO_MODIFY;
 
143
                        type = LASSO_REQUEST_TYPE_DISCO_MODIFY;
133
144
                } else {
134
 
                        type =LASSO_REQUEST_TYPE_DST_MODIFY;    
 
145
                        type = LASSO_REQUEST_TYPE_DST_MODIFY;   
135
146
                }
136
147
        } else if (strcmp(name, "SASLRequest") == 0) {
137
148
                type = LASSO_REQUEST_TYPE_SASL_REQUEST;
 
149
        } else if (strcmp(name, "ManageNameIDRequest") == 0) {
 
150
                type = LASSO_REQUEST_TYPE_NAME_ID_MANAGEMENT;
138
151
        } else {
139
 
                message(G_LOG_LEVEL_WARNING, "Unkown node name : %s", name);
 
152
                message(G_LOG_LEVEL_WARNING, "Unknown node name : %s", name);
140
153
        }
141
154
 
142
155
        xmlFreeDoc(doc);
153
166
 * Tests the query string to know if the URL is called as the result of a
154
167
 * Liberty redirect (action initiated elsewhere) or not.
155
168
 *
156
 
 * Return value: TRUE if lasso query, FALSE otherwise
 
169
 * Return value: TRUE if Liberty query, FALSE otherwise
157
170
 **/
158
171
gboolean
159
172
lasso_profile_is_liberty_query(const gchar *query)
284
297
 
285
298
        if (LASSO_IS_SAMLP_RESPONSE(profile->response)) {
286
299
                LassoSamlpResponse *response = LASSO_SAMLP_RESPONSE(profile->response);
287
 
                if (response->Status) lasso_node_destroy(LASSO_NODE(response->Status));
 
300
                if (response->Status) lasso_node_destroy(LASSO_NODE(response->Status));
288
301
                response->Status = status;
289
302
                return;
290
303
        }
299
312
        g_assert_not_reached();
300
313
301
314
 
 
315
void
 
316
lasso_profile_clean_msg_info(LassoProfile *profile)
 
317
{
 
318
        if (profile->msg_url) {
 
319
                g_free(profile->msg_url);
 
320
                profile->msg_url = NULL;
 
321
        }
 
322
        if (profile->msg_body) {
 
323
                g_free(profile->msg_body);
 
324
                profile->msg_body = NULL;
 
325
        }
 
326
}
 
327
 
302
328
 
303
329
/**
304
330
 * lasso_profile_set_identity_from_dump:
332
358
 * Return value: 0 on success; or a negative value otherwise.
333
359
 **/
334
360
gint
335
 
lasso_profile_set_session_from_dump(LassoProfile *profile, const gchar  *dump)
 
361
lasso_profile_set_session_from_dump(LassoProfile *profile, const gchar *dump)
336
362
{
337
363
        g_return_val_if_fail(dump != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
338
364
 
339
365
        profile->session = lasso_session_new_from_dump(dump);
340
366
        if (profile->session == NULL)
341
367
                return critical_error(LASSO_PROFILE_ERROR_BAD_SESSION_DUMP);
 
368
        
 
369
        IF_SAML2(profile) {
 
370
                lasso_saml20_profile_set_session_from_dump(profile);
 
371
        }
 
372
 
342
373
        profile->session->is_dirty = FALSE;
343
374
 
344
375
        return 0;
379
410
        { "MsgUrl", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, msg_url) },
380
411
        { "MsgBody", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, msg_body) },
381
412
        { "MsgRelayState", SNIPPET_CONTENT, G_STRUCT_OFFSET(LassoProfile, msg_relayState) },
 
413
        { "HttpRequestMethod", SNIPPET_CONTENT | SNIPPET_INTEGER,
 
414
                G_STRUCT_OFFSET(LassoProfile, http_request_method) },
382
415
        { NULL, 0, 0}
383
416
};
384
417
 
385
418
static LassoNodeClass *parent_class = NULL;
386
419
 
 
420
static xmlNode*
 
421
get_xmlNode(LassoNode *node, gboolean lasso_dump)
 
422
{
 
423
        xmlNode *xmlnode;
 
424
        LassoProfile *profile = LASSO_PROFILE(node);
 
425
 
 
426
        xmlnode = parent_class->get_xmlNode(node, lasso_dump);
 
427
 
 
428
        if (profile->private_data->artifact) {
 
429
                xmlNewTextChild(xmlnode, NULL, (xmlChar*)"Artifact",
 
430
                        (xmlChar*)profile->private_data->artifact);
 
431
        }
 
432
 
 
433
        if (profile->private_data->artifact_message) {
 
434
                xmlNewTextChild(xmlnode, NULL, (xmlChar*)"ArtifactMessage",
 
435
                        (xmlChar*)profile->private_data->artifact_message);
 
436
        }
 
437
 
 
438
        return xmlnode;
 
439
}
 
440
 
 
441
 
 
442
static int
 
443
init_from_xml(LassoNode *node, xmlNode *xmlnode)
 
444
{
 
445
        LassoProfile *profile = LASSO_PROFILE(node);
 
446
        xmlNode *t;
 
447
 
 
448
        parent_class->init_from_xml(node, xmlnode);
 
449
        
 
450
        if (xmlnode == NULL)
 
451
                return LASSO_XML_ERROR_OBJECT_CONSTRUCTION_FAILED;
 
452
 
 
453
        t = xmlnode->children;
 
454
        while (t) {
 
455
                xmlChar *s;
 
456
 
 
457
                if (t->type != XML_ELEMENT_NODE) {
 
458
                        t = t->next;
 
459
                        continue;
 
460
                }
 
461
 
 
462
                if (strcmp((char*)t->name, "Artifact") == 0) {
 
463
                        s = xmlNodeGetContent(t);
 
464
                        profile->private_data->artifact = g_strdup((char*)s);
 
465
                        xmlFree(s);
 
466
                } else if (strcmp((char*)t->name, "ArtifactMessage") == 0) {
 
467
                        s = xmlNodeGetContent(t);
 
468
                        profile->private_data->artifact_message = g_strdup((char*)s);
 
469
                        xmlFree(s);
 
470
                }
 
471
 
 
472
                t = t->next;
 
473
        }
 
474
 
 
475
        return 0;
 
476
}
 
477
 
 
478
 
 
479
 
387
480
/*****************************************************************************/
388
481
/* overridden parent class methods                                           */
389
482
/*****************************************************************************/
456
549
        lasso_node_class_set_nodename(nclass, "Profile");
457
550
        lasso_node_class_set_ns(nclass, LASSO_LASSO_HREF, LASSO_LASSO_PREFIX);
458
551
        lasso_node_class_add_snippets(nclass, schema_snippets);
 
552
        nclass->get_xmlNode = get_xmlNode;
 
553
        nclass->init_from_xml = init_from_xml;
459
554
 
460
555
        G_OBJECT_CLASS(klass)->dispose = dispose;
461
556
        G_OBJECT_CLASS(klass)->finalize = finalize;