[asterisk-commits] oej: branch oej/roibos-cng-support-1.8 r405211 - in /team/oej/roibos-cng-supp...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jan 9 09:23:57 CST 2014


Author: oej
Date: Thu Jan  9 09:23:31 2014
New Revision: 405211

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=405211
Log:
Resetting

Modified:
    team/oej/roibos-cng-support-1.8/   (props changed)
    team/oej/roibos-cng-support-1.8/Makefile
    team/oej/roibos-cng-support-1.8/README-SERIOUSLY.bestpractices.txt
    team/oej/roibos-cng-support-1.8/UPGRADE.txt
    team/oej/roibos-cng-support-1.8/addons/ooh323c/src/memheap.c
    team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooCapability.c
    team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooSocket.c
    team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooTimer.c
    team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooq931.c
    team/oej/roibos-cng-support-1.8/addons/ooh323c/src/perutil.c
    team/oej/roibos-cng-support-1.8/addons/ooh323cDriver.c
    team/oej/roibos-cng-support-1.8/apps/app_chanspy.c
    team/oej/roibos-cng-support-1.8/apps/app_meetme.c
    team/oej/roibos-cng-support-1.8/apps/app_mixmonitor.c
    team/oej/roibos-cng-support-1.8/apps/app_queue.c
    team/oej/roibos-cng-support-1.8/apps/app_sms.c
    team/oej/roibos-cng-support-1.8/apps/app_voicemail.c
    team/oej/roibos-cng-support-1.8/build_tools/prep_tarball
    team/oej/roibos-cng-support-1.8/cdr/cdr_adaptive_odbc.c
    team/oej/roibos-cng-support-1.8/cel/cel_custom.c
    team/oej/roibos-cng-support-1.8/cel/cel_pgsql.c
    team/oej/roibos-cng-support-1.8/channels/chan_dahdi.c
    team/oej/roibos-cng-support-1.8/channels/chan_iax2.c
    team/oej/roibos-cng-support-1.8/channels/chan_mgcp.c
    team/oej/roibos-cng-support-1.8/channels/chan_misdn.c
    team/oej/roibos-cng-support-1.8/channels/chan_sip.c
    team/oej/roibos-cng-support-1.8/channels/chan_unistim.c
    team/oej/roibos-cng-support-1.8/channels/iax2-parser.c
    team/oej/roibos-cng-support-1.8/channels/sig_analog.c
    team/oej/roibos-cng-support-1.8/channels/sig_pri.c
    team/oej/roibos-cng-support-1.8/channels/sig_ss7.c
    team/oej/roibos-cng-support-1.8/channels/sip/dialplan_functions.c
    team/oej/roibos-cng-support-1.8/channels/sip/include/sip.h
    team/oej/roibos-cng-support-1.8/channels/sip/reqresp_parser.c
    team/oej/roibos-cng-support-1.8/codecs/ilbc/doCPLC.c
    team/oej/roibos-cng-support-1.8/configs/asterisk.conf.sample
    team/oej/roibos-cng-support-1.8/configs/chan_dahdi.conf.sample
    team/oej/roibos-cng-support-1.8/configs/h323.conf.sample
    team/oej/roibos-cng-support-1.8/configs/sip.conf.sample
    team/oej/roibos-cng-support-1.8/configure
    team/oej/roibos-cng-support-1.8/configure.ac
    team/oej/roibos-cng-support-1.8/default.exports
    team/oej/roibos-cng-support-1.8/funcs/func_config.c
    team/oej/roibos-cng-support-1.8/funcs/func_db.c
    team/oej/roibos-cng-support-1.8/funcs/func_dialgroup.c
    team/oej/roibos-cng-support-1.8/funcs/func_env.c
    team/oej/roibos-cng-support-1.8/funcs/func_lock.c
    team/oej/roibos-cng-support-1.8/funcs/func_math.c
    team/oej/roibos-cng-support-1.8/funcs/func_realtime.c
    team/oej/roibos-cng-support-1.8/funcs/func_shell.c
    team/oej/roibos-cng-support-1.8/funcs/func_strings.c
    team/oej/roibos-cng-support-1.8/include/asterisk/astmm.h
    team/oej/roibos-cng-support-1.8/include/asterisk/frame.h
    team/oej/roibos-cng-support-1.8/include/asterisk/lock.h
    team/oej/roibos-cng-support-1.8/include/asterisk/logger.h
    team/oej/roibos-cng-support-1.8/include/asterisk/pbx.h
    team/oej/roibos-cng-support-1.8/include/asterisk/rtp_engine.h
    team/oej/roibos-cng-support-1.8/include/asterisk/test.h
    team/oej/roibos-cng-support-1.8/include/asterisk/utils.h
    team/oej/roibos-cng-support-1.8/main/abstract_jb.c
    team/oej/roibos-cng-support-1.8/main/app.c
    team/oej/roibos-cng-support-1.8/main/asterisk.c
    team/oej/roibos-cng-support-1.8/main/asterisk.exports.in
    team/oej/roibos-cng-support-1.8/main/astfd.c
    team/oej/roibos-cng-support-1.8/main/astmm.c
    team/oej/roibos-cng-support-1.8/main/astobj2.c
    team/oej/roibos-cng-support-1.8/main/cel.c
    team/oej/roibos-cng-support-1.8/main/channel.c
    team/oej/roibos-cng-support-1.8/main/cli.c
    team/oej/roibos-cng-support-1.8/main/config.c
    team/oej/roibos-cng-support-1.8/main/data.c
    team/oej/roibos-cng-support-1.8/main/editline/readline.c
    team/oej/roibos-cng-support-1.8/main/editline/term.c
    team/oej/roibos-cng-support-1.8/main/event.c
    team/oej/roibos-cng-support-1.8/main/features.c
    team/oej/roibos-cng-support-1.8/main/heap.c
    team/oej/roibos-cng-support-1.8/main/http.c
    team/oej/roibos-cng-support-1.8/main/indications.c
    team/oej/roibos-cng-support-1.8/main/jitterbuf.c
    team/oej/roibos-cng-support-1.8/main/loader.c
    team/oej/roibos-cng-support-1.8/main/lock.c
    team/oej/roibos-cng-support-1.8/main/logger.c
    team/oej/roibos-cng-support-1.8/main/manager.c
    team/oej/roibos-cng-support-1.8/main/pbx.c
    team/oej/roibos-cng-support-1.8/main/rtp_engine.c
    team/oej/roibos-cng-support-1.8/main/say.c
    team/oej/roibos-cng-support-1.8/main/tcptls.c
    team/oej/roibos-cng-support-1.8/main/test.c
    team/oej/roibos-cng-support-1.8/main/threadstorage.c
    team/oej/roibos-cng-support-1.8/main/translate.c
    team/oej/roibos-cng-support-1.8/main/utils.c
    team/oej/roibos-cng-support-1.8/main/xmldoc.c
    team/oej/roibos-cng-support-1.8/makeopts.in
    team/oej/roibos-cng-support-1.8/res/res_agi.c
    team/oej/roibos-cng-support-1.8/res/res_calendar.c
    team/oej/roibos-cng-support-1.8/res/res_fax_spandsp.c
    team/oej/roibos-cng-support-1.8/res/res_jabber.c
    team/oej/roibos-cng-support-1.8/res/res_musiconhold.c
    team/oej/roibos-cng-support-1.8/res/res_rtp_asterisk.c
    team/oej/roibos-cng-support-1.8/res/res_rtp_multicast.c
    team/oej/roibos-cng-support-1.8/res/res_security_log.c
    team/oej/roibos-cng-support-1.8/sounds/Makefile
    team/oej/roibos-cng-support-1.8/tests/test_dlinklists.c
    team/oej/roibos-cng-support-1.8/tests/test_linkedlists.c
    team/oej/roibos-cng-support-1.8/tests/test_substitution.c
    team/oej/roibos-cng-support-1.8/utils/ael_main.c
    team/oej/roibos-cng-support-1.8/utils/check_expr.c
    team/oej/roibos-cng-support-1.8/utils/clicompat.c
    team/oej/roibos-cng-support-1.8/utils/conf2ael.c

