diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e64ccba7fe4915cc2db65ece677446c2d6cebeec..412dac3f278ab753102b1f9e067bb27700a4d6f8 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1025,7 +1025,7 @@ static int __sip_pretend_ack(struct sip_pvt *p) return -1; } cur = p->packets; - strncpy(method, p->packets->data, sizeof(method) - 1); + ast_copy_string(method, p->packets->data, sizeof(method)); c = method; while(*c && (*c < 33)) c++; *c = '\0'; @@ -1230,7 +1230,7 @@ static void register_peer_exten(struct sip_peer *peer, int onoff) unsigned char multi[256]=""; char *stringp, *ext; if (!ast_strlen_zero(regcontext)) { - strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1); + ast_copy_string(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi)); stringp = multi; while((ext = strsep(&stringp, "&"))) { if (onoff) @@ -1458,7 +1458,7 @@ static int create_addr(struct sip_pvt *r, char *opeer) char host[256], *hostn; char peer[256]=""; - strncpy(peer, opeer, sizeof(peer) - 1); + ast_copy_string(peer, opeer, sizeof(peer)); port = strchr(peer, ':'); if (port) { *port = '\0'; @@ -1481,16 +1481,16 @@ static int create_addr(struct sip_pvt *r, char *opeer) ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE)); ast_rtp_setnat(r->vrtp, (ast_test_flag(r, SIP_NAT) & SIP_NAT_ROUTE)); } - strncpy(r->peername, p->username, sizeof(r->peername)-1); - strncpy(r->authname, p->username, sizeof(r->authname)-1); - strncpy(r->username, p->username, sizeof(r->username)-1); - strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1); - strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1); - strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1); - strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1); + ast_copy_string(r->peername, p->username, sizeof(r->peername)); + ast_copy_string(r->authname, p->username, sizeof(r->authname)); + ast_copy_string(r->username, p->username, sizeof(r->username)); + ast_copy_string(r->peersecret, p->secret, sizeof(r->peersecret)); + ast_copy_string(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)); + ast_copy_string(r->tohost, p->tohost, sizeof(r->tohost)); + ast_copy_string(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)); if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) { if ((callhost = strchr(r->callid, '@'))) { - strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2); + ast_copy_string(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2); } } if (ast_strlen_zero(r->tohost)) { @@ -1500,9 +1500,9 @@ static int create_addr(struct sip_pvt *r, char *opeer) ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr); } if (!ast_strlen_zero(p->fromdomain)) - strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1); + ast_copy_string(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)); if (!ast_strlen_zero(p->fromuser)) - strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1); + ast_copy_string(r->fromuser, p->fromuser, sizeof(r->fromuser)); r->maxtime = p->maxms; r->callgroup = p->callgroup; r->pickupgroup = p->pickupgroup; @@ -1510,7 +1510,7 @@ static int create_addr(struct sip_pvt *r, char *opeer) r->noncodeccapability |= AST_RTP_DTMF; else r->noncodeccapability &= ~AST_RTP_DTMF; - strncpy(r->context, p->context,sizeof(r->context)-1); + ast_copy_string(r->context, p->context,sizeof(r->context)); if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) && (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) { if (p->addr.sin_addr.s_addr) { @@ -1544,7 +1544,7 @@ static int create_addr(struct sip_pvt *r, char *opeer) } hp = ast_gethostbyname(hostn, &ahp); if (hp) { - strncpy(r->tohost, peer, sizeof(r->tohost) - 1); + ast_copy_string(r->tohost, peer, sizeof(r->tohost)); memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr)); r->sa.sin_port = htons(portno); memcpy(&r->recv, &r->sa, sizeof(r->recv)); @@ -1765,7 +1765,7 @@ static int update_user_counter(struct sip_pvt *fup, int event) if (!ast_test_flag(fup, SIP_CALL_LIMIT)) return 0; - strncpy(name, fup->username, sizeof(name) - 1); + ast_copy_string(name, fup->username, sizeof(name)); /* Check the list of users */ u = find_user(name, 1); @@ -1779,7 +1779,7 @@ static int update_user_counter(struct sip_pvt *fup, int event) if (p) { inuse = &p->inUse; incominglimit = &p->incominglimit; - strncpy(name, fup->peername, sizeof(name) -1); + ast_copy_string(name, fup->peername, sizeof(name)); } else { ast_log(LOG_DEBUG, "%s is not a local user\n", name); return 0; @@ -2251,19 +2251,19 @@ static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title) tmp->pickupgroup = i->pickupgroup; tmp->cid.cid_pres = i->callingpres; if (!ast_strlen_zero(i->accountcode)) - strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1); + ast_copy_string(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)); if (i->amaflags) tmp->amaflags = i->amaflags; if (!ast_strlen_zero(i->language)) - strncpy(tmp->language, i->language, sizeof(tmp->language)-1); + ast_copy_string(tmp->language, i->language, sizeof(tmp->language)); if (!ast_strlen_zero(i->musicclass)) - strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1); + ast_copy_string(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)); i->owner = tmp; ast_mutex_lock(&usecnt_lock); usecnt++; ast_mutex_unlock(&usecnt_lock); - strncpy(tmp->context, i->context, sizeof(tmp->context)-1); - strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1); + ast_copy_string(tmp->context, i->context, sizeof(tmp->context)); + ast_copy_string(tmp->exten, i->exten, sizeof(tmp->exten)); if (!ast_strlen_zero(i->cid_num)) tmp->cid.cid_num = strdup(i->cid_num); if (!ast_strlen_zero(i->cid_name)) @@ -2558,12 +2558,12 @@ static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useg ast_rtp_setnat(p->vrtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)); } - strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1); + ast_copy_string(p->fromdomain, default_fromdomain, sizeof(p->fromdomain)); build_via(p, p->via, sizeof(p->via)); if (!callid) build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain); else - strncpy(p->callid, callid, sizeof(p->callid) - 1); + ast_copy_string(p->callid, callid, sizeof(p->callid)); ast_copy_flags(p, (&global_flags), SIP_PROMISCREDIR | SIP_TRUSTRPID | SIP_DTMF | SIP_REINVITE | SIP_PROG_INBAND | SIP_OSPAUTH); /* Assign default music on hold class */ strcpy(p->musicclass, global_musicclass); @@ -2603,15 +2603,15 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si SIP implementations, and thus Asterisk does not enable this behavior by default. Short version: You'll need this option to support conferencing on the pingtel */ - strncpy(tmp, req->header[0], sizeof(tmp) - 1); + ast_copy_string(tmp, req->header[0], sizeof(tmp)); cmd = tmp; c = strchr(tmp, ' '); if (c) *c = '\0'; if (!strcasecmp(cmd, "SIP/2.0")) - strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, "To"), sizeof(tmp)); else - strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, "From"), sizeof(tmp)); tag = ast_strcasestr(tmp, "tag="); if (tag) { tag += 4; @@ -2657,7 +2657,7 @@ static int sip_register(char *value, int lineno) if (!value) return -1; - strncpy(copy, value, sizeof(copy)-1); + ast_copy_string(copy, value, sizeof(copy)); stringp=copy; username = stringp; hostname = strrchr(stringp, '@'); @@ -2695,15 +2695,15 @@ static int sip_register(char *value, int lineno) memset(reg, 0, sizeof(struct sip_registry)); regobjs++; ASTOBJ_INIT(reg); - strncpy(reg->contact, contact, sizeof(reg->contact) - 1); + ast_copy_string(reg->contact, contact, sizeof(reg->contact)); if (username) - strncpy(reg->username, username, sizeof(reg->username)-1); + ast_copy_string(reg->username, username, sizeof(reg->username)); if (hostname) - strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1); + ast_copy_string(reg->hostname, hostname, sizeof(reg->hostname)); if (authuser) - strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1); + ast_copy_string(reg->authuser, authuser, sizeof(reg->authuser)); if (secret) - strncpy(reg->secret, secret, sizeof(reg->secret)-1); + ast_copy_string(reg->secret, secret, sizeof(reg->secret)); reg->expire = -1; reg->timeout = -1; reg->refresh = default_expiry; @@ -3207,7 +3207,7 @@ static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct s oh = __get_header(orig, field, &start); if (!ast_strlen_zero(oh)) { /* Strip ;rport */ - strncpy(tmp, oh, sizeof(tmp) - 1); + ast_copy_string(tmp, oh, sizeof(tmp)); oh = strstr(tmp, ";rport"); if (oh) { end = strchr(oh + 1, ';'); @@ -3254,7 +3254,7 @@ static void add_route(struct sip_request *req, struct sip_route *route) --rem; } *p++ = '<'; - strncpy(p, route->hop, rem); p += n; + ast_copy_string(p, route->hop, rem); p += n; *p++ = '>'; rem -= (n+2); route = route->next; @@ -3292,7 +3292,7 @@ static void set_destination(struct sip_pvt *p, char *uri) } hn = strcspn(h, ":;>"); if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1; - strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */ + ast_copy_string(hostname, h, hn); h+=hn; /* Is "port" present? if not default to 5060 */ @@ -3310,7 +3310,7 @@ static void set_destination(struct sip_pvt *p, char *uri) maddr += 6; hn = strspn(maddr, "0123456789."); if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1; - strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */ + ast_copy_string(hostname, maddr, hn); } hp = ast_gethostbyname(hostname, &ahp); @@ -3382,7 +3382,7 @@ static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, stru else if (p->tag && !ast_test_flag(p, SIP_OUTGOING)) snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag); else { - strncpy(newto, ot, sizeof(newto) - 1); + ast_copy_string(newto, ot, sizeof(newto)); newto[sizeof(newto) - 1] = '\0'; } ot = newto; @@ -3452,9 +3452,9 @@ static int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, in } else { /* We have no URI, use To: or From: header as URI (depending on direction) */ if (ast_test_flag(p, SIP_OUTGOING)) - strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1); + ast_copy_string(stripped, get_header(orig, "To"), sizeof(stripped)); else - strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1); + ast_copy_string(stripped, get_header(orig, "From"), sizeof(stripped)); c = strchr(stripped, '<'); if (c) @@ -3708,11 +3708,11 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p) if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) { strncat(m, costr, sizeof(m) - strlen(m) - 1); snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec)); - strncpy(a, costr, sizeof(a) - 1); + ast_copy_string(a, costr, sizeof(a)); } else { strncat(m2, costr, sizeof(m2) - strlen(m2) - 1); snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec)); - strncpy(a2, costr, sizeof(a2) - 1); + ast_copy_string(a2, costr, sizeof(a2)); } } alreadysent |= p->prefcodec; @@ -3937,7 +3937,7 @@ static void extract_uri(struct sip_pvt *p, struct sip_request *req) { char stripped[256]=""; char *c, *n; - strncpy(stripped, get_header(req, "Contact"), sizeof(stripped) - 1); + ast_copy_string(stripped, get_header(req, "Contact"), sizeof(stripped)); c = strchr(stripped, '<'); if (c) c++; @@ -3950,7 +3950,7 @@ static void extract_uri(struct sip_pvt *p, struct sip_request *req) if (n) *n = '\0'; if (c && !ast_strlen_zero(c)) - strncpy(p->uri, c, sizeof(p->uri) - 1); + ast_copy_string(p->uri, c, sizeof(p->uri)); } /*--- build_contact: Build contact header - the contact header we send out ---*/ @@ -4022,13 +4022,13 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho if (!ast_strlen_zero(p->fromuser)) l = p->fromuser; else /* Save for any further attempts */ - strncpy(p->fromuser, l, sizeof(p->fromuser) - 1); + ast_copy_string(p->fromuser, l, sizeof(p->fromuser)); /* Allow user to be overridden */ if (!ast_strlen_zero(p->fromname)) n = p->fromname; else /* Save for any further attempts */ - strncpy(p->fromname, n, sizeof(p->fromname) - 1); + ast_copy_string(p->fromname, n, sizeof(p->fromname)); if ((ourport != 5060) && ast_strlen_zero(p->fromdomain)) snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d>;tag=as%08x", n, l, ast_strlen_zero(p->fromdomain) ? ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip) : p->fromdomain, ourport, p->tag); @@ -4038,7 +4038,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho /* If we're calling a registred SIP peer, use the fullcontact to dial to the peer */ if (!ast_strlen_zero(p->fullcontact)) { /* If we have full contact, trust it */ - strncpy(invite, p->fullcontact, sizeof(invite) - 1); + ast_copy_string(invite, p->fullcontact, sizeof(invite)); /* Otherwise, use the username while waiting for registration */ } else if (!ast_strlen_zero(p->username)) { if (ntohs(p->sa.sin_port) != DEFAULT_SIP_PORT) { @@ -4051,7 +4051,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho } else { snprintf(invite, sizeof(invite), "sip:%s%s", p->tohost, urioptions); } - strncpy(p->uri, invite, sizeof(p->uri) - 1); + ast_copy_string(p->uri, invite, sizeof(p->uri)); /* If there is a VXML URL append it to the SIP URL */ if (vxml_url) { @@ -4067,7 +4067,7 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho /* SLD: FIXME?: do Route: here too? I think not cos this is the first request. * OTOH, then we won't have anything in p->route anyway */ add_header(req, "From", from); - strncpy(p->exten, l, sizeof(p->exten) - 1); + ast_copy_string(p->exten, l, sizeof(p->exten)); build_contact(p); add_header(req, "To", to); add_header(req, "Contact", p->our_contact); @@ -4189,7 +4189,7 @@ static int transmit_state_notify(struct sip_pvt *p, int state, int full) memset(from, 0, sizeof(from)); memset(to, 0, sizeof(to)); - strncpy(from, get_header(&p->initreq, "From"), sizeof(from)-1); + ast_copy_string(from, get_header(&p->initreq, "From"), sizeof(from)); c = ditch_braces(from); if (strncmp(c, "sip:", 4)) { @@ -4204,7 +4204,7 @@ static int transmit_state_notify(struct sip_pvt *p, int state, int full) reqprep(&req, p, SIP_NOTIFY, 0, 1); if (p->subscribed == 1) { - strncpy(to, get_header(&p->initreq, "To"), sizeof(to)-1); + ast_copy_string(to, get_header(&p->initreq, "To"), sizeof(to)); c = ditch_braces(to); if (strncmp(c, "sip:", 4)) { @@ -4349,7 +4349,7 @@ static int transmit_notify_with_sipfrag(struct sip_pvt *p, int cseq) add_header(&req, "Subscription-state", "terminated;reason=noresource"); add_header(&req, "Content-Type", "message/sipfrag;version=2.0"); - strncpy(tmp, "SIP/2.0 200 OK", sizeof(tmp) - 1); + ast_copy_string(tmp, "SIP/2.0 200 OK", sizeof(tmp)); snprintf(clen, sizeof(clen), "%d", (int)(strlen(tmp))); add_header(&req, "Content-Length", clen); add_line(&req, tmp); @@ -4504,32 +4504,32 @@ static int transmit_register(struct sip_registry *r, int sipmethod, char *auth, } /* Copy back Call-ID in case create_addr changed it */ - strncpy(r->callid, p->callid, sizeof(r->callid) - 1); + ast_copy_string(r->callid, p->callid, sizeof(r->callid)); if (r->portno) p->sa.sin_port = htons(r->portno); ast_set_flag(p, SIP_OUTGOING); /* Registration is outgoing call */ r->call=p; /* Save pointer to SIP packet */ p->registry=ASTOBJ_REF(r); /* Add pointer to registry in packet */ if (!ast_strlen_zero(r->secret)) /* Secret (password) */ - strncpy(p->peersecret, r->secret, sizeof(p->peersecret)-1); + ast_copy_string(p->peersecret, r->secret, sizeof(p->peersecret)); if (!ast_strlen_zero(r->md5secret)) - strncpy(p->peermd5secret, r->md5secret, sizeof(p->peermd5secret)-1); + ast_copy_string(p->peermd5secret, r->md5secret, sizeof(p->peermd5secret)); /* User name in this realm - if authuser is set, use that, otherwise use username */ if (!ast_strlen_zero(r->authuser)) { - strncpy(p->peername, r->authuser, sizeof(p->peername)-1); - strncpy(p->authname, r->authuser, sizeof(p->authname)-1); + ast_copy_string(p->peername, r->authuser, sizeof(p->peername)); + ast_copy_string(p->authname, r->authuser, sizeof(p->authname)); } else { if (!ast_strlen_zero(r->username)) { - strncpy(p->peername, r->username, sizeof(p->peername)-1); - strncpy(p->authname, r->username, sizeof(p->authname)-1); - strncpy(p->fromuser, r->username, sizeof(p->fromuser)-1); + ast_copy_string(p->peername, r->username, sizeof(p->peername)); + ast_copy_string(p->authname, r->username, sizeof(p->authname)); + ast_copy_string(p->fromuser, r->username, sizeof(p->fromuser)); } } if (!ast_strlen_zero(r->username)) - strncpy(p->username, r->username, sizeof(p->username)-1); + ast_copy_string(p->username, r->username, sizeof(p->username)); /* Save extension in packet */ - strncpy(p->exten, r->contact, sizeof(p->exten) - 1); + ast_copy_string(p->exten, r->contact, sizeof(p->exten)); /* check which address we should use in our contact header @@ -4566,7 +4566,7 @@ static int transmit_register(struct sip_registry *r, int sipmethod, char *auth, } snprintf(addr, sizeof(addr), "sip:%s", p->tohost); - strncpy(p->uri, addr, sizeof(p->uri) - 1); + ast_copy_string(p->uri, addr, sizeof(p->uri)); p->branch ^= rand(); @@ -4594,11 +4594,11 @@ static int transmit_register(struct sip_registry *r, int sipmethod, char *auth, /* We have auth data to reuse, build a digest header! */ if (sipdebug) ast_log(LOG_DEBUG, " >>> Re-using Auth data for %s@%s\n", r->username, r->hostname); - strncpy(p->realm, r->realm, sizeof(p->realm)-1); - strncpy(p->nonce, r->nonce, sizeof(p->nonce)-1); - strncpy(p->domain, r->domain, sizeof(p->domain)-1); - strncpy(p->opaque, r->opaque, sizeof(p->opaque)-1); - strncpy(p->qop, r->qop, sizeof(p->qop)-1); + ast_copy_string(p->realm, r->realm, sizeof(p->realm)); + ast_copy_string(p->nonce, r->nonce, sizeof(p->nonce)); + ast_copy_string(p->domain, r->domain, sizeof(p->domain)); + ast_copy_string(p->opaque, r->opaque, sizeof(p->opaque)); + ast_copy_string(p->qop, r->qop, sizeof(p->qop)); memset(digest,0,sizeof(digest)); build_reply_digest(p, sipmethod, digest, sizeof(digest)); @@ -4642,9 +4642,9 @@ static int transmit_refer(struct sip_pvt *p, const char *dest) of = get_header(&p->initreq, "To"); else of = get_header(&p->initreq, "From"); - strncpy(from, of, sizeof(from) - 1); + ast_copy_string(from, of, sizeof(from)); of = ditch_braces(from); - strncpy(p->from,of,sizeof(p->from) - 1); + ast_copy_string(p->from,of,sizeof(p->from)); if (strncmp(of, "sip:", 4)) { ast_log(LOG_NOTICE, "From address missing 'sip:', using it anyway\n"); } else @@ -4661,8 +4661,8 @@ static int transmit_refer(struct sip_pvt *p, const char *dest) } /* save in case we get 407 challenge */ - strncpy(p->refer_to, referto, sizeof(p->refer_to) - 1); - strncpy(p->referred_by, p->our_contact, sizeof(p->referred_by) - 1); + ast_copy_string(p->refer_to, referto, sizeof(p->refer_to)); + ast_copy_string(p->referred_by, p->our_contact, sizeof(p->referred_by)); reqprep(&req, p, SIP_REFER, 0, 1); add_header(&req, "Refer-To", referto); @@ -4775,9 +4775,9 @@ static void reg_source_db(struct sip_peer *peer) return; if (username) - strncpy(peer->username, username, sizeof(peer->username)-1); + ast_copy_string(peer->username, username, sizeof(peer->username)); if (contact) - strncpy(peer->fullcontact, contact, sizeof(peer->fullcontact)-1); + ast_copy_string(peer->fullcontact, contact, sizeof(peer->fullcontact)); if (option_verbose > 2) ast_verbose(VERBOSE_PREFIX_3 "SIP Seeding peer from astdb: '%s' at %s@%s:%d for %d\n", @@ -4811,7 +4811,7 @@ static int parse_ok_contact(struct sip_pvt *pvt, struct sip_request *req) struct sockaddr_in oldsin; /* Look for brackets */ - strncpy(contact, get_header(req, "Contact"), sizeof(contact) - 1); + ast_copy_string(contact, get_header(req, "Contact"), sizeof(contact)); c = contact; if ((n=strchr(c, '<'))) { @@ -4824,10 +4824,10 @@ static int parse_ok_contact(struct sip_pvt *pvt, struct sip_request *req) /* Save full contact to call pvt for later bye or re-invite */ - strncpy(pvt->fullcontact, c, sizeof(pvt->fullcontact) - 1); + ast_copy_string(pvt->fullcontact, c, sizeof(pvt->fullcontact)); /* Save URI for later ACKs, BYE or RE-invites */ - strncpy(pvt->okcontacturi, c, sizeof(pvt->okcontacturi) - 1); + ast_copy_string(pvt->okcontacturi, c, sizeof(pvt->okcontacturi)); /* Make sure it's a SIP URL */ if (strncasecmp(c, "sip:", 4)) { @@ -4905,7 +4905,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req } } /* Look for brackets */ - strncpy(contact, get_header(req, "Contact"), sizeof(contact) - 1); + ast_copy_string(contact, get_header(req, "Contact"), sizeof(contact)); c = contact; if ((n=strchr(c, '<'))) { @@ -4932,7 +4932,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Unregistered\r\n", p->name); return 0; } - strncpy(p->fullcontact, c, sizeof(p->fullcontact) - 1); + ast_copy_string(p->fullcontact, c, sizeof(p->fullcontact)); /* For the 200 OK, we should use the received contact */ snprintf(pvt->our_contact, sizeof(pvt->our_contact) - 1, "<%s>", c); /* Make sure it's a SIP URL */ @@ -4979,7 +4979,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req } if (c) /* Overwrite the default username from config at registration */ - strncpy(p->username, c, sizeof(p->username) - 1); + ast_copy_string(p->username, c, sizeof(p->username)); else p->username[0] = '\0'; @@ -5005,7 +5005,7 @@ static int parse_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_req /* Save User agent */ useragent = get_header(req, "User-Agent"); if(useragent && strcasecmp(useragent, p->useragent)) { - strncpy(p->useragent, useragent, sizeof(p->useragent) - 1); + ast_copy_string(p->useragent, useragent, sizeof(p->useragent)); if (option_verbose > 3) { ast_verbose(VERBOSE_PREFIX_3 "Saved useragent \"%s\" for peer %s\n",p->useragent,p->name); } @@ -5075,8 +5075,7 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward /* Make a struct route */ thishop = (struct sip_route *)malloc(sizeof(struct sip_route)+len+1); if (thishop) { - strncpy(thishop->hop, rr, len); /* safe */ - thishop->hop[len] = '\0'; + ast_copy_string(thishop->hop, rr, len); ast_log(LOG_DEBUG, "build_route: Record-Route hop: <%s>\n", thishop->hop); /* Link in */ if (backwards) { @@ -5115,8 +5114,7 @@ static void build_route(struct sip_pvt *p, struct sip_request *req, int backward } thishop = (struct sip_route *)malloc(sizeof(struct sip_route)+len+1); if (thishop) { - strncpy(thishop->hop, c, len); /* safe */ - thishop->hop[len] = '\0'; + ast_copy_string(thishop->hop, c, len); thishop->next = NULL; /* Goes at the end */ if (tail) @@ -5221,7 +5219,7 @@ static int check_auth(struct sip_pvt *p, struct sip_request *req, char *randdata char *resp_uri =""; /* Find their response among the mess that we'r sent for comparison */ - strncpy(tmp, authtoken, sizeof(tmp) - 1); + ast_copy_string(tmp, authtoken, sizeof(tmp)); c = tmp; while(c) { @@ -5314,7 +5312,7 @@ static int register_verify(struct sip_pvt *p, struct sockaddr_in *sin, struct si t++; *t = '\0'; - strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, "To"), sizeof(tmp)); c = ditch_braces(tmp); /* Ditch ;user=phone */ name = strchr(c, ';'); @@ -5331,7 +5329,7 @@ static int register_verify(struct sip_pvt *p, struct sockaddr_in *sin, struct si c = strchr(name, '@'); if (c) *c = '\0'; - strncpy(p->exten, name, sizeof(p->exten) - 1); + ast_copy_string(p->exten, name, sizeof(p->exten)); build_contact(p); peer = find_peer(name, NULL, 1); if (!(peer && ast_apply_ha(peer->ha, sin))) { @@ -5395,7 +5393,7 @@ static int get_rdnis(struct sip_pvt *p, struct sip_request *oreq) req = oreq; if (!req) req = &p->initreq; - strncpy(tmp, get_header(req, "Diversion"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, "Diversion"), sizeof(tmp)); if (ast_strlen_zero(tmp)) return 0; c = ditch_braces(tmp); @@ -5409,7 +5407,7 @@ static int get_rdnis(struct sip_pvt *p, struct sip_request *oreq) } if (sip_debug_test_pvt(p)) ast_verbose("RDNIS is %s\n", c); - strncpy(p->rdnis, c, sizeof(p->rdnis) - 1); + ast_copy_string(p->rdnis, c, sizeof(p->rdnis)); return 0; } @@ -5425,10 +5423,10 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) if (!req) req = &p->initreq; if (req->rlPart2) - strncpy(tmp, req->rlPart2, sizeof(tmp) - 1); + ast_copy_string(tmp, req->rlPart2, sizeof(tmp)); c = ditch_braces(tmp); - strncpy(tmpf, get_header(req, "From"), sizeof(tmpf) - 1); + ast_copy_string(tmpf, get_header(req, "From"), sizeof(tmpf)); fr = ditch_braces(tmpf); if (strncmp(c, "sip:", 4)) { @@ -5447,7 +5445,7 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) if ((a = strchr(c, '@'))) { *a = '\0'; a++; - strncpy(p->domain, a, sizeof(p->domain)-1); + ast_copy_string(p->domain, a, sizeof(p->domain)); } if ((a = strchr(c, ';'))) { *a = '\0'; @@ -5457,9 +5455,9 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) *a = '\0'; if ((a = strchr(fr, '@'))) { *a = '\0'; - strncpy(p->fromdomain, a + 1, sizeof(p->fromdomain) - 1); + ast_copy_string(p->fromdomain, a + 1, sizeof(p->fromdomain)); } else - strncpy(p->fromdomain, fr, sizeof(p->fromdomain) - 1); + ast_copy_string(p->fromdomain, fr, sizeof(p->fromdomain)); } if (pedanticsipchecking) url_decode(c); @@ -5468,7 +5466,7 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) if (ast_exists_extension(NULL, p->context, c, 1, fr) || !strcmp(c, ast_pickup_ext())) { if (!oreq) - strncpy(p->exten, c, sizeof(p->exten) - 1); + ast_copy_string(p->exten, c, sizeof(p->exten)); return 0; } @@ -5622,9 +5620,9 @@ static int get_refer_info(struct sip_pvt *sip_pvt, struct sip_request *outgoing_ /* This is a supervised transfer */ ast_log(LOG_DEBUG,"Assigning Replace-Call-ID Info %s to REPLACE_CALL_ID\n",replace_callid); - strncpy(sip_pvt->refer_to, "", sizeof(sip_pvt->refer_to) - 1); - strncpy(sip_pvt->referred_by, "", sizeof(sip_pvt->referred_by) - 1); - strncpy(sip_pvt->refer_contact, "", sizeof(sip_pvt->refer_contact) - 1); + ast_copy_string(sip_pvt->refer_to, "", sizeof(sip_pvt->refer_to)); + ast_copy_string(sip_pvt->referred_by, "", sizeof(sip_pvt->referred_by)); + ast_copy_string(sip_pvt->refer_contact, "", sizeof(sip_pvt->refer_contact)); sip_pvt->refer_call = NULL; if ((sip_pvt_ptr = get_sip_pvt_byid_locked(replace_callid))) { sip_pvt->refer_call = sip_pvt_ptr; @@ -5646,10 +5644,10 @@ static int get_refer_info(struct sip_pvt *sip_pvt, struct sip_request *outgoing_ ast_log(LOG_DEBUG,"Assigning Extension %s to REFER-TO\n", refer_to); ast_log(LOG_DEBUG,"Assigning Extension %s to REFERRED-BY\n", referred_by); ast_log(LOG_DEBUG,"Assigning Contact Info %s to REFER_CONTACT\n", h_contact); - strncpy(sip_pvt->refer_to, refer_to, sizeof(sip_pvt->refer_to) - 1); - strncpy(sip_pvt->referred_by, referred_by, sizeof(sip_pvt->referred_by) - 1); + ast_copy_string(sip_pvt->refer_to, refer_to, sizeof(sip_pvt->refer_to)); + ast_copy_string(sip_pvt->referred_by, referred_by, sizeof(sip_pvt->referred_by)); if (h_contact) { - strncpy(sip_pvt->refer_contact, h_contact, sizeof(sip_pvt->refer_contact) - 1); + ast_copy_string(sip_pvt->refer_contact, h_contact, sizeof(sip_pvt->refer_contact)); } sip_pvt->refer_call = NULL; if((chan = sip_pvt->owner) && (peer = ast_bridged_channel(sip_pvt->owner))) { @@ -5673,7 +5671,7 @@ static int get_also_info(struct sip_pvt *p, struct sip_request *oreq) req = oreq; if (!req) req = &p->initreq; - strncpy(tmp, get_header(req, "Also"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, "Also"), sizeof(tmp)); c = ditch_braces(tmp); @@ -5694,9 +5692,9 @@ static int get_also_info(struct sip_pvt *p, struct sip_request *oreq) if (ast_exists_extension(NULL, p->context, c, 1, NULL)) { /* This is an unsupervised transfer */ ast_log(LOG_DEBUG,"Assigning Extension %s to REFER-TO\n", c); - strncpy(p->refer_to, c, sizeof(p->refer_to) - 1); - strncpy(p->referred_by, "", sizeof(p->referred_by) - 1); - strncpy(p->refer_contact, "", sizeof(p->refer_contact) - 1); + ast_copy_string(p->refer_to, c, sizeof(p->refer_to)); + ast_copy_string(p->referred_by, "", sizeof(p->referred_by)); + ast_copy_string(p->refer_contact, "", sizeof(p->refer_contact)); p->refer_call = NULL; return 0; } else if (ast_canmatch_extension(NULL, p->context, c, 1, NULL)) { @@ -5716,7 +5714,7 @@ static int check_via(struct sip_pvt *p, struct sip_request *req) struct ast_hostent ahp; memset(via, 0, sizeof(via)); - strncpy(via, get_header(req, "Via"), sizeof(via) - 1); + ast_copy_string(via, get_header(req, "Via"), sizeof(via)); c = strchr(via, ';'); if (c) *c = '\0'; @@ -5777,7 +5775,7 @@ static char *get_calleridname(char *input,char *output, size_t outputsize) if (bytes > maxbytes) { bytes = maxbytes; } - strncpy(output, tmp+1, bytes); /* safe */ + ast_copy_string(output, tmp+1, bytes); /* safe */ output[maxbytes] = '\0'; } else { /* we didn't find "name" */ @@ -5793,7 +5791,7 @@ static char *get_calleridname(char *input,char *output, size_t outputsize) if (bytes > maxbytes) { bytes = maxbytes; } - strncpy(output, input, bytes); /* safe */ + ast_copy_string(output, input, bytes); /* safe */ output[maxbytes] = '\0'; } else @@ -5819,7 +5817,7 @@ static int get_rpid_num(char *input,char *output, int maxlen) start++; /* we found "number" */ - strncpy(output,start,maxlen-1); + ast_copy_string(output,start,maxlen); output[maxlen-1] = '\0'; end = strchr(output,'@'); @@ -5854,7 +5852,7 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme t++; *t = '\0'; of = get_header(req, "From"); - strncpy(from, of, sizeof(from) - 1); + ast_copy_string(from, of, sizeof(from)); memset(calleridname,0,sizeof(calleridname)); get_calleridname(from, calleridname, sizeof(calleridname)); @@ -5868,7 +5866,7 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme t = uri; if (!strncmp(t, "sip:", 4)) t+= 4; - strncpy(p->exten, t, sizeof(p->exten) - 1); + ast_copy_string(p->exten, t, sizeof(p->exten)); t = strchr(p->exten, '@'); if (t) *t = '\0'; @@ -5884,10 +5882,10 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme *c = '\0'; if ((c = strchr(of, ':'))) *c = '\0'; - strncpy(p->cid_num, of, sizeof(p->cid_num) - 1); + ast_copy_string(p->cid_num, of, sizeof(p->cid_num)); ast_shrink_phone_number(p->cid_num); if (*calleridname) - strncpy(p->cid_name, calleridname, sizeof(p->cid_name) - 1); + ast_copy_string(p->cid_name, calleridname, sizeof(p->cid_name)); if (ast_strlen_zero(of)) return 0; user = find_user(of, 1); @@ -5905,8 +5903,8 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme /* replace callerid if rpid found, and not restricted */ if(!ast_strlen_zero(rpid_num) && ast_test_flag(p, SIP_TRUSTRPID)) { if (*calleridname) - strncpy(p->cid_name, calleridname, sizeof(p->cid_name) - 1); - strncpy(p->cid_num, rpid_num, sizeof(p->cid_num) - 1); + ast_copy_string(p->cid_name, calleridname, sizeof(p->cid_name)); + ast_copy_string(p->cid_num, rpid_num, sizeof(p->cid_num)); ast_shrink_phone_number(p->cid_num); } @@ -5925,19 +5923,19 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme if (user->incominglimit) ast_set_flag(p, SIP_CALL_LIMIT); if (!ast_strlen_zero(user->context)) - strncpy(p->context, user->context, sizeof(p->context) - 1); + ast_copy_string(p->context, user->context, sizeof(p->context)); if (!ast_strlen_zero(user->cid_num) && !ast_strlen_zero(p->cid_num)) { - strncpy(p->cid_num, user->cid_num, sizeof(p->cid_num) - 1); + ast_copy_string(p->cid_num, user->cid_num, sizeof(p->cid_num)); ast_shrink_phone_number(p->cid_num); } if (!ast_strlen_zero(user->cid_name) && !ast_strlen_zero(p->cid_num)) - strncpy(p->cid_name, user->cid_name, sizeof(p->cid_name) - 1); - strncpy(p->username, user->name, sizeof(p->username) - 1); - strncpy(p->peersecret, user->secret, sizeof(p->peersecret) - 1); - strncpy(p->peermd5secret, user->md5secret, sizeof(p->peermd5secret) - 1); - strncpy(p->accountcode, user->accountcode, sizeof(p->accountcode) -1); - strncpy(p->language, user->language, sizeof(p->language) -1); - strncpy(p->musicclass, user->musicclass, sizeof(p->musicclass) -1); + ast_copy_string(p->cid_name, user->cid_name, sizeof(p->cid_name)); + ast_copy_string(p->username, user->name, sizeof(p->username)); + ast_copy_string(p->peersecret, user->secret, sizeof(p->peersecret)); + ast_copy_string(p->peermd5secret, user->md5secret, sizeof(p->peermd5secret)); + ast_copy_string(p->accountcode, user->accountcode, sizeof(p->accountcode)); + ast_copy_string(p->language, user->language, sizeof(p->language)); + ast_copy_string(p->musicclass, user->musicclass, sizeof(p->musicclass)); p->amaflags = user->amaflags; p->callgroup = user->callgroup; p->pickupgroup = user->pickupgroup; @@ -5977,8 +5975,8 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme /* replace callerid if rpid found, and not restricted */ if(!ast_strlen_zero(rpid_num) && ast_test_flag(p, SIP_TRUSTRPID)) { if (*calleridname) - strncpy(p->cid_name, calleridname, sizeof(p->cid_name) - 1); - strncpy(p->cid_num, rpid_num, sizeof(p->cid_num) - 1); + ast_copy_string(p->cid_name, calleridname, sizeof(p->cid_name)); + ast_copy_string(p->cid_num, rpid_num, sizeof(p->cid_num)); ast_shrink_phone_number(p->cid_num); } if (p->rtp) { @@ -5989,9 +5987,9 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)); ast_rtp_setnat(p->vrtp, (ast_test_flag(p, SIP_NAT) & SIP_NAT_ROUTE)); } - strncpy(p->peersecret, peer->secret, sizeof(p->peersecret)-1); + ast_copy_string(p->peersecret, peer->secret, sizeof(p->peersecret)); p->peersecret[sizeof(p->peersecret)-1] = '\0'; - strncpy(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret)-1); + ast_copy_string(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret)); p->peermd5secret[sizeof(p->peermd5secret)-1] = '\0'; p->callingpres = peer->callingpres; if (ast_test_flag(peer, SIP_INSECURE_INVITE)) { @@ -6004,8 +6002,8 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme /* If we have a call limit, set flag */ if (peer->incominglimit) ast_set_flag(p, SIP_CALL_LIMIT); - strncpy(p->peername, peer->name, sizeof(p->peername) - 1); - strncpy(p->authname, peer->name, sizeof(p->authname) - 1); + ast_copy_string(p->peername, peer->name, sizeof(p->peername)); + ast_copy_string(p->authname, peer->name, sizeof(p->authname)); /* copy channel vars */ for (v = peer->chanvars ; v ; v = v->next) { if((tmpvar = ast_variable_new(v->name, v->value))) { @@ -6016,23 +6014,23 @@ static int check_user_full(struct sip_pvt *p, struct sip_request *req, int sipme if (mailbox) snprintf(mailbox, mailboxlen, ",%s,", peer->mailbox); if (!ast_strlen_zero(peer->username)) { - strncpy(p->username, peer->username, sizeof(p->username) - 1); + ast_copy_string(p->username, peer->username, sizeof(p->username)); /* Use the default username for authentication on outbound calls */ - strncpy(p->authname, peer->username, sizeof(p->authname) - 1); + ast_copy_string(p->authname, peer->username, sizeof(p->authname)); } if (!ast_strlen_zero(peer->cid_num) && !ast_strlen_zero(p->cid_num)) { - strncpy(p->cid_num, peer->cid_num, sizeof(p->cid_num) - 1); + ast_copy_string(p->cid_num, peer->cid_num, sizeof(p->cid_num)); ast_shrink_phone_number(p->cid_num); } if (!ast_strlen_zero(peer->cid_name) && !ast_strlen_zero(p->cid_name)) - strncpy(p->cid_name, peer->cid_name, sizeof(p->cid_name) - 1); - strncpy(p->fullcontact, peer->fullcontact, sizeof(p->fullcontact) - 1); + ast_copy_string(p->cid_name, peer->cid_name, sizeof(p->cid_name)); + ast_copy_string(p->fullcontact, peer->fullcontact, sizeof(p->fullcontact)); if (!ast_strlen_zero(peer->context)) - strncpy(p->context, peer->context, sizeof(p->context) - 1); - strncpy(p->peersecret, peer->secret, sizeof(p->peersecret) - 1); - strncpy(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret) - 1); - strncpy(p->language, peer->language, sizeof(p->language) -1); - strncpy(p->accountcode, peer->accountcode, sizeof(p->accountcode) - 1); + ast_copy_string(p->context, peer->context, sizeof(p->context)); + ast_copy_string(p->peersecret, peer->secret, sizeof(p->peersecret)); + ast_copy_string(p->peermd5secret, peer->md5secret, sizeof(p->peermd5secret)); + ast_copy_string(p->language, peer->language, sizeof(p->language) -1); + ast_copy_string(p->accountcode, peer->accountcode, sizeof(p->accountcode)); p->amaflags = peer->amaflags; p->callgroup = peer->callgroup; p->pickupgroup = peer->pickupgroup; @@ -6141,12 +6139,12 @@ static int sip_show_inuse(int fd, int argc, char *argv[]) { if (iterator->incominglimit) snprintf(ilimits, sizeof(ilimits), "%d", iterator->incominglimit); else - strncpy(ilimits, "N/A", sizeof(ilimits) - 1); + ast_copy_string(ilimits, "N/A", sizeof(ilimits)); /* Code disabled ---------------------------- if (iterator->outgoinglimit) snprintf(olimits, sizeof(olimits), "%d", iterator->outgoinglimit); else - strncpy(olimits, "N/A", sizeof(olimits) - 1); + ast_copy_string(olimits, "N/A", sizeof(olimits)); snprintf(oused, sizeof(oused), "%d", iterator->outUse); ---------------------------------------------*/ snprintf(iused, sizeof(iused), "%d", iterator->inUse); @@ -6162,12 +6160,12 @@ static int sip_show_inuse(int fd, int argc, char *argv[]) { if (iterator->incominglimit) snprintf(ilimits, sizeof(ilimits), "%d", iterator->incominglimit); else - strncpy(ilimits, "N/A", sizeof(ilimits) - 1); + ast_copy_string(ilimits, "N/A", sizeof(ilimits)); /* Code disabled ---------------------------- if (iterator->outgoinglimit) snprintf(olimits, sizeof(olimits), "%d", iterator->outgoinglimit); else - strncpy(olimits, "N/A", sizeof(olimits) - 1); + ast_copy_string(olimits, "N/A", sizeof(olimits)); snprintf(oused, sizeof(oused), "%d", iterator->outUse); ---------------------------------------------*/ snprintf(iused, sizeof(iused), "%d", iterator->inUse); @@ -6341,10 +6339,10 @@ static int _sip_show_peers(int fd, int *total, struct mansession *s, struct mess if (!ast_strlen_zero(iterator->username) && !s) snprintf(name, sizeof(name), "%s/%s", iterator->name, iterator->username); else - strncpy(name, iterator->name, sizeof(name) - 1); + ast_copy_string(name, iterator->name, sizeof(name)); if (iterator->maxms) { if (iterator->lastms < 0) { - strncpy(status, "UNREACHABLE", sizeof(status) - 1); + ast_copy_string(status, "UNREACHABLE", sizeof(status)); peers_offline++; } else if (iterator->lastms > iterator->maxms) { snprintf(status, sizeof(status), "LAGGED (%d ms)", iterator->lastms); @@ -6359,10 +6357,10 @@ static int _sip_show_peers(int fd, int *total, struct mansession *s, struct mess } else { peers_online++; } - strncpy(status, "UNKNOWN", sizeof(status) - 1); + ast_copy_string(status, "UNKNOWN", sizeof(status)); } } else { - strncpy(status, "Unmonitored", sizeof(status) - 1); + ast_copy_string(status, "Unmonitored", sizeof(status)); /* Checking if port is 0 */ if ( ntohs(iterator->addr.sin_port) == 0 ) { peers_offline++; @@ -6767,13 +6765,13 @@ static int _sip_show_peer(int type, int fd, struct mansession *s, struct message ast_cli(fd, " Status : "); if (peer->lastms < 0) - strncpy(status, "UNREACHABLE", sizeof(status) - 1); + ast_copy_string(status, "UNREACHABLE", sizeof(status)); else if (peer->lastms > peer->maxms) snprintf(status, sizeof(status), "LAGGED (%d ms)", peer->lastms); else if (peer->lastms) snprintf(status, sizeof(status), "OK (%d ms)", peer->lastms); else - strncpy(status, "UNKNOWN", sizeof(status) - 1); + ast_copy_string(status, "UNKNOWN", sizeof(status)); ast_cli(fd, "%s\n",status); ast_cli(fd, " Useragent : %s\n", peer->useragent); ast_cli(fd, " Reg. Contact : %s\n", peer->fullcontact); @@ -6847,13 +6845,13 @@ static int _sip_show_peer(int type, int fd, struct mansession *s, struct message ast_cli(fd, "\r\n"); ast_cli(fd, "Status: "); if (peer->lastms < 0) - strncpy(status, "UNREACHABLE", sizeof(status) - 1); + ast_copy_string(status, "UNREACHABLE", sizeof(status)); else if (peer->lastms > peer->maxms) snprintf(status, sizeof(status), "LAGGED (%d ms)", peer->lastms); else if (peer->lastms) snprintf(status, sizeof(status), "OK (%d ms)", peer->lastms); else - strncpy(status, "UNKNOWN", sizeof(status) - 1); + ast_copy_string(status, "UNKNOWN", sizeof(status)); ast_cli(fd, "%s\r\n",status); ast_cli(fd, "SIP-Useragent: %s\r\n", peer->useragent); ast_cli(fd, "Reg-Contact : %s\r\n", peer->fullcontact); @@ -7279,7 +7277,7 @@ static void receive_info(struct sip_pvt *p, struct sip_request *req) transmit_response(p, "200 OK", req); /* Should return error */ return; } else { - strncpy(buf, c, sizeof(buf) - 1); + ast_copy_string(buf, c, sizeof(buf)); } if (p->owner) { /* PBX call */ @@ -7550,7 +7548,7 @@ static int reply_digest(struct sip_pvt *p, struct sip_request *req, char *header char *c; - strncpy(tmp, get_header(req, header),sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, header),sizeof(tmp)); if (ast_strlen_zero(tmp)) return -1; c = tmp; @@ -7623,19 +7621,19 @@ static int reply_digest(struct sip_pvt *p, struct sip_request *req, char *header ast_log(LOG_WARNING, "Buffer overflow detected! Please file a bug.\n"); /* copy realm and nonce for later authorization of CANCELs and BYEs */ - strncpy(p->realm, realm, sizeof(p->realm)-1); - strncpy(p->nonce, nonce, sizeof(p->nonce)-1); - strncpy(p->domain, domain, sizeof(p->domain)-1); - strncpy(p->opaque, opaque, sizeof(p->opaque)-1); - strncpy(p->qop, qop, sizeof(p->qop)-1); + ast_copy_string(p->realm, realm, sizeof(p->realm)); + ast_copy_string(p->nonce, nonce, sizeof(p->nonce)); + ast_copy_string(p->domain, domain, sizeof(p->domain)); + ast_copy_string(p->opaque, opaque, sizeof(p->opaque)); + ast_copy_string(p->qop, qop, sizeof(p->qop)); /* Save auth data for following registrations */ if (p->registry) { - strncpy(p->registry->realm, realm, sizeof(p->realm)-1); - strncpy(p->registry->nonce, nonce, sizeof(p->nonce)-1); - strncpy(p->registry->domain, domain, sizeof(p->domain)-1); - strncpy(p->registry->opaque, opaque, sizeof(p->opaque)-1); - strncpy(p->registry->qop, qop, sizeof(p->qop)-1); + ast_copy_string(p->registry->realm, realm, sizeof(p->realm)); + ast_copy_string(p->registry->nonce, nonce, sizeof(p->nonce)); + ast_copy_string(p->registry->domain, domain, sizeof(p->domain)); + ast_copy_string(p->registry->opaque, opaque, sizeof(p->opaque)); + ast_copy_string(p->registry->qop, qop, sizeof(p->qop)); } build_reply_digest(p, sipmethod, digest, digest_len); return 0; @@ -7661,9 +7659,9 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d struct sip_auth *auth = (struct sip_auth *) NULL; /* Realm authentication */ if (!ast_strlen_zero(p->domain)) - strncpy(uri, p->domain, sizeof(uri) - 1); + ast_copy_string(uri, p->domain, sizeof(uri)); else if (!ast_strlen_zero(p->uri)) - strncpy(uri, p->uri, sizeof(uri) - 1); + ast_copy_string(uri, p->uri, sizeof(uri)); else snprintf(uri, sizeof(uri), "sip:%s@%s",p->username, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr)); @@ -7687,7 +7685,7 @@ static int build_reply_digest(struct sip_pvt *p, int method, char* digest, int d snprintf(a1,sizeof(a1),"%s:%s:%s",username,p->realm,secret); snprintf(a2,sizeof(a2),"%s:%s", sip_methods[method].text, uri); if (!ast_strlen_zero(md5secret)) - strncpy(a1_hash, md5secret, sizeof(a1_hash) - 1); + ast_copy_string(a1_hash, md5secret, sizeof(a1_hash)); else ast_md5_hash(a1_hash,a1); ast_md5_hash(a2_hash,a2); @@ -7820,7 +7818,7 @@ static char *func_header_read(struct ast_channel *chan, char *cmd, char *data, c return NULL; } - strncpy(buf, content, len); + ast_copy_string(buf, content, len); buf[len-1] = '\0'; ast_mutex_unlock(&chan->lock); @@ -7885,7 +7883,7 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req) { char tmp[256] = ""; char *s, *e; - strncpy(tmp, get_header(req, "Contact"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(req, "Contact"), sizeof(tmp)); s = ditch_braces(tmp); e = strchr(s, ';'); if (e) @@ -7910,7 +7908,7 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req) s += 4; ast_log(LOG_DEBUG, "Found 302 Redirect to extension '%s'\n", s); if (p->owner) - strncpy(p->owner->call_forward, s, sizeof(p->owner->call_forward) - 1); + ast_copy_string(p->owner->call_forward, s, sizeof(p->owner->call_forward)); } } @@ -7966,7 +7964,7 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ to = ast_strcasestr(to, "tag="); if (to) { to += 4; - strncpy(p->theirtag, to, sizeof(p->theirtag) - 1); + ast_copy_string(p->theirtag, to, sizeof(p->theirtag)); to = strchr(p->theirtag, ';'); if (to) *to = '\0'; @@ -8378,8 +8376,8 @@ static int sip_park(struct ast_channel *chan1, struct ast_channel *chan2, struct chan1m->writeformat = chan1->writeformat; ast_channel_masquerade(chan1m, chan1); /* Setup the extensions and such */ - strncpy(chan1m->context, chan1->context, sizeof(chan1m->context) - 1); - strncpy(chan1m->exten, chan1->exten, sizeof(chan1m->exten) - 1); + ast_copy_string(chan1m->context, chan1->context, sizeof(chan1m->context)); + ast_copy_string(chan1m->exten, chan1->exten, sizeof(chan1m->exten)); chan1m->priority = chan1->priority; /* We make a clone of the peer channel too, so we can play @@ -8390,8 +8388,8 @@ static int sip_park(struct ast_channel *chan1, struct ast_channel *chan2, struct chan2m->writeformat = chan2->writeformat; ast_channel_masquerade(chan2m, chan2); /* Setup the extensions and such */ - strncpy(chan2m->context, chan2->context, sizeof(chan2m->context) - 1); - strncpy(chan2m->exten, chan2->exten, sizeof(chan2m->exten) - 1); + ast_copy_string(chan2m->context, chan2->context, sizeof(chan2m->context)); + ast_copy_string(chan2m->exten, chan2->exten, sizeof(chan2m->exten)); chan2m->priority = chan2->priority; ast_mutex_lock(&chan2m->lock); if (ast_do_masquerade(chan2m)) { @@ -8636,7 +8634,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int } else { /* If no extension was specified, use the s one */ if (ast_strlen_zero(p->exten)) - strncpy(p->exten, "s", sizeof(p->exten) - 1); + ast_copy_string(p->exten, "s", sizeof(p->exten)); /* Initialize tag */ p->tag = rand(); /* First invitation */ @@ -9074,7 +9072,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc /* Save useragent of the client */ useragent = get_header(req, "User-Agent"); - strncpy(p->useragent, useragent, sizeof(p->useragent)-1); + ast_copy_string(p->useragent, useragent, sizeof(p->useragent)); /* Find out SIP method for incoming request */ if (!strcasecmp(cmd, "SIP/2.0")) { /* Response to our request */ @@ -9133,7 +9131,7 @@ static int handle_request(struct sip_pvt *p, struct sip_request *req, struct soc from = ast_strcasestr(from, "tag="); if (from) { from += 4; - strncpy(p->theirtag, from, sizeof(p->theirtag) - 1); + ast_copy_string(p->theirtag, from, sizeof(p->theirtag)); from = strchr(p->theirtag, ';'); if (from) *from = '\0'; @@ -9317,7 +9315,7 @@ static int sip_send_mwi_to_peer(struct sip_peer *peer) ast_log(LOG_WARNING, "Unable to build sip pvt data for MWI\n"); return -1; } - strncpy(name, peer->name, sizeof(name) - 1); + ast_copy_string(name, peer->name, sizeof(name)); peer->lastmsgssent = ((newmsgs << 8) | (oldmsgs)); if (create_addr(p, name)) { /* Maybe they're not registered, etc. */ @@ -9547,11 +9545,11 @@ static int sip_poke_peer(struct sip_peer *peer) /* Send options to peer's fullcontact */ if (!ast_strlen_zero(peer->fullcontact)) { - strncpy (p->fullcontact, peer->fullcontact, sizeof(p->fullcontact)); + ast_copy_string (p->fullcontact, peer->fullcontact, sizeof(p->fullcontact)); } if (!ast_strlen_zero(peer->tohost)) - strncpy(p->tohost, peer->tohost, sizeof(p->tohost) - 1); + ast_copy_string(p->tohost, peer->tohost, sizeof(p->tohost)); else ast_inet_ntoa(p->tohost, sizeof(p->tohost), peer->addr.sin_addr); @@ -9566,7 +9564,7 @@ static int sip_poke_peer(struct sip_peer *peer) p->peerpoke = peer; ast_set_flag(p, SIP_OUTGOING); #ifdef VOCAL_DATA_HACK - strncpy(p->username, "__VOCAL_DATA_SHOULD_READ_THE_SIP_SPEC__", sizeof(p->username) - 1); + ast_copy_string(p->username, "__VOCAL_DATA_SHOULD_READ_THE_SIP_SPEC__", sizeof(p->username)); transmit_invite(p, SIP_INVITE, 0, NULL, NULL, NULL,NULL,NULL, 0, 1); #else transmit_invite(p, SIP_OPTIONS, 0, NULL, NULL, NULL,NULL,NULL, 0, 1); @@ -9591,7 +9589,7 @@ static int sip_devicestate(void *data) int res = AST_DEVICE_INVALID; - strncpy(tmp, dest, sizeof(tmp) - 1); + ast_copy_string(tmp, dest, sizeof(tmp)); host = strchr(tmp, '@'); if (host) { *host = '\0'; @@ -9646,7 +9644,7 @@ static struct ast_channel *sip_request(const char *type, int format, void *data, return NULL; } - strncpy(tmp, dest, sizeof(tmp) - 1); + ast_copy_string(tmp, dest, sizeof(tmp)); host = strchr(tmp, '@'); if (host) { *host = '\0'; @@ -9673,7 +9671,7 @@ static struct ast_channel *sip_request(const char *type, int format, void *data, return NULL; } if (ast_strlen_zero(p->peername) && ext) - strncpy(p->peername, ext, sizeof(p->peername) - 1); + ast_copy_string(p->peername, ext, sizeof(p->peername)); /* Recalculate our side, and recalculate Call ID */ if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip)) memcpy(&p->ourip, &__ourip, sizeof(p->ourip)); @@ -9685,7 +9683,7 @@ static struct ast_channel *sip_request(const char *type, int format, void *data, like SIP/peername/extension SIP/peername will still use the full contact */ if (ext) { - strncpy(p->username, ext, sizeof(p->username) - 1); + ast_copy_string(p->username, ext, sizeof(p->username)); p->fullcontact[0] = 0; } #if 0 @@ -9757,7 +9755,7 @@ static int handle_common_options(struct ast_flags *flags, struct ast_flags *mask char buf[64]; char *word, *next; - strncpy(buf, v->value, sizeof(buf)-1); + ast_copy_string(buf, v->value, sizeof(buf)); next = buf; while ((word = strsep(&next, ","))) { if (!strcasecmp(word, "port")) @@ -9817,7 +9815,7 @@ static struct sip_auth *add_realm_authentication(struct sip_auth *authlist, char ast_log(LOG_DEBUG, "Auth config :: %s\n", configuration); - strncpy(authcopy, configuration, sizeof(authcopy)-1); + ast_copy_string(authcopy, configuration, sizeof(authcopy)); stringp = authcopy; username = stringp; @@ -9842,12 +9840,12 @@ static struct sip_auth *add_realm_authentication(struct sip_auth *authlist, char auth = malloc(sizeof(struct sip_auth)); if (auth) { memset(auth, 0, sizeof(struct sip_auth)); - strncpy(auth->realm, realm, sizeof(auth->realm)-1); - strncpy(auth->username, username, sizeof(auth->username)-1); + ast_copy_string(auth->realm, realm, sizeof(auth->realm)); + ast_copy_string(auth->username, username, sizeof(auth->username)); if (secret) - strncpy(auth->secret, secret, sizeof(auth->secret)-1); + ast_copy_string(auth->secret, secret, sizeof(auth->secret)); if (md5secret) - strncpy(auth->md5secret, md5secret, sizeof(auth->md5secret)-1); + ast_copy_string(auth->md5secret, md5secret, sizeof(auth->md5secret)); } else { ast_log(LOG_ERROR, "Allocation of auth structure failed, Out of memory\n"); return (authlist); @@ -9918,7 +9916,7 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int memset(user, 0, sizeof(struct sip_user)); suserobjs++; ASTOBJ_INIT(user); - strncpy(user->name, name, sizeof(user->name)-1); + ast_copy_string(user->name, name, sizeof(user->name)); oldha = user->ha; user->ha = NULL; /* set the usage flag to a sane staring value*/ @@ -9940,7 +9938,7 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int } 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, "setvar")) { varname = ast_strdupa(v->value); if (varname && (varval = strchr(varname,'='))) { @@ -9956,9 +9954,9 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int !strcasecmp(v->name, "deny")) { user->ha = ast_append_ha(v->name, v->value, user->ha); } 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, "md5secret")) { - strncpy(user->md5secret, v->value, sizeof(user->md5secret)-1); + ast_copy_string(user->md5secret, v->value, sizeof(user->md5secret)); } else if (!strcasecmp(v->name, "callerid")) { ast_callerid_split(v->value, user->cid_name, sizeof(user->cid_name), user->cid_num, sizeof(user->cid_num)); } else if (!strcasecmp(v->name, "callgroup")) { @@ -9966,11 +9964,11 @@ static struct sip_user *build_user(const char *name, struct ast_variable *v, int } else if (!strcasecmp(v->name, "pickupgroup")) { user->pickupgroup = ast_get_group(v->value); } else if (!strcasecmp(v->name, "language")) { - strncpy(user->language, v->value, sizeof(user->language)-1); + ast_copy_string(user->language, v->value, sizeof(user->language)); } else if (!strcasecmp(v->name, "musiconhold")) { - strncpy(user->musicclass, v->value, sizeof(user->musicclass)-1); + ast_copy_string(user->musicclass, v->value, sizeof(user->musicclass)); } 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, "incominglimit")) { user->incominglimit = atoi(v->value); if (user->incominglimit < 0) @@ -10021,7 +10019,7 @@ static struct sip_peer *temp_peer(const char *name) peer->expire = -1; peer->pokeexpire = -1; - strncpy(peer->name, name, sizeof(peer->name)-1); + ast_copy_string(peer->name, name, sizeof(peer->name)); ast_copy_flags(peer, &global_flags, SIP_PROMISCREDIR | SIP_USEREQPHONE | SIP_TRUSTRPID | SIP_USECLIENTCODE | SIP_DTMF | SIP_NAT | SIP_REINVITE | SIP_INSECURE_PORT | SIP_INSECURE_INVITE | @@ -10085,7 +10083,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int peer->lastmsgssent = -1; if (!found) { if (name) - strncpy(peer->name, name, sizeof(peer->name)-1); + ast_copy_string(peer->name, name, sizeof(peer->name)); peer->addr.sin_port = htons(DEFAULT_SIP_PORT); peer->addr.sin_family = AF_INET; peer->defaddr.sin_family = AF_INET; @@ -10135,23 +10133,23 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int } else if (realtime && !strcasecmp(v->name, "ipaddr") && !ast_strlen_zero(v->value) ) { inet_aton(v->value, &(peer->addr.sin_addr)); } else if (realtime && !strcasecmp(v->name, "name")) - strncpy(peer->name, v->value, sizeof(peer->name)-1); + ast_copy_string(peer->name, v->value, sizeof(peer->name)); else if (!strcasecmp(v->name, "secret")) - strncpy(peer->secret, v->value, sizeof(peer->secret)-1); + ast_copy_string(peer->secret, v->value, sizeof(peer->secret)); else if (!strcasecmp(v->name, "md5secret")) - strncpy(peer->md5secret, v->value, sizeof(peer->md5secret)-1); + ast_copy_string(peer->md5secret, v->value, sizeof(peer->md5secret)); else if (!strcasecmp(v->name, "auth")) peer->auth = add_realm_authentication(peer->auth, v->value, v->lineno); else if (!strcasecmp(v->name, "callerid")) { ast_callerid_split(v->value, peer->cid_name, sizeof(peer->cid_name), peer->cid_num, sizeof(peer->cid_num)); } else if (!strcasecmp(v->name, "context")) - strncpy(peer->context, v->value, sizeof(peer->context)-1); + ast_copy_string(peer->context, v->value, sizeof(peer->context)); else if (!strcasecmp(v->name, "fromdomain")) - strncpy(peer->fromdomain, v->value, sizeof(peer->fromdomain)-1); + ast_copy_string(peer->fromdomain, v->value, sizeof(peer->fromdomain)); else if (!strcasecmp(v->name, "usereqphone")) ast_set2_flag(peer, ast_true(v->value), SIP_USEREQPHONE); else if (!strcasecmp(v->name, "fromuser")) - strncpy(peer->fromuser, v->value, sizeof(peer->fromuser)-1); + ast_copy_string(peer->fromuser, v->value, sizeof(peer->fromuser)); else if (!strcasecmp(v->name, "host") || !strcasecmp(v->name, "outboundproxy")) { if (!strcasecmp(v->value, "dynamic")) { if (!strcasecmp(v->name, "outboundproxy") || obproxyfound) { @@ -10185,7 +10183,7 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int if (!strcasecmp(v->name, "outboundproxy")) obproxyfound=1; else - strncpy(peer->tohost, v->value, sizeof(peer->tohost) - 1); + ast_copy_string(peer->tohost, v->value, sizeof(peer->tohost)); } if (!maskfound) inet_aton("255.255.255.255", &peer->mask); @@ -10209,11 +10207,11 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int if (peer->callingpres == -1) peer->callingpres = atoi(v->value); } else if (!strcasecmp(v->name, "username")) { - strncpy(peer->username, v->value, sizeof(peer->username)-1); + ast_copy_string(peer->username, v->value, sizeof(peer->username)); } else if (!strcasecmp(v->name, "language")) { - strncpy(peer->language, v->value, sizeof(peer->language)-1); + ast_copy_string(peer->language, v->value, sizeof(peer->language)); } else if (!strcasecmp(v->name, "regexten")) { - strncpy(peer->regexten, v->value, sizeof(peer->regexten)-1); + ast_copy_string(peer->regexten, v->value, sizeof(peer->regexten)); } else if (!strcasecmp(v->name, "incominglimit")) { peer->incominglimit = atoi(v->value); if (peer->incominglimit < 0) @@ -10230,11 +10228,11 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int peer->amaflags = format; } } else if (!strcasecmp(v->name, "accountcode")) { - strncpy(peer->accountcode, v->value, sizeof(peer->accountcode)-1); + ast_copy_string(peer->accountcode, v->value, sizeof(peer->accountcode)); } else if (!strcasecmp(v->name, "musiconhold")) { - strncpy(peer->musicclass, v->value, sizeof(peer->musicclass)-1); + ast_copy_string(peer->musicclass, v->value, sizeof(peer->musicclass)); } else if (!strcasecmp(v->name, "mailbox")) { - strncpy(peer->mailbox, v->value, sizeof(peer->mailbox)-1); + ast_copy_string(peer->mailbox, v->value, sizeof(peer->mailbox)); } else if (!strcasecmp(v->name, "callgroup")) { peer->callgroup = ast_get_group(v->value); } else if (!strcasecmp(v->name, "pickupgroup")) { @@ -10339,18 +10337,18 @@ static int reload_config(void) memset(&prefs, 0 , sizeof(prefs)); /* Initialize some reasonable defaults at SIP reload */ - strncpy(default_context, DEFAULT_CONTEXT, sizeof(default_context) - 1); + ast_copy_string(default_context, DEFAULT_CONTEXT, sizeof(default_context)); default_language[0] = '\0'; default_fromdomain[0] = '\0'; default_qualify = 0; externhost[0] = '\0'; externexpire = 0; externrefresh = 10; - strncpy(default_useragent, DEFAULT_USERAGENT, sizeof(default_useragent) - 1); - strncpy(default_notifymime, DEFAULT_NOTIFYMIME, sizeof(default_notifymime) - 1); - strncpy(global_realm, DEFAULT_REALM, sizeof(global_realm) - 1); - strncpy(global_musicclass, "default", sizeof(global_musicclass) - 1); - strncpy(default_callerid, DEFAULT_CALLERID, sizeof(default_callerid) - 1); + ast_copy_string(default_useragent, DEFAULT_USERAGENT, sizeof(default_useragent)); + ast_copy_string(default_notifymime, DEFAULT_NOTIFYMIME, sizeof(default_notifymime)); + ast_copy_string(global_realm, DEFAULT_REALM, sizeof(global_realm)); + ast_copy_string(global_musicclass, "default", sizeof(global_musicclass)); + ast_copy_string(default_callerid, DEFAULT_CALLERID, sizeof(default_callerid)); memset(&outboundproxyip, 0, sizeof(outboundproxyip)); outboundproxyip.sin_port = htons(DEFAULT_SIP_PORT); outboundproxyip.sin_family = AF_INET; /* Type of address: IPv4 */ @@ -10386,12 +10384,12 @@ static int reload_config(void) /* Create the interface list */ if (!strcasecmp(v->name, "context")) { - strncpy(default_context, v->value, sizeof(default_context)-1); + ast_copy_string(default_context, v->value, sizeof(default_context)); } else if (!strcasecmp(v->name, "realm")) { - strncpy(global_realm, v->value, sizeof(global_realm)-1); + ast_copy_string(global_realm, v->value, sizeof(global_realm)); global_realm[sizeof(global_realm)-1] = '\0'; } else if (!strcasecmp(v->name, "useragent")) { - strncpy(default_useragent, v->value, sizeof(default_useragent)-1); + ast_copy_string(default_useragent, v->value, sizeof(default_useragent)); ast_log(LOG_DEBUG, "Setting User Agent Name to %s\n", default_useragent); } else if (!strcasecmp(v->name, "rtcachefriends")) { @@ -10434,20 +10432,20 @@ static int reload_config(void) } else if (!strcasecmp(v->name, "compactheaders")) { compactheaders = ast_true(v->value); } else if (!strcasecmp(v->name, "notifymimetype")) { - strncpy(default_notifymime, v->value, sizeof(default_notifymime) - 1); + ast_copy_string(default_notifymime, v->value, sizeof(default_notifymime)); } else if (!strcasecmp(v->name, "musicclass") || !strcasecmp(v->name, "musiconhold")) { - strncpy(global_musicclass, v->value, sizeof(global_musicclass) - 1); + ast_copy_string(global_musicclass, v->value, sizeof(global_musicclass)); } else if (!strcasecmp(v->name, "language")) { - strncpy(default_language, v->value, sizeof(default_language)-1); + ast_copy_string(default_language, v->value, sizeof(default_language)); } else if (!strcasecmp(v->name, "regcontext")) { - strncpy(regcontext, v->value, sizeof(regcontext) - 1); + ast_copy_string(regcontext, v->value, sizeof(regcontext)); /* Create context if it doesn't exist already */ if (!ast_context_find(regcontext)) ast_context_create(NULL, regcontext, channeltype); } else if (!strcasecmp(v->name, "callerid")) { - strncpy(default_callerid, v->value, sizeof(default_callerid)-1); + ast_copy_string(default_callerid, v->value, sizeof(default_callerid)); } else if (!strcasecmp(v->name, "fromdomain")) { - strncpy(default_fromdomain, v->value, sizeof(default_fromdomain)-1); + ast_copy_string(default_fromdomain, v->value, sizeof(default_fromdomain)); } else if (!strcasecmp(v->name, "outboundproxy")) { if (ast_get_ip_or_srv(&outboundproxyip, v->value, "_sip._udp") < 0) ast_log(LOG_WARNING, "Unable to locate host '%s'\n", v->value); @@ -10494,7 +10492,7 @@ static int reload_config(void) memcpy(&externip.sin_addr, hp->h_addr, sizeof(externip.sin_addr)); externexpire = 0; } else if (!strcasecmp(v->name, "externhost")) { - strncpy(externhost, v->value, sizeof(externhost) - 1); + ast_copy_string(externhost, v->value, sizeof(externhost)); if (!(hp = ast_gethostbyname(externhost, &ahp))) ast_log(LOG_WARNING, "Invalid address for externhost keyword: %s\n", externhost); else @@ -10897,7 +10895,7 @@ static int sip_sipredirect(struct sip_pvt *p, const char *dest) /* we'll issue the redirect message here */ if (!host) { char *localtmp; - strncpy(tmp, get_header(&p->initreq, "To"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(&p->initreq, "To"), sizeof(tmp)); if (!strlen(tmp)) { ast_log(LOG_ERROR, "Cannot retrieve the 'To' header from the original SIP request!\n"); return 0; @@ -10929,7 +10927,7 @@ static int sip_sipredirect(struct sip_pvt *p, const char *dest) } /* make sure the forwarding won't be forever */ - strncpy(tmp, get_header(&p->initreq, "Max-Forwards"), sizeof(tmp) - 1); + ast_copy_string(tmp, get_header(&p->initreq, "Max-Forwards"), sizeof(tmp)); if (strlen(tmp) && atoi(tmp)) { /* we found Max-Forwards in the original SIP request */ p->maxforwards = atoi(tmp) - 1;