~ubuntu-branches/ubuntu/gutsy/lasso/gutsy-security

« back to all changes in this revision

Viewing changes to lasso/saml-2.0/provider.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: provider.c,v 1.2 2005/11/21 18:51:52 fpeters Exp $
 
1
/* $Id: provider.c,v 1.16 2007/01/06 22:13:53 fpeters Exp $
2
2
 *
3
3
 * Lasso - A free implementation of the Liberty Alliance specifications.
4
4
 *
60
60
                        if (use && strcmp(use, "signing") == 0) {
61
61
                                provider->private_data->signing_key_descriptor = xmlCopyNode(t, 1);
62
62
                        }
 
63
                        if (use && strcmp(use, "encryption") == 0) {
 
64
                                provider->private_data->encryption_key_descriptor = 
 
65
                                        xmlCopyNode(t, 1);
 
66
                        }
 
67
                        xmlFree(use);
63
68
                        t = t->next;
64
69
                        continue;
65
70
                }
67
72
                if (binding) {
68
73
                        /* Endpoint type */
69
74
                        char *binding_s = NULL;
70
 
                        if (strcmp(binding, LASSO_SAML20_METADATA_BINDING_SOAP) == 0) {
 
75
                        if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_SOAP) == 0) {
71
76
                                binding_s = "SOAP";
72
 
                        } else if (strcmp(binding, LASSO_SAML20_METADATA_BINDING_REDIRECT) == 0) {
 
77
                        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_REDIRECT) == 0) {
73
78
                                binding_s = "HTTP-Redirect";
74
 
                        } else if (strcmp(binding, LASSO_SAML20_METADATA_BINDING_POST) == 0) {
 
79
                        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_POST) == 0) {
75
80
                                binding_s = "HTTP-POST";
76
 
                        } else if (strcmp(binding, LASSO_SAML20_METADATA_BINDING_ARTIFACT) == 0) {
 
81
                        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_ARTIFACT) == 0) {
77
82
                                binding_s = "HTTP-Artifact";
 
83
                        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_PAOS) == 0) {
 
84
                                binding_s = "PAOS";
78
85
                        } else {
79
86
                                message(G_LOG_LEVEL_CRITICAL, "XXX: unknown binding: %s", binding);
80
87
                                xmlFree(binding);
198
205
        LassoHttpMethod method = LASSO_HTTP_METHOD_NONE;
199
206
        int i;
200
207
        const char *possible_bindings[] = {
201
 
                "SOAP", "HTTP-Redirect", "HTTP-Post", NULL
 
208
                "HTTP-Redirect", "HTTP-Post", "SOAP", NULL
202
209
        };
203
210
        LassoHttpMethod method_bindings[] = {
204
211
                LASSO_HTTP_METHOD_SOAP, LASSO_HTTP_METHOD_REDIRECT, LASSO_HTTP_METHOD_POST
233
240
        char *sid;
234
241
        char *name;
235
242
        const char *possible_bindings[] = {
236
 
                "HTTP-Artifact", "HTTP-Post", NULL
 
243
                "HTTP-Artifact", "HTTP-Post", "HTTP-POST", "SOAP", NULL
237
244
        };
238
245
        int i;
239
246
 
240
247
        if (service_id == -1) {
241
 
                sid = provider->private_data->default_assertion_consumer;
 
248
                sid = g_strdup(provider->private_data->default_assertion_consumer);
242
249
        } else {
243
250
                sid = g_strdup_printf("%d", service_id);
244
251
        }
245
 
                
246
252
 
247
253
        descriptor = provider->private_data->SPDescriptor;
248
254
        if (descriptor == NULL)
256
262
                if (l != NULL)
257
263
                        break;
258
264
        }
 
265
        g_free(sid);
259
266
        if (l)
260
267
                return g_strdup(l->data);
261
268
        return NULL;
262
269
}
263
270
 
 
271
static void
 
272
add_assertion_consumer_url_to_list(gchar *key, gpointer value, GList **list)
 
