Update of /usr/cvsroot/asterisk/apps
In directory mongoose.digium.com:/tmp/cvs-serv27957/apps

Modified Files:
        app_disa.c 
Log Message:
issue #5736


Index: app_disa.c
===================================================================
RCS file: /usr/cvsroot/asterisk/apps/app_disa.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- app_disa.c  11 Nov 2005 00:53:19 -0000      1.45
+++ app_disa.c  15 Nov 2005 19:27:18 -0000      1.46
@@ -118,15 +118,20 @@
        int firstdigittimeout = 20000;
        int digittimeout = 10000;
        struct localuser *u;
-       char *tmp, arg2[256]="",exten[AST_MAX_EXTENSION],acctcode[20]="";
+       char *tmp, exten[AST_MAX_EXTENSION],acctcode[20]="";
        char pwline[256];
-       char *ourcontext,*ourcallerid,ourcidname[256],ourcidnum[256],*mailbox;
+       char ourcidname[256],ourcidnum[256];
        struct ast_frame *f;
        struct timeval lastdigittime;
        int res;
        time_t rstart;
        FILE *fp;
-       char *stringp=NULL;
+       AST_DECLARE_APP_ARGS(args,
+               AST_APP_ARG(passcode);
+               AST_APP_ARG(context);
+               AST_APP_ARG(cid);
+               AST_APP_ARG(mailbox);
+       );
 
        if (ast_strlen_zero(data)) {
                ast_log(LOG_WARNING, "disa requires an argument 
(passcode/passcode file)\n");
@@ -161,24 +166,14 @@
                return -1;
        }       
 
-       stringp=tmp;
-       strsep(&stringp, "|");
-       ourcontext = strsep(&stringp, "|");
-       /* if context specified, save 2nd arg and parse third */
-       if (ourcontext) {
-               ast_copy_string(arg2, ourcontext, sizeof(arg2));
-               ourcallerid = strsep(&stringp,"|");
-       }
-         /* if context not specified, use "disa" */
-       else {
-               arg2[0] = 0;
-               ourcallerid = NULL;
-               ourcontext = "disa";
-       }
-       mailbox = strsep(&stringp, "|");
-       if (!mailbox)
-               mailbox = "";
-       ast_log(LOG_DEBUG, "Mailbox: %s\n",mailbox);
+       AST_STANDARD_APP_ARGS(args, tmp);
+
+       if (ast_strlen_zero(args.context)) 
+               args.context = ast_strdupa("disa");     
+       if (ast_strlen_zero(args.mailbox))
+               args.mailbox = ast_strdupa("");
+
+       ast_log(LOG_DEBUG, "Mailbox: %s\n",args.mailbox);
        
        if (chan->_state != AST_STATE_UP) {
                /* answer */
@@ -190,15 +185,15 @@
        acctcode[0] = 0;
        /* can we access DISA without password? */ 
 
-       ast_log(LOG_DEBUG, "Context: %s\n",ourcontext);
+       ast_log(LOG_DEBUG, "Context: %s\n",args.context);
 
-       if (!strcasecmp(tmp, "no-password")) {
+       if (!strcasecmp(args.passcode, "no-password")) {
                k |= 1; /* We have the password */
                ast_log(LOG_DEBUG, "DISA no-password login success\n");
        }
        lastdigittime = ast_tvnow();
 
-       play_dialtone(chan, mailbox);
+       play_dialtone(chan, args.mailbox);
 
        for (;;) {
                  /* if outa time, give em reorder */
@@ -254,19 +249,18 @@
                                if (j == '#') /* end of password */
                                {
                                          /* see if this is an integer */
-                                       if (sscanf(tmp,"%d",&j) < 1)
+                                       if (sscanf(args.passcode,"%d",&j) < 1)
                                           { /* nope, it must be a filename */
-                                               fp = fopen(tmp,"r");
+                                               fp = fopen(args.passcode,"r");
                                                if (!fp)
                                                   {
-                                                       
ast_log(LOG_WARNING,"DISA password file %s not found on chan 
%s\n",tmp,chan->name);
+                                                       
ast_log(LOG_WARNING,"DISA password file %s not found on chan 
%s\n",args.passcode,chan->name);
                                                        LOCAL_USER_REMOVE(u);
                                                        return -1;
                                                   }
                                                pwline[0] = 0;
                                                
while(fgets(pwline,sizeof(pwline) - 1,fp))
                                                   {
-                                                       char 
*stringp=NULL,*stringp2;
                                                        if (!pwline[0]) 
continue;
                                                        if 
(pwline[strlen(pwline) - 1] == '\n') 
                                                                
pwline[strlen(pwline) - 1] = 0;
@@ -274,28 +268,26 @@
                                                          /* skip comments */
                                                        if (pwline[0] == '#') 
continue;
                                                        if (pwline[0] == ';') 
continue;
-                                                       stringp=pwline;
-                                                       strsep(&stringp, "|");
-                                                       
stringp2=strsep(&stringp, "|");
-                                                       if (stringp2) {
-                                                               
ourcontext=stringp2;
-                                                               
stringp2=strsep(&stringp, "|");
-                                                               if (stringp2) 
ourcallerid=stringp2;
-                                                       }
-                                                       mailbox = 
strsep(&stringp, "|");
-                                                       if (!mailbox)
-                                                               mailbox = "";
-                                                       ast_log(LOG_DEBUG, 
"Mailbox: %s\n",mailbox);
+
+                                                       
AST_STANDARD_APP_ARGS(args, pwline);
+                       
+                                                       ast_log(LOG_DEBUG, 
"Mailbox: %s\n",args.mailbox);
 
                                                          /* password must be 
in valid format (numeric) */
-                                                       if 
(sscanf(pwline,"%d",&j) < 1) continue;
+                                                       if 
(sscanf(args.passcode,"%d",&j) < 1) continue;
                                                          /* if we got it */
-                                                       if 
(!strcmp(exten,pwline)) break;
+                                                       if 
(!strcmp(exten,args.passcode)) {
+                                                               if 
(ast_strlen_zero(args.context))
+                                                                       
args.context = ast_strdupa("disa");
+                                                               if 
(ast_strlen_zero(args.mailbox))
+                                                                       
args.mailbox = ast_strdupa("");
+                                                               break;
+                                                       }
                                                   }
                                                fclose(fp);
                                           }
                                          /* compare the two */
-                                       if (strcmp(exten,pwline))
+                                       if (strcmp(exten,args.passcode))
                                        {
                                                ast_log(LOG_WARNING,"DISA on 
chan %s got bad password %s\n",chan->name,exten);
                                                goto reorder;
@@ -303,7 +295,7 @@
                                        }
                                         /* password good, set to dial state */
                                        ast_log(LOG_DEBUG,"DISA on chan %s 
password is good\n",chan->name);
-                                       play_dialtone(chan, mailbox);
+                                       play_dialtone(chan, args.mailbox);
 
                                        k|=1; /* In number mode */
                                        i = 0;  /* re-set buffer pointer */
@@ -320,7 +312,7 @@
                        if (!(k&1)) continue; /* if getting password, continue 
doing it */
                          /* if this exists */
 
-                       if (ast_ignore_pattern(ourcontext, exten)) {
+                       if (ast_ignore_pattern(args.context, exten)) {
                                play_dialtone(chan, "");
                                did_ignore = 1;
                        } else
@@ -330,7 +322,7 @@
                                }
 
                          /* if can do some more, do it */
-                       if (!ast_matchmore_extension(chan,ourcontext,exten,1, 
chan->cid.cid_num)) {
+                       if (!ast_matchmore_extension(chan,args.context,exten,1, 
chan->cid.cid_num)) {
                                break;
                        }
                }
@@ -340,18 +332,18 @@
                int recheck = 0;
                struct ast_flags flags = { AST_CDR_FLAG_POSTED };
 
-               if (!ast_exists_extension(chan, ourcontext, exten, 1, 
chan->cid.cid_num)) {
+               if (!ast_exists_extension(chan, args.context, exten, 1, 
chan->cid.cid_num)) {
                        pbx_builtin_setvar_helper(chan, "INVALID_EXTEN", exten);
                        exten[0] = 'i';
                        exten[1] = '\0';
                        recheck = 1;
                }
-               if (!recheck || ast_exists_extension(chan, ourcontext, exten, 
1, chan->cid.cid_num)) {
+               if (!recheck || ast_exists_extension(chan, args.context, exten, 
1, chan->cid.cid_num)) {
                        ast_playtones_stop(chan);
                        /* We're authenticated and have a target extension */
-                       if (ourcallerid && *ourcallerid)
+                       if (!ast_strlen_zero(args.cid))
                        {
-                               ast_callerid_split(ourcallerid, ourcidname, 
sizeof(ourcidname), ourcidnum, sizeof(ourcidnum));
+                               ast_callerid_split(args.cid, ourcidname, 
sizeof(ourcidname), ourcidnum, sizeof(ourcidnum));
                                ast_set_callerid(chan, ourcidnum, ourcidname, 
ourcidnum);
                        }
 
@@ -359,7 +351,7 @@
                                ast_copy_string(chan->accountcode, acctcode, 
sizeof(chan->accountcode));
 
                        ast_cdr_reset(chan->cdr, &flags);
-                       ast_explicit_goto(chan, ourcontext, exten, 1);
+                       ast_explicit_goto(chan, args.context, exten, 1);
                        LOCAL_USER_REMOVE(u);
                        return 0;
                }

_______________________________________________
Asterisk-Cvs mailing list
Asterisk-Cvs@lists.digium.com
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to