#include "attrs.h"
-static uint32_t instance_count = 0;
-
fr_dict_attr_t const *attr_tls_certificate;
static fr_dict_t const *dict_freeradius; /*internal dictionary for server*/
CONF_PARSER_TERMINATOR
};
-/** Initialise global curl options
- *
- * libcurl is meant to performa reference counting, but still seems to
- * leak lots of memory if we call curl_global_init many times.
- */
-int fr_curl_init(void)
-{
- CURLcode ret;
- curl_version_info_data *curlversion;
-
- if (instance_count > 0) {
- instance_count++;
- return 0;
- }
-
-#ifdef WITH_TLS
- /*
- * Use our OpenSSL init with the hope that
- * the free function will also free the
- * memory allocated during SSL init.
- */
- if (fr_openssl_init() < 0) return -1;
-#endif
-
- if (fr_dict_autoload(curl_dict) < 0) {
- PERROR("Failed loading dictionaries for curl");
- return -1;
- }
-
- if (fr_dict_attr_autoload(curl_attr) < 0) {
- PERROR("Failed loading dictionaries for curl");
- return -1;
- }
-
- ret = curl_global_init(CURL_GLOBAL_ALL);
- if (ret != CURLE_OK) {
- ERROR("CURL init returned error: %i - %s", ret, curl_easy_strerror(ret));
- fr_dict_autofree(curl_dict);
- return -1;
- }
-
- curlversion = curl_version_info(CURLVERSION_NOW);
- if (strcmp(LIBCURL_VERSION, curlversion->version) != 0) {
- WARN("libcurl version changed since the server was built");
- WARN("linked: %s built: %s", curlversion->version, LIBCURL_VERSION);
- }
-
- INFO("libcurl version: %s", curl_version());
-
- instance_count++;
-
- return 0;
-}
-
-void fr_curl_free(void)
-{
- if (--instance_count > 0) return;
-
- fr_dict_autofree(curl_dict);
-
-#ifdef WITH_TLS
- fr_openssl_free();
-#endif
- curl_global_cleanup();
-}
-
int fr_curl_easy_tls_init(fr_curl_io_request_t *randle, fr_curl_tls_t const *conf)
{
request_t *request = randle->request;
}
return 0;
}
+
+
+/** Initialise global curl options
+ *
+ * libcurl is meant to performa reference counting, but still seems to
+ * leak lots of memory if we call curl_global_init many times.
+ */
+static int fr_curl_init(void)
+{
+ CURLcode ret;
+ curl_version_info_data *curlversion;
+
+#ifdef WITH_TLS
+ /*
+ * Use our OpenSSL init with the hope that
+ * the free function will also free the
+ * memory allocated during SSL init.
+ */
+ if (fr_openssl_init() < 0) return -1;
+#endif
+
+ if (fr_dict_autoload(curl_dict) < 0) {
+ PERROR("Failed loading dictionaries for curl");
+ return -1;
+ }
+
+ if (fr_dict_attr_autoload(curl_attr) < 0) {
+ PERROR("Failed loading dictionaries for curl");
+ return -1;
+ }
+
+ ret = curl_global_init(CURL_GLOBAL_ALL);
+ if (ret != CURLE_OK) {
+ ERROR("CURL init returned error: %i - %s", ret, curl_easy_strerror(ret));
+ fr_dict_autofree(curl_dict);
+ return -1;
+ }
+
+ curlversion = curl_version_info(CURLVERSION_NOW);
+ if (strcmp(LIBCURL_VERSION, curlversion->version) != 0) {
+ WARN("libcurl version changed since the server was built");
+ WARN("linked: %s built: %s", curlversion->version, LIBCURL_VERSION);
+ }
+
+ INFO("libcurl version: %s", curl_version());
+
+ return 0;
+}
+
+static void fr_curl_free(void)
+{
+ fr_dict_autofree(curl_dict);
+
+#ifdef WITH_TLS
+ fr_openssl_free();
+#endif
+ curl_global_cleanup();
+}
+
+/*
+ * Public symbol modules can reference to auto instantiate libcurl
+ */
+global_lib_autoinst_t fr_curl_autoinst = {
+ .name = "curl",
+ .init = fr_curl_init,
+ .free = fr_curl_free
+};
#define CURL_NO_OLDIES 1
#include <curl/curl.h>
+#include <freeradius-devel/server/global_lib.h>
+#include <freeradius-devel/server/module.h>
#include <freeradius-devel/server/request.h>
#include <freeradius-devel/util/event.h>
-#include <freeradius-devel/server/module.h>
DIAG_OFF(DIAG_UNKNOWN_PRAGMAS)
DIAG_OFF(disabled-macro-expansion)
bool extract_cert_attrs;
} fr_curl_tls_t;
-extern CONF_PARSER fr_curl_tls_config[];
+extern CONF_PARSER fr_curl_tls_config[];
+extern global_lib_autoinst_t fr_curl_autoinst;
int fr_curl_io_request_enqueue(fr_curl_handle_t *mhandle,
request_t *request, fr_curl_io_request_t *creq);
fr_curl_handle_t *fr_curl_io_init(TALLOC_CTX *ctx, fr_event_list_t *el, bool multiplex);
-int fr_curl_init(void);
-
-void fr_curl_free(void);
-
int fr_curl_response_certinfo(request_t *request, fr_curl_io_request_t *randle);
int fr_curl_easy_tls_init (fr_curl_io_request_t *randle, fr_curl_tls_t const *conf);
RCSID("$Id$")
#include <freeradius-devel/server/cf_file.h>
+#include <freeradius-devel/server/global_lib.h>
#include <freeradius-devel/server/modpriv.h>
#include <freeradius-devel/server/module_rlm.h>
#include <freeradius-devel/server/pair.h>
RCSID("$Id$")
+#include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
#include <freeradius-devel/server/base.h>
#include <freeradius-devel/server/command.h>
+#include <freeradius-devel/server/cond.h>
#include <freeradius-devel/server/dl_module.h>
+#include <freeradius-devel/server/global_lib.h>
#include <freeradius-devel/server/modpriv.h>
-#include <freeradius-devel/server/cond.h>
-#include <freeradius-devel/server/protocol.h>
#include <freeradius-devel/server/process.h>
+#include <freeradius-devel/server/protocol.h>
#include <freeradius-devel/server/virtual_servers.h>
-#include <freeradius-devel/protocol/freeradius/freeradius.internal.h>
#include <freeradius-devel/io/application.h>
#include <freeradius-devel/io/master.h>
*/
RCSID("$Id$")
+#include <freeradius-devel/curl/base.h>
#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/global_lib.h>
#include <freeradius-devel/server/module_rlm.h>
-#include <freeradius-devel/curl/base.h>
static fr_dict_t const *dict_radius; /*dictionary for radius protocol*/
{ NULL },
};
+extern global_lib_autoinst_t const * const rlm_imap_lib[];
+global_lib_autoinst_t const * const rlm_imap_lib[] = {
+ &fr_curl_autoinst,
+ GLOBAL_LIB_TERMINATOR
+};
+
typedef struct {
char const *uri; //!< URI of imap server
fr_time_delta_t timeout; //!< Timeout for connection and server response
return unlang_module_yield(request, mod_authenticate_resume, NULL, randle);
}
-/*
- * Initialize global curl instance
- */
-static int mod_load(void)
-{
- if (fr_curl_init() < 0) return -1;
- return 0;
-}
-
-/*
- * Close global curl instance
- */
-static void mod_unload(void)
-{
- fr_curl_free();
-}
-
/*
* Initialize a new thread with a curl instance
*/
.inst_size = sizeof(rlm_imap_t),
.thread_inst_size = sizeof(rlm_imap_thread_t),
.config = module_config,
- .onload = mod_load,
- .unload = mod_unload,
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},
#include <freeradius-devel/curl/base.h>
#include <freeradius-devel/server/base.h>
+#include <freeradius-devel/server/global_lib.h>
#include <freeradius-devel/server/module_rlm.h>
#include <freeradius-devel/server/pairmove.h>
#include <freeradius-devel/tls/base.h>
{ NULL }
};
+extern global_lib_autoinst_t const * const rlm_rest_lib[];
+global_lib_autoinst_t const * const rlm_rest_lib[] = {
+ &fr_curl_autoinst,
+ GLOBAL_LIB_TERMINATOR
+};
+
/** Update the status attribute
*
* @param[in] request The current request.
/* developer sanity */
fr_assert((NUM_ELEMENTS(http_body_type_supported)) == REST_HTTP_BODY_NUM_ENTRIES);
- if (fr_curl_init() < 0) return -1;
-
#ifdef HAVE_JSON
fr_json_version_print();
#endif
return 0;
}
-/** Called to free resources held by libcurl
- *
- * @see mod_load
- */
-static void mod_unload(void)
-{
- fr_curl_free();
-}
-
/*
* The module name should be the only globally exported symbol.
* That is, everything else should be 'static'.
.thread_inst_size = sizeof(rlm_rest_thread_t),
.config = module_config,
.onload = mod_load,
- .unload = mod_unload,
.bootstrap = mod_bootstrap,
.instantiate = instantiate,
.thread_instantiate = mod_thread_instantiate,
#include <freeradius-devel/curl/base.h>
#include <freeradius-devel/server/base.h>
#include <freeradius-devel/server/cf_priv.h>
+#include <freeradius-devel/server/global_lib.h>
#include <freeradius-devel/server/module_rlm.h>
#include <freeradius-devel/server/tmpl_dcursor.h>
#include <freeradius-devel/util/talloc.h>
{ NULL },
};
+extern global_lib_autoinst_t const * const rlm_smtp_lib[];
+global_lib_autoinst_t const * const rlm_smtp_lib[] = {
+ &fr_curl_autoinst,
+ GLOBAL_LIB_TERMINATOR
+};
+
typedef struct {
char const *uri; //!< URI of smtp server
char const *template_dir; //!< The directory that contains all email attachments
return unlang_module_yield(request, mod_authenticate_resume, NULL, randle);
}
-/*
- * Initialize global curl instance
- */
-static int mod_load(void)
-{
- if (fr_curl_init() < 0) return -1;
- return 0;
-}
-
-/*
- * Close global curl instance
- */
-static void mod_unload(void)
-{
- fr_curl_free();
-}
-
/** Verify that a map in the header section makes sense
*
*/
.config = module_config,
.bootstrap = mod_bootstrap,
.instantiate = mod_instantiate,
- .onload = mod_load,
- .unload = mod_unload,
.thread_instantiate = mod_thread_instantiate,
.thread_detach = mod_thread_detach,
},