<p>George Joseph <strong>submitted</strong> this change.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16297">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Sean Bright: Looks good to me, but someone else must approve
  George Joseph: Looks good to me, approved
  Joshua Colp: Approved for Submit

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">cdr_syslog: Remove deprecated module.<br><br>ASTERISK-29592<br><br>Change-Id: Ic8eb6a2100ad5bc3b48338a6d0a6cfa70ecbc50f<br>---<br>D cdr/cdr_syslog.c<br>D configs/samples/cdr_syslog.conf.sample<br>A doc/UPGRADE-staging/cdr_syslog_removal.txt<br>M tests/CI/buildAsterisk.sh<br>4 files changed, 7 insertions(+), 382 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/cdr/cdr_syslog.c b/cdr/cdr_syslog.c</span><br><span>deleted file mode 100644</span><br><span>index 84e19b9..0000000</span><br><span>--- a/cdr/cdr_syslog.c</span><br><span>+++ /dev/null</span><br><span>@@ -1,298 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * Asterisk -- An open source telephony toolkit.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Copyright (C) 2009, malleable, LLC.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * Sean Bright <sean@malleable.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * See http://www.asterisk.org for more information about</span><br><span style="color: hsl(0, 100%, 40%);">- * the Asterisk project. Please do not directly contact</span><br><span style="color: hsl(0, 100%, 40%);">- * any of the maintainers of this project for assistance;</span><br><span style="color: hsl(0, 100%, 40%);">- * the project provides a web site, mailing lists and IRC</span><br><span style="color: hsl(0, 100%, 40%);">- * channels for your use.</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * This program is free software, distributed under the terms of</span><br><span style="color: hsl(0, 100%, 40%);">- * the GNU General Public License Version 2. See the LICENSE file</span><br><span style="color: hsl(0, 100%, 40%);">- * at the top of the source tree.</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \file</span><br><span style="color: hsl(0, 100%, 40%);">- * \brief syslog CDR logger</span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * \author Sean Bright <sean@malleable.com></span><br><span style="color: hsl(0, 100%, 40%);">- *</span><br><span style="color: hsl(0, 100%, 40%);">- * See also</span><br><span style="color: hsl(0, 100%, 40%);">- * \arg \ref Config_cdr</span><br><span style="color: hsl(0, 100%, 40%);">- * \ingroup cdr_drivers</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*! \li \ref cdr_syslog.c uses the configuration file \ref cdr_syslog.conf</span><br><span style="color: hsl(0, 100%, 40%);">- * \addtogroup configuration_file Configuration Files</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*!</span><br><span style="color: hsl(0, 100%, 40%);">- * \page cdr_syslog.conf cdr_syslog.conf</span><br><span style="color: hsl(0, 100%, 40%);">- * \verbinclude cdr_syslog.conf.sample</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*** MODULEINFO</span><br><span style="color: hsl(0, 100%, 40%);">-     <depend>syslog</depend></span><br><span style="color: hsl(0, 100%, 40%);">-     <defaultenabled>no</defaultenabled></span><br><span style="color: hsl(0, 100%, 40%);">- <support_level>deprecated</support_level></span><br><span style="color: hsl(0, 100%, 40%);">-   <deprecated_in>16</deprecated_in></span><br><span style="color: hsl(0, 100%, 40%);">-   <removed_in>19</removed_in></span><br><span style="color: hsl(0, 100%, 40%);">-***/</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/module.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/lock.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/cdr.h"</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/pbx.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include <syslog.h></span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#include "asterisk/syslog.h"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char CONFIG[] = "cdr_syslog.conf";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-AST_THREADSTORAGE(syslog_buf);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static const char name[] = "cdr-syslog";</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-struct cdr_syslog_config {</span><br><span style="color: hsl(0, 100%, 40%);">-    AST_DECLARE_STRING_FIELDS(</span><br><span style="color: hsl(0, 100%, 40%);">-              AST_STRING_FIELD(ident);</span><br><span style="color: hsl(0, 100%, 40%);">-                AST_STRING_FIELD(format);</span><br><span style="color: hsl(0, 100%, 40%);">-       );</span><br><span style="color: hsl(0, 100%, 40%);">-      int facility;</span><br><span style="color: hsl(0, 100%, 40%);">-   int priority;</span><br><span style="color: hsl(0, 100%, 40%);">-   ast_mutex_t lock;</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_LIST_ENTRY(cdr_syslog_config) list;</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static AST_RWLIST_HEAD_STATIC(sinks, cdr_syslog_config);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void free_config(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- struct cdr_syslog_config *sink;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- while ((sink = AST_RWLIST_REMOVE_HEAD(&sinks, list))) {</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_mutex_destroy(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-          ast_string_field_free_memory(sink);</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_free(sink);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int syslog_log(struct ast_cdr *cdr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ast_channel *dummy;</span><br><span style="color: hsl(0, 100%, 40%);">-      struct ast_str *str;</span><br><span style="color: hsl(0, 100%, 40%);">-    struct cdr_syslog_config *sink;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- /* Batching saves memory management here.  Otherwise, it's the same as doing an</span><br><span style="color: hsl(0, 100%, 40%);">-        allocation and free each time. */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (!(str = ast_str_thread_get(&syslog_buf, 16))) {</span><br><span style="color: hsl(0, 100%, 40%);">-         return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!(dummy = ast_dummy_channel_alloc())) {</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_log(AST_LOG_ERROR, "Unable to allocate channel for variable substitution.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* We need to dup here since the cdr actually belongs to the other channel,</span><br><span style="color: hsl(0, 100%, 40%);">-        so when we release this channel we don't want the CDR getting cleaned</span><br><span style="color: hsl(0, 100%, 40%);">-       up prematurely. */</span><br><span style="color: hsl(0, 100%, 40%);">-   ast_channel_cdr_set(dummy, ast_cdr_dup(cdr));</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   AST_RWLIST_RDLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  AST_LIST_TRAVERSE(&sinks, sink, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_str_substitute_variables(&str, 0, dummy, sink->format);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-              /* Even though we have a lock on the list, we could be being chased by</span><br><span style="color: hsl(0, 100%, 40%);">-             another thread and this lock ensures that we won't step on anyone's</span><br><span style="color: hsl(0, 100%, 40%);">-             toes.  Once each CDR backend gets it's own thread, this lock can be</span><br><span style="color: hsl(0, 100%, 40%);">-                 removed. */</span><br><span style="color: hsl(0, 100%, 40%);">-          ast_mutex_lock(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             openlog(sink->ident, LOG_CONS, sink->facility);</span><br><span style="color: hsl(0, 100%, 40%);">-           syslog(sink->priority, "%s", ast_str_buffer(str));</span><br><span style="color: hsl(0, 100%, 40%);">-         closelog();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_mutex_unlock(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_channel_unref(dummy);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int load_config(int reload)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   struct ast_config *cfg;</span><br><span style="color: hsl(0, 100%, 40%);">- struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };</span><br><span style="color: hsl(0, 100%, 40%);">-     int default_facility = LOG_LOCAL4;</span><br><span style="color: hsl(0, 100%, 40%);">-      int default_priority = LOG_INFO;</span><br><span style="color: hsl(0, 100%, 40%);">-        const char *catg = NULL, *tmp;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  cfg = ast_config_load(CONFIG, config_flags);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (cfg == CONFIG_STATUS_FILEMISSING || cfg == CONFIG_STATUS_FILEINVALID) {</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_log(AST_LOG_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                  "Unable to load %s. Not logging custom CSV CDRs to syslog.\n", CONFIG);</span><br><span style="color: hsl(0, 100%, 40%);">-               return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      } else if (cfg == CONFIG_STATUS_FILEUNCHANGED) {</span><br><span style="color: hsl(0, 100%, 40%);">-                return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (reload) {</span><br><span style="color: hsl(0, 100%, 40%);">-           free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!(ast_strlen_zero(tmp = ast_variable_retrieve(cfg, "general", "facility")))) {</span><br><span style="color: hsl(0, 100%, 40%);">-          int facility = ast_syslog_facility(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                if (facility < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                "Invalid facility '%s' specified, defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                              tmp, ast_syslog_facility_name(default_facility));</span><br><span style="color: hsl(0, 100%, 40%);">-               } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        default_facility = facility;</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!(ast_strlen_zero(tmp = ast_variable_retrieve(cfg, "general", "priority")))) {</span><br><span style="color: hsl(0, 100%, 40%);">-          int priority = ast_syslog_priority(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                if (priority < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                "Invalid priority '%s' specified, defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                              tmp, ast_syslog_priority_name(default_priority));</span><br><span style="color: hsl(0, 100%, 40%);">-               } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        default_priority = priority;</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       while ((catg = ast_category_browse(cfg, catg))) {</span><br><span style="color: hsl(0, 100%, 40%);">-               struct cdr_syslog_config *sink;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!strcasecmp(catg, "general")) {</span><br><span style="color: hsl(0, 100%, 40%);">-                   continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               if (ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "template"))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                "No 'template' parameter found for '%s'.  Skipping.\n", catg);</span><br><span style="color: hsl(0, 100%, 40%);">-                        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               sink = ast_calloc_with_stringfields(1, struct cdr_syslog_config, 1024);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-         if (!sink) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    ast_log(AST_LOG_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                          "Unable to allocate memory for configuration settings.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                   free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-                  break;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               ast_mutex_init(&sink->lock);</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_string_field_set(sink, ident, catg);</span><br><span style="color: hsl(0, 100%, 40%);">-                ast_string_field_set(sink, format, tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-                if (ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "facility"))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    sink->facility = default_facility;</span><br><span style="color: hsl(0, 100%, 40%);">-           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        int facility = ast_syslog_facility(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (facility < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                        "Invalid facility '%s' specified for '%s,' defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                     tmp, catg, ast_syslog_facility_name(default_facility));</span><br><span style="color: hsl(0, 100%, 40%);">-                 } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                sink->facility = facility;</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               if (ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "priority"))) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    sink->priority = default_priority;</span><br><span style="color: hsl(0, 100%, 40%);">-           } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        int priority = ast_syslog_priority(tmp);</span><br><span style="color: hsl(0, 100%, 40%);">-                        if (priority < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                          ast_log(AST_LOG_WARNING,</span><br><span style="color: hsl(0, 100%, 40%);">-                                        "Invalid priority '%s' specified for '%s,' defaulting to '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                                     tmp, catg, ast_syslog_priority_name(default_priority));</span><br><span style="color: hsl(0, 100%, 40%);">-                 } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                                sink->priority = priority;</span><br><span style="color: hsl(0, 100%, 40%);">-                   }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               AST_RWLIST_INSERT_TAIL(&sinks, sink, list);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_config_destroy(cfg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        return AST_RWLIST_EMPTY(&sinks) ? -1 : 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int unload_module(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   if (ast_cdr_unregister(name)) {</span><br><span style="color: hsl(0, 100%, 40%);">-         return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (AST_RWLIST_WRLOCK(&sinks)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_cdr_register(name, ast_module_info->description, syslog_log);</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(AST_LOG_ERROR, "Unable to lock sink list.  Unload failed.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                return -1;</span><br><span style="color: hsl(0, 100%, 40%);">-      }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-  AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-  return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static enum ast_module_load_result load_module(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- int res;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        if (AST_RWLIST_WRLOCK(&sinks)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(AST_LOG_ERROR, "Unable to lock sink list.  Load failed.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          return AST_MODULE_LOAD_DECLINE;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       res = load_config(0);</span><br><span style="color: hsl(0, 100%, 40%);">-   AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (res) {</span><br><span style="color: hsl(0, 100%, 40%);">-              return AST_MODULE_LOAD_DECLINE;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-       ast_cdr_register(name, ast_module_info->description, syslog_log);</span><br><span style="color: hsl(0, 100%, 40%);">-    return AST_MODULE_LOAD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static int reload(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-        int res;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (AST_RWLIST_WRLOCK(&sinks)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(AST_LOG_ERROR, "Unable to lock sink list.  Load failed.\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          return AST_MODULE_LOAD_DECLINE;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if ((res = load_config(1))) {</span><br><span style="color: hsl(0, 100%, 40%);">-           free_config();</span><br><span style="color: hsl(0, 100%, 40%);">-  }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       AST_RWLIST_UNLOCK(&sinks);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable syslog CDR Backend",</span><br><span style="color: hsl(0, 100%, 40%);">-  .support_level = AST_MODULE_SUPPORT_CORE,</span><br><span style="color: hsl(0, 100%, 40%);">-       .load = load_module,</span><br><span style="color: hsl(0, 100%, 40%);">-    .unload = unload_module,</span><br><span style="color: hsl(0, 100%, 40%);">-        .reload = reload,</span><br><span style="color: hsl(0, 100%, 40%);">-       .load_pri = AST_MODPRI_CDR_DRIVER,</span><br><span style="color: hsl(0, 100%, 40%);">-      .requires = "cdr",</span><br><span style="color: hsl(0, 100%, 40%);">-);</span><br><span>diff --git a/configs/samples/cdr_syslog.conf.sample b/configs/samples/cdr_syslog.conf.sample</span><br><span>deleted file mode 100644</span><br><span>index 3a619be..0000000</span><br><span>--- a/configs/samples/cdr_syslog.conf.sample</span><br><span>+++ /dev/null</span><br><span>@@ -1,83 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Asterisk Call Detail Records (CDR) - Syslog Backend</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-; The cdr_syslog module writes CDRs using the facilities provided by syslog.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Not only must you configure cdr_syslog from this file (cdr_syslog.conf) but</span><br><span style="color: hsl(0, 100%, 40%);">-; you will also need to make changes to your /etc/syslog.conf before CDRs will</span><br><span style="color: hsl(0, 100%, 40%);">-; be written to syslog.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; As an example, you can add the following to /etc/syslog.conf:</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-;    local4.info        /var/log/asterisk-cdr.log</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; And then instruct syslogd to re-read the configuration file by sending it a</span><br><span style="color: hsl(0, 100%, 40%);">-; HUP signal.  On Linux this can be done like this:</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-;    kill -HUP `cat /var/run/syslogd.pid`</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Finally, you will need to uncomment the [cdr-simple] section below, and restart</span><br><span style="color: hsl(0, 100%, 40%);">-; Asterisk.  When calls are placed, you should start seeing records appear in</span><br><span style="color: hsl(0, 100%, 40%);">-; /var/log/asterisk-cdr.log.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-[general]</span><br><span style="color: hsl(0, 100%, 40%);">-; Facility</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; The 'facility' keyword specifies the syslog facility to use when writing out</span><br><span style="color: hsl(0, 100%, 40%);">-; CDRs.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Accepted values: One of the following:</span><br><span style="color: hsl(0, 100%, 40%);">-;                  user, local0, local1, local2, local3, local4, local5, local6</span><br><span style="color: hsl(0, 100%, 40%);">-;                  and local7.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-;                  Note: Depending on your platform, the following may also be</span><br><span style="color: hsl(0, 100%, 40%);">-;                        available:</span><br><span style="color: hsl(0, 100%, 40%);">-;                        auth, authpriv, cron, daemon, ftp, kern, lpr, mail,</span><br><span style="color: hsl(0, 100%, 40%);">-;                        news, syslog, and uucp.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Default value:   local4</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-;facility=local0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-; Priority</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Use the 'priority' keyword to select which of the syslog priority levels to</span><br><span style="color: hsl(0, 100%, 40%);">-; use when logging CDRs.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Accepted values: One of the following:</span><br><span style="color: hsl(0, 100%, 40%);">-;                  alert, crit, debug, emerg, err, info, notice, warning</span><br><span style="color: hsl(0, 100%, 40%);">-; Default value:   info</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-;priority=warn</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-; Note: The settings for 'facility' and 'priority' in the [general] section</span><br><span style="color: hsl(0, 100%, 40%);">-;       define the default values for all of the logging locations created</span><br><span style="color: hsl(0, 100%, 40%);">-;       below in separate sections.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-;[cdr-master]</span><br><span style="color: hsl(0, 100%, 40%);">-;facility = local5</span><br><span style="color: hsl(0, 100%, 40%);">-;priority = debug</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-; Template</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; The 'template' value allows you to specify a custom format for messages</span><br><span style="color: hsl(0, 100%, 40%);">-; written to syslog.  This is similar to how cdr_custom is configured.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Allowed values: A diaplan style string.</span><br><span style="color: hsl(0, 100%, 40%);">-; Default value:  None, this is required field.</span><br><span style="color: hsl(0, 100%, 40%);">-;</span><br><span style="color: hsl(0, 100%, 40%);">-; Note: Because of the way substitution is done, the only meaningful values</span><br><span style="color: hsl(0, 100%, 40%);">-;       available when the record is logged are those available via the CDR()</span><br><span style="color: hsl(0, 100%, 40%);">-;       dialplan function.  All other channel variables will be unavailable.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-;template = "${CDR(clid)}","${CDR(src)}","${CDR(dst)}","${CDR(dcontext)}","${CDR(channel)}","${CDR(dstchannel)}","${CDR(lastapp)}","${CDR(lastdata)}","${CDR(start)}","${CDR(answer)}","${CDR(end)}","${CDR(duration)}","${CDR(billsec)}","${CDR(disposition)}","${CDR(amaflags)}","${CDR(accountcode)}","${CDR(uniqueid)}","${CDR(userfield)}"</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-; High Resolution Time for billsec and duration fields</span><br><span style="color: hsl(0, 100%, 40%);">-;template = "${CDR(clid)}","${CDR(src)}","${CDR(dst)}","${CDR(dcontext)}","${CDR(channel)}","${CDR(dstchannel)}","${CDR(lastapp)}","${CDR(lastdata)}","${CDR(start)}","${CDR(answer)}","${CDR(end)}","${CDR(duration,f)}","${CDR(billsec,f)}","${CDR(disposition)}","${CDR(amaflags)}","${CDR(accountcode)}","${CDR(uniqueid)}","${CDR(userfield)}"</span><br><span style="color: hsl(0, 100%, 40%);">-;[cdr-simple]</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-; Since we don't specify a facility or priority for this logging location, the</span><br><span style="color: hsl(0, 100%, 40%);">-; records will use the defaults specified in the [general] section.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-;template = "We received a call from ${CDR(src)}"</span><br><span>diff --git a/doc/UPGRADE-staging/cdr_syslog_removal.txt b/doc/UPGRADE-staging/cdr_syslog_removal.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..17f88dd</span><br><span>--- /dev/null</span><br><span>+++ b/doc/UPGRADE-staging/cdr_syslog_removal.txt</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: cdr_syslog</span><br><span style="color: hsl(120, 100%, 40%);">+Master-Only: True</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This module was deprecated in Asterisk 16</span><br><span style="color: hsl(120, 100%, 40%);">+and is now being removed in accordance with</span><br><span style="color: hsl(120, 100%, 40%);">+the Asterisk Module Deprecation policy.</span><br><span>diff --git a/tests/CI/buildAsterisk.sh b/tests/CI/buildAsterisk.sh</span><br><span>index d8bad70..1d280f0 100755</span><br><span>--- a/tests/CI/buildAsterisk.sh</span><br><span>+++ b/tests/CI/buildAsterisk.sh</span><br><span>@@ -145,7 +145,7 @@</span><br><span>            mod_disables+=" app_readexten app_sms app_speech_utils app_test app_url app_waitforring"</span><br><span>           mod_disables+=" app_waitforsilence app_waituntil app_zapateller"</span><br><span>           mod_disables+=" cdr_adaptive_odbc cdr_custom cdr_manager cdr_odbc cdr_pgsql cdr_radius"</span><br><span style="color: hsl(0, 100%, 40%);">-               mod_disables+=" cdr_syslog cdr_tds"</span><br><span style="color: hsl(120, 100%, 40%);">+         mod_disables+=" cdr_tds"</span><br><span>           mod_disables+=" cel_odbc cel_pgsql cel_radius cel_sqlite3_custom cel_tds"</span><br><span>          mod_disables+=" chan_alsa chan_console chan_mgcp chan_motif chan_oss chan_rtp chan_skinny chan_unistim"</span><br><span>            mod_disables+=" func_frame_trace func_pitchshift func_speex func_volume func_dialgroup"</span><br><span></span><br></pre><div style="white-space:pre-wrap"></div><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/16297">change 16297</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/16297"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 19 </div>
<div style="display:none"> Gerrit-Change-Id: Ic8eb6a2100ad5bc3b48338a6d0a6cfa70ecbc50f </div>
<div style="display:none"> Gerrit-Change-Number: 16297 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-Reviewer: Friendly Automation </div>
<div style="display:none"> Gerrit-Reviewer: George Joseph <gjoseph@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Joshua Colp <jcolp@sangoma.com> </div>
<div style="display:none"> Gerrit-Reviewer: Kevin Harwell <kharwell@digium.com> </div>
<div style="display:none"> Gerrit-Reviewer: Sean Bright <sean@seanbright.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>