Annotation of embedaddon/strongswan/src/libcharon/plugins/attr_sql/attr_sql_plugin.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2013 Tobias Brunner
                      3:  * Copyright (C) 2008 Martin Willi
                      4:  * HSR Hochschule fuer Technik Rapperswil
                      5:  *
                      6:  * This program is free software; you can redistribute it and/or modify it
                      7:  * under the terms of the GNU General Public License as published by the
                      8:  * Free Software Foundation; either version 2 of the License, or (at your
                      9:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                     10:  *
                     11:  * This program is distributed in the hope that it will be useful, but
                     12:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     13:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     14:  * for more details.
                     15:  */
                     16: 
                     17: #include <daemon.h>
                     18: #include <utils/debug.h>
                     19: #include <plugins/plugin_feature.h>
                     20: 
                     21: #include "attr_sql_plugin.h"
                     22: #include "attr_sql_provider.h"
                     23: 
                     24: typedef struct private_attr_sql_plugin_t private_attr_sql_plugin_t;
                     25: 
                     26: /**
                     27:  * private data of attr_sql plugin
                     28:  */
                     29: struct private_attr_sql_plugin_t {
                     30: 
                     31:        /**
                     32:         * implements plugin interface
                     33:         */
                     34:        attr_sql_plugin_t public;
                     35: 
                     36:        /**
                     37:         * database connection instance
                     38:         */
                     39:        database_t *db;
                     40: 
                     41:        /**
                     42:         * configuration attributes
                     43:         */
                     44:        attr_sql_provider_t *attribute;
                     45: };
                     46: 
                     47: METHOD(plugin_t, get_name, char*,
                     48:        private_attr_sql_plugin_t *this)
                     49: {
                     50:        return "attr-sql";
                     51: }
                     52: 
                     53: /**
                     54:  * Connect to database
                     55:  */
                     56: static bool open_database(private_attr_sql_plugin_t *this,
                     57:                                                  plugin_feature_t *feature, bool reg, void *cb_data)
                     58: {
                     59:        if (reg)
                     60:        {
                     61:                char *uri;
                     62: 
                     63:                uri = lib->settings->get_str(lib->settings,
                     64:                                                                "%s.plugins.attr-sql.database", NULL, lib->ns);
                     65:                if (!uri)
                     66:                {
                     67:                        DBG1(DBG_CFG, "attr-sql plugin: database URI not set");
                     68:                        return FALSE;
                     69:                }
                     70: 
                     71:                this->db = lib->db->create(lib->db, uri);
                     72:                if (!this->db)
                     73:                {
                     74:                        DBG1(DBG_CFG, "attr-sql plugin failed to connect to database");
                     75:                        return FALSE;
                     76:                }
                     77:                this->attribute = attr_sql_provider_create(this->db);
                     78:                charon->attributes->add_provider(charon->attributes,
                     79:                                                                                 &this->attribute->provider);
                     80:        }
                     81:        else
                     82:        {
                     83:                charon->attributes->remove_provider(charon->attributes,
                     84:                                                                                        &this->attribute->provider);
                     85:                this->attribute->destroy(this->attribute);
                     86:                this->db->destroy(this->db);
                     87:        }
                     88:        return TRUE;
                     89: }
                     90: 
                     91: METHOD(plugin_t, get_features, int,
                     92:        private_attr_sql_plugin_t *this, plugin_feature_t *features[])
                     93: {
                     94:        static plugin_feature_t f[] = {
                     95:                PLUGIN_CALLBACK((plugin_feature_callback_t)open_database, NULL),
                     96:                        PLUGIN_PROVIDE(CUSTOM, "attr-sql"),
                     97:                                PLUGIN_DEPENDS(DATABASE, DB_ANY),
                     98:        };
                     99:        *features = f;
                    100:        return countof(f);
                    101: }
                    102: 
                    103: METHOD(plugin_t, destroy, void,
                    104:        private_attr_sql_plugin_t *this)
                    105: {
                    106:        free(this);
                    107: }
                    108: 
                    109: /*
                    110:  * see header file
                    111:  */
                    112: plugin_t *attr_sql_plugin_create()
                    113: {
                    114:        private_attr_sql_plugin_t *this;
                    115: 
                    116:        INIT(this,
                    117:                .public = {
                    118:                        .plugin = {
                    119:                                .get_name = _get_name,
                    120:                                .get_features = _get_features,
                    121:                                .destroy = _destroy,
                    122:                        },
                    123:                },
                    124:        );
                    125:        lib->settings->add_fallback(lib->settings, "%s.plugins.attr-sql",
                    126:                                                                "libhydra.plugins.attr-sql", lib->ns);
                    127: 
                    128:        return &this->public.plugin;
                    129: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>