| 22 |
* |
* |
| 23 |
* $Revision$ |
* $Revision$ |
| 24 |
* $Log$ |
* $Log$ |
| 25 |
|
* Revision 1.94 2005/06/23 07:58:12 aga4096 |
| 26 |
|
* ・イベントログ機能の追加. |
| 27 |
|
* |
| 28 |
* Revision 1.93 2005/06/14 01:02:20 aga4096 |
* Revision 1.93 2005/06/14 01:02:20 aga4096 |
| 29 |
* ・個人Binder向け修正. xnp_extract_public_item_id, xnp_extract_nonbinder_item_id の追加. |
* ・個人Binder向け修正. xnp_extract_public_item_id, xnp_extract_nonbinder_item_id の追加. |
| 30 |
* |
* |
| 693 |
* 指定カラムの値を取り出してその文字列を返す |
* 指定カラムの値を取り出してその文字列を返す |
| 694 |
* |
* |
| 695 |
*/ |
*/ |
| 696 |
string getResultCol( SQLHANDLE hstmt, int col ) |
string getResultCol( SQLHANDLE hstmt, int col, SQLSMALLINT targetType = SQL_C_CHAR ) |
| 697 |
{ |
{ |
| 698 |
string s; |
string s; |
| 699 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 702 |
SQLINTEGER NumBytes; |
SQLINTEGER NumBytes; |
| 703 |
|
|
| 704 |
syslog_printf( "getResultCol" ); |
syslog_printf( "getResultCol" ); |
| 705 |
while ( ( sqlcode = SQLGetData(hstmt, col, SQL_C_CHAR, BinaryPtr, sizeof(BinaryPtr), |
while ( ( sqlcode = SQLGetData(hstmt, col, targetType, BinaryPtr, sizeof(BinaryPtr), |
| 706 |
&BinaryLenOrInd)) != SQL_NO_DATA) { |
&BinaryLenOrInd)) != SQL_NO_DATA) { |
| 707 |
syslog_printf( "SQLGetData BinaryLenOrInd=%d", BinaryLenOrInd ); |
syslog_printf( "SQLGetData BinaryLenOrInd=%d", BinaryLenOrInd ); |
| 708 |
NumBytes = (BinaryLenOrInd > 5000) || (BinaryLenOrInd == SQL_NO_TOTAL) ? 5000 : BinaryLenOrInd; |
NumBytes = (BinaryLenOrInd > 5000) || (BinaryLenOrInd == SQL_NO_TOTAL) ? 5000 : BinaryLenOrInd; |
| 7571 |
delete[] argv; |
delete[] argv; |
| 7572 |
return RES_ERROR; |
return RES_ERROR; |
| 7573 |
} |
} |
| 7574 |
|
result_t insertEvent(sessionid_t sid, event_t *ev ) |
| 7575 |
|
{ |
| 7576 |
|
eventtypeid_t etid = ev->getEventTypeID(); |
| 7577 |
|
if ( etid < 1 || event::ETID_MAX < etid ){ |
| 7578 |
|
setLastErrorString( "invalid event_type_id in insertEvent" ); |
| 7579 |
|
return RES_ERROR; |
| 7580 |
|
} |
| 7581 |
|
|
| 7582 |
|
SQLRETURN sqlcode; |
| 7583 |
|
SQLHANDLE hstmt = NULL; |
| 7584 |
|
result_t ret = RES_ERROR; |
| 7585 |
|
|
| 7586 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 7587 |
|
string sql = "insert into " + dbprefix + "_xoonips_event_log " |
| 7588 |
|
" ( event_type_id, timestamp, exec_uid, index_id, item_id, file_id, uid, gid, remote_host, search_keyword, login_name ) " |
| 7589 |
|
" values ( " |
| 7590 |
|
+ unsignedIntToString(ev->getEventTypeID()) + "," + |
| 7591 |
|
( ev->isValidTimestamp() ? unsignedIntToString(ev->getTimestamp ()) : "NULL" ) + "," + |
| 7592 |
|
( ev->isValidExecUID () ? unsignedIntToString(ev->getExecUID ()) : "NULL" ) + "," + |
| 7593 |
|
( ev->isValidIndexID () ? unsignedIntToString(ev->getIndexID ()) : "NULL" ) + "," + |
| 7594 |
|
( ev->isValidItemID () ? unsignedIntToString(ev->getItemID ()) : "NULL" ) + "," + |
| 7595 |
|
( ev->isValidFileID () ? unsignedIntToString(ev->getFileID ()) : "NULL" ) + "," + |
| 7596 |
|
( ev->isValidUID () ? unsignedIntToString(ev->getUID ()) : "NULL" ) + "," + |
| 7597 |
|
( ev->isValidGID () ? unsignedIntToString(ev->getGID ()) : "NULL" ) + "," + |
| 7598 |
|
" ?,?,? )"; |
| 7599 |
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 7600 |
|
if ( sqlcode == SQL_SUCCESS ){ |
| 7601 |
|
SQLLEN cbRemoteHost = SQL_NTS, cbSearchKeyword = SQL_NTS, cbLoginName = SQL_NTS; |
| 7602 |
|
if ( !ev->isValidRemoteHost () ) cbRemoteHost = SQL_NULL_DATA; |
| 7603 |
|
if ( !ev->isValidSearchKeyword() ) cbSearchKeyword = SQL_NULL_DATA; |
| 7604 |
|
if ( !ev->isValidLoginName () ) cbLoginName = SQL_NULL_DATA; |
| 7605 |
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, strlen(ev->getRemoteHost ()), 0, (SQLCHAR *)ev->getRemoteHost (), 0, &cbRemoteHost ); |
| 7606 |
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, strlen(ev->getSearchKeyword()), 0, (SQLCHAR *)ev->getSearchKeyword(), 0, &cbSearchKeyword ); |
| 7607 |
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, strlen(ev->getLoginName ()), 0, (SQLCHAR *)ev->getLoginName (), 0, &cbLoginName ); |
| 7608 |
|
|
| 7609 |
|
sqlcode = SQLExecute( hstmt ); |
| 7610 |
|
if( sqlcode == SQL_SUCCESS ){ |
| 7611 |
|
ret = RES_OK; |
| 7612 |
|
}else{ |
| 7613 |
|
string s( "SQLExecute in insertEvent " ); |
| 7614 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 7615 |
|
setLastErrorString( s.c_str( ) ); |
| 7616 |
|
ret = RES_DB_QUERY_ERROR; |
| 7617 |
|
} |
| 7618 |
|
}else{ |
| 7619 |
|
setLastErrorString( "SQLPrepare in insertEvent" ); |
| 7620 |
|
ret = RES_ERROR; |
| 7621 |
|
} |
| 7622 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 7623 |
|
} |
| 7624 |
|
else { |
| 7625 |
|
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertEvent " ); |
| 7626 |
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 7627 |
|
setLastErrorString( s.c_str( ) ); |
| 7628 |
|
ret = RES_ERROR; |
| 7629 |
|
} |
| 7630 |
|
return ret; |
| 7631 |
|
} |
| 7632 |
|
|
| 7633 |
|
result_t getEvents(sessionid_t sid, event_t** events, int* eventsLen, time_t startTime, time_t endTime ) |
| 7634 |
|
{ |
| 7635 |
|
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 7636 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 7637 |
|
if( !isModeratorBySession( sid ) ) return RES_NO_READ_ACCESS_RIGHT; |
| 7638 |
|
|
| 7639 |
|
result_t ret = RES_ERROR; |
| 7640 |
|
|
| 7641 |
|
SQLRETURN sqlcode; |
| 7642 |
|
SQLHANDLE hstmt = NULL; |
| 7643 |
|
|
| 7644 |
|
// time condition |
| 7645 |
|
string condition = " where "; |
| 7646 |
|
if ( startTime != 0 ) condition += unsignedIntToString(startTime) + " <= timestamp and "; |
| 7647 |
|
if ( endTime != 0 ) condition += " timestamp < " + unsignedIntToString(endTime) + " and "; |
| 7648 |
|
condition += "1"; |
| 7649 |
|
|
| 7650 |
|
// allocate events[] |
| 7651 |
|
string sql = "select count(*) from " + dbprefix + "_xoonips_event_log " + condition; |
| 7652 |
|
unsigned int len; |
| 7653 |
|
ret = queryGetUnsignedInt( "getEvents", sql, &len ); |
| 7654 |
|
if ( ret != RES_OK ) |
| 7655 |
|
return ret; |
| 7656 |
|
|
| 7657 |
|
if ( len == 0 ){ |
| 7658 |
|
*events = new event[1]; |
| 7659 |
|
*eventsLen = 0; |
| 7660 |
|
return RES_OK; |
| 7661 |
|
} |
| 7662 |
|
*events = new event[len]; |
| 7663 |
|
*eventsLen = len; |
| 7664 |
|
|
| 7665 |
|
// get |
| 7666 |
|
sql = "select event_id, event_type_id, timestamp, exec_uid, index_id, item_id, " |
| 7667 |
|
" file_id, uid, gid, remote_host, search_keyword, login_name from " + dbprefix + "_xoonips_event_log " + condition; |
| 7668 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 7669 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 7670 |
|
eventid_t eventID = 0; SQLLEN cbEventID = 0; |
| 7671 |
|
eventtypeid_t eventTypeID = 0; SQLLEN cbEventTypeID = 0; |
| 7672 |
|
time_t timestamp = 0; SQLLEN cbTimestamp = 0; |
| 7673 |
|
userid_t execUID = 0; SQLLEN cbExecUID = 0; |
| 7674 |
|
indexid_t indexID = 0; SQLLEN cbIndexID = 0; |
| 7675 |
|
itemid_t itemID = 0; SQLLEN cbItemID = 0; |
| 7676 |
|
fileid_t fileID = 0; SQLLEN cbFileID = 0; |
| 7677 |
|
userid_t uid = 0; SQLLEN cbUid = 0; |
| 7678 |
|
groupid_t gid = 0; SQLLEN cbGid = 0; |
| 7679 |
|
|
| 7680 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &eventID , 0, &cbEventID ); |
| 7681 |
|
SQLBindCol( hstmt, 2, SQL_C_ULONG, &eventTypeID , 0, &cbEventTypeID ); |
| 7682 |
|
SQLBindCol( hstmt, 3, SQL_C_ULONG, ×tamp , 0, &cbTimestamp ); |
| 7683 |
|
SQLBindCol( hstmt, 4, SQL_C_ULONG, &execUID , 0, &cbExecUID ); |
| 7684 |
|
SQLBindCol( hstmt, 5, SQL_C_ULONG, &indexID , 0, &cbIndexID ); |
| 7685 |
|
SQLBindCol( hstmt, 6, SQL_C_ULONG, &itemID , 0, &cbItemID ); |
| 7686 |
|
SQLBindCol( hstmt, 7, SQL_C_ULONG, &fileID , 0, &cbFileID ); |
| 7687 |
|
SQLBindCol( hstmt, 8, SQL_C_ULONG, &uid , 0, &cbUid ); |
| 7688 |
|
SQLBindCol( hstmt, 9, SQL_C_ULONG, &gid , 0, &cbGid ); |
| 7689 |
|
|
| 7690 |
|
for( *eventsLen = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && *eventsLen < (int)len ; (*eventsLen)++ ){ |
| 7691 |
|
event *p = *events + *eventsLen; |
| 7692 |
|
p->setEventID ( (eventid_t )eventID ); |
| 7693 |
|
p->setEventTypeID ( (eventtypeid_t)eventTypeID ); |
| 7694 |
|
p->setTimestamp ( (time_t )timestamp ); |
| 7695 |
|
p->setExecUID ( (userid_t )execUID ); |
| 7696 |
|
p->setIndexID ( (indexid_t )indexID ); |
| 7697 |
|
p->setItemID ( (itemid_t )itemID ); |
| 7698 |
|
p->setFileID ( (fileid_t )fileID ); |
| 7699 |
|
p->setUID ( (userid_t )uid ); |
| 7700 |
|
p->setGID ( (groupid_t )gid ); |
| 7701 |
|
p->setRemoteHost ( getResultCol( hstmt, 10 ).c_str() ); |
| 7702 |
|
p->setSearchKeyword ( getResultCol( hstmt, 11, SQL_C_BINARY ).c_str() ); |
| 7703 |
|
p->setLoginName ( getResultCol( hstmt, 12 ).c_str() ); |
| 7704 |
|
} |
| 7705 |
|
ret = RES_OK; |
| 7706 |
|
}else{ |
| 7707 |
|
string s( "SQLExecDirect in getEvents" ); |
| 7708 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 7709 |
|
s += string( ", sql=" ) + string( sql ); |
| 7710 |
|
setLastErrorString( s.c_str( ) ); |
| 7711 |
|
ret = RES_DB_QUERY_ERROR; |
| 7712 |
|
} |
| 7713 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 7714 |
|
}else{ |
| 7715 |
|
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getEvents" ); |
| 7716 |
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 7717 |
|
setLastErrorString( s.c_str( ) ); |
| 7718 |
|
ret = RES_ERROR; |
| 7719 |
|
} |
| 7720 |
|
return ret; |
| 7721 |
|
} |
| 7722 |
|
|
| 7723 |
|
|
| 7724 |
|
|
| 7725 |
|
|
| 7726 |
|
|
| 7727 |
|
|
| 7728 |
|
|
| 7729 |
|
|
| 7730 |
|
|
| 7731 |
|
|
| 7732 |
|
|
| 7733 |
|
|
| 7734 |
|
|
| 7735 |
|
|
| 7736 |
|
|