gtlsfiledatabase.c 3.36 KB
Newer Older
1 2 3 4 5 6 7
/* GIO - GLib Input, Output and Streaming Library
 *
 * Copyright © 2010 Collabora, Ltd
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
8
 * version 2.1 of the License, or (at your option) any later version.
9 10 11 12 13 14 15
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
16
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
 *
 * Author: Stef Walter <stefw@collabora.co.uk>
 */

#include "config.h"

#include "gtlsfiledatabase.h"

#include "ginitable.h"
#include "gtlsbackend.h"
#include "gtlsdatabase.h"
#include "glibintl.h"

/**
 * SECTION:gtlsfiledatabase
 * @short_description: TLS file based database type
 * @include: gio/gio.h
 *
 * #GTlsFileDatabase is implemented by #GTlsDatabase objects which load
Murray Cumming's avatar
Murray Cumming committed
36
 * their certificate information from a file. It is an interface which
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
 * TLS library specific subtypes implement.
 *
 * Since: 2.30
 */

/**
 * GTlsFileDatabase:
 *
 * Implemented by a #GTlsDatabase which allows you to load certificates
 * from a file.
 *
 * Since: 2.30
 */
G_DEFINE_INTERFACE (GTlsFileDatabase, g_tls_file_database, G_TYPE_TLS_DATABASE)

static void
g_tls_file_database_default_init (GTlsFileDatabaseInterface *iface)
{
  /**
   * GTlsFileDatabase:anchors:
   *
   * The path to a file containing PEM encoded certificate authority
   * root anchors. The certificates in this file will be treated as
   * root authorities for the purpose of verifying other certificates
   * via the g_tls_database_verify_chain() operation.
   *
   * Since: 2.30
   */
  g_object_interface_install_property (iface,
                                       g_param_spec_string ("anchors",
                                                           P_("Anchors"),
                                                           P_("The certificate authority anchor file"),
                                                           NULL,
                                                           G_PARAM_READWRITE |
                                                           G_PARAM_CONSTRUCT |
                                                           G_PARAM_STATIC_STRINGS));
}

/**
 * g_tls_file_database_new:
77
 * @anchors: (type filename): filename of anchor certificate authorities.
78 79 80 81 82 83 84
 * @error: #GError for error reporting, or %NULL to ignore.
 *
 * Creates a new #GTlsFileDatabase which uses anchor certificate authorities
 * in @anchors to verify certificate chains.
 *
 * The certificates in @anchors must be PEM encoded.
 *
85
 * Returns: (transfer full) (type GTlsFileDatabase): the new
86
 * #GTlsFileDatabase, or %NULL on error
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
 *
 * Since: 2.30
 */
GTlsDatabase*
g_tls_file_database_new (const gchar     *anchors,
                         GError         **error)
{
  GObject *database;
  GTlsBackend *backend;

  backend = g_tls_backend_get_default ();
  database = g_initable_new (g_tls_backend_get_file_database_type (backend),
                             NULL, error,
                             "anchors", anchors,
                             NULL);
  return G_TLS_DATABASE (database);
}