Propchange: team/oej/roibos-cng-support-1.8/
------------------------------------------------------------------------------
    automerge = Is-there-life-off-net?

Propchange: team/oej/roibos-cng-support-1.8/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Thu Jan  9 09:23:31 2014
@@ -1,1 +1,1 @@
-/branches/1.8:1-396978
+/branches/1.8:1-405087

Modified: team/oej/roibos-cng-support-1.8/Makefile
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/Makefile?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/Makefile (original)
+++ team/oej/roibos-cng-support-1.8/Makefile Thu Jan  9 09:23:31 2014
@@ -170,7 +170,7 @@
   _ASTCFLAGS+=-Wall
 endif
 
-_ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(DEBUG)
+_ASTCFLAGS+=-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations $(AST_NESTED_FUNCTIONS) $(DEBUG)
 
 ifeq ($(AST_DEVMODE),yes)
   _ASTCFLAGS+=-Werror

Modified: team/oej/roibos-cng-support-1.8/README-SERIOUSLY.bestpractices.txt
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/README-SERIOUSLY.bestpractices.txt?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/README-SERIOUSLY.bestpractices.txt (original)
+++ team/oej/roibos-cng-support-1.8/README-SERIOUSLY.bestpractices.txt Thu Jan  9 09:23:31 2014
@@ -25,6 +25,9 @@
 
 * Manager Class Authorizations:
         Recognizing potential issues with certain classes of authorization
+
+* Avoid Privilege Escalations:
+        Disable the ability to execute functions that may escalate privileges
 
 ----------------
 Additional Links
@@ -344,3 +347,24 @@
 not running Asterisk as root, can prevent serious problems from arising when
 allowing external connections to originate calls into Asterisk.
 
+===========================
+Avoid Privilege Escalations
+===========================
+
+External control protocols, such as Manager, often have the ability to get and
+set channel variables; which allows the execution of dialplan functions.
+
+Dialplan functions within Asterisk are incredibly powerful, which is wonderful
+for building applications using Asterisk. But during the read or write
+execution, certain diaplan functions do much more. For example, reading the
+SHELL() function can execute arbitrary commands on the system Asterisk is
+running on. Writing to the FILE() function can change any file that Asterisk has
+write access to.
+
+When these functions are executed from an external protocol, that execution
+could result in a privilege escalation. Asterisk can inhibit the execution of
+these functions, if live_dangerously in the [options] section of asterisk.conf
+is set to no.
+
+For backwards compatibility, live_dangerously defaults to yes, and must be
+explicitly set to no to enable this privilege escalation protection.

Modified: team/oej/roibos-cng-support-1.8/UPGRADE.txt
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/UPGRADE.txt?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/UPGRADE.txt (original)
+++ team/oej/roibos-cng-support-1.8/UPGRADE.txt Thu Jan  9 09:23:31 2014
@@ -23,6 +23,18 @@
   the function will be RESULT_FAILURE instead of the prior behavior of always
   returning RESULT_SUCCESS even if there was an error. 
 
