Add more version checks for modules
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 14 Jun 2014 20:37:05 +0000 (21:37 +0100)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 14 Jun 2014 20:37:21 +0000 (21:37 +0100)
src/modules/rlm_couchbase/rlm_couchbase.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_redis/rlm_redis.c
src/modules/rlm_rest/rest.c
src/modules/rlm_sql/drivers/rlm_sql_sqlite/rlm_sql_sqlite.c

index 8ebcd9c..95ca1fa 100644 (file)
@@ -53,8 +53,15 @@ static const CONF_PARSER module_config[] = {
 
 /* initialize couchbase connection */
 static int mod_instantiate(CONF_SECTION *conf, void *instance) {
+       static bool version_done;
+
        rlm_couchbase_t *inst = instance;   /* our module instance */
 
+       if (!version_done) {
+               version_done = true;
+               INFO("rlm_couchbase: liblcouchbase version: %s", lcb_get_version(NULL));
+       }
+
        {
                char *server, *p;
                size_t len, i;
index 2d00193..593d7c2 100644 (file)
@@ -533,6 +533,8 @@ static int parse_sub_section(ldap_instance_t *inst, CONF_SECTION *parent, ldap_a
  */
 static int mod_instantiate(CONF_SECTION *conf, void *instance)
 {
+       static bool version_done;
+
        CONF_SECTION *options;
        ldap_instance_t *inst = instance;
 
@@ -549,6 +551,32 @@ static int mod_instantiate(CONF_SECTION *conf, void *instance)
        }
 
        /*
+        *      Get version info from the LDAP API.
+        */
+       if (!version_done) {
+               LDAPAPIInfo info;
+
+               version_done = true;
+
+               if (ldap_get_option(NULL, LDAP_OPT_API_INFO, &info) == LDAP_SUCCESS) {
+                       if (strcmp(info.ldapai_vendor_name, LDAP_VENDOR_NAME) != 0) {
+                               WARN("rlm_ldap: libldap vendor changed since the server was built");
+                               WARN("rlm_ldap: linked: %s built: %s", info.ldapai_vendor_name, LDAP_VENDOR_NAME);
+                       }
+
+                       if (info.ldapai_vendor_version != LDAP_VENDOR_VERSION) {
+                               WARN("rlm_ldap: libldap version changed since the server was built");
+                               WARN("rlm_ldap: linked: %i built: %i",
+                                    info.ldapai_vendor_version, LDAP_VENDOR_VERSION);
+                       }
+
+                       INFO("rlm_ldap: libldap vendor: %s version: %i", info.ldapai_vendor_name,
+                            info.ldapai_vendor_version);
+                       ldap_memfree(info.ldapai_extensions);
+               }
+       }
+
+       /*
         *      If the configuration parameters can't be parsed, then fail.
         */
        if ((parse_sub_section(inst, conf, &inst->accounting, RLM_COMPONENT_ACCT) < 0) ||
index 5aed762..f752719 100644 (file)
@@ -262,12 +262,19 @@ int rlm_redis_finish_query(REDISSOCK *dissocket)
 
 static int mod_instantiate(CONF_SECTION *conf, void *instance)
 {
+       static bool version_done;
+
        REDIS_INST *inst = instance;
 
+       if (!version_done) {
+               version_done = true;
+
+               INFO("rlm_redis: libhiredis version: %i.%i.%i", HIREDIS_MAJOR, HIREDIS_MINOR, HIREDIS_PATCH);
+       }
+
        inst->xlat_name = cf_section_name2(conf);
 
-       if (!inst->xlat_name)
-               inst->xlat_name = cf_section_name1(conf);
+       if (!inst->xlat_name) inst->xlat_name = cf_section_name1(conf);
 
        xlat_register(inst->xlat_name, redis_xlat, NULL, inst); /* FIXME! */
 
index 00bc157..f73f5a0 100644 (file)
@@ -242,6 +242,7 @@ typedef struct json_flags {
  */
 int rest_init(rlm_rest_t *instance)
 {
+       static bool version_done;
        CURLcode ret;
 
        /* developer sanity */
@@ -257,7 +258,19 @@ int rest_init(rlm_rest_t *instance)
                return -1;
        }
 
-       DEBUG("rlm_rest (%s): CURL library version: %s", instance->xlat_name, curl_version());
+       if (!version_done) {
+               curl_version_info_data *curlversion;
+
+               version_done = true;
+
+               curlversion = curl_version_info(CURLVERSION_NOW);
+               if (strcmp(LIBCURL_VERSION, curlversion->version) != 0) {
+                       WARN("rlm_rest: libcurl version changed since the server was built");
+                       WARN("rlm_rest: linked: %s built: %s", curlversion->version, LIBCURL_VERSION);
+               }
+
+               INFO("rlm_rest: libcurl version: %s", curl_version());
+       }
 
        return 0;
 }
index 44d1369..2b879f4 100644 (file)
@@ -227,22 +227,26 @@ static int sql_loadfile(TALLOC_CTX *ctx, sqlite3 *db, char const *filename)
 
 static int mod_instantiate(CONF_SECTION *conf, rlm_sql_config_t *config)
 {
+       static bool version_done;
+
        bool exists;
        rlm_sql_sqlite_config_t *driver;
        struct stat buf;
 
-       if (sqlite3_libversion_number() != SQLITE_VERSION_NUMBER) {
-               DEBUG2("rlm_sql_sqlite: SQLite library version (%s) is different from the version the server was "
-                      "originally built against (%s), this may cause issues",
-                      sqlite3_libversion(), SQLITE_VERSION);
+       if (!version_done) {
+               version_done = true;
+
+               if (sqlite3_libversion_number() != SQLITE_VERSION_NUMBER) {
+                       WARN("rlm_sql_sqlite: libsqlite version changed since the server was built");
+                       WARN("rlm_sql_sqlite: linked: %s built: %s", sqlite3_libversion(), SQLITE_VERSION);
+               }
+               INFO("rlm_sql_sqlite: libsqlite version: %s", sqlite3_libversion());
        }
 
        MEM(driver = config->driver = talloc_zero(config, rlm_sql_sqlite_config_t));
        if (cf_section_parse(conf, driver, driver_config) < 0) {
                return -1;
        }
-
-       INFO("rlm_sql_sqlite: SQLite library version: %s", sqlite3_libversion());
        if (!driver->filename) {
                MEM(driver->filename = talloc_typed_asprintf(driver, "%s/%s", get_radius_dir(), config->sql_db));
        }