273
{
 
274
        if (strncmp(key, "AssertionConsumerService", 24) == 0) {
 
275
                *list = g_list_append(*list, key);
 
276
        }
 
277
}
 
278
 
 
279
 
 
280
gchar*
 
281
lasso_saml20_provider_get_assertion_consumer_service_url_by_binding(LassoProvider *provider,
 
282
                gchar *binding)
 
283
{
 
284
        GHashTable *descriptor;
 
285
        GList *l = NULL, *r = NULL;
 
286
        char *name;
 
287
        char *binding_s = NULL;
 
288
        int lname;
 
289
 
 
290
        descriptor = provider->private_data->SPDescriptor;
 
291
        if (descriptor == NULL)
 
292
                return NULL;
 
293
 
 
294
        if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_SOAP) == 0) {
 
295
                binding_s = "SOAP";
 
296
        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_REDIRECT) == 0) {
 
297
                binding_s = "HTTP-Redirect";
 
298
        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_POST) == 0) {
 
299
                binding_s = "HTTP-POST";
 
300
        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_ARTIFACT) == 0) {
 
301
                binding_s = "HTTP-Artifact";
 
302
        } else if (strcmp(binding, LASSO_SAML2_METADATA_BINDING_PAOS) == 0) {
 
303
                binding_s = "PAOS";
 
304
        }
 
305
 
 
306
        if (binding_s == NULL) {
 
307
                return NULL;
 
308
        }
 
309
 
 
310
        g_hash_table_foreach(descriptor, (GHFunc)add_assertion_consumer_url_to_list, &r);
 
311
 
 
312
        name = g_strdup_printf("AssertionConsumerService %s ", binding_s);
 
313
        lname = strlen(name);
 
314
        for (l = r; l; l = g_list_next(l)) {
 
315
                char *b = l->data;
 
316
                if (strncmp(name, b, lname) == 0) {
 
317
                        l = g_hash_table_lookup(descriptor, b);
 
318
                        break;
 
319
                }
 
320
        }
 
321
        g_free(name);
 
322
        g_list_free(r);
 
323
 
 
324
        if (l) {
 
325
                return g_strdup(l->data);
 
326
        }
 
327
 
 
328
        return NULL;
 
329
}
 
330
 
 
331
 
 
332
 
 
333
gchar*
 
334
lasso_saml20_provider_get_assertion_consumer_service_binding(LassoProvider *provider,
 
335
                int service_id)
 
336
{
 
337
        GHashTable *descriptor;
 
338
        GList *l = NULL;
 
339
        char *sid;
 
340
        char *name;
 
341
        char *binding = NULL;
 
342
        const char *possible_bindings[] = {
 
343
                "HTTP-Artifact", "HTTP-Post", "HTTP-POST", "SOAP", NULL
 
344
        };
 
345
        int i;
 
346
 
 
347
        if (service_id == -1) {
 
348
                sid = g_strdup(provider->private_data->default_assertion_consumer);
 
349
        } else {
 
350
                sid = g_strdup_printf("%d", service_id);
 
351
        }
 
352
 
 
353
        descriptor = provider->private_data->SPDescriptor;
 
354
        if (descriptor == NULL)
 
355
                return NULL;
 
356
 
 
357
        for (i=0; possible_bindings[i]; i++) {
 
358
                name = g_strdup_printf("AssertionConsumerService %s %s",
 
359
                                possible_bindings[i], sid);
 
360
                l = g_hash_table_lookup(descriptor, name);
 
361
                g_free(name);
 
362
                if (l != NULL) {
 
363
                        binding = g_strdup(possible_bindings[i]);
 
364
                        break;
 
365
                }
 
366
        }
 
367
        g_free(sid);
 
368
        return binding;
 
369
}
 
370
 
 
371
 
 
372
 
264
373
gboolean
265
374
lasso_saml20_provider_accept_http_method(LassoProvider *provider, LassoProvider *remote_provider,
266
375
                LassoMdProtocolType protocol_type, LassoHttpMethod http_method,
301
410
 
302
411
        return FALSE;
303
412
}
304
 
 
305