+* The option "register_retry_403" has been added to chan_sip to work around
+  servers that are known to erroneously send 403 in response to valid
+  REGISTER requests and allows Asterisk to continue attepmting to connect.
+
+* Certain dialplan functions have been marked as 'dangerous', and may only be
+  executed from the dialplan. Execution from extenal sources (AMI's GetVar and
+  SetVar actions; etc.) may be inhibited by setting live_dangerously in the
+  [options] section of asterisk.conf to no. SHELL(), channel locking, and direct
+  file read/write functions are marked as dangerous. DB_DELETE() and
+  REALTIME_DESTROY() are marked as dangerous for reads, but can now safely
+  accept writes (which ignore the provided value).
+
 from 1.8.22.0 to 1.8.23.0:
 * The default settings for chan_sip are now overriden properly by the general
   settings in sip.conf.  Please look over your settings upon upgrading.

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323c/src/memheap.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323c/src/memheap.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323c/src/memheap.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323c/src/memheap.c Thu Jan  9 09:23:31 2014
@@ -726,7 +726,7 @@
    OSMemLink** ppMemLink;
    OSMemBlk* pMemBlk;
    OSMemElemDescr* pElem;
-   OSMemLink* pMemLink, *pPrevMemLink = 0;
+   OSMemLink* pMemLink;
    void *newMem_p;
    unsigned nbytes, nunits;
 
@@ -758,7 +758,6 @@
          *(int*)(((char*)pMemLink) + sizeof (OSMemLink)) = nbytes_;
          return pMemLink->pMemBlk;
       }
