From 000e0986072e528276eb7ea9a37728b5b0e6be76 Mon Sep 17 00:00:00 2001 From: kpfleming Date: Wed, 25 Oct 2006 14:32:08 +0000 Subject: apparently developers are still not aware that they should be use ast_copy_string instead of strncpy... fix up many more users, and fix some bugs in the process git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@46200 f38db490-d61c-443f-a65b-d21fe96a405b --- apps/app_getcpeid.c | 39 ++++++------ apps/app_ices.c | 2 +- apps/app_parkandannounce.c | 22 ++----- apps/app_queue.c | 26 +++----- apps/app_record.c | 2 +- apps/app_rpt.c | 144 +++++++++++++++++++++------------------------ apps/app_sms.c | 2 +- apps/app_softhangup.c | 2 +- apps/app_voicemail.c | 38 ++++++------ cdr/cdr_custom.c | 4 +- channels/chan_alsa.c | 12 ++-- channels/chan_features.c | 4 +- channels/chan_h323.c | 85 +++++++++++++------------- channels/chan_iax2.c | 8 +-- channels/chan_mgcp.c | 47 ++++++++------- channels/chan_nbs.c | 10 ++-- channels/chan_phone.c | 26 ++++---- channels/chan_sip.c | 8 +-- main/cdr.c | 2 +- main/cli.c | 3 +- main/db.c | 3 +- main/image.c | 2 +- main/utils.c | 2 +- pbx/dundi-parser.c | 2 +- pbx/pbx_ael.c | 33 ++++++----- pbx/pbx_realtime.c | 4 +- pbx/pbx_spool.c | 14 ++--- res/res_adsi.c | 5 +- 28 files changed, 258 insertions(+), 293 deletions(-) diff --git a/apps/app_getcpeid.c b/apps/app_getcpeid.c index f0e39e036..f0c5d1b07 100644 --- a/apps/app_getcpeid.c +++ b/apps/app_getcpeid.c @@ -71,21 +71,20 @@ static int cpeid_exec(struct ast_channel *chan, void *idata) int gotgeometry = 0; int gotcpeid = 0; int width, height, buttons; - char data[4][80]; - char *stuff[4]; + char *data[4]; + unsigned int x; u = ast_module_user_add(chan); - stuff[0] = data[0]; - stuff[1] = data[1]; - stuff[2] = data[2]; - stuff[3] = data[3]; - memset(data, 0, sizeof(data)); - strncpy(stuff[0], "** CPE Info **", sizeof(data[0]) - 1); - strncpy(stuff[1], "Identifying CPE...", sizeof(data[1]) - 1); - strncpy(stuff[2], "Please wait...", sizeof(data[2]) - 1); + + for (x = 0; x < 4; x++) + data[x] = alloca(80); + + strcpy(data[0], "** CPE Info **"); + strcpy(data[1], "Identifying CPE..."); + strcpy(data[2], "Please wait..."); res = ast_adsi_load_session(chan, NULL, 0, 1); if (res > 0) { - cpeid_setstatus(chan, stuff, 0); + cpeid_setstatus(chan, data, 0); res = ast_adsi_get_cpeid(chan, cpeid, 0); if (res > 0) { gotcpeid = 1; @@ -93,9 +92,9 @@ static int cpeid_exec(struct ast_channel *chan, void *idata) ast_verbose(VERBOSE_PREFIX_3 "Got CPEID of '%02x:%02x:%02x:%02x' on '%s'\n", cpeid[0], cpeid[1], cpeid[2], cpeid[3], chan->name); } if (res > -1) { - strncpy(stuff[1], "Measuring CPE...", sizeof(data[1]) - 1); - strncpy(stuff[2], "Please wait...", sizeof(data[2]) - 1); - cpeid_setstatus(chan, stuff, 0); + strcpy(data[1], "Measuring CPE..."); + strcpy(data[2], "Please wait..."); + cpeid_setstatus(chan, data, 0); res = ast_adsi_get_cpeinfo(chan, &width, &height, &buttons, 0); if (res > -1) { if (option_verbose > 2) @@ -105,15 +104,15 @@ static int cpeid_exec(struct ast_channel *chan, void *idata) } if (res > -1) { if (gotcpeid) - snprintf(stuff[1], sizeof(data[1]), "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]); + snprintf(data[1], 80, "CPEID: %02x:%02x:%02x:%02x", cpeid[0], cpeid[1], cpeid[2], cpeid[3]); else - strncpy(stuff[1], "CPEID Unknown", sizeof(data[1]) - 1); + strcpy(data[1], "CPEID Unknown"); if (gotgeometry) - snprintf(stuff[2], sizeof(data[2]), "Geom: %dx%d, %d buttons", width, height, buttons); + snprintf(data[2], 80, "Geom: %dx%d, %d buttons", width, height, buttons); else - strncpy(stuff[2], "Geometry unknown", sizeof(data[2]) - 1); - strncpy(stuff[3], "Press # to exit", sizeof(data[3]) - 1); - cpeid_setstatus(chan, stuff, 1); + strcpy(data[2], "Geometry unknown"); + strcpy(data[3], "Press # to exit"); + cpeid_setstatus(chan, data, 1); for(;;) { res = ast_waitfordigit(chan, 1000); if (res < 0) diff --git a/apps/app_ices.c b/apps/app_ices.c index 9d93dabdf..c44b93136 100644 --- a/apps/app_ices.c +++ b/apps/app_ices.c @@ -141,7 +141,7 @@ static int ices_exec(struct ast_channel *chan, void *data) return -1; } if (((char *)data)[0] == '/') - strncpy(filename, (char *)data, sizeof(filename) - 1); + ast_copy_string(filename, (char *) data, sizeof(filename)); else snprintf(filename, sizeof(filename), "%s/%s", (char *)ast_config_AST_CONFIG_DIR, (char *)data); /* Placeholder for options */ diff --git a/apps/app_parkandannounce.c b/apps/app_parkandannounce.c index 66203b1b0..b4e9006fb 100644 --- a/apps/app_parkandannounce.c +++ b/apps/app_parkandannounce.c @@ -78,13 +78,13 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) { int res=0; char *return_context; - int l, lot, timeout = 0, dres; + int lot, timeout = 0, dres; char *working, *context, *exten, *priority, *dial, *dialtech, *dialstr; char *template, *tpl_working, *tpl_current; char *tmp[100]; char buf[13]; int looptemp=0,i=0; - char *s,*orig_s; + char *s; struct ast_channel *dchan; struct outgoing_helper oh; @@ -99,18 +99,11 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) u = ast_module_user_add(chan); - l=strlen(data)+2; - if (!(orig_s = ast_malloc(l))) { - ast_module_user_remove(u); - return -1; - } - s=orig_s; - strncpy(s,data,l); + s = ast_strdupa(data); template=strsep(&s,"|"); if(! template) { ast_log(LOG_WARNING, "PARK: An announce template must be defined\n"); - free(orig_s); ast_module_user_remove(u); return -1; } @@ -122,7 +115,6 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) dial=strsep(&s, "|"); if(!dial) { ast_log(LOG_WARNING, "PARK: A dial resource must be specified i.e: Console/dsp or Zap/g1/5551212\n"); - free(orig_s); ast_module_user_remove(u); return -1; } else { @@ -155,16 +147,15 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) } if(atoi(priority) < 0) { ast_log(LOG_WARNING, "Priority '%s' must be a number > 0\n", priority); - free(orig_s); ast_module_user_remove(u); return -1; } /* At this point we have a priority and maybe an extension and a context */ chan->priority = atoi(priority); if (exten) - strncpy(chan->exten, exten, sizeof(chan->exten)-1); + ast_copy_string(chan->exten, exten, sizeof(chan->exten)); if (context) - strncpy(chan->context, context, sizeof(chan->context)-1); + ast_copy_string(chan->context, context, sizeof(chan->context)); } else { /* increment the priority by default*/ chan->priority++; } @@ -202,13 +193,11 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) ast_verbose(VERBOSE_PREFIX_4 "Channel %s was never answered.\n", dchan->name); ast_log(LOG_WARNING, "PARK: Channel %s was never answered for the announce.\n", dchan->name); ast_hangup(dchan); - free(orig_s); ast_module_user_remove(u); return -1; } } else { ast_log(LOG_WARNING, "PARK: Unable to allocate announce channel.\n"); - free(orig_s); ast_module_user_remove(u); return -1; } @@ -245,7 +234,6 @@ static int parkandannounce_exec(struct ast_channel *chan, void *data) ast_stopstream(dchan); ast_hangup(dchan); - free(orig_s); ast_module_user_remove(u); diff --git a/apps/app_queue.c b/apps/app_queue.c index 6ad11be86..33a22262c 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -776,10 +776,6 @@ static void clear_and_free_interfaces(void) extra fields in the tables. */ static void queue_set_param(struct call_queue *q, const char *param, const char *val, int linenum, int failunknown) { - int i = 0; - char *c, *lastc; - char buff[80]; - if (!strcasecmp(param, "musicclass") || !strcasecmp(param, "music") || !strcasecmp(param, "musiconhold")) { ast_copy_string(q->moh, val, sizeof(q->moh)); @@ -840,22 +836,18 @@ static void queue_set_param(struct call_queue *q, const char *param, const char else q->announceholdtime = 0; } else if (!strcasecmp(param, "periodic-announce")) { - if (strchr(val,'|')) { - lastc = (char *)val; - while ((c = strchr(lastc,'|'))) { - if (i > MAX_PERIODIC_ANNOUNCEMENTS) - break; - strncpy(buff, lastc, abs(lastc - c)); - buff[abs(lastc - c)] = '\0'; - ast_copy_string(q->sound_periodicannounce[i], buff, sizeof(q->sound_periodicannounce[i])); - lastc = (c + 1); + if (strchr(val, '|')) { + char *s, *buf = ast_strdupa(val); + unsigned int i = 0; + + while ((s = strsep(&buf, "|"))) { + ast_copy_string(q->sound_periodicannounce[i], s, sizeof(q->sound_periodicannounce[i])); i++; - } - if (strlen(lastc)) { - ast_copy_string(q->sound_periodicannounce[i], lastc, sizeof(q->sound_periodicannounce[i])); + if (i == MAX_PERIODIC_ANNOUNCEMENTS) + break; } } else { - ast_copy_string(q->sound_periodicannounce[i], val, sizeof(q->sound_periodicannounce[i])); + ast_copy_string(q->sound_periodicannounce[0], val, sizeof(q->sound_periodicannounce[0])); } } else if (!strcasecmp(param, "periodic-announce-frequency")) { q->periodicannouncefrequency = atoi(val); diff --git a/apps/app_record.c b/apps/app_record.c index a51a8a508..8de76c7ff 100644 --- a/apps/app_record.c +++ b/apps/app_record.c @@ -212,7 +212,7 @@ static int record_exec(struct ast_channel *chan, void *data) } while (ast_fileexists(tmp, ext, chan->language) > 0); pbx_builtin_setvar_helper(chan, "RECORDED_FILE", tmp); } else - strncpy(tmp, filename, sizeof(tmp)-1); + ast_copy_string(tmp, filename, sizeof(tmp)); /* end of routine mentioned */ diff --git a/apps/app_rpt.c b/apps/app_rpt.c index ac966e9bb..9872051cb 100644 --- a/apps/app_rpt.c +++ b/apps/app_rpt.c @@ -1425,7 +1425,7 @@ static int rpt_do_lstats(int fd, int argc, char *argv[]) return RESULT_FAILURE; } memset(s, 0, sizeof(struct rpt_lstat)); - strncpy(s->name, l->name, MAXREMSTR - 1); + ast_copy_string(s->name, l->name, MAXREMSTR); pbx_substitute_variables_helper(l->chan, "${IAXPEER(CURRENTCHANNEL)}", s->peer, MAXPEERSTR - 1); s->mode = l->mode; s->outbound = l->outbound; @@ -2606,8 +2606,7 @@ pthread_attr_t attr; } } else if ((mode == ARB_ALPHA) || (mode == REV_PATCH)) { - strncpy(tele->param, (char *) data, TELEPARAMSIZE - 1); - tele->param[TELEPARAMSIZE - 1] = 0; + ast_copy_string(tele->param, (char *) data, TELEPARAMSIZE); } insque((struct qelem *)tele, (struct qelem *)myrpt->tele.next); rpt_mutex_unlock(&myrpt->lock); @@ -2782,11 +2781,11 @@ struct ast_channel *mychannel,*genchannel; } } - strncpy(mychannel->exten, myrpt->exten, sizeof(mychannel->exten) - 1); - strncpy(mychannel->context, myrpt->patchcontext, sizeof(mychannel->context) - 1); + ast_copy_string(mychannel->exten, myrpt->exten, sizeof(mychannel->exten)); + ast_copy_string(mychannel->context, myrpt->patchcontext, sizeof(mychannel->context)); if (myrpt->p.acctcode) - strncpy((char *)mychannel->accountcode, myrpt->p.acctcode, sizeof(mychannel->accountcode) - 1); + ast_string_field_set(mychannel, accountcode, myrpt->p.acctcode); mychannel->priority = 1; ast_channel_undefer_dtmf(mychannel); if (ast_pbx_start(mychannel) < 0) @@ -2938,7 +2937,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm if (!myrpt->enable) return DC_ERROR; - strncpy(digitbuf,digits,MAXNODESTR - 1); + ast_copy_string(digitbuf,digits,MAXNODESTR); if(debug) printf("@@@@ ilink param = %s, digitbuf = %s\n", (param)? param : "(null)", digitbuf); @@ -2953,7 +2952,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm return DC_ERROR; break; } - strncpy(tmp,val,sizeof(tmp) - 1); + ast_copy_string(tmp,val,sizeof(tmp)); s = tmp; s1 = strsep(&s,","); s2 = strsep(&s,","); @@ -2973,7 +2972,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm } if (l != &myrpt->links){ /* if found */ struct ast_frame wf; - strncpy(myrpt->lastlinknode,digitbuf,MAXNODESTR - 1); + ast_copy_string(myrpt->lastlinknode,digitbuf,MAXNODESTR); l->retries = MAX_RETRIES + 1; l->disced = 1; rpt_mutex_unlock(&myrpt->lock); @@ -3004,7 +3003,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm return DC_ERROR; break; } - strncpy(tmp,val,sizeof(tmp) - 1); + ast_copy_string(tmp, val, sizeof(tmp)); s = tmp; s1 = strsep(&s,","); s2 = strsep(&s,","); @@ -3040,7 +3039,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm modechange = 1; } else rpt_mutex_unlock(&myrpt->lock); - strncpy(myrpt->lastlinknode,digitbuf,MAXNODESTR - 1); + ast_copy_string(myrpt->lastlinknode,digitbuf,MAXNODESTR); /* establish call in monitor mode */ l = malloc(sizeof(struct rpt_link)); if (!l){ @@ -3057,7 +3056,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm } *tele++ = 0; l->isremote = (s && ast_true(s)); - strncpy(l->name, digitbuf, MAXNODESTR - 1); + ast_copy_string(l->name, digitbuf, MAXNODESTR); l->chan = ast_request(deststr,AST_FORMAT_SLINEAR,tele,NULL); if (modechange) l->connected = 1; if (l->chan){ @@ -3122,7 +3121,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm return DC_ERROR; break; } - strncpy(tmp,val,sizeof(tmp) - 1); + ast_copy_string(tmp,val,sizeof(tmp)); s = tmp; s1 = strsep(&s,","); s2 = strsep(&s,","); @@ -3156,7 +3155,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm modechange = 1; } else rpt_mutex_unlock(&myrpt->lock); - strncpy(myrpt->lastlinknode,digitbuf,MAXNODESTR - 1); + ast_copy_string(myrpt->lastlinknode,digitbuf,MAXNODESTR); /* establish call in tranceive mode */ l = malloc(sizeof(struct rpt_link)); if (!l){ @@ -3167,7 +3166,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm memset((char *)l,0,sizeof(struct rpt_link)); l->mode = 1; l->outbound = 1; - strncpy(l->name, digitbuf, MAXNODESTR - 1); + ast_copy_string(l->name, digitbuf, MAXNODESTR); l->isremote = (s && ast_true(s)); if (modechange) l->connected = 1; snprintf(deststr, sizeof(deststr), "IAX2/%s", s1); @@ -3255,7 +3254,7 @@ static int function_ilink(struct rpt *myrpt, char *param, char *digits, int comm } rpt_mutex_lock(&myrpt->lock); strcpy(myrpt->lastlinknode,digitbuf); - strncpy(myrpt->cmdnode, digitbuf, sizeof(myrpt->cmdnode) - 1); + ast_copy_string(myrpt->cmdnode, digitbuf, sizeof(myrpt->cmdnode)); rpt_mutex_unlock(&myrpt->lock); rpt_telemetry(myrpt, REMGO, NULL); return DC_COMPLETE; @@ -3320,7 +3319,7 @@ static int function_autopatchup(struct rpt *myrpt, char *param, char *digitbuf, myrpt->patchdialtime = 0; myrpt->patchfarenddisconnect = 0; myrpt->patchquiet = 0; - strncpy(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT); + ast_copy_string(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT); if(param){ /* Process parameter list */ @@ -3337,7 +3336,7 @@ static int function_autopatchup(struct rpt *myrpt, char *param, char *digitbuf, switch(index){ case 1: /* context */ - strncpy(myrpt->patchcontext, value, MAXPATCHCONTEXT - 1) ; + ast_copy_string(myrpt->patchcontext, value, MAXPATCHCONTEXT) ; break; case 2: /* dialtime */ @@ -3545,16 +3544,16 @@ static int collect_function_digits(struct rpt *myrpt, char *digits, if (command_source == SOURCE_DPHONE) { if (!myrpt->p.dphone_functions) return DC_INDETERMINATE; - strncpy(function_table_name, myrpt->p.dphone_functions, sizeof(function_table_name) - 1); + ast_copy_string(function_table_name, myrpt->p.dphone_functions, sizeof(function_table_name)); } else if (command_source == SOURCE_PHONE) { if (!myrpt->p.phone_functions) return DC_INDETERMINATE; - strncpy(function_table_name, myrpt->p.phone_functions, sizeof(function_table_name) - 1); + ast_copy_string(function_table_name, myrpt->p.phone_functions, sizeof(function_table_name)); } else if (command_source == SOURCE_LNK) - strncpy(function_table_name, myrpt->p.link_functions, sizeof(function_table_name) - 1); + ast_copy_string(function_table_name, myrpt->p.link_functions, sizeof(function_table_name)); else - strncpy(function_table_name, myrpt->p.functions, sizeof(function_table_name) - 1); + ast_copy_string(function_table_name, myrpt->p.functions, sizeof(function_table_name)); vp = ast_variable_browse(myrpt->cfg, function_table_name); while(vp) { if(!strncasecmp(vp->name, digits, strlen(vp->name))) @@ -3577,7 +3576,7 @@ static int collect_function_digits(struct rpt *myrpt, char *digits, return DC_INDETERMINATE; } /* Found a match, retrieve value part and parse */ - strncpy(workstring, vp->value, sizeof(workstring) - 1 ); + ast_copy_string(workstring, vp->value, sizeof(workstring)); stringp = workstring; action = strsep(&stringp, ","); param = stringp; @@ -3620,7 +3619,7 @@ struct ast_frame wf; wf.datalen = strlen(str) + 1; wf.samples = 0; /* put string in our buffer */ - strncpy(tmp,str,sizeof(tmp) - 1); + ast_copy_string(tmp, str, sizeof(tmp)); if (!strcmp(tmp,discstr)) { @@ -3743,7 +3742,7 @@ struct ast_frame wf; myrpt->rem_dtmfbuf[myrpt->rem_dtmfidx] = 0; rpt_mutex_unlock(&myrpt->lock); - strncpy(cmd, myrpt->rem_dtmfbuf, sizeof(cmd) - 1); + ast_copy_string(cmd, myrpt->rem_dtmfbuf, sizeof(cmd)); res = collect_function_digits(myrpt, cmd, SOURCE_LNK, mylink); rpt_mutex_lock(&myrpt->lock); @@ -3761,7 +3760,7 @@ struct ast_frame wf; case DC_COMPLETE: myrpt->totalexecdcommands++; myrpt->dailyexecdcommands++; - strncpy(myrpt->lastdtmfcommand, cmd, MAXDTMF-1); + ast_copy_string(myrpt->lastdtmfcommand, cmd, MAXDTMF); myrpt->lastdtmfcommand[MAXDTMF-1] = '\0'; myrpt->rem_dtmfbuf[0] = 0; myrpt->rem_dtmfidx = -1; @@ -3857,7 +3856,7 @@ int res; myrpt->rem_dtmfbuf[myrpt->rem_dtmfidx] = 0; rpt_mutex_unlock(&myrpt->lock); - strncpy(cmd, myrpt->rem_dtmfbuf, sizeof(cmd) - 1); + ast_copy_string(cmd, myrpt->rem_dtmfbuf, sizeof(cmd)); switch(mylink->phonemode) { case 1: @@ -3894,7 +3893,7 @@ int res; case DC_COMPLETE: myrpt->totalexecdcommands++; myrpt->dailyexecdcommands++; - strncpy(myrpt->lastdtmfcommand, cmd, MAXDTMF-1); + ast_copy_string(myrpt->lastdtmfcommand, cmd, MAXDTMF); myrpt->lastdtmfcommand[MAXDTMF-1] = '\0'; myrpt->rem_dtmfbuf[0] = 0; myrpt->rem_dtmfidx = -1; @@ -4165,7 +4164,7 @@ int band,txoffset = 0,txpower = 0,txpl; if (!myrpt->remote) return(0); /* must have rbi hardware */ if (strncmp(myrpt->remote,remote_rig_rbi,3)) return(0); - strncpy(tmp, myrpt->freq, sizeof(tmp) - 1); + ast_copy_string(tmp, myrpt->freq, sizeof(tmp)); s = strchr(tmp,'.'); /* if no decimal, is invalid */ @@ -4293,16 +4292,14 @@ static int check_freq_rbi(int m, int d, int *defmode) static int split_freq(char *mhz, char *decimals, char *freq) { - char freq_copy[MAXREMSTR]; char *decp; - decp = strchr(strncpy(freq_copy, freq, MAXREMSTR),'.'); - if(decp){ + freq = ast_strdupa(freq); + if ((decp = strchr(freq, '.'))) { *decp++ = 0; - strncpy(mhz, freq_copy, MAXREMSTR); + ast_copy_string(mhz, freq, MAXREMSTR); strcpy(decimals, "00000"); - strncpy(decimals, decp, strlen(decp)); - decimals[5] = 0; + ast_copy_string(decimals, decp, 6); return 0; } else @@ -4316,15 +4313,13 @@ static int split_freq(char *mhz, char *decimals, char *freq) static int split_ctcss_freq(char *hertz, char *decimal, char *freq) { - char freq_copy[MAXREMSTR]; char *decp; - decp = strchr(strncpy(freq_copy, freq, MAXREMSTR),'.'); - if(decp){ + freq = ast_strdupa(freq); + if ((decp = strchr(freq, '.'))) { *decp++ = 0; - strncpy(hertz, freq_copy, MAXREMSTR); - strncpy(decimal, decp, strlen(decp)); - decimal[strlen(decp)] = '\0'; + ast_copy_string(hertz, freq, MAXREMSTR); + ast_copy_string(decimal, decp, sizeof(decimal)); return 0; } else @@ -4966,9 +4961,9 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c if (!s1) return DC_ERROR; *s1++ = 0; - strncpy(myrpt->freq, tmp, sizeof(myrpt->freq) - 1); - strncpy(myrpt->rxpl, s, sizeof(myrpt->rxpl) - 1); - strncpy(myrpt->txpl, s, sizeof(myrpt->rxpl) - 1); + ast_copy_string(myrpt->freq, tmp, sizeof(myrpt->freq)); + ast_copy_string(myrpt->rxpl, s, sizeof(myrpt->rxpl)); + ast_copy_string(myrpt->txpl, s, sizeof(myrpt->rxpl)); myrpt->remmode = REM_MODE_FM; myrpt->offset = REM_SIMPLEX; myrpt->powerlevel = REM_MEDPWR; @@ -5082,7 +5077,7 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c /* We have a frequency */ - strncpy(tmp, digitbuf ,sizeof(tmp) - 1); + ast_copy_string(tmp, digitbuf ,sizeof(tmp)); s = tmp; s1 = strsep(&s, "*"); /* Pick off MHz */ @@ -5167,15 +5162,15 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c } offsave = myrpt->offset; modesave = myrpt->remmode; - strncpy(savestr, myrpt->freq, sizeof(savestr) - 1); - strncpy(myrpt->freq, freq, sizeof(myrpt->freq) - 1); + ast_copy_string(savestr, myrpt->freq, sizeof(savestr)); + ast_copy_string(myrpt->freq, freq, sizeof(myrpt->freq)); myrpt->offset = offset; myrpt->remmode = defmode; if (setrem(myrpt) == -1){ myrpt->offset = offsave; myrpt->remmode = modesave; - strncpy(myrpt->freq, savestr, sizeof(myrpt->freq) - 1); + ast_copy_string(myrpt->freq, savestr, sizeof(myrpt->freq)); goto invalid_freq; } @@ -5212,16 +5207,16 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c if(debug) printf("PL digits entered %s\n", digitbuf); - strncpy(tmp, digitbuf, sizeof(tmp) - 1); + ast_copy_string(tmp, digitbuf, sizeof(tmp)); /* see if we have at least 1 */ s = strchr(tmp,'*'); if(s) *s = '.'; - strncpy(savestr, myrpt->rxpl, sizeof(savestr) - 1); - strncpy(myrpt->rxpl, tmp, sizeof(myrpt->rxpl) - 1); + ast_copy_string(savestr, myrpt->rxpl, sizeof(savestr)); + ast_copy_string(myrpt->rxpl, tmp, sizeof(myrpt->rxpl)); if (setrem(myrpt) == -1){ - strncpy(myrpt->rxpl, savestr, sizeof(myrpt->rxpl) - 1); + ast_copy_string(myrpt->rxpl, savestr, sizeof(myrpt->rxpl)); return DC_ERROR; } @@ -5252,16 +5247,16 @@ static int function_remote(struct rpt *myrpt, char *param, char *digitbuf, int c if(debug) printf("PL digits entered %s\n", digitbuf); - strncpy(tmp, digitbuf, sizeof(tmp) - 1); + ast_copy_string(tmp, digitbuf, sizeof(tmp)); /* see if we have at least 1 */ s = strchr(tmp,'*'); if(s) *s = '.'; - strncpy(savestr, myrpt->txpl, sizeof(savestr) - 1); - strncpy(myrpt->txpl, tmp, sizeof(myrpt->txpl) - 1); + ast_copy_string(savestr, myrpt->txpl, sizeof(savestr)); + ast_copy_string(myrpt->txpl, tmp, sizeof(myrpt->txpl)); if (setrem(myrpt) == -1){ - strncpy(myrpt->txpl, savestr, sizeof(myrpt->txpl) - 1); + ast_copy_string(myrpt->txpl, savestr, sizeof(myrpt->txpl) - 1); return DC_ERROR; } @@ -5693,8 +5688,7 @@ int ret,res = 0,src; case DC_COMPLETE: myrpt->totalexecdcommands++; myrpt->dailyexecdcommands++; - strncpy(myrpt->lastdtmfcommand, myrpt->dtmfbuf, MAXDTMF-1); - myrpt->lastdtmfcommand[MAXDTMF-1] = '\0'; + ast_copy_string(myrpt->lastdtmfcommand, myrpt->dtmfbuf, MAXDTMF); myrpt->dtmfbuf[0] = 0; myrpt->dtmfidx = -1; myrpt->dtmf_time_rem = 0; @@ -5719,7 +5713,7 @@ char tmp[300],cmd[300],dest[300],src[300],c; int seq,res; /* put string in our buffer */ - strncpy(tmp,str,sizeof(tmp) - 1); + ast_copy_string(tmp,str,sizeof(tmp)); if (!strcmp(tmp,discstr)) return 0; if (sscanf(tmp,"%s %s %s %d %c",cmd,dest,src,&seq,&c) != 5) { @@ -5791,7 +5785,7 @@ static int attempt_reconnect(struct rpt *myrpt, struct rpt_link *l) /* remove from queue */ remque((struct qelem *) l); rpt_mutex_unlock(&myrpt->lock); - strncpy(tmp,val,sizeof(tmp) - 1); + ast_copy_string(tmp,val,sizeof(tmp)); s = tmp; s1 = strsep(&s,","); s2 = strsep(&s,","); @@ -5891,7 +5885,7 @@ char cmd[MAXDTMF+1] = ""; myrpt->dtmfbuf[myrpt->dtmfidx++] = c; myrpt->dtmfbuf[myrpt->dtmfidx] = 0; - strncpy(cmd, myrpt->dtmfbuf, sizeof(cmd) - 1); + ast_copy_string(cmd, myrpt->dtmfbuf, sizeof(cmd)); rpt_mutex_unlock(&myrpt->lock); res = collect_function_digits(myrpt, cmd, SOURCE_RPT, NULL); @@ -5906,8 +5900,7 @@ char cmd[MAXDTMF+1] = ""; case DC_COMPLETE: myrpt->totalexecdcommands++; myrpt->dailyexecdcommands++; - strncpy(myrpt->lastdtmfcommand, cmd, MAXDTMF-1); - myrpt->lastdtmfcommand[MAXDTMF-1] = '\0'; + ast_copy_string(myrpt->lastdtmfcommand, cmd, MAXDTMF); myrpt->dtmfbuf[0] = 0; myrpt->dtmfidx = -1; myrpt->dtmf_time = 0; @@ -5936,7 +5929,7 @@ char cmd[MAXDTMF+1] = ""; myrpt->patchquiet = 0; myrpt->patchfarenddisconnect = 0; myrpt->patchdialtime = 0; - strncpy(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT); + ast_copy_string(myrpt->patchcontext, myrpt->p.ourcontext, MAXPATCHCONTEXT); myrpt->cidx = 0; myrpt->exten[myrpt->cidx] = 0; rpt_mutex_unlock(&myrpt->lock); @@ -6051,7 +6044,7 @@ char tmpstr[300]; } } rpt_mutex_lock(&myrpt->lock); - strncpy(tmpstr,myrpt->rxchanname,sizeof(tmpstr) - 1); + ast_copy_string(tmpstr,myrpt->rxchanname,sizeof(tmpstr)); tele = strchr(tmpstr,'/'); if (!tele) { @@ -6098,7 +6091,7 @@ char tmpstr[300]; } if (myrpt->txchanname) { - strncpy(tmpstr,myrpt->txchanname,sizeof(tmpstr) - 1); + ast_copy_string(tmpstr,myrpt->txchanname,sizeof(tmpstr)); tele = strchr(tmpstr,'/'); if (!tele) { @@ -7209,10 +7202,9 @@ struct ast_config *cfg; /* if is a remote, dont start one for it */ if (rpt_vars[i].remote) { - strncpy(rpt_vars[i].freq, "146.580", sizeof(rpt_vars[i].freq) - 1); - strncpy(rpt_vars[i].rxpl, "100.0", sizeof(rpt_vars[i].rxpl) - 1); - - strncpy(rpt_vars[i].txpl, "100.0", sizeof(rpt_vars[i].txpl) - 1); + strcpy(rpt_vars[i].freq, "146.580"); + strcpy(rpt_vars[i].rxpl, "100.0"); + strcpy(rpt_vars[i].txpl, "100.0"); rpt_vars[i].remmode = REM_MODE_FM; rpt_vars[i].offset = REM_SIMPLEX; rpt_vars[i].powerlevel = REM_MEDPWR; @@ -7291,7 +7283,7 @@ static int rpt_exec(struct ast_channel *chan, void *data) ast_log(LOG_WARNING, "Rpt requires an argument (system node)\n"); return -1; } - strncpy(tmp, (char *)data, sizeof(tmp)-1); + ast_copy_string(tmp, (char *)data, sizeof(tmp)); stringp=tmp; strsep(&stringp, "|"); options = stringp; @@ -7364,7 +7356,7 @@ static int rpt_exec(struct ast_channel *chan, void *data) return -1; } s=orig_s; - strncpy(s,options,l); + ast_copy_string(s,options,l); template=strsep(&s,"|"); if(!template) { @@ -7412,9 +7404,9 @@ static int rpt_exec(struct ast_channel *chan, void *data) #else if(exten) #endif - strncpy(chan->exten, exten, sizeof(chan->exten)-1); + ast_copy_string(chan->exten, exten, sizeof(chan->exten)); if(context) - strncpy(chan->context, context, sizeof(chan->context)-1); + ast_copy_string(chan->context, context, sizeof(chan->context)); } else { /* increment the priority by default*/ chan->priority++; } @@ -7490,7 +7482,7 @@ static int rpt_exec(struct ast_channel *chan, void *data) ast_log(LOG_WARNING, "Reported node %s cannot be found!!\n",b1); return -1; } - strncpy(tmp,val,sizeof(tmp) - 1); + ast_copy_string(tmp,val,sizeof(tmp)); s = tmp; s1 = strsep(&s,","); s2 = strsep(&s,","); @@ -7588,7 +7580,7 @@ static int rpt_exec(struct ast_channel *chan, void *data) /* zero the silly thing */ memset((char *)l,0,sizeof(struct rpt_link)); l->mode = 1; - strncpy(l->name,b1,MAXNODESTR - 1); + ast_copy_string(l->name,b1,MAXNODESTR); l->isremote = 0; l->chan = chan; l->connected = 1; diff --git a/apps/app_sms.c b/apps/app_sms.c index 8fd5ee617..5bb076e81 100644 --- a/apps/app_sms.c +++ b/apps/app_sms.c @@ -1389,7 +1389,7 @@ static int sms_exec (struct ast_channel *chan, void *data) ast_module_user_remove(u); return -1; } - strncpy (h.queue, (char *)d, p - d); + strncpy(h.queue, (char *)d, p - d); if (*p == '|') p++; d = p; diff --git a/apps/app_softhangup.c b/apps/app_softhangup.c index 46584c3e7..018edc07d 100644 --- a/apps/app_softhangup.c +++ b/apps/app_softhangup.c @@ -74,7 +74,7 @@ static int softhangup_exec(struct ast_channel *chan, void *data) all = options && strchr(options,'a'); c = ast_channel_walk_locked(NULL); while (c) { - strncpy(name, c->name, sizeof(name)-1); + ast_copy_string(name, c->name, sizeof(name)); ast_mutex_unlock(&c->lock); /* XXX watch out, i think it is wrong to access c-> after unlocking! */ if (all) { diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 429a92688..7ec04e480 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -7236,23 +7236,22 @@ static int load_config(void) char *tmpread, *tmpwrite; emailbody = ast_strdup(s); - /* substitute strings \t and \n into the apropriate characters */ + /* substitute strings \t and \n into the appropriate characters */ tmpread = tmpwrite = emailbody; while ((tmpwrite = strchr(tmpread,'\\'))) { - int len = strlen("\n"); switch (tmpwrite[1]) { case 'n': - strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1); - strncpy(tmpwrite, "\n", len); + *tmpwrite++ = '\n'; + memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1); break; case 't': - strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1); - strncpy(tmpwrite, "\t", len); + *tmpwrite++ = '\t'; + memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1); break; default: ast_log(LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]); } - tmpread = tmpwrite + len; + tmpread = tmpwrite + 1; } } if ((s = ast_variable_retrieve(cfg, "general", "pagersubject"))) @@ -7261,23 +7260,22 @@ static int load_config(void) char *tmpread, *tmpwrite; pagerbody = ast_strdup(s); - /* substitute strings \t and \n into the apropriate characters */ + /* substitute strings \t and \n into the appropriate characters */ tmpread = tmpwrite = pagerbody; while ((tmpwrite = strchr(tmpread, '\\'))) { - int len = strlen("\n"); switch (tmpwrite[1]) { - case 'n': - strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1); - strncpy(tmpwrite, "\n", len); - break; - case 't': - strncpy(tmpwrite + len, tmpwrite + 2, strlen(tmpwrite + 2) + 1); - strncpy(tmpwrite, "\t", len); - break; - default: - ast_log(LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]); + case 'n': + *tmpwrite++ = '\n'; + memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1); + break; + case 't': + *tmpwrite++ = '\t'; + memmove(tmpwrite, tmpwrite + 1, strlen(tmpwrite + 1) + 1); + break; + default: + ast_log(LOG_NOTICE, "Substitution routine does not support this character: %c\n", tmpwrite[1]); } - tmpread = tmpwrite + len; + tmpread = tmpwrite + 1; } } AST_LIST_UNLOCK(&users); diff --git a/cdr/cdr_custom.c b/cdr/cdr_custom.c index 803c3d9b7..995531761 100644 --- a/cdr/cdr_custom.c +++ b/cdr/cdr_custom.c @@ -77,9 +77,9 @@ static int load_config(int reload) while(var) { ast_mutex_lock(&lock); if (!ast_strlen_zero(var->name) && !ast_strlen_zero(var->value)) { - if (strlen(var->value) > (sizeof(format) - 2)) + if (strlen(var->value) > (sizeof(format) - 1)) ast_log(LOG_WARNING, "Format string too long, will be truncated, at line %d\n", var->lineno); - strncpy(format, var->value, sizeof(format) - 2); + ast_copy_string(format, var->value, sizeof(format) - 1); strcat(format,"\n"); snprintf(master, sizeof(master),"%s/%s/%s", ast_config_AST_LOG_DIR, name, var->name); ast_mutex_unlock(&lock); diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c index 58b5e0ea8..6d4617a6c 100644 --- a/channels/chan_alsa.c +++ b/channels/chan_alsa.c @@ -1158,7 +1158,7 @@ static int console_dial_deprecated(int fd, int argc, char *argv[]) myc = context; if (argc == 2) { char *stringp = NULL; - strncpy(tmp, argv[1], sizeof(tmp) - 1); + ast_copy_string(tmp, argv[1], sizeof(tmp)); stringp = tmp; strsep(&stringp, "@"); tmp2 = strsep(&stringp, "@"); @@ -1168,8 +1168,8 @@ static int console_dial_deprecated(int fd, int argc, char *argv[]) myc = tmp2; } if (ast_exists_extension(NULL, myc, mye, 1, NULL)) { - strncpy(alsa.exten, mye, sizeof(alsa.exten) - 1); - strncpy(alsa.context, myc, sizeof(alsa.context) - 1); + ast_copy_string(alsa.exten, mye, sizeof(alsa.exten)); + ast_copy_string(alsa.context, myc, sizeof(alsa.context)); hookstate = 1; alsa_new(&alsa, AST_STATE_RINGING); } else @@ -1215,7 +1215,7 @@ static int console_dial(int fd, int argc, char *argv[]) myc = context; if (argc == 3) { char *stringp = NULL; - strncpy(tmp, argv[2], sizeof(tmp) - 1); + ast_copy_string(tmp, argv[2], sizeof(tmp)); stringp = tmp; strsep(&stringp, "@"); tmp2 = strsep(&stringp, "@"); @@ -1225,8 +1225,8 @@ static int console_dial(int fd, int argc, char *argv[]) myc = tmp2; } if (ast_exists_extension(NULL, myc, mye, 1, NULL)) { - strncpy(alsa.exten, mye, sizeof(alsa.exten) - 1); - strncpy(alsa.context, myc, sizeof(alsa.context) - 1); + ast_copy_string(alsa.exten, mye, sizeof(alsa.exten)); + ast_copy_string(alsa.context, myc, sizeof(alsa.context)); hookstate = 1; alsa_new(&alsa, AST_STATE_RINGING); } else diff --git a/channels/chan_features.c b/channels/chan_features.c index 5f01738d2..0f239ce4b 100644 --- a/channels/chan_features.c +++ b/channels/chan_features.c @@ -436,8 +436,8 @@ static struct feature_pvt *features_alloc(char *data, int format) for (x=0;x<3;x++) init_sub(tmp->subs + x); ast_mutex_init(&tmp->lock); - strncpy(tmp->tech, tech, sizeof(tmp->tech) - 1); - strncpy(tmp->dest, dest, sizeof(tmp->dest) - 1); + ast_copy_string(tmp->tech, tech, sizeof(tmp->tech)); + ast_copy_string(tmp->dest, dest, sizeof(tmp->dest)); tmp->subchan = chan; AST_LIST_LOCK(&features); AST_LIST_INSERT_HEAD(&features, tmp, list); diff --git a/channels/chan_h323.c b/channels/chan_h323.c index ef08d20be..861640be5 100644 --- a/channels/chan_h323.c +++ b/channels/chan_h323.c @@ -601,7 +601,7 @@ static int oh323_call(struct ast_channel *c, char *dest, int timeout) ast_mutex_lock(&pvt->lock); if (!gatekeeper_disable) { if (ast_strlen_zero(pvt->exten)) { - strncpy(called_addr, dest, sizeof(called_addr)); + ast_copy_string(called_addr, dest, sizeof(called_addr)); } else { snprintf(called_addr, sizeof(called_addr), "%s@%s", pvt->exten, dest); } @@ -618,13 +618,13 @@ static int oh323_call(struct ast_channel *c, char *dest, int timeout) called_addr[sizeof(called_addr) - 1] = '\0'; if (c->cid.cid_num) - strncpy(pvt->options.cid_num, c->cid.cid_num, sizeof(pvt->options.cid_num)); + ast_copy_string(pvt->options.cid_num, c->cid.cid_num, sizeof(pvt->options.cid_num)); if (c->cid.cid_name) - strncpy(pvt->options.cid_name, c->cid.cid_name, sizeof(pvt->options.cid_name)); + ast_copy_string(pvt->options.cid_name, c->cid.cid_name, sizeof(pvt->options.cid_name)); if (c->cid.cid_rdnis) { - strncpy(pvt->options.cid_rdnis, c->cid.cid_rdnis, sizeof(pvt->options.cid_rdnis)); + ast_copy_string(pvt->options.cid_rdnis, c->cid.cid_rdnis, sizeof(pvt->options.cid_rdnis)); } pvt->options.presentation = c->cid.cid_pres; @@ -1046,8 +1046,8 @@ static struct ast_channel *__oh323_new(struct oh323_pvt *pvt, int state, const c /* Set the owner of this channel */ pvt->owner = ch; - strncpy(ch->context, pvt->context, sizeof(ch->context) - 1); - strncpy(ch->exten, pvt->exten, sizeof(ch->exten) - 1); + ast_copy_string(ch->context, pvt->context, sizeof(ch->context)); + ast_copy_string(ch->exten, pvt->exten, sizeof(ch->exten)); ch->priority = 1; if (!ast_strlen_zero(pvt->accountcode)) { ast_string_field_set(ch, accountcode, pvt->accountcode); @@ -1128,7 +1128,7 @@ static struct oh323_pvt *oh323_alloc(int callid) } else { pvt->nonCodecCapability &= ~AST_RTP_DTMF; } - strncpy(pvt->context, default_context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->context, default_context, sizeof(pvt->context)); pvt->newstate = pvt->newcontrol = pvt->newdigit = pvt->update_rtp_info = pvt->DTMFsched = -1; ast_mutex_init(&pvt->lock); /* Add to interface list */ @@ -1201,16 +1201,16 @@ static struct oh323_alias *build_alias(const char *name, struct ast_variable *v, ASTOBJ_INIT(alias); } if (!found && name) - strncpy(alias->name, name, sizeof(alias->name) - 1); + ast_copy_string(alias->name, name, sizeof(alias->name)); for (; v || ((v = alt) && !(alt = NULL)); v = v->next) { if (!strcasecmp(v->name, "e164")) { - strncpy(alias->e164, v->value, sizeof(alias->e164) - 1); + ast_copy_string(alias->e164, v->value, sizeof(alias->e164)); } else if (!strcasecmp(v->name, "prefix")) { - strncpy(alias->prefix, v->value, sizeof(alias->prefix) - 1); + ast_copy_string(alias->prefix, v->value, sizeof(alias->prefix)); } else if (!strcasecmp(v->name, "context")) { - strncpy(alias->context, v->value, sizeof(alias->context) - 1); + ast_copy_string(alias->context, v->value, sizeof(alias->context)); } else if (!strcasecmp(v->name, "secret")) { - strncpy(alias->secret, v->value, sizeof(alias->secret) - 1); + ast_copy_string(alias->secret, v->value, sizeof(alias->secret)); } else { if (strcasecmp(v->value, "h323")) { ast_log(LOG_WARNING, "Keyword %s does not make sense in type=h323\n", v->name); @@ -1349,9 +1349,9 @@ static struct oh323_user *build_user(char *name, struct ast_variable *v, struct user->ha = (struct ast_ha *)NULL; memcpy(&user->options, &global_options, sizeof(user->options)); /* Set default context */ - strncpy(user->context, default_context, sizeof(user->context) - 1); + ast_copy_string(user->context, default_context, sizeof(user->context)); if (user && !found) - strncpy(user->name, name, sizeof(user->name) - 1); + ast_copy_string(user->name, name, sizeof(user->name)); #if 0 /* XXX Port channel variables functionality from chan_sip XXX */ if (user->chanvars) { @@ -1364,11 +1364,11 @@ static struct oh323_user *build_user(char *name, struct ast_variable *v, struct if (!update_common_options(v, &user->options)) continue; if (!strcasecmp(v->name, "context")) { - strncpy(user->context, v->value, sizeof(user->context) - 1); + ast_copy_string(user->context, v->value, sizeof(user->context)); } else if (!strcasecmp(v->name, "secret")) { - strncpy(user->secret, v->value, sizeof(user->secret) - 1); + ast_copy_string(user->secret, v->value, sizeof(user->secret)); } else if (!strcasecmp(v->name, "accountcode")) { - strncpy(user->accountcode, v->value, sizeof(user->accountcode) - 1); + ast_copy_string(user->accountcode, v->value, sizeof(user->accountcode)); } else if (!strcasecmp(v->name, "host")) { if (!strcasecmp(v->value, "dynamic")) { ast_log(LOG_ERROR, "A dynamic host on a type=user does not make any sense\n"); @@ -1456,7 +1456,7 @@ static struct oh323_peer *build_peer(const char *name, struct ast_variable *v, s peer->addr.sin_port = htons(h323_signalling_port); peer->addr.sin_family = AF_INET; if (!found && name) - strncpy(peer->name, name, sizeof(peer->name) - 1); + ast_copy_string(peer->name, name, sizeof(peer->name)); #if 0 /* XXX Port channel variables functionality from chan_sip XXX */ if (peer->chanvars) { @@ -1602,7 +1602,7 @@ static int create_addr(struct oh323_pvt *pvt, char *opeer) char *hostn; char peer[256] = ""; - strncpy(peer, opeer, sizeof(peer) - 1); + ast_copy_string(peer, opeer, sizeof(peer)); port = strchr(peer, ':'); if (port) { *port = '\0'; @@ -1690,7 +1690,7 @@ static struct ast_channel *oh323_request(const char *type, int format, void *dat *cause = AST_CAUSE_INCOMPATIBLE_DESTINATION; return NULL; } - strncpy(tmp, dest, sizeof(tmp) - 1); + ast_copy_string(tmp, dest, sizeof(tmp)); host = strchr(tmp, '@'); if (host) { *host = '\0'; @@ -1707,7 +1707,7 @@ static struct ast_channel *oh323_request(const char *type, int format, void *dat h323_set_id(h323id); } if (ext) { - strncpy(pvt->exten, ext, sizeof(pvt->exten) - 1); + ast_copy_string(pvt->exten, ext, sizeof(pvt->exten)); } if (h323debug) ast_log(LOG_DEBUG, "Extension: %s Host: %s\n", pvt->exten, host); @@ -1858,8 +1858,7 @@ static struct rtp_info *external_rtp_create(unsigned call_reference, const char ast_rtp_get_us(pvt->rtp, &us); ast_mutex_unlock(&pvt->lock); - strncpy(info->addr, ast_inet_ntoa(us.sin_addr), sizeof(info->addr)); - info->addr[sizeof(info->addr)-1] = '\0'; + ast_copy_string(info->addr, ast_inet_ntoa(us.sin_addr), sizeof(info->addr)); info->port = ntohs(us.sin_port); if (h323debug) ast_log(LOG_DEBUG, "Sending RTP 'US' %s:%d\n", info->addr, info->port); @@ -2077,8 +2076,8 @@ static call_options_t *setup_incoming_call(call_details_t *cd) /* Decide if we are allowing Gatekeeper routed calls*/ if ((!strcasecmp(cd->sourceIp, gatekeeper)) && (gkroute == -1) && !gatekeeper_disable) { if (!ast_strlen_zero(cd->call_dest_e164)) { - strncpy(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten) - 1); - strncpy(pvt->context, default_context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten)); + ast_copy_string(pvt->context, default_context, sizeof(pvt->context)); } else { alias = find_alias(cd->call_dest_alias, 1); if (!alias) { @@ -2086,8 +2085,8 @@ static call_options_t *setup_incoming_call(call_details_t *cd) oh323_destroy(pvt); return NULL; } - strncpy(pvt->exten, alias->name, sizeof(pvt->exten) - 1); - strncpy(pvt->context, alias->context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->exten, alias->name, sizeof(pvt->exten)); + ast_copy_string(pvt->context, alias->context, sizeof(pvt->context)); } } else { /* Either this call is not from the Gatekeeper @@ -2104,11 +2103,11 @@ static call_options_t *setup_incoming_call(call_details_t *cd) oh323_destroy(pvt); return NULL; } - strncpy(pvt->context, default_context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->context, default_context, sizeof(pvt->context)); if (!ast_strlen_zero(pvt->cd.call_dest_e164)) { - strncpy(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten) - 1); + ast_copy_string(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten)); } else { - strncpy(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten) - 1); + ast_copy_string(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten)); } if (h323debug) ast_log(LOG_DEBUG, "Sending %s@%s to context [%s] extension %s\n", cd->call_source_aliases, cd->sourceIp, pvt->context, pvt->exten); @@ -2122,9 +2121,9 @@ static call_options_t *setup_incoming_call(call_details_t *cd) ASTOBJ_UNREF(user, oh323_destroy_user); return NULL; } - strncpy(pvt->context, default_context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->context, default_context, sizeof(pvt->context)); } else { - strncpy(pvt->context, user->context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->context, user->context, sizeof(pvt->context)); } pvt->exten[0] = 'i'; pvt->exten[1] = '\0'; @@ -2134,16 +2133,16 @@ static call_options_t *setup_incoming_call(call_details_t *cd) return NULL; /* XXX: Hmmm... Why to setup context if we drop connection immediately??? */ } } - strncpy(pvt->context, user->context, sizeof(pvt->context) - 1); + ast_copy_string(pvt->context, user->context, sizeof(pvt->context)); memcpy(&pvt->options, &user->options, sizeof(pvt->options)); pvt->jointcapability = pvt->options.capability; if (!ast_strlen_zero(pvt->cd.call_dest_e164)) { - strncpy(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten) - 1); + ast_copy_string(pvt->exten, cd->call_dest_e164, sizeof(pvt->exten)); } else { - strncpy(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten) - 1); + ast_copy_string(pvt->exten, cd->call_dest_alias, sizeof(pvt->exten)); } if (!ast_strlen_zero(user->accountcode)) { - strncpy(pvt->accountcode, user->accountcode, sizeof(pvt->accountcode) - 1); + ast_copy_string(pvt->accountcode, user->accountcode, sizeof(pvt->accountcode)); } if (user->amaflags) { pvt->amaflags = user->amaflags; @@ -2176,7 +2175,7 @@ static int answer_call(unsigned call_reference, const char *token) return 0; } /* Check if requested extension@context pair exists in the dialplan */ - strncpy(tmp_exten, pvt->exten, sizeof(tmp_exten)); + ast_copy_string(tmp_exten, pvt->exten, sizeof(tmp_exten)); /* Try to find best extension in specified context */ if ((tmp_exten[0] != '\0') && (tmp_exten[1] == '\0')) { @@ -2218,7 +2217,7 @@ static int answer_call(unsigned call_reference, const char *token) } else if ((try_exten != ext_original) && (strcmp(pvt->exten, tmp_exten) != 0)) { if (h323debug) ast_log(LOG_DEBUG, "Going to extension %s@%s because %s@%s isn't exists\n", tmp_exten, pvt->context, pvt->exten, pvt->context); - strncpy(pvt->exten, tmp_exten, sizeof(pvt->exten)); + ast_copy_string(pvt->exten, tmp_exten, sizeof(pvt->exten)); } /* allocate a channel and tell asterisk about it */ @@ -2697,7 +2696,7 @@ static int reload_config(int is_reload) if (!h323_end_point_exist()) { h323_end_point_create(); } - strncpy(_gatekeeper, gatekeeper, sizeof(_gatekeeper)); + ast_copy_string(_gatekeeper, gatekeeper, sizeof(_gatekeeper)); gk_discover = gatekeeper_discover; gk_disable = gatekeeper_disable; memset(&bindaddr, 0, sizeof(bindaddr)); @@ -2708,7 +2707,7 @@ static int reload_config(int is_reload) global_options.dtmfmode = H323_DTMF_RFC2833; global_options.capability = GLOBAL_CAPABILITY; global_options.bridge = 1; /* Do native bridging by default */ - strncpy(default_context, "default", sizeof(default_context) - 1); + strcpy(default_context, "default"); h323_signalling_port = 1720; gatekeeper_disable = 1; gatekeeper_discover = 0; @@ -2781,14 +2780,14 @@ static int reload_config(int is_reload) gatekeeper_discover = 1; } else { gatekeeper_disable = 0; - strncpy(gatekeeper, v->value, sizeof(gatekeeper) - 1); + ast_copy_string(gatekeeper, v->value, sizeof(gatekeeper)); } } else if (!strcasecmp(v->name, "secret")) { - strncpy(secret, v->value, sizeof(secret) - 1); + ast_copy_string(secret, v->value, sizeof(secret)); } else if (!strcasecmp(v->name, "AllowGKRouted")) { gkroute = ast_true(v->value); } else if (!strcasecmp(v->name, "context")) { - strncpy(default_context, v->value, sizeof(default_context) - 1); + ast_copy_string(default_context, v->value, sizeof(default_context)); ast_verbose(VERBOSE_PREFIX_2 "Setting default context to %s\n", default_context); } else if (!strcasecmp(v->name, "UserByAlias")) { userbyalias = ast_true(v->value); diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 5a4ed3cd4..e2a0feddc 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -8579,11 +8579,9 @@ static struct iax2_user *build_user(const char *name, struct ast_variable *v, st ast_string_field_set(user, dbsecret, v->value); } else if (!strcasecmp(v->name, "secret")) { if (!ast_strlen_zero(user->secret)) { - char buf99[100]; - strncpy(buf99,user->secret,100); /* just in case some weirdness happens in the string_field_build */ - ast_string_field_build(user,secret,"%s;%s",buf99,v->value); - /* strncpy(user->secret + strlen(user->secret), ";", sizeof(user->secret) - strlen(user->secret) - 1); - strncpy(user->secret + strlen(user->secret), v->value, sizeof(user->secret) - strlen(user->secret) - 1); */ + char *old = ast_strdupa(user->secret); + + ast_string_field_build(user, secret, "%s;%s", old, v->value); } else ast_string_field_set(user, secret, v->value); } else if (!strcasecmp(v->name, "callerid")) { diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c index d53433ab6..778fd4ca7 100644 --- a/channels/chan_mgcp.c +++ b/channels/chan_mgcp.c @@ -3651,7 +3651,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) } else if (!strcasecmp(v->name, "port")) { gw->addr.sin_port = htons(atoi(v->value)); } else if (!strcasecmp(v->name, "context")) { - strncpy(context, v->value, sizeof(context) - 1); + ast_copy_string(context, v->value, sizeof(context)); } else if (!strcasecmp(v->name, "dtmfmode")) { if (!strcasecmp(v->value, "inband")) dtmfmode = MGCP_DTMF_INBAND; @@ -3673,9 +3673,9 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) ast_callerid_split(v->value, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num)); } } else if (!strcasecmp(v->name, "language")) { - strncpy(language, v->value, sizeof(language)-1); + ast_copy_string(language, v->value, sizeof(language)); } else if (!strcasecmp(v->name, "accountcode")) { - strncpy(accountcode, v->value, sizeof(accountcode)-1); + ast_copy_string(accountcode, v->value, sizeof(accountcode)); } else if (!strcasecmp(v->name, "amaflags")) { y = ast_cdr_amaflags2int(v->value); if (y < 0) { @@ -3684,7 +3684,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) amaflags = y; } } else if (!strcasecmp(v->name, "musiconhold")) { - strncpy(musicclass, v->value, sizeof(musicclass)-1); + ast_copy_string(musicclass, v->value, sizeof(musicclass)); } else if (!strcasecmp(v->name, "callgroup")) { cur_callergroup = ast_get_group(v->value); } else if (!strcasecmp(v->name, "pickupgroup")) { @@ -3698,7 +3698,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) } else if (!strcasecmp(v->name, "canreinvite")) { canreinvite = ast_true(v->value); } else if (!strcasecmp(v->name, "mailbox")) { - strncpy(mailbox, v->value, sizeof(mailbox) -1); + ast_copy_string(mailbox, v->value, sizeof(mailbox)); } else if (!strcasecmp(v->name, "adsi")) { adsi = ast_true(v->value); } else if (!strcasecmp(v->name, "callreturn")) { @@ -3736,19 +3736,18 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) ast_mutex_init(&e->lock); ast_mutex_init(&e->rqnt_queue_lock); ast_mutex_init(&e->cmd_queue_lock); - strncpy(e->name, v->value, sizeof(e->name) - 1); + ast_copy_string(e->name, v->value, sizeof(e->name)); e->needaudit = 1; } - strncpy(gw->wcardep, v->value, sizeof(gw->wcardep) - 1); - /*strncpy(e->name, "aaln/" "*", sizeof(e->name) - 1);*/ + ast_copy_string(gw->wcardep, v->value, sizeof(gw->wcardep)); /* XXX Should we really check for uniqueness?? XXX */ - strncpy(e->accountcode, accountcode, sizeof(e->accountcode) - 1); - strncpy(e->context, context, sizeof(e->context) - 1); - strncpy(e->cid_num, cid_num, sizeof(e->cid_num) - 1); - strncpy(e->cid_name, cid_name, sizeof(e->cid_name) - 1); - strncpy(e->language, language, sizeof(e->language) - 1); - strncpy(e->musicclass, musicclass, sizeof(e->musicclass) - 1); - strncpy(e->mailbox, mailbox, sizeof(e->mailbox) - 1); + ast_copy_string(e->accountcode, accountcode, sizeof(e->accountcode)); + ast_copy_string(e->context, context, sizeof(e->context)); + ast_copy_string(e->cid_num, cid_num, sizeof(e->cid_num)); + ast_copy_string(e->cid_name, cid_name, sizeof(e->cid_name)); + ast_copy_string(e->language, language, sizeof(e->language)); + ast_copy_string(e->musicclass, musicclass, sizeof(e->musicclass)); + ast_copy_string(e->mailbox, mailbox, sizeof(e->mailbox)); snprintf(e->rqnt_ident, sizeof(e->rqnt_ident), "%08lx", ast_random()); e->msgstate = -1; e->amaflags = amaflags; @@ -3836,17 +3835,17 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) ast_mutex_init(&e->lock); ast_mutex_init(&e->rqnt_queue_lock); ast_mutex_init(&e->cmd_queue_lock); - strncpy(e->name, v->value, sizeof(e->name) - 1); + ast_copy_string(e->name, v->value, sizeof(e->name)); e->needaudit = 1; } /* XXX Should we really check for uniqueness?? XXX */ - strncpy(e->accountcode, accountcode, sizeof(e->accountcode) - 1); - strncpy(e->context, context, sizeof(e->context) - 1); - strncpy(e->cid_num, cid_num, sizeof(e->cid_num) - 1); - strncpy(e->cid_name, cid_name, sizeof(e->cid_name) - 1); - strncpy(e->language, language, sizeof(e->language) - 1); - strncpy(e->musicclass, musicclass, sizeof(e->musicclass) - 1); - strncpy(e->mailbox, mailbox, sizeof(e->mailbox)-1); + ast_copy_string(e->accountcode, accountcode, sizeof(e->accountcode)); + ast_copy_string(e->context, context, sizeof(e->context)); + ast_copy_string(e->cid_num, cid_num, sizeof(e->cid_num)); + ast_copy_string(e->cid_name, cid_name, sizeof(e->cid_name)); + ast_copy_string(e->language, language, sizeof(e->language)); + ast_copy_string(e->musicclass, musicclass, sizeof(e->musicclass)); + ast_copy_string(e->mailbox, mailbox, sizeof(e->mailbox)); if (!ast_strlen_zero(mailbox)) { ast_verbose(VERBOSE_PREFIX_3 "Setting mailbox '%s' on %s@%s\n", mailbox, gw->name, e->name); } @@ -3899,7 +3898,7 @@ static struct mgcp_gateway *build_gateway(char *cat, struct ast_variable *v) memset(sub, 0, sizeof(struct mgcp_subchannel)); ast_mutex_init(&sub->lock); ast_mutex_init(&sub->cx_queue_lock); - strncpy(sub->magic, MGCP_SUBCHANNEL_MAGIC, sizeof(sub->magic) - 1); + ast_copy_string(sub->magic, MGCP_SUBCHANNEL_MAGIC, sizeof(sub->magic)); sub->parent = e; sub->id = i; snprintf(sub->txident, sizeof(sub->txident), "%08lx", ast_random()); diff --git a/channels/chan_nbs.c b/channels/chan_nbs.c index 30ee32346..6b06529d6 100644 --- a/channels/chan_nbs.c +++ b/channels/chan_nbs.c @@ -129,10 +129,10 @@ static struct nbs_pvt *nbs_alloc(void *data) { struct nbs_pvt *p; int flags = 0; - char stream[256] = ""; + char stream[256]; char *opts; - strncpy(stream, data, sizeof(stream) - 1); + ast_copy_string(stream, data, sizeof(stream)); if ((opts = strchr(stream, ':'))) { *opts = '\0'; opts++; @@ -153,7 +153,7 @@ static struct nbs_pvt *nbs_alloc(void *data) } else flags = NBS_FLAG_OVERSPEAK; - strncpy(p->stream, stream, sizeof(p->stream) - 1); + ast_copy_string(p->stream, stream, sizeof(p->stream)); p->nbs = nbs_newstream("asterisk", stream, flags); if (!p->nbs) { ast_log(LOG_WARNING, "Unable to allocate new NBS stream '%s' with flags %d\n", stream, flags); @@ -246,8 +246,8 @@ static struct ast_channel *nbs_new(struct nbs_pvt *i, int state) if (state == AST_STATE_RING) tmp->rings = 1; tmp->tech_pvt = i; - strncpy(tmp->context, context, sizeof(tmp->context)-1); - strncpy(tmp->exten, "s", sizeof(tmp->exten) - 1); + ast_copy_string(tmp->context, context, sizeof(tmp->context)); + ast_copy_string(tmp->exten, "s", sizeof(tmp->exten)); ast_string_field_set(tmp, language, ""); i->owner = tmp; i->u = ast_module_user_add(tmp); diff --git a/channels/chan_phone.c b/channels/chan_phone.c index f6380ba63..91854b7ad 100644 --- a/channels/chan_phone.c +++ b/channels/chan_phone.c @@ -312,12 +312,12 @@ static int phone_call(struct ast_channel *ast, char *dest, int timeout) } /* the standard format of ast->callerid is: "name" , but not always complete */ if (ast_strlen_zero(ast->cid.cid_name)) - strncpy(cid.name, DEFAULT_CALLER_ID, sizeof(cid.name) - 1); + strcpy(cid.name, DEFAULT_CALLER_ID); else - strncpy(cid.name, ast->cid.cid_name, sizeof(cid.name) - 1); + ast_copy_string(cid.name, ast->cid.cid_name, sizeof(cid.name)); if (ast->cid.cid_num) - strncpy(cid.number, ast->cid.cid_num, sizeof(cid.number) - 1); + ast_copy_string(cid.number, ast->cid.cid_num, sizeof(cid.number)); p = ast->tech_pvt; @@ -866,11 +866,11 @@ static struct ast_channel *phone_new(struct phone_pvt *i, int state, char *conte if (state == AST_STATE_RING) tmp->rings = 1; tmp->tech_pvt = i; - strncpy(tmp->context, context, sizeof(tmp->context)-1); + ast_copy_string(tmp->context, context, sizeof(tmp->context)); if (!ast_strlen_zero(i->ext)) - strncpy(tmp->exten, i->ext, sizeof(tmp->exten)-1); + ast_copy_string(tmp->exten, i->ext, sizeof(tmp->exten)); else - strncpy(tmp->exten, "s", sizeof(tmp->exten) - 1); + strcpy(tmp->exten, "s"); if (!ast_strlen_zero(i->language)) ast_string_field_set(tmp, language, i->language); @@ -1200,15 +1200,15 @@ static struct phone_pvt *mkif(char *iface, int mode, int txgain, int rxgain) tmp->lastinput = -1; tmp->ministate = 0; memset(tmp->ext, 0, sizeof(tmp->ext)); - strncpy(tmp->language, language, sizeof(tmp->language)-1); - strncpy(tmp->dev, iface, sizeof(tmp->dev)-1); - strncpy(tmp->context, context, sizeof(tmp->context)-1); + ast_copy_string(tmp->language, language, sizeof(tmp->language)); + ast_copy_string(tmp->dev, iface, sizeof(tmp->dev)); + ast_copy_string(tmp->context, context, sizeof(tmp->context)); tmp->next = NULL; tmp->obuflen = 0; tmp->dialtone = 0; tmp->cpt = 0; - strncpy(tmp->cid_num, cid_num, sizeof(tmp->cid_num)-1); - strncpy(tmp->cid_name, cid_name, sizeof(tmp->cid_name)-1); + ast_copy_string(tmp->cid_num, cid_num, sizeof(tmp->cid_num)); + ast_copy_string(tmp->cid_name, cid_name, sizeof(tmp->cid_name)); tmp->txgain = txgain; ioctl(tmp->fd, PHONE_PLAY_VOLUME, tmp->txgain); tmp->rxgain = rxgain; @@ -1379,7 +1379,7 @@ static int load_module(void) } else if (!strcasecmp(v->name, "silencesupression")) { silencesupression = ast_true(v->value); } else if (!strcasecmp(v->name, "language")) { - strncpy(language, v->value, sizeof(language)-1); + ast_copy_string(language, v->value, sizeof(language)); } else if (!strcasecmp(v->name, "callerid")) { ast_callerid_split(v->value, cid_name, sizeof(cid_name), cid_num, sizeof(cid_num)); } else if (!strcasecmp(v->name, "mode")) { @@ -1398,7 +1398,7 @@ static int load_module(void) else ast_log(LOG_WARNING, "Unknown mode: %s\n", v->value); } else if (!strcasecmp(v->name, "context")) { - strncpy(context, v->value, sizeof(context)-1); + ast_copy_string(context, v->value, sizeof(context)); } else if (!strcasecmp(v->name, "format")) { if (!strcasecmp(v->value, "g723.1")) { prefformat = AST_FORMAT_G723_1; diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 039cc5092..d449e4a23 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -8485,7 +8485,7 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi /* This is an attended transfer */ referdata->attendedtransfer = 1; - strncpy(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid)); + ast_copy_string(referdata->replaces_callid, ptr+9, sizeof(referdata->replaces_callid)); ast_uri_decode(referdata->replaces_callid); if ((ptr = strchr(referdata->replaces_callid, ';'))) /* Find options */ { *ptr++ = '\0'; @@ -8532,9 +8532,9 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi if ((urioption = strchr(ptr, ';'))) *urioption++ = '\0'; /* Save the domain for the dial plan */ - strncpy(referdata->refer_to_domain, ptr, sizeof(referdata->refer_to_domain)); + ast_copy_string(referdata->refer_to_domain, ptr, sizeof(referdata->refer_to_domain)); if (urioption) - strncpy(referdata->refer_to_urioption, urioption, sizeof(referdata->refer_to_urioption)); + ast_copy_string(referdata->refer_to_urioption, urioption, sizeof(referdata->refer_to_urioption)); } if ((ptr = strchr(refer_to, ';'))) /* Remove options */ @@ -8559,7 +8559,7 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi S_OR(transferer->context, default_context)); } - strncpy(referdata->refer_to_context, transfer_context, sizeof(referdata->refer_to_context)); + ast_copy_string(referdata->refer_to_context, transfer_context, sizeof(referdata->refer_to_context)); /* Either an existing extension or the parking extension */ if (ast_exists_extension(NULL, transfer_context, refer_to, 1, NULL) ) { diff --git a/main/cdr.c b/main/cdr.c index fb243ff49..ce525e20b 100644 --- a/main/cdr.c +++ b/main/cdr.c @@ -678,7 +678,7 @@ int ast_cdr_appenduserfield(struct ast_channel *chan, const char *userfield) int len = strlen(cdr->userfield); if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) - strncpy(cdr->userfield+len, userfield, sizeof(cdr->userfield) - len - 1); + ast_copy_string(cdr->userfield + len, userfield, sizeof(cdr->userfield) - len); } return 0; diff --git a/main/cli.c b/main/cli.c index d80738d66..5e2d2e180 100644 --- a/main/cli.c +++ b/main/cli.c @@ -1705,8 +1705,7 @@ char **ast_cli_completion_matches(const char *text, const char *word) if (!(retstr = ast_malloc(max_equal + 1))) return NULL; - strncpy(retstr, match_list[1], max_equal); - retstr[max_equal] = '\0'; + ast_copy_string(retstr, match_list[1], max_equal + 1); match_list[0] = retstr; /* ensure that the array is NULL terminated */ diff --git a/main/db.c b/main/db.c index b9c9115c2..ed6fbc683 100644 --- a/main/db.c +++ b/main/db.c @@ -202,8 +202,7 @@ int ast_db_get(const char *family, const char *keys, char *value, int valuelen) if (data.size) { ((char *)data.data)[data.size - 1] = '\0'; /* Make sure that we don't write too much to the dst pointer or we don't read too much from the source pointer */ - strncpy(value, data.data, (valuelen > data.size) ? data.size : valuelen); - value[valuelen - 1] = '\0'; + ast_copy_string(value, data.data, (valuelen > data.size) ? data.size : valuelen); } else { ast_log(LOG_NOTICE, "Strange, empty value for /%s/%s\n", family, keys); } diff --git a/main/image.c b/main/image.c index 377ce9208..3d282428c 100644 --- a/main/image.c +++ b/main/image.c @@ -125,7 +125,7 @@ struct ast_frame *ast_read_image(char *filename, const char *preflang, int forma AST_LIST_TRAVERSE(&imagers, i, list) { if (i->format & format) { char *stringp=NULL; - strncpy(tmp, i->exts, sizeof(tmp)-1); + ast_copy_string(tmp, i->exts, sizeof(tmp)); stringp=tmp; e = strsep(&stringp, "|"); while(e) { diff --git a/main/utils.c b/main/utils.c index ceb049f3a..6e1b4674f 100644 --- a/main/utils.c +++ b/main/utils.c @@ -449,7 +449,7 @@ char *ast_uri_encode(const char *string, char *outbuf, int buflen, int doreserve char *out = NULL; char *buf = NULL; - strncpy(outbuf, string, buflen); + ast_copy_string(outbuf, string, buflen); /* If there's no characters to convert, just go through and don't do anything */ while (*ptr) { diff --git a/pbx/dundi-parser.c b/pbx/dundi-parser.c index 786f0a2ac..14ef9e740 100644 --- a/pbx/dundi-parser.c +++ b/pbx/dundi-parser.c @@ -129,7 +129,7 @@ static void dump_string(char *output, int maxlen, void *value, int len) maxlen--; if (maxlen > len) maxlen = len; - strncpy(output,value, maxlen); + strncpy(output, value, maxlen); output[maxlen] = '\0'; } diff --git a/pbx/pbx_ael.c b/pbx/pbx_ael.c index b68322726..4d32e456e 100644 --- a/pbx/pbx_ael.c +++ b/pbx/pbx_ael.c @@ -823,13 +823,13 @@ static void check_includes(pval *includes) static void check_timerange(pval *p) { - char times[200]; + char *times; char *e; int s1, s2; int e1, e2; + times = ast_strdupa(p->u1.str); - strncpy(times, p->u1.str, sizeof(times)); /* Star is all times */ if (ast_strlen_zero(times) || !strcmp(times, "*")) { return; @@ -891,13 +891,13 @@ static char *days[] = /*! \brief get_dow: Get day of week */ static void check_dow(pval *DOW) { - char dow[200]; + char *dow; char *c; /* The following line is coincidence, really! */ int s, e; - strncpy(dow,DOW->u1.str,sizeof(dow)); - + dow = ast_strdupa(DOW->u1.str); + /* Check for all days */ if (ast_strlen_zero(dow) || !strcmp(dow, "*")) return; @@ -930,12 +930,13 @@ static void check_dow(pval *DOW) static void check_day(pval *DAY) { - char day[200]; + char *day; char *c; /* The following line is coincidence, really! */ int s, e; - strncpy(day,DAY->u1.str,sizeof(day)); + day = ast_strdupa(DAY->u1.str); + /* Check for all days */ if (ast_strlen_zero(day) || !strcmp(day, "*")) { return; @@ -992,12 +993,13 @@ static char *months[] = static void check_month(pval *MON) { - char mon[200]; + char *mon; char *c; /* The following line is coincidence, really! */ int s, e; - strncpy(mon,MON->u1.str,sizeof(mon)); + mon = ast_strdupa(MON->u1.str); + /* Check for all days */ if (ast_strlen_zero(mon) || !strcmp(mon, "*")) return ; @@ -1876,14 +1878,14 @@ int is_empty(char *arg) int option_matches_j( struct argdesc *should, pval *is, struct argapp *app) { struct argchoice *ac; - char opcop[400],*q,*p; + char *opcop,*q,*p; switch (should->dtype) { case ARGD_OPTIONSET: if ( strstr(is->u1.str,"${") ) return 0; /* no checking anything if there's a var reference in there! */ - strncpy(opcop,is->u1.str,sizeof(opcop)); + opcop = ast_strdupa(is->u1.str); for (q=opcop;*q;q++) { /* erase the innards of X(innard) type arguments, so we don't get confused later */ if ( *q == '(' ) { @@ -1938,7 +1940,7 @@ int option_matches_j( struct argdesc *should, pval *is, struct argapp *app) int option_matches( struct argdesc *should, pval *is, struct argapp *app) { struct argchoice *ac; - char opcop[400]; + char *opcop; switch (should->dtype) { case ARGD_STRING: @@ -1973,7 +1975,7 @@ int option_matches( struct argdesc *should, pval *is, struct argapp *app) break; case ARGD_OPTIONSET: - strncpy(opcop,is->u1.str,sizeof(opcop)); + opcop = ast_strdupa(is->u1.str); for (ac=app->opts; ac; ac=ac->next) { if (strlen(ac->name)>1 && strchr(ac->name,'(') == 0 && strcmp(ac->name,is->u1.str) == 0) /* multichar option, no parens, and a match? */ @@ -2065,7 +2067,7 @@ void check_switch_expr(pval *item, struct argapp *apps) { #ifdef AAL_ARGCHECK /* get and clean the variable name */ - char buff1[1024],*p; + char *buff1, *p; struct argapp *a,*a2; struct appsetvar *v,*v2; struct argchoice *c; @@ -2075,7 +2077,8 @@ void check_switch_expr(pval *item, struct argapp *apps) while (p && *p && (*p == ' ' || *p == '\t' || *p == '$' || *p == '{' ) ) p++; - strncpy(buff1,p,sizeof(buff1)); + buff1 = ast_strdupa(p); + while (strlen(buff1) > 0 && ( buff1[strlen(buff1)-1] == '}' || buff1[strlen(buff1)-1] == ' ' || buff1[strlen(buff1)-1] == '\t')) buff1[strlen(buff1)-1] = 0; /* buff1 now contains the variable name */ diff --git a/pbx/pbx_realtime.c b/pbx/pbx_realtime.c index 31abe065f..9ee770c99 100644 --- a/pbx/pbx_realtime.c +++ b/pbx/pbx_realtime.c @@ -97,7 +97,7 @@ static struct ast_variable *realtime_switch_common(const char *table, const char case MODE_MATCH: default: ematch = "exten"; - strncpy(rexten, exten, sizeof(rexten) - 1); + ast_copy_string(rexten, exten, sizeof(rexten)); } var = ast_load_realtime(table, ematch, rexten, "context", context, "priority", pri, NULL); if (!var) { @@ -183,7 +183,7 @@ static int realtime_exec(struct ast_channel *chan, const char *context, const ch for (v = var; v ; v = v->next) { if (!strcasecmp(v->name, "app")) - strncpy(app, v->value, sizeof(app) -1 ); + ast_copy_string(app, v->value, sizeof(app)); else if (!strcasecmp(v->name, "appdata")) tmp = ast_strdupa(v->value); } diff --git a/pbx/pbx_spool.c b/pbx/pbx_spool.c index ec008280b..d9b0eac6a 100644 --- a/pbx/pbx_spool.c +++ b/pbx/pbx_spool.c @@ -166,11 +166,11 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f) printf("'%s' is '%s' at line %d\n", buf, c, lineno); #endif if (!strcasecmp(buf, "channel")) { - strncpy(o->tech, c, sizeof(o->tech) - 1); + ast_copy_string(o->tech, c, sizeof(o->tech)); if ((c2 = strchr(o->tech, '/'))) { *c2 = '\0'; c2++; - strncpy(o->dest, c2, sizeof(o->dest) - 1); + ast_copy_string(o->dest, c2, sizeof(o->dest)); } else { ast_log(LOG_NOTICE, "Channel should be in form Tech/Dest at line %d of %s\n", lineno, fn); o->tech[0] = '\0'; @@ -178,18 +178,18 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f) } else if (!strcasecmp(buf, "callerid")) { ast_callerid_split(c, o->cid_name, sizeof(o->cid_name), o->cid_num, sizeof(o->cid_num)); } else if (!strcasecmp(buf, "application")) { - strncpy(o->app, c, sizeof(o->app) - 1); + ast_copy_string(o->app, c, sizeof(o->app)); } else if (!strcasecmp(buf, "data")) { - strncpy(o->data, c, sizeof(o->data) - 1); + ast_copy_string(o->data, c, sizeof(o->data)); } else if (!strcasecmp(buf, "maxretries")) { if (sscanf(c, "%d", &o->maxretries) != 1) { ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, fn); o->maxretries = 0; } } else if (!strcasecmp(buf, "context")) { - strncpy(o->context, c, sizeof(o->context) - 1); + ast_copy_string(o->context, c, sizeof(o->context)); } else if (!strcasecmp(buf, "extension")) { - strncpy(o->exten, c, sizeof(o->exten) - 1); + ast_copy_string(o->exten, c, sizeof(o->exten)); } else if (!strcasecmp(buf, "priority")) { if ((sscanf(c, "%d", &o->priority) != 1) || (o->priority < 1)) { ast_log(LOG_WARNING, "Invalid priority at line %d of %s\n", lineno, fn); @@ -240,7 +240,7 @@ static int apply_outgoing(struct outgoing *o, char *fn, FILE *f) ast_log(LOG_NOTICE, "Syntax error at line %d of %s\n", lineno, fn); } } - strncpy(o->fn, fn, sizeof(o->fn) - 1); + ast_copy_string(o->fn, fn, sizeof(o->fn)); if (ast_strlen_zero(o->tech) || ast_strlen_zero(o->dest) || (ast_strlen_zero(o->app) && ast_strlen_zero(o->exten))) { ast_log(LOG_WARNING, "At least one of app or extension must be specified, along with tech and dest in file %s\n", fn); return -1; diff --git a/res/res_adsi.c b/res/res_adsi.c index cea172767..b87221237 100644 --- a/res/res_adsi.c +++ b/res/res_adsi.c @@ -1092,10 +1092,9 @@ static void adsi_load(void) if (!sname) sname = name; if (x < ADSI_MAX_SPEED_DIAL) { - /* Up to 20 digits */ ast_copy_string(speeddial[x][0], v->name, sizeof(speeddial[x][0])); - strncpy(speeddial[x][1], name, 18); - strncpy(speeddial[x][2], sname, 7); + ast_copy_string(speeddial[x][1], name, 18); + ast_copy_string(speeddial[x][2], sname, 7); x++; } } -- cgit v1.2.3