]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
More header splitting
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 10 Oct 2018 07:07:00 +0000 (03:07 -0400)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 10 Oct 2018 07:07:00 +0000 (03:07 -0400)
13 files changed:
src/lib/server/base.h
src/lib/server/cf_util.h
src/lib/server/client.h
src/lib/server/main_config.h
src/lib/server/process.h
src/lib/server/rad_assert.h
src/lib/server/request.c
src/lib/server/stats.c
src/lib/server/trigger.h [new file with mode: 0644]
src/lib/server/util.c
src/lib/server/util.h
src/modules/proto_ldap_sync/proto_ldap_sync.c
src/modules/proto_tacacs/proto_tacacs.c

index 661c185a1c1a63c2abfcd1800d0ef03d5c6fbdfd..82a3fae10968dfc2ca82dda78f82c46685f1f961 100644 (file)
 RCSIDH(radiusd_h, "$Id$")
 
 #include <freeradius-devel/server/cf_file.h>
+#include <freeradius-devel/server/client.h>
+#include <freeradius-devel/server/dependency.h>
 #include <freeradius-devel/server/log.h>
+#include <freeradius-devel/server/paircmp.h>
+#include <freeradius-devel/server/process.h>
 #include <freeradius-devel/server/rcode.h>
+#include <freeradius-devel/server/realms.h>
 #include <freeradius-devel/server/request.h>
 #include <freeradius-devel/server/stats.h>
-#include <freeradius-devel/server/realms.h>
-#include <freeradius-devel/server/client.h>
-#include <freeradius-devel/server/process.h>
-#include <freeradius-devel/server/dependency.h>
-#include <freeradius-devel/server/paircmp.h>
+#include <freeradius-devel/server/trigger.h>
 #include <freeradius-devel/server/util.h>
 
 #include <freeradius-devel/util/base.h>
