Develop and Download Open Source Software

Browse CVS Repository

Diff of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.93 by aga4096, Tue Jun 14 01:02:20 2005 UTC revision 1.94 by aga4096, Thu Jun 23 07:58:12 2005 UTC
# Line 22  Line 22 
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   *   *
# Line 690  static string odbcDiagString( SQLSMALLIN Line 693  static string odbcDiagString( SQLSMALLIN
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;
# Line 699  string getResultCol( SQLHANDLE hstmt, in Line 702  string getResultCol( SQLHANDLE hstmt, in
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;
# Line 7568  result_t zipCreate( char* zippath, char* Line 7571  result_t zipCreate( char* zippath, char*
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, &timestamp    , 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    

Legend:
Removed from v.1.93  
changed lines
  Added in v.1.94

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26