mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 04:30:28 +00:00
Fix date/time in TDS stuff (bug #2147)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3525 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
106
cdr/cdr_tds.c
106
cdr/cdr_tds.c
@@ -10,7 +10,7 @@
|
|||||||
* Table Structure for `cdr`
|
* Table Structure for `cdr`
|
||||||
*
|
*
|
||||||
* Created on: 05/20/2004 16:16
|
* Created on: 05/20/2004 16:16
|
||||||
* Last changed on: 07/19/2004 13:01
|
* Last changed on: 07/27/2004 20:01
|
||||||
|
|
||||||
CREATE TABLE [dbo].[cdr] (
|
CREATE TABLE [dbo].[cdr] (
|
||||||
[accountcode] [varchar] (20) NULL ,
|
[accountcode] [varchar] (20) NULL ,
|
||||||
@@ -66,13 +66,12 @@ static TDSSOCKET *tds;
|
|||||||
static TDSLOGIN *login;
|
static TDSLOGIN *login;
|
||||||
static TDSCONTEXT *context;
|
static TDSCONTEXT *context;
|
||||||
|
|
||||||
char *stristr(const char*, const char*);
|
static char *stristr(const char*, const char*);
|
||||||
char *anti_injection(const char *, int);
|
static char *anti_injection(const char *, int);
|
||||||
|
static void get_date(char *, struct timeval);
|
||||||
|
|
||||||
static int tds_log(struct ast_cdr *cdr)
|
static int tds_log(struct ast_cdr *cdr)
|
||||||
{
|
{
|
||||||
struct tm tm;
|
|
||||||
time_t t;
|
|
||||||
char sqlcmd[2048], start[80], answer[80], end[80];
|
char sqlcmd[2048], start[80], answer[80], end[80];
|
||||||
char *accountcode, *src, *dst, *dcontext, *clid, *channel, *dstchannel, *lastapp, *lastdata, *uniqueid;
|
char *accountcode, *src, *dst, *dcontext, *clid, *channel, *dstchannel, *lastapp, *lastdata, *uniqueid;
|
||||||
int res = 0;
|
int res = 0;
|
||||||
@@ -92,17 +91,70 @@ static int tds_log(struct ast_cdr *cdr)
|
|||||||
lastdata = anti_injection(cdr->lastdata, 80);
|
lastdata = anti_injection(cdr->lastdata, 80);
|
||||||
uniqueid = anti_injection(cdr->uniqueid, 32);
|
uniqueid = anti_injection(cdr->uniqueid, 32);
|
||||||
|
|
||||||
t = cdr->start.tv_sec;
|
get_date(start, cdr->start);
|
||||||
localtime_r(&t, &tm);
|
get_date(answer, cdr->answer);
|
||||||
strftime(start, 80, DATE_FORMAT, &tm);
|
get_date(end, cdr->end);
|
||||||
t = cdr->answer.tv_sec;
|
|
||||||
localtime_r(&t, &tm);
|
|
||||||
strftime(answer, 80, DATE_FORMAT, &tm);
|
|
||||||
t = cdr->end.tv_sec;
|
|
||||||
localtime_r(&t, &tm);
|
|
||||||
strftime(end, 80, DATE_FORMAT, &tm);
|
|
||||||
|
|
||||||
sprintf(sqlcmd, "INSERT INTO cdr (accountcode, src, dst, dcontext, clid, channel, dstchannel, lastapp, lastdata, start, answer, [end], duration, billsec, disposition, amaflags, uniqueid) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %i, %i, '%s', '%s', '%s')", accountcode, src, dst, dcontext, clid, channel, dstchannel, lastapp, lastdata, start, answer, end, cdr->duration, cdr->billsec, ast_cdr_disp2str(cdr->disposition), ast_cdr_flags2str(cdr->amaflags), uniqueid);
|
sprintf(
|
||||||
|
sqlcmd,
|
||||||
|
"INSERT INTO cdr "
|
||||||
|
"("
|
||||||
|
"accountcode, "
|
||||||
|
"src, "
|
||||||
|
"dst, "
|
||||||
|
"dcontext, "
|
||||||
|
"clid, "
|
||||||
|
"channel, "
|
||||||
|
"dstchannel, "
|
||||||
|
"lastapp, "
|
||||||
|
"lastdata, "
|
||||||
|
"start, "
|
||||||
|
"answer, "
|
||||||
|
"[end], "
|
||||||
|
"duration, "
|
||||||
|
"billsec, "
|
||||||
|
"disposition, "
|
||||||
|
"amaflags, "
|
||||||
|
"uniqueid"
|
||||||
|
") "
|
||||||
|
"VALUES "
|
||||||
|
"("
|
||||||
|
"'%s', " /* accountcode */
|
||||||
|
"'%s', " /* src */
|
||||||
|
"'%s', " /* dst */
|
||||||
|
"'%s', " /* dcontext */
|
||||||
|
"'%s', " /* clid */
|
||||||
|
"'%s', " /* channel */
|
||||||
|
"'%s', " /* dstchannel */
|
||||||
|
"'%s', " /* lastapp */
|
||||||
|
"'%s', " /* lastdata */
|
||||||
|
"%s, " /* start */
|
||||||
|
"%s, " /* answer */
|
||||||
|
"%s, " /* end */
|
||||||
|
"%i, " /* duration */
|
||||||
|
"%i, " /* billsec */
|
||||||
|
"'%s', " /* disposition */
|
||||||
|
"'%s', " /* amaflags */
|
||||||
|
"'%s'" /* uniqueid */
|
||||||
|
")",
|
||||||
|
accountcode,
|
||||||
|
src,
|
||||||
|
dst,
|
||||||
|
dcontext,
|
||||||
|
clid,
|
||||||
|
channel,
|
||||||
|
dstchannel,
|
||||||
|
lastapp,
|
||||||
|
lastdata,
|
||||||
|
start,
|
||||||
|
answer,
|
||||||
|
end,
|
||||||
|
cdr->duration,
|
||||||
|
cdr->billsec,
|
||||||
|
ast_cdr_disp2str(cdr->disposition),
|
||||||
|
ast_cdr_flags2str(cdr->amaflags),
|
||||||
|
uniqueid
|
||||||
|
);
|
||||||
|
|
||||||
if ((tds_submit_query(tds, sqlcmd) != TDS_SUCCEED) || (tds_process_simple_query(tds) != TDS_SUCCEED))
|
if ((tds_submit_query(tds, sqlcmd) != TDS_SUCCEED) || (tds_process_simple_query(tds) != TDS_SUCCEED))
|
||||||
{
|
{
|
||||||
@@ -155,7 +207,7 @@ static int tds_log(struct ast_cdr *cdr)
|
|||||||
*
|
*
|
||||||
* Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */
|
* Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */
|
||||||
|
|
||||||
char *
|
static char *
|
||||||
stristr (phaystack, pneedle)
|
stristr (phaystack, pneedle)
|
||||||
const char *phaystack;
|
const char *phaystack;
|
||||||
const char *pneedle;
|
const char *pneedle;
|
||||||
@@ -240,7 +292,7 @@ ret0:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *anti_injection(const char *str, int len)
|
static char *anti_injection(const char *str, int len)
|
||||||
{
|
{
|
||||||
/* Reference to http://www.nextgenss.com/papers/advanced_sql_injection.pdf */
|
/* Reference to http://www.nextgenss.com/papers/advanced_sql_injection.pdf */
|
||||||
|
|
||||||
@@ -279,6 +331,26 @@ char *anti_injection(const char *str, int len)
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void get_date(char *dateField, struct timeval tv)
|
||||||
|
{
|
||||||
|
struct tm tm;
|
||||||
|
time_t t;
|
||||||
|
char buf[80];
|
||||||
|
|
||||||
|
/* To make sure we have date variable if not insert null to SQL */
|
||||||
|
if (tv.tv_sec && tv.tv_usec)
|
||||||
|
{
|
||||||
|
t = tv.tv_sec;
|
||||||
|
localtime_r(&t, &tm);
|
||||||
|
strftime(buf, 80, DATE_FORMAT, &tm);
|
||||||
|
sprintf(dateField, "'%s'", buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy(dateField, "null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
char *description(void)
|
char *description(void)
|
||||||
{
|
{
|
||||||
return desc;
|
return desc;
|
||||||
|
Reference in New Issue
Block a user