-      pPrevMemLink = pMemLink;
    }
 
    /* Round number of bytes to nearest 8-byte boundary */

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooCapability.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooCapability.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooCapability.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooCapability.c Thu Jan  9 09:23:31 2014
@@ -1104,14 +1104,12 @@
    (ooH323EpCapability *epCap, OOCTXT* pctxt, int dir)
 {
    H245AudioCapability *pAudio=NULL;
-   OOCapParams *params;
    if(!epCap || !epCap->params)
    {
      OOTRACEERR1("Error:Invalid capability parameters to "
                  "ooCapabilityCreateSimpleCapability.\n");
      return NULL;
    }
-   params =(OOCapParams*)epCap->params;
    pAudio = (H245AudioCapability*)memAlloc(pctxt, 
                                                 sizeof(H245AudioCapability));
    if(!pAudio)
@@ -1228,7 +1226,6 @@
    (ooH323EpCapability *epCap, OOCTXT* pctxt, int dir)
 {
    H245DataApplicationCapability *pT38=NULL;
-   OOCapParams *params;
    H245DataMode_application *pT38app;
    if(!epCap || !epCap->params)
    {
@@ -1236,7 +1233,6 @@
                  "ooCapabilityCreateSimpleCapability.\n");
      return NULL;
    }
-   params =(OOCapParams*)epCap->params;
    pT38 = (H245DataApplicationCapability*)memAlloc(pctxt, 
                                                 sizeof(H245DataApplicationCapability));
    if(!pT38)

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooSocket.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooSocket.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooSocket.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooSocket.c Thu Jan  9 09:23:31 2014
@@ -234,7 +234,7 @@
 int ooSocketCreateUDP (OOSOCKET* psocket) 
 {
    int on;
-   struct linger linger;
+   /*struct linger linger;*/
 
    OOSOCKET sock = socket (AF_INET,
                              SOCK_DGRAM,
@@ -252,9 +252,9 @@
       OOTRACEERR1("Error:Failed to set socket option SO_REUSEADDR\n");
       return ASN_E_INVSOCKET;
    }
-   linger.l_onoff = 1;
+   /*linger.l_onoff = 1;
    linger.l_linger = 0;
-   /*if (setsockopt (sock, SOL_SOCKET, SO_LINGER, 
+   if (setsockopt (sock, SOL_SOCKET, SO_LINGER,
                  (const char* ) &linger, sizeof (linger)) == -1)
       return ASN_E_INVSOCKET;
    */

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooTimer.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooTimer.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooTimer.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooTimer.c Thu Jan  9 09:23:31 2014
@@ -101,7 +101,6 @@
 void ooTimerFireExpired (OOCTXT* pctxt, DList *pList)
 {
    OOTimer* pTimer;
-   int stat;
 
    while (pList->count > 0) {
       pTimer = (OOTimer*) pList->head->data;
@@ -113,7 +112,7 @@
           */
          if (pTimer->reRegister) ooTimerReset (pctxt, pList, pTimer);
 
-         stat = (*pTimer->timeoutCB)(pTimer->cbData);
+         (*pTimer->timeoutCB)(pTimer->cbData);
 
          if (!pTimer->reRegister) {
             ooTimerDelete (pctxt, pList, pTimer);

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooq931.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooq931.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooq931.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323c/src/ooq931.c Thu Jan  9 09:23:31 2014
@@ -2183,7 +2183,7 @@
    ooAliases *pNewAlias=NULL, *alias=NULL;
    struct timespec ts;
    struct timeval tv;
-   int i=0, irand=0, ret = OO_OK;
+   int i=0, irand=0;
    /* Note: We keep same callToken, for new call which is going
       to replace an existing call, thus treating it as a single call.*/
 
@@ -2235,7 +2235,7 @@
    {
      /* No need to check registration status here as it is already checked for
         MakeCall command */
-      ret = ooGkClientSendAdmissionRequest(gH323ep.gkClient, fwdedCall, FALSE);
+      ooGkClientSendAdmissionRequest(gH323ep.gkClient, fwdedCall, FALSE);
       fwdedCall->callState = OO_CALL_WAITING_ADMISSION;
       ast_mutex_lock(&fwdedCall->Lock);
 	  tv = ast_tvnow();
@@ -2249,7 +2249,7 @@
    }
    if (fwdedCall->callState < OO_CALL_CLEAR) {
       ast_mutex_lock(&fwdedCall->Lock);
-      ret = ooH323CallAdmitted (fwdedCall);
+      ooH323CallAdmitted (fwdedCall);
       ast_mutex_unlock(&fwdedCall->Lock);
    }
 
@@ -2276,7 +2276,6 @@
 
 int ooH323MakeCall(char *dest, char *callToken, ooCallOptions *opts)
 {
-   OOCTXT *pctxt;
    OOH323CallData *call;
    int ret=OO_OK, i=0, irand=0;
    char tmp[30]="\0";
@@ -2303,7 +2302,6 @@
       return OO_FAILED;
    }
 
-   pctxt = call->pctxt;
    if(opts)
    {
       if(opts->fastStart)

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323c/src/perutil.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323c/src/perutil.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323c/src/perutil.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323c/src/perutil.c Thu Jan  9 09:23:31 2014
@@ -168,7 +168,7 @@
 int checkSizeConstraint(OOCTXT* pctxt, int size)
 {
    Asn1SizeCnst* pSize;
-   ASN1UINT lower, upper;
+   ASN1UINT upper;
    ASN1BOOL extbit;
    int      stat;
 
@@ -186,7 +186,6 @@
 
    pSize = getSizeConstraint (pctxt, extbit);
 
-   lower = (pSize) ? pSize->lower : 0;
    upper = (pSize) ? pSize->upper : ASN1UINT_MAX;
 
    if (upper < (ASN1UINT)size) {

Modified: team/oej/roibos-cng-support-1.8/addons/ooh323cDriver.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/addons/ooh323cDriver.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/addons/ooh323cDriver.c (original)
+++ team/oej/roibos-cng-support-1.8/addons/ooh323cDriver.c Thu Jan  9 09:23:31 2014
@@ -100,8 +100,10 @@
 	pfds[0].fd = mycthread->thePipe[0];
 	pfds[0].events = POLLIN;
 	ooSocketPoll(pfds, 1, SEC_TO_HOLD_THREAD * 1000);
-	if (ooPDRead(pfds, 1, mycthread->thePipe[0]))
+	if (ooPDRead(pfds, 1, mycthread->thePipe[0])) {
 		res = read(mycthread->thePipe[0], &c, 1);
+		(void) res;/* Shut up compiler: Set but not used and unused return value of read. */
+	}
 
  	ast_mutex_lock(&callThreadsLock);
 	ast_mutex_lock(&mycthread->lock);
@@ -182,6 +184,7 @@
 	cur->inUse = TRUE;
 	cur->call = call;
 	res = write(cur->thePipe[1], &c, 1);
+	(void) res;/* Shut up compiler: Set but not used and unused return value of write. */
 	ast_mutex_unlock(&cur->lock);
 
  }

Modified: team/oej/roibos-cng-support-1.8/apps/app_chanspy.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/apps/app_chanspy.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/apps/app_chanspy.c (original)
+++ team/oej/roibos-cng-support-1.8/apps/app_chanspy.c Thu Jan  9 09:23:31 2014
@@ -363,7 +363,7 @@
 	OPTION_NAME              = (1 << 12),   /* Say the name of the person on whom we will spy */
 	OPTION_DTMF_SWITCH_MODES = (1 << 13),   /* Allow numeric DTMF to switch between chanspy modes */
 	OPTION_DTMF_EXIT         = (1 << 14),	/* Set DTMF to exit, added for DAHDIScan integration */
-	OPTION_DTMF_CYCLE        = (1 << 15),	/* Custom DTMF for cycling next avaliable channel, (default is '*') */
+	OPTION_DTMF_CYCLE        = (1 << 15),	/* Custom DTMF for cycling next available channel, (default is '*') */
 	OPTION_DAHDI_SCAN        = (1 << 16),	/* Scan groups in DAHDIScan mode */
 	OPTION_STOP              = (1 << 17),
 	OPTION_EXITONHANGUP      = (1 << 18),   /* Hang up when the spied-on channel hangs up. */

Modified: team/oej/roibos-cng-support-1.8/apps/app_meetme.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/apps/app_meetme.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/apps/app_meetme.c (original)
+++ team/oej/roibos-cng-support-1.8/apps/app_meetme.c Thu Jan  9 09:23:31 2014
@@ -2547,7 +2547,7 @@
  * \param recordingtmp character buffer which may hold the name of the conference recording file
  * \param dahdic dahdi configuration info used by the main conference loop
  */
-static void meetme_menu_admin_extended(enum menu_modes *menu_mode, int *dtmf, struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, struct ast_conf_user *user, char *recordingtmp, struct dahdi_confinfo *dahdic)
+static void meetme_menu_admin_extended(enum menu_modes *menu_mode, int *dtmf, struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, struct ast_conf_user *user, char *recordingtmp, int recordingtmp_size, struct dahdi_confinfo *dahdic)
 {
 	int keepplaying;
 	int playednamerec;
@@ -2668,7 +2668,7 @@
 				}
 				ast_channel_unlock(chan);
 				if (!conf->recordingfilename) {
-					snprintf(recordingtmp, sizeof(recordingtmp), "meetme-conf-rec-%s-%s", conf->confno, chan->uniqueid);
+					snprintf(recordingtmp, recordingtmp_size, "meetme-conf-rec-%s-%s", conf->confno, chan->uniqueid);
 					conf->recordingfilename = ast_strdup(recordingtmp);
 				}
 				if (!conf->recordingformat) {
@@ -2731,7 +2731,7 @@
  * \param dahdic dahdi configuration info used by the main conference loop
  */
 
-static void meetme_menu(enum menu_modes *menu_mode, int *dtmf, struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, struct ast_conf_user *user, char *recordingtmp, struct dahdi_confinfo *dahdic)
+static void meetme_menu(enum menu_modes *menu_mode, int *dtmf, struct ast_conference *conf, struct ast_flags64 *confflags, struct ast_channel *chan, struct ast_conf_user *user, char *recordingtmp, int recordingtmp_size, struct dahdi_confinfo *dahdic)
 {
 	switch (*menu_mode) {
 	case MENU_DISABLED:
@@ -2746,7 +2746,7 @@
 			break;
 		}
 	case MENU_ADMIN_EXTENDED:
-		meetme_menu_admin_extended(menu_mode, dtmf, conf, confflags, chan, user, recordingtmp, dahdic);
+		meetme_menu_admin_extended(menu_mode, dtmf, conf, confflags, chan, user, recordingtmp, recordingtmp_size, dahdic);
 		break;
 	}
 }
@@ -3791,7 +3791,7 @@
 					}
 
 					if (dtmf > 0) {
-						meetme_menu(&menu_mode, &dtmf, conf, confflags, chan, user, recordingtmp, &dahdic);
+						meetme_menu(&menu_mode, &dtmf, conf, confflags, chan, user, recordingtmp, sizeof(recordingtmp), &dahdic);
 					}
 
 					if (musiconhold && !menu_mode) {
@@ -4838,6 +4838,23 @@
 			res = -2;
 			goto usernotfound;
 		}
+	} else {
+		/* fail for commands that require a user */
+		switch (*args.command) {
+		case 'm': /* Unmute */
+		case 'M': /* Mute */
+		case 't': /* Lower user's talk volume */
+		case 'T': /* Raise user's talk volume */
+		case 'u': /* Lower user's listen volume */
+		case 'U': /* Raise user's listen volume */
+		case 'r': /* Reset user's volume level */
+		case 'k': /* Kick user */
+			res = -2;
+			ast_log(LOG_NOTICE, "No user specified!\n");
+			goto usernotfound;
+		default:
+			break;
+		}
 	}
 
 	switch (*args.command) {
@@ -4853,21 +4870,24 @@
 	case 101: /* e: Eject last user*/
 	{
 		int max_no = 0;
-
-		/* If they passed in a user, disregard it */
-		if (user) {
-			ao2_ref(user, -1);
-		}
+		struct ast_conf_user *eject_user;
 
 		ao2_callback(cnf->usercontainer, OBJ_NODATA, user_max_cmp, &max_no);
-		user = ao2_find(cnf->usercontainer, &max_no, 0);
-		if (!ast_test_flag64(&user->userflags, CONFFLAG_ADMIN))
-			user->adminflags |= ADMINFLAG_KICKME;
-		else {
+		eject_user = ao2_find(cnf->usercontainer, &max_no, 0);
+		if (!eject_user) {
+			res = -1;
+			ast_log(LOG_NOTICE, "No last user to kick!\n");
+			break;
+		}
+
+		if (!ast_test_flag64(&eject_user->userflags, CONFFLAG_ADMIN)) {
+			eject_user->adminflags |= ADMINFLAG_KICKME;
+		} else {
 			res = -1;
 			ast_log(LOG_NOTICE, "Not kicking last user, is an Admin!\n");
 		}
-		ao2_ref(user, -1);
+
+		ao2_ref(eject_user, -1);
 		break;
 	}
 	case 77: /* M: Mute */ 

Modified: team/oej/roibos-cng-support-1.8/apps/app_mixmonitor.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/apps/app_mixmonitor.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/apps/app_mixmonitor.c (original)
+++ team/oej/roibos-cng-support-1.8/apps/app_mixmonitor.c Thu Jan  9 09:23:31 2014
@@ -590,7 +590,7 @@
 
 		ast_mutex_lock(&mixmonitor_ds->lock);
 
-		/* closing the filestream here guarantees the file is avaliable to the dialplan
+		/* closing the filestream here guarantees the file is available to the dialplan
 	 	 * after calling StopMixMonitor */
 		mixmonitor_ds_close_fs(mixmonitor_ds);
 

Modified: team/oej/roibos-cng-support-1.8/apps/app_queue.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/apps/app_queue.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/apps/app_queue.c (original)
+++ team/oej/roibos-cng-support-1.8/apps/app_queue.c Thu Jan  9 09:23:31 2014
@@ -1406,7 +1406,7 @@
 	ao2_lock(q);
 	mem_iter = ao2_iterator_init(q->members, 0);
 	for (; (member = ao2_iterator_next(&mem_iter)); ao2_ref(member, -1)) {
-		if ((max_penalty && (member->penalty > max_penalty)) || (min_penalty && (member->penalty < min_penalty))) {
+		if ((max_penalty != INT_MAX && member->penalty > max_penalty) || (min_penalty != INT_MAX && member->penalty < min_penalty)) {
 			if (conditions & QUEUE_EMPTY_PENALTY) {
 				ast_debug(4, "%s is unavailable because his penalty is not between %d and %d\n", member->membername, min_penalty, max_penalty);
 				continue;
@@ -4173,23 +4173,54 @@
 */
 static void update_qe_rule(struct queue_ent *qe)
 {
-	int max_penalty = qe->pr->max_relative ? qe->max_penalty + qe->pr->max_value : qe->pr->max_value;
-	int min_penalty = qe->pr->min_relative ? qe->min_penalty + qe->pr->min_value : qe->pr->min_value;
-	char max_penalty_str[20], min_penalty_str[20]; 
-	/* a relative change to the penalty could put it below 0 */
-	if (max_penalty < 0)
-		max_penalty = 0;
-	if (min_penalty < 0)
-		min_penalty = 0;
-	if (min_penalty > max_penalty)
-		min_penalty = max_penalty;
-	snprintf(max_penalty_str, sizeof(max_penalty_str), "%d", max_penalty);
-	snprintf(min_penalty_str, sizeof(min_penalty_str), "%d", min_penalty);
-	pbx_builtin_setvar_helper(qe->chan, "QUEUE_MAX_PENALTY", max_penalty_str);
-	pbx_builtin_setvar_helper(qe->chan, "QUEUE_MIN_PENALTY", min_penalty_str);
-	qe->max_penalty = max_penalty;
-	qe->min_penalty = min_penalty;
-	ast_debug(3, "Setting max penalty to %d and min penalty to %d for caller %s since %d seconds have elapsed\n", qe->max_penalty, qe->min_penalty, qe->chan->name, qe->pr->time);
+	int max_penalty = INT_MAX;
+
+	if (qe->max_penalty != INT_MAX) {
+		char max_penalty_str[20];
+
+		if (qe->pr->max_relative) {
+			max_penalty = qe->max_penalty + qe->pr->max_value;
+		} else {
+			max_penalty = qe->pr->max_value;
+		}
+
+		/* a relative change to the penalty could put it below 0 */
+		if (max_penalty < 0) {
+			max_penalty = 0;
+		}
+
+		snprintf(max_penalty_str, sizeof(max_penalty_str), "%d", max_penalty);
+		pbx_builtin_setvar_helper(qe->chan, "QUEUE_MAX_PENALTY", max_penalty_str);
+		qe->max_penalty = max_penalty;
+		ast_debug(3, "Setting max penalty to %d for caller %s since %d seconds have elapsed\n",
+			qe->max_penalty, qe->chan->name, qe->pr->time);
+	}
+
+	if (qe->min_penalty != INT_MAX) {
+		char min_penalty_str[20];
+		int min_penalty;
+
+		if (qe->pr->min_relative) {
+			min_penalty = qe->min_penalty + qe->pr->min_value;
+		} else {
+			min_penalty = qe->pr->min_value;
+		}
+
+		if (min_penalty < 0) {
+			min_penalty = 0;
+		}
+
+		if (max_penalty != INT_MAX && min_penalty > max_penalty) {
+			min_penalty = max_penalty;
+		}
+
+		snprintf(min_penalty_str, sizeof(min_penalty_str), "%d", min_penalty);
+		pbx_builtin_setvar_helper(qe->chan, "QUEUE_MIN_PENALTY", min_penalty_str);
+		qe->min_penalty = min_penalty;
+		ast_debug(3, "Setting min penalty to %d for caller %s since %d seconds have elapsed\n",
+			qe->min_penalty, qe->chan->name, qe->pr->time);
+	}
+
 	qe->pr = AST_LIST_NEXT(qe->pr, list);
 }
 
@@ -4334,8 +4365,8 @@
 	unsigned char usepenalty = (membercount <= q->penaltymemberslimit) ? 0 : 1;
 
 	if (usepenalty) {
-		if ((qe->max_penalty && (mem->penalty > qe->max_penalty)) ||
-			(qe->min_penalty && (mem->penalty < qe->min_penalty))) {
+		if ((qe->max_penalty != INT_MAX && mem->penalty > qe->max_penalty) ||
+			(qe->min_penalty != INT_MAX && mem->penalty < qe->min_penalty)) {
 			return -1;
 		}
 	} else {
@@ -6163,10 +6194,10 @@
 		} else {
 			ast_log(LOG_WARNING, "${QUEUE_MAX_PENALTY}: Invalid value (%s), channel %s.\n",
 				max_penalty_str, chan->name);
-			max_penalty = 0;
+			max_penalty = INT_MAX;
 		}
 	} else {
-		max_penalty = 0;
+		max_penalty = INT_MAX;
 	}
 
 	if ((min_penalty_str = pbx_builtin_getvar_helper(chan, "QUEUE_MIN_PENALTY"))) {
@@ -6175,10 +6206,10 @@
 		} else {
 			ast_log(LOG_WARNING, "${QUEUE_MIN_PENALTY}: Invalid value (%s), channel %s.\n",
 				min_penalty_str, chan->name);
-			min_penalty = 0;
+			min_penalty = INT_MAX;
 		}
 	} else {
-		min_penalty = 0;
+		min_penalty = INT_MAX;
 	}
 	ast_channel_unlock(chan);
 
@@ -6352,7 +6383,7 @@
 			}
 		} else if (qe.valid_digits) {
 			ast_queue_log(args.queuename, chan->uniqueid, "NONE", "EXITWITHKEY",
-				"%s|%d", qe.digits, qe.pos);
+				"%s|%d|%d|%ld", qe.digits, qe.pos, qe.opos, (long) time(NULL) - qe.start);
 		}
 	}
 
@@ -7261,9 +7292,10 @@
 		ao2_lock(q);
 		/* This check is to make sure we don't print information for realtime
 		 * queues which have been deleted from realtime but which have not yet
-		 * been deleted from the in-core container
+		 * been deleted from the in-core container. Only do this if we're not
+		 * looking for a specific queue.
 		 */
-		if (q->realtime) {
+		if (argc < 3 && q->realtime) {
 			realtime_queue = load_realtime_queue(q->name);
 			if (!realtime_queue) {
 				ao2_unlock(q);
@@ -7950,8 +7982,8 @@
 	case CLI_INIT:
 		e->command = "queue add member";
 		e->usage =
-			"Usage: queue add member <channel> to <queue> [[[penalty <penalty>] as <membername>] state_interface <interface>]\n"
-			"       Add a channel to a queue with optionally:  a penalty, membername and a state_interface\n";
+			"Usage: queue add member <dial string> to <queue> [[[penalty <penalty>] as <membername>] state_interface <interface>]\n"
+			"       Add a dial string (Such as a channel,e.g. SIP/6001) to a queue with optionally:  a penalty, membername and a state_interface\n";
 		return NULL;
 	case CLI_GENERATE:
 		return complete_queue_add_member(a->line, a->word, a->pos, a->n);

Modified: team/oej/roibos-cng-support-1.8/apps/app_sms.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/apps/app_sms.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/apps/app_sms.c (original)
+++ team/oej/roibos-cng-support-1.8/apps/app_sms.c Thu Jan  9 09:23:31 2014
@@ -696,7 +696,7 @@
 	}
 	while (l--) {
 		int v = *i++;
-		if (l--) {
+		if (l && l--) {
 			v = (v << 8) + *i++;
 		}
 		*o++ = v;
@@ -714,6 +714,7 @@
 	} else if (is8bit(dcs)) {
 		unpacksms8(i, l, udh, udhl, ud, udl, udhi);
 	} else {
+		l += l % 2;
 		unpacksms16(i, l, udh, udhl, ud, udl, udhi);
 	}
 	return l + 1;

Modified: team/oej/roibos-cng-support-1.8/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/apps/app_voicemail.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/apps/app_voicemail.c (original)
+++ team/oej/roibos-cng-support-1.8/apps/app_voicemail.c Thu Jan  9 09:23:31 2014
@@ -12758,6 +12758,7 @@
 {
 	int i, j, res = AST_TEST_PASS, syserr;
 	struct ast_vm_user *vmu;
+	struct ast_vm_user svm;
 	struct vm_state vms;
 #ifdef IMAP_STORAGE
 	struct ast_channel *chan = NULL;
@@ -12810,7 +12811,7 @@
 	}
 #endif
 
-	if (!(vmu = find_user(NULL, testcontext, testmailbox)) &&
+	if (!(vmu = find_user(&svm, testcontext, testmailbox)) &&
 		!(vmu = find_or_create(testcontext, testmailbox))) {
 		ast_test_status_update(test, "Cannot create vmu structure\n");
 		ast_unreplace_sigchld();

Modified: team/oej/roibos-cng-support-1.8/build_tools/prep_tarball
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/build_tools/prep_tarball?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/build_tools/prep_tarball (original)
+++ team/oej/roibos-cng-support-1.8/build_tools/prep_tarball Thu Jan  9 09:23:31 2014
@@ -19,11 +19,11 @@
 
 cd doc
 echo "Downloading the PDF and HTML documentation from the Asterisk wiki (this will take a minute) ..."
-wget https://wiki.asterisk.org/wiki/download/attachments/19005471/Asterisk-Admin-Guide-$branch.pdf
+wget https://wiki.asterisk.org/wiki/download/attachments/19005471/Asterisk-$branch-Reference.pdf
+wget https://wiki.asterisk.org/wiki/download/attachments/19005471/Asterisk-Admin-Guide.pdf
 wget https://wiki.asterisk.org/wiki/download/attachments/19005471/Asterisk-Admin-Guide-$branch.html.zip
 echo "Extracting HTML Admin Guide"
 unzip Asterisk-Admin-Guide-$branch.html.zip
 mv AST/ Asterisk-Admin-Guide/
-mv Asterisk-Admin-Guide-$branch.pdf Asterisk-Admin-Guide.pdf
 rm -f Asterisk-Admin-Guide-$branch.html.zip
 echo "Documentation downloaded. Goodbye!"

Modified: team/oej/roibos-cng-support-1.8/cdr/cdr_adaptive_odbc.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/cdr/cdr_adaptive_odbc.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/cdr/cdr_adaptive_odbc.c (original)
+++ team/oej/roibos-cng-support-1.8/cdr/cdr_adaptive_odbc.c Thu Jan  9 09:23:31 2014
@@ -683,6 +683,11 @@
 					continue;
 				}
 				first = 0;
+			} else if (entry->filtervalue && entry->filtervalue[0] != '\0') {
+				ast_verb(4, "CDR column '%s' was not set and does not match filter of"
+					" '%s'.  Cancelling this CDR.\n",
+					entry->cdrname, entry->filtervalue);
+				goto early_release;
 			}
 		}
 

Modified: team/oej/roibos-cng-support-1.8/cel/cel_custom.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/cel/cel_custom.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/cel/cel_custom.c (original)
+++ team/oej/roibos-cng-support-1.8/cel/cel_custom.c Thu Jan  9 09:23:31 2014
@@ -82,6 +82,7 @@
 	struct ast_config *cfg;
 	struct ast_variable *var;
 	struct ast_flags config_flags = { 0 };
+	int mappings = 0;
 	int res = 0;
 
 	cfg = ast_config_load(CONFIG, config_flags);
@@ -90,7 +91,10 @@
 		return -1;
 	}
 
-	var = ast_variable_browse(cfg, "mappings");
+	if (!(var = ast_variable_browse(cfg, "mappings"))) {
+		ast_log(LOG_NOTICE, "No mappings found in " CONFIG ". Not logging CEL to custom CSVs.\n");
+	}
+
 	while (var) {
 		if (!ast_strlen_zero(var->name) && !ast_strlen_zero(var->value)) {
 			struct cel_config *sink = ast_calloc_with_stringfields(1, struct cel_config, 1024);
@@ -105,6 +109,8 @@
 			ast_string_field_build(sink, filename, "%s/%s/%s", ast_config_AST_LOG_DIR, name, var->name);
 			ast_mutex_init(&sink->lock);
 
+			ast_verb(3, "Added CEL CSV mapping for '%s'.\n", sink->filename);
+			mappings += 1;
 			AST_RWLIST_INSERT_TAIL(&sinks, sink, list);
 		} else {
 			ast_log(LOG_NOTICE, "Mapping must have both a filename and a format at line %d\n", var->lineno);
@@ -112,6 +118,8 @@
 		var = var->next;
 	}
 	ast_config_destroy(cfg);
+
+	ast_verb(1, "Added CEL CSV mapping for %d files.\n", mappings);
 
 	return res;
 }

Modified: team/oej/roibos-cng-support-1.8/cel/cel_pgsql.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/cel/cel_pgsql.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/cel/cel_pgsql.c (original)
+++ team/oej/roibos-cng-support-1.8/cel/cel_pgsql.c Thu Jan  9 09:23:31 2014
@@ -334,11 +334,12 @@
 static int my_unload_module(void)
 {
 	struct columns *current;
-	AST_RWLIST_WRLOCK(&psql_columns);
+
 	if (event_sub) {
 		event_sub = ast_event_unsubscribe(event_sub);
-		event_sub = NULL;
-	}
+	}
+
+	AST_RWLIST_WRLOCK(&psql_columns);
 	if (conn) {
 		PQfinish(conn);
 		conn = NULL;
@@ -541,6 +542,10 @@
 		return AST_MODULE_LOAD_SUCCESS;
 	}
 
+	if (reload) {
+		my_unload_module();
+	}
+
 	process_my_load_module(cfg);
 	ast_config_destroy(cfg);
 
@@ -561,7 +566,6 @@
 
 static int reload(void)
 {
-	my_unload_module();
 	return my_load_module(1);
 }
 

Modified: team/oej/roibos-cng-support-1.8/channels/chan_dahdi.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/roibos-cng-support-1.8/channels/chan_dahdi.c?view=diff&rev=405211&r1=405210&r2=405211
==============================================================================
--- team/oej/roibos-cng-support-1.8/channels/chan_dahdi.c (original)
+++ team/oej/roibos-cng-support-1.8/channels/chan_dahdi.c Thu Jan  9 09:23:31 2014
@@ -718,9 +718,9 @@
 	struct dahdi_pvt *oprpeer;				/*!< "Operator Services" peer tech_pvt ptr */
 	/*! \brief Amount of gain to increase during caller id */
 	float cid_rxgain;
-	/*! \brief Rx gain set by chan_dahdi.conf */
+	/*! \brief Software Rx gain set by chan_dahdi.conf */
 	float rxgain;
-	/*! \brief Tx gain set by chan_dahdi.conf */
+	/*! \brief Software Tx gain set by chan_dahdi.conf */
 	float txgain;
 
 	float txdrc; /*!< Dynamic Range Compression factor. a number between 1 and 6ish */
@@ -1747,11 +1747,8 @@
 		 * a failure and die, and returning 2 means no event was received. */
 		res = read(p->subs[index].dfd, buf, sizeof(buf));
 		if (res < 0) {
-			if (errno != ELAST) {
-				ast_log(LOG_WARNING, "read returned error: %s\n", strerror(errno));
-				callerid_free(p->cs);
-				return -1;
-			}
+			ast_log(LOG_WARNING, "read returned error: %s\n", strerror(errno));
+			return -1;
 		}
 
 		if (analog_p->ringt > 0) {
@@ -11709,6 +11706,11 @@
 	return NULL;
 }
 
+static void monitor_pfds_clean(void *arg) {
+	struct pollfd **pfds = arg;
+	ast_free(*pfds);
+}
+
 static void *do_monitor(void *data)
 {
 	int count, res, res2, spoint, pollres=0;
@@ -11732,6 +11734,7 @@
 #endif
 	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
 
+	pthread_cleanup_push(monitor_pfds_clean, &pfds);
 	for (;;) {
 		/* Lock the interface list */
 		ast_mutex_lock(&iflock);
@@ -11988,6 +11991,7 @@
 		ast_mutex_unlock(&iflock);
 	}
 	/* Never reached */
+	pthread_cleanup_pop(1);
 	return NULL;
 
 }
@@ -15257,8 +15261,8 @@
 
 static char *dahdi_show_channels(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
-#define FORMAT "%7s %-10.10s %-15.15s %-10.10s %-20.20s %-10.10s %-10.10s\n"
-#define FORMAT2 "%7s %-10.10s %-15.15s %-10.10s %-20.20s %-10.10s %-10.10s\n"
+#define FORMAT "%7s %-15.15s %-15.15s %-10.10s %-20.20s %-10.10s %-10.10s\n"
+#define FORMAT2 "%7s %-15.15s %-15.15s %-10.10s %-20.20s %-10.10s %-10.10s\n"

[... 5841 lines stripped ...]



More information about the asterisk-commits mailing list