@@ -62,28 +63,8 @@ extern "C" {
 /*
  *     See util.c
  */
-#define SECONDS_PER_DAY                86400
-#define MAX_REQUEST_TIME       30
-#define CLEANUP_DELAY          5
-#define RETRY_DELAY            5
-#define RETRY_COUNT            3
-#define DEAD_TIME              120
 #define EXEC_TIMEOUT           10
 
-typedef enum request_fail {
-       REQUEST_FAIL_UNKNOWN = 0,
-       REQUEST_FAIL_NO_THREADS,        //!< No threads to handle it.
-       REQUEST_FAIL_DECODE,            //!< Rad_decode didn't like it.
-       REQUEST_FAIL_PROXY,             //!< Call to proxy modules failed.
-       REQUEST_FAIL_PROXY_SEND,        //!< Proxy_send didn't like it.
-       REQUEST_FAIL_NO_RESPONSE,       //!< We weren't told to respond, so we reject.
-       REQUEST_FAIL_HOME_SERVER,       //!< The home server didn't respond.
-       REQUEST_FAIL_HOME_SERVER2,      //!< Another case of the above.
-       REQUEST_FAIL_HOME_SERVER3,      //!< Another case of the above.
-       REQUEST_FAIL_NORMAL_REJECT,     //!< Authentication failure.
-       REQUEST_FAIL_SERVER_TIMEOUT     //!< The server took too long to process the request.
-} request_fail_t;
-
 /*
  *     Global variables.
  *
@@ -93,17 +74,9 @@ extern fr_log_lvl_t  rad_debug_lvl;
 extern fr_log_lvl_t    req_debug_lvl;
 extern char const      *radiusd_version;
 extern char const      *radiusd_version_short;
-void                   radius_signal_self(int flag);
 
-typedef enum {
-       RADIUS_SIGNAL_SELF_NONE         = (0),
-       RADIUS_SIGNAL_SELF_HUP          = (1 << 0),
-       RADIUS_SIGNAL_SELF_TERM         = (1 << 1),
-       RADIUS_SIGNAL_SELF_EXIT         = (1 << 2),
-       RADIUS_SIGNAL_SELF_DETAIL       = (1 << 3),
-       RADIUS_SIGNAL_SELF_NEW_FD       = (1 << 4),
-       RADIUS_SIGNAL_SELF_MAX          = (1 << 5)
-} radius_signal_t;
+
+
 /*
  *     Function prototypes.
  */
@@ -112,31 +85,6 @@ typedef enum {
 /* radiusd.c */
 int            log_err (char *);
 
-/* util.c */
-void (*reset_signal(int signo, void (*func)(int)))(int);
-int            rad_mkdir(char *directory, mode_t mode, uid_t uid, gid_t gid);
-size_t         rad_filename_make_safe(UNUSED REQUEST *request, char *out, size_t outlen,
-                                      char const *in, UNUSED void *arg);
-size_t         rad_filename_escape(UNUSED REQUEST *request, char *out, size_t outlen,
-                                   char const *in, UNUSED void *arg);
-ssize_t                rad_filename_unescape(char *out, size_t outlen, char const *in, size_t inlen);
-char           *rad_ajoin(TALLOC_CTX *ctx, char const **argv, int argc, char c);
-
-int            rad_copy_string(char *dst, char const *src);
-int            rad_copy_string_bare(char *dst, char const *src);
-int            rad_copy_variable(char *dst, char const *from);
-uint32_t       rad_pps(uint32_t *past, uint32_t *present, time_t *then, struct timeval *now);
-int            rad_expand_xlat(REQUEST *request, char const *cmd,
-                               int max_argc, char const *argv[], bool can_fail,
-                               size_t argv_buflen, char *argv_buf);
-
-char const     *rad_default_log_dir(void);
-char const     *rad_default_lib_dir(void);
-char const     *rad_default_raddb_dir(void);
-char const     *rad_default_run_dir(void);
-char const     *rad_default_sbin_dir(void);
-char const     *rad_default_radacct_dir(void);
-
 /* auth.c */
 rlm_rcode_t            rad_authenticate (REQUEST *);
 rlm_rcode_t            rad_postauth(REQUEST *);
@@ -154,11 +102,6 @@ int radius_readfrom_program(int fd, pid_t pid, int timeout,
 int radius_exec_program(TALLOC_CTX *ctx, char *out, size_t outlen, VALUE_PAIR **output_pairs,
                        REQUEST *request, char const *cmd, VALUE_PAIR *input_pairs,
                        bool exec_wait, bool shell_escape, int timeout) CC_HINT(nonnull (5, 6));
-void trigger_exec_init(CONF_SECTION const *cs);
-int trigger_exec(REQUEST *request, CONF_SECTION const *cs, char const *name, bool quench, VALUE_PAIR *args)
-                 CC_HINT(nonnull (3));
-void trigger_exec_free(void);
-VALUE_PAIR *trigger_args_afrom_server(TALLOC_CTX *ctx, char const *server, uint16_t port);
 
 /** Allocate a VALUE_PAIR in the request list
  *
@@ -250,29 +193,6 @@ VALUE_PAIR *trigger_args_afrom_server(TALLOC_CTX *ctx, char const *server, uint1
  */
 #define pair_delete_control(_da) fr_pair_delete_by_da(&request->control, _da)
 
-/* threads.c */
-int            thread_pool_bootstrap(CONF_SECTION *cs, bool *spawn_workers);
-int            thread_pool_init(void);
-void           thread_pool_stop(void);
-
-/*
- *     In threads.c
- */
-void request_enqueue(REQUEST *request);
-void request_queue_extract(REQUEST *request);
-
-extern struct timeval sd_watchdog_interval;
-
-/* process.c */
-fr_event_list_t *fr_global_event_list(void);
-int radius_event_init(void);
-int radius_event_start(bool spawn_flag);
-void radius_event_free(void);
-int radius_event_process(void);
-void radius_update_listener(rad_listen_t *listener);
-void revive_home_server(fr_event_list_t *el, struct timeval *now, void *ctx);
-void mark_home_server_dead(home_server_t *home, struct timeval *when);
-
 
 #ifdef __cplusplus
 }
index 7ab9d95050f4b65a117955bd5e2131f928cf1f80..fcf2f1a28a43d30e5b4b6848bb711c315e9216cf 100644 (file)
  */
 RCSIDH(conf_file_h, "$Id$")
 
-#include <stddef.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-#include <freeradius-devel/util/rbtree.h>
-#include <freeradius-devel/util/token.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -48,6 +39,14 @@ typedef struct cf_pair CONF_PAIR;    //!< #CONF_ITEM with an attribute, an operator
 typedef struct cf_data CONF_DATA;      //!< #CONF_ITEM used to associate arbitrary data
                                        ///< with a #CONF_PAIR or #CONF_SECTION.
 
+#include <stddef.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+#include <freeradius-devel/util/rbtree.h>
+#include <freeradius-devel/util/token.h>
 
 #define FR_TIMEVAL_TO_MS(_x) (((_x)->tv_usec / 1000) + ((_x)->tv_sec * (uint64_t)1000))
 #define FR_TIMESPEC_TO_MS(_x) (((_x)->tv_usec / 1000000) + ((_x)->tv_sec * (uint64_t)1000))
index 93ba4ef338a034f9341c79baf529314dcda65ecb..d9a47b12c97c348faf5de1c7ca67586188f1531c 100644 (file)
@@ -30,7 +30,43 @@ RCSIDH(clients_h, "$Id$")
 extern "C" {
 #endif
 
+typedef struct rad_client RADCLIENT;
+typedef struct rad_client_list RADCLIENT_LIST;
+
+/** Callback for retrieving values when building client sections
+ *
+ * Example:
+ @code{.c}
+   int _client_value_cb(char **out, CONF_PAIR const *cp, void *data)
+   {
+       my_result *result = data;
+       char *value;
+
+       value = get_attribute_from_result(result, cf_pair_value(cp));
+       if (!value) {
+               *out = NULL;
+               return 0;
+       }
+
+       *out = talloc_strdup(value);
+       free_attribute(value);
+
+       if (!*out) return -1;
+       return 0;
+   }
+ @endcode
+ *
+ * @param[out] out Where to write a pointer to the talloced value buffer.
+ * @param[in] cp The value of the CONF_PAIR specifies the attribute name to retrieve from the result.
+ * @param[in] data Pointer to the result struct to copy values from.
+ * @return
+ *     - 0 on success.
+ *     - -1 on failure.
+ */
+typedef int (*client_value_cb_t)(char **out, CONF_PAIR const *cp, void *data);
+
 #include <freeradius-devel/io/time.h>
+#include <freeradius-devel/server/request.h>
 #include <freeradius-devel/server/socket.h>
 #include <freeradius-devel/server/stats.h>
 #include <freeradius-devel/util/inet.h>
@@ -38,7 +74,7 @@ extern "C" {
 /** Describes a host allowed to send packets to the server
  *
  */
-typedef struct rad_client {
+struct rad_client {
        fr_ipaddr_t             ipaddr;                 //!< IPv4/IPv6 address of the host.
        fr_ipaddr_t             src_ipaddr;             //!< IPv4/IPv6 address to send responses
                                                        //!< from (family must match ipaddr).
@@ -86,41 +122,7 @@ typedef struct rad_client {
 
        FR_STRUCT_MEMBER_SIGNATURE(secret)
        FR_STRUCT_SIGNATURE
-} RADCLIENT;
-
-typedef struct rad_client_list RADCLIENT_LIST;
-
-/** Callback for retrieving values when building client sections
- *
- * Example:
- @code{.c}
-   int _client_value_cb(char **out, CONF_PAIR const *cp, void *data)
-   {
-       my_result *result = data;
-       char *value;
-
-       value = get_attribute_from_result(result, cf_pair_value(cp));
-       if (!value) {
-               *out = NULL;
-               return 0;
-       }
-
-       *out = talloc_strdup(value);
-       free_attribute(value);
-
-       if (!*out) return -1;
-       return 0;
-   }
- @endcode
- *
- * @param[out] out Where to write a pointer to the talloced value buffer.
- * @param[in] cp The value of the CONF_PAIR specifies the attribute name to retrieve from the result.
- * @param[in] data Pointer to the result struct to copy values from.
- * @return
- *     - 0 on success.
- *     - -1 on failure.
- */
-typedef int (*client_value_cb_t)(char **out, CONF_PAIR const *cp, void *data);
+};
 
 RADCLIENT_LIST *client_list_init(CONF_SECTION *cs);
 
index 16b99833215ec6e4c3a92efccb1ca1a5451a5770..b6eb27beb2a2ce8bb2a9f3a594409a40203824b1 100644 (file)
@@ -32,20 +32,16 @@ RCSIDH(main_config_h, "$Id$")
 extern "C" {
 #endif
 
+#define MAX_REQUEST_TIME       30                      //!< Default maximum request time
+
 typedef struct main_config_s main_config_t;
 
-#ifdef __cplusplus
-}
-#endif
+extern main_config_t const *main_config;               //!< Global configuration singleton.
 
 #include <freeradius-devel/server/cf_util.h>
 #include <freeradius-devel/server/tmpl.h>
 #include <freeradius-devel/util/dict.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 /** Main server configuration
  *
  * The parsed version of the main server config.
@@ -141,9 +137,6 @@ struct main_config_s {
                                                        //!< Only applicable in single threaded mode.
 };
 
-/* Define a global config structure */
-extern main_config_t const *main_config;
-
 void                   main_config_name_set_default(main_config_t *config, char const *name, bool overwrite_config);
 void                   main_config_raddb_dir_set(main_config_t *config, char const *path);
 void                   main_config_dict_dir_set(main_config_t *config, char const *path);
index 69ec608f72edf3b2b5661f4b2a1cb548de750ddb..b17a8c8861c6ff9fbbf62ef1e37db38f55efe225 100644 (file)
  */
 RCSIDH(process_h, "$Id$")
 
-#include <freeradius-devel/server/client.h>
-#include <freeradius-devel/server/listen.h>
-#include <freeradius-devel/server/signal.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/*
- *  Function handler for requests.
- */
-typedef        void (*fr_request_process_t)(REQUEST *, fr_state_signal_t);
+typedef enum {
+       RADIUS_SIGNAL_SELF_NONE         = (0),
+       RADIUS_SIGNAL_SELF_HUP          = (1 << 0),
+       RADIUS_SIGNAL_SELF_TERM         = (1 << 1),
+       RADIUS_SIGNAL_SELF_EXIT         = (1 << 2),
+       RADIUS_SIGNAL_SELF_DETAIL       = (1 << 3),
+       RADIUS_SIGNAL_SELF_NEW_FD       = (1 << 4),
+       RADIUS_SIGNAL_SELF_MAX          = (1 << 5)
+} radius_signal_t;
 
 extern time_t fr_start_time;
 
-/*
- *     More state machine helper functions.
- */
-void request_delete(REQUEST *request);
+extern struct timeval sd_watchdog_interval;
+
+#include <freeradius-devel/server/client.h>
+#include <freeradius-devel/server/listen.h>
+#include <freeradius-devel/server/signal.h>
+
+typedef        void (*fr_request_process_t)(REQUEST *, fr_state_signal_t);     //!< Function handler for requests.
+
+fr_event_list_t                *fr_global_event_list(void);
+
+void                   radius_signal_self(int flag);
+
+int                    radius_event_init(void);
+
+int                    radius_event_start(bool spawn_flag);
+
+void                   radius_event_free(void);
+
+int                    radius_event_process(void);
+
+void                   radius_update_listener(rad_listen_t *listener);
 
 #ifdef __cplusplus
 }
index 455ca441ae5d19bfa42688608cd5379ed08ce2ac..fbe4d0a3e5c16777b51a4a875c5e19de72919f40 100644 (file)
@@ -32,8 +32,6 @@ RCSIDH(rad_assert_h, "$Id$")
 extern "C" {
 #endif
 
-
-
 #ifdef NDEBUG
 #  define rad_assert(_expr)
 #elif !defined(__clang_analyzer__)
index 9eca01dadf88668b8ec03c343c894ccb58496c3a..261992ee8bd6a1d41d7c5021f5e387af0dd0f25f 100644 (file)
@@ -561,6 +561,81 @@ void request_data_restore(REQUEST *request, fr_dlist_head_t *in)
 }
 
 #ifdef WITH_VERIFY_PTR
+/*
+ *     Verify a packet.
+ */
+static void packet_verify(char const *file, int line, REQUEST const *request, RADIUS_PACKET const *packet, char const *type)
+{
+       TALLOC_CTX *parent;
+
+       if (!packet) {
+               fprintf(stderr, "CONSISTENCY CHECK FAILED %s[%i]: RADIUS_PACKET %s pointer was NULL", file, line, type);
+               if (!fr_cond_assert(0)) fr_exit_now(1);
+       }
+
+       parent = talloc_parent(packet);
+       if (parent != request) {
+               ERROR("CONSISTENCY CHECK FAILED %s[%i]: Expected RADIUS_PACKET %s to be parented by %p (%s), "
+                     "but parented by %p (%s)", file, line, type, request, talloc_get_name(request),
+                     parent, parent ? talloc_get_name(parent) : "NULL");
+
+               fr_log_talloc_report(packet);
+               if (parent) fr_log_talloc_report(parent);
+
+               rad_assert(0);
+       }
+
+       PACKET_VERIFY(packet);
+
+       if (!packet->vps) return;
+
+       fr_pair_list_verify(file, line, packet, packet->vps);
+}
+
+/*
+ *     Catch horrible talloc errors.
+ */
+void request_verify(char const *file, int line, REQUEST const *request)
+{
+       if (!request) {
+               fprintf(stderr, "CONSISTENCY CHECK FAILED %s[%i]: REQUEST pointer was NULL", file, line);
+               if (!fr_cond_assert(0)) fr_exit_now(1);
+       }
+
+       (void) talloc_get_type_abort_const(request, REQUEST);
+
+       rad_assert(request->magic == REQUEST_MAGIC);
+
+       if (talloc_get_size(request) != sizeof(REQUEST)) {
+               fprintf(stderr, "CONSISTENCY CHECK FAILED %s[%i]: expected REQUEST size of %zu bytes, got %zu bytes",
+                       file, line, sizeof(REQUEST), talloc_get_size(request));
+               if (!fr_cond_assert(0)) fr_exit_now(1);
+       }
+
+       fr_pair_list_verify(file, line, request, request->control);
+       fr_pair_list_verify(file, line, request->state_ctx, request->state);
+
+       if (request->username) VP_VERIFY(request->username);
+       if (request->password) VP_VERIFY(request->password);
+
+       rad_assert(request->server_cs != NULL);
+
+       if (request->packet) {
+               packet_verify(file, line, request, request->packet, "request");
+               if ((request->packet->code == FR_CODE_ACCESS_REQUEST) &&
+                   (request->reply && !request->reply->code)) {
+                       rad_assert(request->state_ctx != NULL);
+               }
+       }
+       if (request->reply) packet_verify(file, line, request, request->reply, "reply");
+
+       if (request->async) {
+               (void) talloc_get_type_abort(request->async, fr_async_t);
+               rad_assert(talloc_parent(request->async) == request);
+       }
+
+}
+
 /** Verify all request data is parented by the specified context
  *
  * @note Only available if built with WITH_VERIFY_PTR
index 0f65a48a68251517692465424ad5752209c1e728..095c4b2a96e6446d7203494eec81d21fc65d7c2e 100644 (file)
@@ -862,4 +862,41 @@ void radius_stats_ema(fr_stats_ema_t *ema,
 #endif
 }
 
+/** Sort latency times into bins
+ *
+ * This solves the problem of attempting to keep min/max/avg latencies, whilst
+ * not knowing what the polling frequency will be.
+ *
+ * @param[out] stats Holding monotonically increasing stats bins.
+ * @param[in] start of the request.
+ * @param[in] end of the request.
+ */
+void fr_stats_bins(fr_stats_t *stats, struct timeval *start, struct timeval *end)
+{
+       struct timeval diff;
+       uint32_t delay;
+
+       if ((start->tv_sec == 0) || (end->tv_sec == 0) || (end->tv_sec < start->tv_sec)) return;
+
+       fr_timeval_subtract(&diff, end, start);
+
+       if (diff.tv_sec >= 10) {
+               stats->elapsed[7]++;
+       } else {
+               int i;
+               uint32_t cmp;
+
+               delay = (diff.tv_sec * USEC) + diff.tv_usec;
+
+               cmp = 10;
+               for (i = 0; i < 7; i++) {
+                       if (delay < cmp) {
+                               stats->elapsed[i]++;
+                               break;
+                       }
+                       cmp *= 10;
+               }
+       }
+}
+
 #endif /* WITH_STATS */
diff --git a/src/lib/server/trigger.h b/src/lib/server/trigger.h
new file mode 100644 (file)
index 0000000..ac3450b
--- /dev/null
@@ -0,0 +1,50 @@
+#pragma once
+/*
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program 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 General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * $Id$
+ *
+ * @file lib/server/trigger.h
+ * @brief Execute scripts when a server event occurs.
+ *
+ * @copyright 2015 The FreeRADIUS server project
+ */
+RCSIDH(trigger_h, "$Id$")
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <freeradius-devel/server/cf_util.h>
+#include <freeradius-devel/server/request.h>
+#include <freeradius-devel/util/pair.h>
+
+#include <talloc.h>
+
+void           trigger_exec_init(CONF_SECTION const *cs);
+
+int            trigger_exec(REQUEST *request, CONF_SECTION const *cs,
+                            char const *name, bool quench, VALUE_PAIR *args)
+                            CC_HINT(nonnull (3));
+
+void           trigger_exec_free(void);
+
+VALUE_PAIR     *trigger_args_afrom_server(TALLOC_CTX *ctx, char const *server, uint16_t port);
+
+#ifdef __cplusplus
+}
+#endif
index 0f7923242d6ce0e644d22a118a40202e37aa5a07..d13a6c11e08f7d3b4e6e3f3d7d0c1aeee1a29e45 100644 (file)
@@ -831,96 +831,6 @@ char const *rad_default_radacct_dir(void)
        return RADIR;
 }
 
-#ifdef WITH_VERIFY_PTR
-/*
- *     Verify a packet.
- */
-static void packet_verify(char const *file, int line, REQUEST const *request, RADIUS_PACKET const *packet, char const *type)
-{
-       TALLOC_CTX *parent;
-
-       if (!packet) {
-               fprintf(stderr, "CONSISTENCY CHECK FAILED %s[%i]: RADIUS_PACKET %s pointer was NULL", file, line, type);
-               if (!fr_cond_assert(0)) fr_exit_now(1);
-       }
-
-       parent = talloc_parent(packet);
-       if (parent != request) {
-               ERROR("CONSISTENCY CHECK FAILED %s[%i]: Expected RADIUS_PACKET %s to be parented by %p (%s), "
-                     "but parented by %p (%s)", file, line, type, request, talloc_get_name(request),
-                     parent, parent ? talloc_get_name(parent) : "NULL");
-
-               fr_log_talloc_report(packet);
-               if (parent) fr_log_talloc_report(parent);
-
-               rad_assert(0);
-       }
-
-       PACKET_VERIFY(packet);
-
-       if (!packet->vps) return;
-
-#ifdef WITH_VERIFY_PTR
-       fr_pair_list_verify(file, line, packet, packet->vps);
-#endif
-}
-/*
- *     Catch horrible talloc errors.
- */
-void request_verify(char const *file, int line, REQUEST const *request)
-{
-       if (!request) {
-               fprintf(stderr, "CONSISTENCY CHECK FAILED %s[%i]: REQUEST pointer was NULL", file, line);
-               if (!fr_cond_assert(0)) fr_exit_now(1);
-       }
-
-       (void) talloc_get_type_abort_const(request, REQUEST);
-
-       rad_assert(request->magic == REQUEST_MAGIC);
-
-       if (talloc_get_size(request) != sizeof(REQUEST)) {
-               fprintf(stderr, "CONSISTENCY CHECK FAILED %s[%i]: expected REQUEST size of %zu bytes, got %zu bytes",
-                       file, line, sizeof(REQUEST), talloc_get_size(request));
-               if (!fr_cond_assert(0)) fr_exit_now(1);
-       }
-
-#ifdef WITH_VERIFY_PTR
-       fr_pair_list_verify(file, line, request, request->control);
-       fr_pair_list_verify(file, line, request->state_ctx, request->state);
-
-       if (request->username) VP_VERIFY(request->username);
-       if (request->password) VP_VERIFY(request->password);
-#endif
-
-       rad_assert(request->server_cs != NULL);
-
-       if (request->packet) {
-               packet_verify(file, line, request, request->packet, "request");
-               if ((request->packet->code == FR_CODE_ACCESS_REQUEST) &&
-                   (request->reply && !request->reply->code)) {
-                       rad_assert(request->state_ctx != NULL);
-               }
-       }
-       if (request->reply) packet_verify(file, line, request, request->reply, "reply");
-#ifdef WITH_PROXY
-       if (request->proxy) {
-               (void) talloc_get_type_abort(request->proxy, REQUEST);
-
-               rad_assert(request == talloc_parent(request->proxy));
-
-               if (request->proxy->packet) packet_verify(file, line, request->proxy, request->proxy->packet, "proxy-request");
-               if (request->proxy->reply) packet_verify(file, line, request->proxy, request->proxy->reply, "proxy-reply");
-       }
-#endif
-
-       if (request->async) {
-               (void) talloc_get_type_abort(request->async, fr_async_t);
-               rad_assert(talloc_parent(request->async) == request);
-       }
-
-}
-#endif
-
 /** Convert mode_t into humanly readable permissions flags
  *
  * @author Jonathan Leffler.
@@ -1508,40 +1418,3 @@ int rad_segid(gid_t gid)
        }
        return 0;
 }
-
-/** Sort latency times into bins
- *
- * This solves the problem of attempting to keep min/max/avg latencies, whilst
- * not knowing what the polling frequency will be.
- *
- * @param[out] stats Holding monotonically increasing stats bins.
- * @param[in] start of the request.
- * @param[in] end of the request.
- */
-void fr_stats_bins(fr_stats_t *stats, struct timeval *start, struct timeval *end)
-{
-       struct timeval diff;
-       uint32_t delay;
-
-       if ((start->tv_sec == 0) || (end->tv_sec == 0) || (end->tv_sec < start->tv_sec)) return;
-
-       fr_timeval_subtract(&diff, end, start);
-
-       if (diff.tv_sec >= 10) {
-               stats->elapsed[7]++;
-       } else {
-               int i;
-               uint32_t cmp;
-
-               delay = (diff.tv_sec * USEC) + diff.tv_usec;
-
-               cmp = 10;
-               for (i = 0; i < 7; i++) {
-                       if (delay < cmp) {
-                               stats->elapsed[i]++;
-                               break;
-                       }
-                       cmp *= 10;
-               }
-       }
-}
index 06a177f96f2652471023549641adbfa444525743..d6cbad141a955df1a48be4d716b1205c56d3a921 100644 (file)
@@ -33,6 +33,30 @@ extern "C" {
 #include <grp.h>
 #include <talloc.h>
 
+void (*reset_signal(int signo, void (*func)(int)))(int);
+int            rad_mkdir(char *directory, mode_t mode, uid_t uid, gid_t gid);
+size_t         rad_filename_make_safe(UNUSED REQUEST *request, char *out, size_t outlen,
+                                      char const *in, UNUSED void *arg);
+size_t         rad_filename_escape(UNUSED REQUEST *request, char *out, size_t outlen,
+                                   char const *in, UNUSED void *arg);
+ssize_t                rad_filename_unescape(char *out, size_t outlen, char const *in, size_t inlen);
+char           *rad_ajoin(TALLOC_CTX *ctx, char const **argv, int argc, char c);
+
+int            rad_copy_string(char *dst, char const *src);
+int            rad_copy_string_bare(char *dst, char const *src);
+int            rad_copy_variable(char *dst, char const *from);
+uint32_t       rad_pps(uint32_t *past, uint32_t *present, time_t *then, struct timeval *now);
+int            rad_expand_xlat(REQUEST *request, char const *cmd,
+                               int max_argc, char const *argv[], bool can_fail,
+                               size_t argv_buflen, char *argv_buf);
+
+char const     *rad_default_log_dir(void);
+char const     *rad_default_lib_dir(void);
+char const     *rad_default_raddb_dir(void);
+char const     *rad_default_run_dir(void);
+char const     *rad_default_sbin_dir(void);
+char const     *rad_default_radacct_dir(void);
+
 void           rad_mode_to_str(char out[10], mode_t mode);
 void           rad_mode_to_oct(char out[5], mode_t mode);
 int            rad_getpwuid(TALLOC_CTX *ctx, struct passwd **out, uid_t uid);
@@ -47,8 +71,8 @@ int           rad_seuid(uid_t uid);
 int            rad_segid(gid_t gid);
 
 void           rad_suid_set_down_uid(uid_t uid);
-void           rad_suid_down(void);
 void           rad_suid_up(void);
+void           rad_suid_down(void);
 void           rad_suid_down_permanent(void);
 bool           rad_suid_is_down_permanent(void);
 
index 95e46a880bb9a4c43d81755c67cac34656cdb5ce..795a521d0f7839dd0c7b8b348488427a949acabe 100644 (file)
@@ -437,7 +437,7 @@ static void request_running(REQUEST *request, fr_state_signal_t action)
                        break;
                }
                rad_assert(request->log.unlang_indent == 0);
-               request_delete(request);
+               //request_delete(request);
                break;
        }
 }
@@ -467,7 +467,7 @@ static void request_queued(REQUEST *request, fr_state_signal_t action)
 
        case FR_SIGNAL_CANCEL:
                (void) fr_heap_extract(request->backlog, request);
-               request_delete(request);
+               //request_delete(request);
                break;
 
        default:
index 6e5c759062f1f7adb9dddad38cc2efcebfb248e9..225d006536cbbb258aa8ce512b3322996c3373c0 100644 (file)
@@ -496,7 +496,7 @@ send_reply:
 done:
        default:
                (void) fr_heap_extract(request->backlog, request);
-               request_delete(request);
+               //request_delete(request);
                break;
        }
 }
@@ -513,7 +513,7 @@ static void tacacs_queued(REQUEST *request, fr_state_signal_t action)
 
        case FR_SIGNAL_CANCEL:
                (void) fr_heap_extract(request->backlog, request);
-               request_delete(request);
+               //request_delete(request);
                break;
 
        default: