// Function to validate an authentication string User *zmLoadAuthUser( const char *auth, bool use_remote_addr ) { #if HAVE_DECL_MD5 || HAVE_DECL_GNUTLS_FINGERPRINT #ifdef HAVE_GCRYPT_H // Special initialisation for libgcrypt if ( !gcry_check_version( GCRYPT_VERSION ) ) { Fatal( "Unable to initialise libgcrypt" ); } gcry_control( GCRYCTL_DISABLE_SECMEM, 0 ); gcry_control( GCRYCTL_INITIALIZATION_FINISHED, 0 ); #endif // HAVE_GCRYPT_H const char *remote_addr = ""; if ( use_remote_addr ) { remote_addr = getenv( "REMOTE_ADDR" ); if ( !remote_addr ) { Warning( "Can't determine remote address, using null" ); remote_addr = ""; } } Debug( 1, "Attempting to authenticate user from auth string '%s'", auth ); char sql[ZM_SQL_SML_BUFSIZ] = ""; snprintf( sql, sizeof(sql), "select Username, Password, Enabled, Stream+0, Events+0, Control+0, Monitors+0, System+0, MonitorIds from Users where Enabled = 1" ); if ( mysql_query( &dbconn, sql ) ) { Error( "Can't run query: %s", mysql_error( &dbconn ) ); exit( mysql_errno( &dbconn ) ); } MYSQL_RES *result = mysql_store_result( &dbconn ); if ( !result ) { Error( "Can't use query result: %s", mysql_error( &dbconn ) ); exit( mysql_errno( &dbconn ) ); } int n_users = mysql_num_rows( result ); if ( n_users < 1 ) { Warning( "Unable to authenticate user" ); return( 0 ); } while( MYSQL_ROW dbrow = mysql_fetch_row( result ) ) { const char *user = dbrow[0]; const char *pass = dbrow[1]; char auth_key[512] = ""; char auth_md5[32+1] = ""; size_t md5len = 32; unsigned char md5sum[md5len]; time_t now = time( 0 ); int max_tries = 2; for ( int i = 0; i < max_tries; i++, now -= (60*60) ) { struct tm *now_tm = localtime( &now ); snprintf( auth_key, sizeof(auth_key), "%s%s%s%s%d%d%d%d", config.auth_hash_secret, user, pass, remote_addr, now_tm->tm_hour, now_tm->tm_mday, now_tm->tm_mon, now_tm->tm_year ); #if HAVE_DECL_MD MD5( (unsigned char *)auth_key, strlen(auth_key), md5sum ); #elif HAVE_DECL_GNUTLS_FINGERPRINT gnutls_datum_t md5data = { (unsigned char *)auth_key, strlen(auth_key) }; gnutls_fingerprint( GNUTLS_DIG_MD5, &md5data, md5sum, &md5len ); #endif auth_md5[0] = '\0'; for ( unsigned int j = 0; j < md5len; j++ ) { sprintf( &auth_md5[2*j], "%02x", md5sum[j] ); } Debug( 1, "Checking auth_key '%s' -> auth_md5 '%s'", auth_key, auth_md5 ); if ( !strcmp( auth, auth_md5 ) ) { // We have a match User *user = new User( dbrow ); Info( "Authenticated user '%s'", user->getUsername() ); return( user ); } } } #else // HAVE_DECL_MD5 Error( "You need to build with gnutls or openssl installed to use hash based authentication" ); #endif // HAVE_DECL_MD5 return( 0 ); }
char * gethostattr(char *ip, char *attr) { MYSQL_ROW row; MYSQL mysql; MYSQL_RES *result; char query[1024];; char *value = NULL; if (mysql_init(&mysql) == NULL) { fprintf(stderr, "gethostattr:mysql_init:failed: errno %d\n", errno); return(NULL); } if (mysql_options(&mysql, MYSQL_READ_DEFAULT_FILE, "/opt/rocks/etc/my.cnf") != 0) { fprintf(stderr, "gethostattr:mysql_options:failed: %s\n", mysql_error(&mysql)); return(NULL); } if (mysql_real_connect(&mysql, "localhost", "apache", NULL, "cluster", 0, NULL, 0) == NULL) { fprintf(stderr, "gethostattr:mysql_real_connect:failed: %s\n", mysql_error(&mysql)); return(NULL); } /* * first see if there is a host attribute */ sprintf(query, "select a.value from node_attributes a, nodes n, \ networks net where net.ip = '%s' and net.name = n.name and \ n.id = a.node and a.attr = '%s'", ip, attr); if (mysql_real_query(&mysql, query, strlen(query)) != 0) { fprintf(stderr, "gethostattr:mysql_real_query:failed: %s\n", mysql_error(&mysql)); } if ((result = mysql_store_result(&mysql)) == NULL) { fprintf(stderr, "gethostattr:mysql_store_result:failed: %s\n", mysql_error(&mysql)); } if ((row = mysql_fetch_row(result)) != NULL) { value = strdup(row[0]); } mysql_free_result(result); if (value != NULL) { mysql_close(&mysql); return(value); } /* * there is no host attribute, see if there is an appliance attribute */ sprintf(query, "select a.value from appliance_attributes a, \ nodes n, networks net, memberships m, appliances app \ where net.ip = '%s' and net.name = n.name and \ n.membership = m.id and m.appliance = app.id and \ a.appliance = app.id and a.attr = '%s'", ip, attr); if (mysql_real_query(&mysql, query, strlen(query)) != 0) { fprintf(stderr, "gethostattr:mysql_real_query:failed: %s\n", mysql_error(&mysql)); } if ((result = mysql_store_result(&mysql)) == NULL) { fprintf(stderr, "gethostattr:mysql_store_result:failed: %s\n", mysql_error(&mysql)); } if ((row = mysql_fetch_row(result)) != NULL) { value = strdup(row[0]); } mysql_free_result(result); if (value != NULL) { mysql_close(&mysql); return(value); } /* * there is no host and no appliance attribute, see if there is an * OS attribute */ sprintf(query, "select a.value from os_attributes a, nodes n, \ networks net where net.ip = '%s' and net.name = n.name and \ a.os = n.os and a.attr = '%s'", ip, attr); if (mysql_real_query(&mysql, query, strlen(query)) != 0) { fprintf(stderr, "gethostattr:mysql_real_query:failed: %s\n", mysql_error(&mysql)); } if ((result = mysql_store_result(&mysql)) == NULL) { fprintf(stderr, "gethostattr:mysql_store_result:failed: %s\n", mysql_error(&mysql)); } if ((row = mysql_fetch_row(result)) != NULL) { value = strdup(row[0]); } mysql_free_result(result); if (value != NULL) { mysql_close(&mysql); return(value); } /* * there is no host, no appliance and no OS attribute, see * if there is a global attribute */ sprintf(query, "select value from global_attributes where attr = '%s'", attr); if (mysql_real_query(&mysql, query, strlen(query)) != 0) { fprintf(stderr, "gethostattr:mysql_real_query:failed: %s\n", mysql_error(&mysql)); } if ((result = mysql_store_result(&mysql)) == NULL) { fprintf(stderr, "gethostattr:mysql_store_result:failed: %s\n", mysql_error(&mysql)); } if ((row = mysql_fetch_row(result)) != NULL) { value = strdup(row[0]); } mysql_free_result(result); mysql_close(&mysql); return(value); }
int main(int argc, char **argv) { MYSQL *mysql = NULL; mysql = mysql_init(mysql); if (!mysql) { puts("Init faild, out of memory?"); return EXIT_FAILURE; } if (!mysql_real_connect(mysql, /* MYSQL structure to use */ "127.0.0.1", /* server hostname or IP address */ "root", /* mysql user */ "", /* password */ "test", /* default database to use, NULL for none */ 0, /* port number, 0 for default */ NULL, /* socket file or named pipe name */ CLIENT_FOUND_ROWS /* connection flags */ )) { puts("Connect failed\n"); } else { mysql_query(mysql, "SET NAMES utf8"); if (mysql_query(mysql, "SELECT LPAD(i, 7, ' ') as t FROM test.f LIMIT 1")) { printf("Query failed: %s\n", mysql_error(mysql)); } else { MYSQL_RES *result = mysql_store_result(mysql); if (!result) { printf("Couldn't get results set: %s\n", mysql_error(mysql)); } else { MYSQL_FIELD *fields; fields = mysql_fetch_fields(result); if (!fields) { printf("Faild fetching fields: %s\n", mysql_error(mysql)); } else { unsigned int i, num_fields = mysql_num_fields(result); for (i = 0; i < num_fields; i++) { printf("FIELD #%d\n", i); printf(" %-20s %s\n", "Field name", fields[i].name); #if MYSQL_VERSION_ID >= 40100 printf(" %-20s %s\n", "Original name", fields[i].org_name); #endif printf(" %-20s %s\n", "From table", fields[i].table); printf(" %-20s %s\n", "Original name", fields[i].org_table); printf(" %-20s %s\n", "Database", fields[i].db); #if MYSQL_VERSION_ID >= 40100 printf(" %-20s %s\n", "Catalog", fields[i].catalog); #endif printf(" %-20s %s\n", "Default", fields[i].def); printf(" %-20s %lu\n", "CREATE field length", fields[i].length); printf(" %-20s %lu\n", "MAX field lengt", fields[i].max_length); #if MYSQL_VERSION_ID >= 40100 printf(" %-20s %u\n", "Field name length", fields[i].name_length); printf(" %-20s %u\n", "Original name length", fields[i].org_name_length); printf(" %-20s %u\n", "Table name length", fields[i].table_length); printf(" %-20s %u\n", "Original name length", fields[i].org_table_length); printf(" %-20s %u\n", "DB name length", fields[i].db_length); printf(" %-20s %u\n", "Catalog name length", fields[i].catalog_length); printf(" %-20s %u\n", "Default length", fields[i].def_length); #endif /* TODO: decimals */ printf("\n"); } } } } } mysql_close(mysql); return EXIT_SUCCESS; }
void write_result_to_database(int solution_id, solution *data) throw (const char *) { std::unique_lock<std::mutex> Lock(database_mutex); Check_mysql_connection(); int valid, delta, code_length = data->code.length(); valid = haveSolved(data->problem, data->user.c_str()) ? 0 : 1; //printf("valid %d\n",valid); sprintf(statements, "select max(score) from solution where problem_id=%d and user_id='%s'", data->problem, data->user.c_str()); if(mysql_query(hMySQL, statements)) throw "get max(score)"; MYSQL_RES *result = mysql_store_result(hMySQL); if(!result) throw "get max(score) result"; MYSQL_ROW row = mysql_fetch_row(result); if(!row) { mysql_free_result(result); throw "get max(score) row"; } if(row[0]) delta = atol(row[0]); else delta = 0; mysql_free_result(result); if(data->score > delta)//New submit has higher score than old one delta = data->score - delta; else delta = 0; if(data->error_code == RES_CE) { puts("insert compileinfo"); int len = data->last_state.length(); char *info_escape = (char*)malloc(len*2 + 3); mysql_real_escape_string(hMySQL, info_escape, data->last_state.c_str(), len); sprintf(statements, "insert into compileinfo VALUES (%d,'%s')", solution_id, info_escape); free(info_escape); data->last_state = ""; if(mysql_query(hMySQL, statements)) throw "insert compileinfo"; // if(1 != mysql_affected_rows(hMySQL)) // throw "can't insert compileinfo"; } puts("insert solution"); sprintf(statements, "insert into solution (solution_id,problem_id,user_id,time,memory,in_date,result,score,language,valid,code_length,public_code) VALUES " "(%d,%d,'%s',%d,%d,NOW(),%d,%d,%d,%d,%d,%d)", solution_id, data->problem, data->user.c_str(), data->time_limit, data->mem_limit, data->error_code, data->score, data->lang, (int)(valid && data->error_code == RES_AC), code_length, (int)data->public_code); if(mysql_query(hMySQL, statements)) throw "insert solution"; if(1 != mysql_affected_rows(hMySQL)) throw "insert solution failed"; puts("insert source"); //printf("code_length %d\n", code_length); char *code_escape = (char*)malloc(code_length*2 + 3); mysql_real_escape_string(hMySQL, code_escape, data->code.c_str(), code_length); sprintf(statements, "insert into source_code VALUES (%d,'%s')", solution_id, code_escape); free(code_escape); if(mysql_query(hMySQL, statements)) throw "insert source"; if(1 != mysql_affected_rows(hMySQL)) throw "insert source failed"; puts("update user info"); int is_first_solved = (int)(valid && data->error_code == RES_AC); sprintf(statements, "update users set submit=submit+1,solved=solved+%d,score=score+%d,language=%d where user_id='%s'", is_first_solved, delta, data->lang, data->user.c_str()); if(mysql_query(hMySQL, statements)) throw "update user info"; // if(1 != mysql_affected_rows(hMySQL)) // throw 1; puts("update problem info"); sprintf(statements, "update problem set submit=submit+1,accepted=accepted+%d,submit_user=submit_user+%d,solved=solved+%d where problem_id=%d", (int)(data->error_code == RES_AC), (int)(valid && !haveSubmitted(data->problem, data->user.c_str(), solution_id)), is_first_solved, data->problem); if(mysql_query(hMySQL, statements)) throw "update problem info"; // if(1 != mysql_affected_rows(hMySQL)) // throw 1; }
int main() { static MYSQL *dbh; /* database connect handle */ static MYSQL_RES *result; /* database query results */ static MYSQL_FIELD *fields; /* column names returned */ static MYSQL_ROW row; /* query data returned */ char error_str[4096]; /* error string to return */ int server_version; /* server version received */ unsigned int col_count; /* number of columns */ unsigned int fieldlength=0; /* column length */ unsigned int i, j; /* loop variable, why is it always i? */ //char insert_str[4096] = "INSERT INTO edacs_templog (action, router, username, action_date, bytes_in, bytes_out, ip_addr, tty, protocol, packets_in, packets_out, task_id, service, ip_or_phone) VALUES ('Start', '192.168.89.11', 'kschlieg', date_format('2008-08-15 01:57:35', '%Y-%m-%d %H:%i:%s'), 740120, 17082256, '192.168.91.1', '1048','PPP', 10665, 25044, 'D100005D', 'Framed-User', '192.168.42.175')"; // static char insert_str[] = "INSERT IGNORE INTO edacs_users (username, first_connect, last_connect) VALUES ('kschlwerwgrwer', DATE_FORMAT('2008-08-15 01:57:35', '%Y-%m-%d %H:%i:%s'), DATE_FORMAT('2008-08-16 14:57:35', '%Y-%m-%d %H:%i:%s'))"; // static char query_str[] = "SELECT * FROM edacs_users"; // static char delete_str[] = "DELETE FROM edacs_users"; static char insert_str[] = "INSERT IGNORE INTO edacs_templog (action, router, username, action_date, bytes_in, bytes_out, ip_addr, tty, protocol, packets_in, packets_out, task_id, service, ip_or_phone) VALUES ('Start', '192.168.89.11', 'kschlieg', DATE_FORMAT('2008-08-15 01:57:35', '%Y-%m-%d %H:%i:%s'), 740120, 17082256, '192.168.91.1', '1048','PPP', 10665, 25044, 'D100005D', 'Framed-User', '192.168.42.175')"; static char query_str[] = "SELECT * FROM edacs_templog"; static char delete_str[] = "DELETE FROM edacs_templog WHERE router='192.168.89.11' AND username='******' AND DATE_FORMAT(action_date, '%Y-%m-%d %H:%i:%s')='2008-08-15 01:57:35'"; /* initialize the connection handler */ dbh = mysql_init(NULL); if(dbh == NULL) { printf("Error - mysql_init failed\n"); } /* login to the database */ if (mysql_real_connect(dbh, MYSQLIP, DB_USER, DB_PASS, DB_NAME, DB_PORT, NULL, 0) == 0) { snprintf(error_str, sizeof(error_str), "Cannot login to %s:%d db %s with user %s pass %s\n", MYSQLIP, DB_PORT, DB_NAME, DB_USER, DB_PASS); error_exit(dbh, error_str); } server_version = mysql_get_server_version(dbh); printf("Connected to MySQL v%d.\n\n", server_version); /* Prepare and execute the SQL statement */ printf("Insert into MySQL: %s.\n\n", insert_str); if(mysql_query(dbh, insert_str) != 0) { snprintf(error_str, sizeof(error_str), "Cannot execute insert: %s\n", insert_str); error_exit(dbh, error_str); } /* Prepare and execute the SQL statement */ printf("Query from MySQL: %s.\n\n", query_str); if(mysql_query(dbh, query_str) != 0) { snprintf(error_str, sizeof(error_str), "Cannot execute query: %s\n", query_str); error_exit(dbh, error_str); } /* get query results set */ result = mysql_store_result(dbh); if (result == NULL) { snprintf(error_str, sizeof(error_str), "No results for query: %s\n", query_str); error_exit(dbh, error_str); } col_count = mysql_num_fields(result); printf("number of output columns: %d \n\n", col_count); /* get the output column names */ fields = mysql_fetch_fields(result); putchar('+'); /* draw the upper column header frame */ for (i = 0; i < col_count; ++i) { if(fields[i].max_length<strlen(fields[i].name)) fieldlength = strlen(fields[i].name); else fieldlength = fields[i].max_length; for (j = 0; j < fieldlength; j++) putchar('-'); putchar('+'); } putchar('\n'); putchar('|'); /* show the output column names */ for (i=0; i<col_count; i++) { if(fields[i].max_length<strlen(fields[i].name)) fieldlength = strlen(fields[i].name); else fieldlength = fields[i].max_length; printf("%-*s|", fieldlength, fields[i].name); } printf("\n"); putchar('+'); /* draw the lower column header frame */ for (i = 0; i < col_count; ++i) { if(fields[i].max_length<strlen(fields[i].name)) fieldlength = strlen(fields[i].name); else fieldlength = fields[i].max_length; for (j = 0; j < fieldlength; ++j) putchar('-'); putchar('+'); } putchar('\n'); /* fetch the data */ while((row = mysql_fetch_row(result)) != NULL) { putchar('|'); for(i=0; i<col_count; i++) { if(fields[i].max_length<strlen(fields[i].name)) fieldlength = strlen(fields[i].name); else fieldlength = fields[i].max_length; if (row[i] != NULL) printf("%-*s|", fieldlength, row[i]); else printf("%-*s|", fieldlength, ""); } printf("\n"); } putchar('+'); /* draw the lower column header frame */ for (i = 0; i < col_count; ++i) { if(fields[i].max_length<strlen(fields[i].name)) fieldlength = strlen(fields[i].name); else fieldlength = fields[i].max_length; for (j = 0; j < fieldlength; ++j) putchar('-'); putchar('+'); } putchar('\n'); /* Prepare and execute the SQL statement */ printf("Delete from MySQL: %s.\n\n", delete_str); if(mysql_query(dbh, delete_str) != 0) { snprintf(error_str, sizeof(error_str), "Cannot delete from table: %s\n", delete_str); error_exit(dbh, error_str); } mysql_close(dbh); exit(0); }
OGRErr OGRMySQLDataSource::InitializeMetadataTables() { const char* pszCommand; MYSQL_RES *hResult; OGRErr eErr = OGRERR_NONE; pszCommand = "DESCRIBE geometry_columns"; if( mysql_query(GetConn(), pszCommand ) ) { pszCommand = "CREATE TABLE geometry_columns " "( F_TABLE_CATALOG VARCHAR(256), " "F_TABLE_SCHEMA VARCHAR(256), " "F_TABLE_NAME VARCHAR(256) NOT NULL," "F_GEOMETRY_COLUMN VARCHAR(256) NOT NULL, " "COORD_DIMENSION INT, " "SRID INT," "TYPE VARCHAR(256) NOT NULL)"; if( mysql_query(GetConn(), pszCommand ) ) { ReportError( pszCommand ); eErr = OGRERR_FAILURE; } else CPLDebug("MYSQL","Creating geometry_columns metadata table"); } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) { mysql_free_result( hResult ); hResult = nullptr; } if( GetMajorVersion() < 8 || IsMariaDB() ) { pszCommand = "DESCRIBE spatial_ref_sys"; if( mysql_query(GetConn(), pszCommand ) ) { pszCommand = "CREATE TABLE spatial_ref_sys " "(SRID INT NOT NULL, " "AUTH_NAME VARCHAR(256), " "AUTH_SRID INT, " "SRTEXT VARCHAR(2048))"; if( mysql_query(GetConn(), pszCommand ) ) { ReportError( pszCommand ); eErr = OGRERR_FAILURE; } else CPLDebug("MYSQL","Creating spatial_ref_sys metadata table"); } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) { mysql_free_result( hResult ); hResult = nullptr; } } return eErr; }
int OGRMySQLDataSource::FetchSRSId( OGRSpatialReference * poSRS ) { if( poSRS == nullptr ) return GetUnknownSRID(); OGRSpatialReference oSRS(*poSRS); // cppcheck-suppress uselessAssignmentPtrArg poSRS = nullptr; const char* pszAuthorityName = oSRS.GetAuthorityName(nullptr); if( pszAuthorityName == nullptr || strlen(pszAuthorityName) == 0 ) { /* -------------------------------------------------------------------- */ /* Try to identify an EPSG code */ /* -------------------------------------------------------------------- */ oSRS.AutoIdentifyEPSG(); pszAuthorityName = oSRS.GetAuthorityName(nullptr); if (pszAuthorityName != nullptr && EQUAL(pszAuthorityName, "EPSG")) { const char* pszAuthorityCode = oSRS.GetAuthorityCode(nullptr); if ( pszAuthorityCode != nullptr && strlen(pszAuthorityCode) > 0 ) { /* Import 'clean' SRS */ oSRS.importFromEPSG( atoi(pszAuthorityCode) ); pszAuthorityName = oSRS.GetAuthorityName(nullptr); } } } /* -------------------------------------------------------------------- */ /* Check whether the authority name/code is already mapped to a */ /* SRS ID. */ /* -------------------------------------------------------------------- */ CPLString osCommand; int nAuthorityCode = 0; if( pszAuthorityName != nullptr ) { /* Check that the authority code is integral */ nAuthorityCode = atoi( oSRS.GetAuthorityCode(nullptr) ); if( nAuthorityCode > 0 ) { if( GetMajorVersion() < 8 || IsMariaDB() ) { osCommand.Printf( "SELECT srid FROM spatial_ref_sys WHERE " "auth_name = '%s' AND auth_srid = %d", pszAuthorityName, nAuthorityCode ); } else { osCommand.Printf( "SELECT SRS_ID FROM INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS " "WHERE ORGANIZATION = '%s' AND ORGANIZATION_COORDSYS_ID = %d", pszAuthorityName, nAuthorityCode ); } MYSQL_RES *hResult = nullptr; if( !mysql_query( GetConn(), osCommand ) ) hResult = mysql_store_result( GetConn() ); if ( hResult != nullptr && !mysql_num_rows(hResult)) { CPLDebug("MYSQL", "No rows exist currently exist in spatial_ref_sys"); mysql_free_result( hResult ); hResult = nullptr; } char **papszRow = nullptr; if( hResult != nullptr ) papszRow = mysql_fetch_row( hResult ); if( papszRow != nullptr && papszRow[0] != nullptr ) { const int nSRSId = atoi(papszRow[0]); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; return nSRSId; } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); } } /* -------------------------------------------------------------------- */ /* Translate SRS to WKT. */ /* -------------------------------------------------------------------- */ char *pszWKT = nullptr; if( oSRS.exportToWkt( &pszWKT ) != OGRERR_NONE ) return GetUnknownSRID(); /* -------------------------------------------------------------------- */ /* Try to find in the existing record. */ /* -------------------------------------------------------------------- */ if( GetMajorVersion() < 8 || IsMariaDB() ) { osCommand.Printf( "SELECT srid FROM spatial_ref_sys WHERE srtext = '%s'", pszWKT ); } else { osCommand.Printf( "SELECT SRS_ID FROM INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS WHERE DEFINITION = '%s'", pszWKT ); } MYSQL_RES *hResult = nullptr; if( !mysql_query( GetConn(), osCommand ) ) hResult = mysql_store_result( GetConn() ); if ( hResult != nullptr && !mysql_num_rows(hResult)) { CPLDebug("MYSQL", "No rows exist currently exist in spatial_ref_sys"); mysql_free_result( hResult ); hResult = nullptr; } char **papszRow = nullptr; if( hResult != nullptr ) papszRow = mysql_fetch_row( hResult ); if( papszRow != nullptr && papszRow[0] != nullptr ) { const int nSRSId = atoi(papszRow[0]); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; CPLFree(pszWKT); return nSRSId; } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; // TODO: try to insert in INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS if( GetMajorVersion() >= 8 && !IsMariaDB() ) { CPLFree(pszWKT); return GetUnknownSRID(); } /* -------------------------------------------------------------------- */ /* Get the current maximum srid in the srs table. */ /* -------------------------------------------------------------------- */ osCommand = "SELECT MAX(srid) FROM spatial_ref_sys"; if( !mysql_query( GetConn(), osCommand ) ) { hResult = mysql_store_result( GetConn() ); papszRow = mysql_fetch_row( hResult ); } const int nSRSId = papszRow != nullptr && papszRow[0] != nullptr ? atoi(papszRow[0]) + 1 : 1; if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; /* -------------------------------------------------------------------- */ /* Try adding the SRS to the SRS table. */ /* -------------------------------------------------------------------- */ osCommand.Printf( "INSERT INTO spatial_ref_sys (srid,srtext) VALUES (%d,'%s')", nSRSId, pszWKT ); if( !mysql_query( GetConn(), osCommand ) ) /*hResult = */ mysql_store_result( GetConn() ); /* FIXME ? */ // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; CPLFree(pszWKT); return nSRSId; }
static boolean synchronize_access_permission(MYSQL *db_conn, SSL *ssl_client, unsigned int assigned_user_authority_id) { MYSQL_RES *result = NULL; MYSQL_ROW row; char stat[SQL_STATEMENT_LENGTH + 1]; char err_msg[ERR_MSG_LENGTH + 1]; unsigned int phr_owner_id; unsigned int assigned_user_id; char phr_ownername[USER_NAME_LENGTH + 1]; char assigned_username[USER_NAME_LENGTH + 1]; char buffer[BUFFER_LENGTH + 1]; // Query the access permission list that assigned to desired authority's users sprintf(stat, "SELECT user_id, object_user_id, upload_permission_flag, download_permission_flag, delete_permission_flag FROM %s " "WHERE object_user_authority_id = %u", UA__PERMISSIONS_ASSIGNED_TO_OTHERS, assigned_user_authority_id); if(mysql_query(db_conn, stat)) { sprintf(err_msg, "Error %u: %s\n", mysql_errno(db_conn), mysql_error(db_conn)); int_error(err_msg); } result = mysql_store_result(db_conn); while((row = mysql_fetch_row(result))) { phr_owner_id = atoi(row[0]); assigned_user_id = atoi(row[1]); if(!get_phr_ownername(db_conn, phr_owner_id, phr_ownername)) continue; if(!get_assigned_username(db_conn, assigned_user_id, assigned_user_authority_id, assigned_username)) continue; // Send the assigned access permission information write_token_into_buffer("is_end_of_assigned_access_permission_list_flag", "0", true, buffer); write_token_into_buffer("assigned_username", assigned_username, false, buffer); write_token_into_buffer("phr_ownername", phr_ownername, false, buffer); write_token_into_buffer("upload_permission_flag", row[2], false, buffer); write_token_into_buffer("download_permission_flag", row[3], false, buffer); write_token_into_buffer("delete_permission_flag", row[4], false, buffer); if(!SSL_send_buffer(ssl_client, buffer, strlen(buffer))) { fprintf(stderr, "Sending the assigned access permission information failed\n"); goto ERROR; } } if(result) { mysql_free_result(result); result = NULL; } // Send the end of assigned access permission list write_token_into_buffer("is_end_of_assigned_access_permission_list_flag", "1", true, buffer); if(!SSL_send_buffer(ssl_client, buffer, strlen(buffer))) { fprintf(stderr, "Sending the end of assigned access permission list failed\n"); goto ERROR; } return true; ERROR: if(result) { mysql_free_result(result); result = NULL; } return false; }
int main (int argc, char *argv[]) { MYSQL *mysql; MYSQL_RES *result; MYSQL_ROW row; my_bool reconnect = 0; mysql = mysql_init(NULL); mysql_options(mysql, MYSQL_OPT_RECONNECT, &reconnect); CONN(0); MYSQL_STMT *stmt, *stmt2; MYSQL_BIND bind[1]; MYSQL_BIND bResult[1]; MYSQL_BIND bResult2[1]; unsigned long length[1]; my_ulonglong affected_rows; short small_data; long long long_data; char int_data; my_bool is_null; stmt = mysql_stmt_init(mysql); stmt2 = mysql_stmt_init(mysql); char *normalSql = "select longcol from test1 where bytecol = 1"; char *stmtSql = "select longcol from test1 where bytecol = ?"; //1 mysql_stmt_prepare(stmt, stmtSql, strlen(stmtSql)); memset(bind, 0, sizeof(bind)); bind[0].buffer_type= MYSQL_TYPE_TINY; bind[0].buffer= (char *)&int_data; bind[0].is_null= 0; mysql_stmt_bind_param(stmt, bind); //2 mysql_stmt_prepare(stmt2, normalSql, strlen(normalSql)); //3 mysql_query(mysql, normalSql); result = mysql_store_result(mysql); while(mysql_fetch_row(result)); mysql_free_result(result); //2 memset(bResult2, 0, sizeof(bResult2)); bResult2[0].buffer_type= MYSQL_TYPE_LONGLONG; bResult2[0].buffer= (char *)&long_data; bResult2[0].is_null= &is_null; bResult2[0].length= &length[0]; mysql_stmt_bind_result(stmt2, bResult2); //1 memset(bResult, 0, sizeof(bResult)); bResult[0].buffer_type= MYSQL_TYPE_LONGLONG; bResult[0].buffer= (char *)&long_data; bResult[0].is_null= &is_null; bResult[0].length= &length[0]; mysql_stmt_bind_result(stmt, bResult); int_data= 1; mysql_stmt_execute(stmt2); mysql_stmt_store_result(stmt2); while(!mysql_stmt_fetch(stmt2)) { printf("2[%lld]\n", long_data); } //must execute -> store->fetch over,then mysql is ready status // other execute mysql_stmt_execute(stmt); mysql_stmt_store_result(stmt); while(!mysql_stmt_fetch(stmt)) { printf("1[%lld]\n", long_data); } mysql_query(mysql, normalSql); result = mysql_store_result(mysql); while(mysql_fetch_row(result)); mysql_free_result(result); int_data= 1; mysql_stmt_execute(stmt); mysql_stmt_store_result(stmt); while(!mysql_stmt_fetch(stmt)) { printf("3[%lld]\n", long_data); } mysql_stmt_execute(stmt2); mysql_stmt_store_result(stmt2); while(!mysql_stmt_fetch(stmt2)) { printf("4[%lld]\n", long_data); } mysql_stmt_reset(stmt); mysql_stmt_close(stmt); }
/** ========================================================================= */ static int report_error(mysql_connection_t *conn, char *mask_str) { int rc = 0; unsigned int num_fields; unsigned int num_rows, i; MYSQL_RES *res; MYSQL_ROW row; mask_val_t *mask_vals = parse_mask(mask_str); if (QUERY(conn, "select pe.SymbolErrors, pe.LinkRecovers," " pe.LinkDowned, pe.RcvErrors, pe.RcvRemotePhysErrors," " pe.RcvSwitchRelayErrors, pe.XmtDiscards," " pe.XmtConstraintErrors, pe.RcvConstraintErrors," " pe.LinkIntegrityErrors, pe.ExcBufOverrunErrors," " pe.VL15Dropped, n.name, pe.port, n.guid," " pd.xmit_data, pd.rcv_data, pd.xmit_pkts, pd.rcv_pkts," " pd.unicast_xmit_pkts, pd.unicast_rcv_pkts," " pd.multicast_xmit_pkts, pd.multicast_rcv_pkts, " " pd.port " " from " " port_errors as pe,nodes as n,port_data_counters as pd " " where" " n.guid=pe.guid and n.guid=pd.guid and pe.port=pd.port;" )) { fprintf(stderr, "Failed to query node errors\n"); return (1); } res = mysql_store_result(conn->conn); if ((num_fields = mysql_num_fields(res)) != 24) { fprintf(stderr, "%s:%d Failed to query node errors %d != 24\n", __FUNCTION__, __LINE__, num_fields); rc = 1; goto free_res; } num_rows = mysql_num_rows(res); if (num_rows == 0) { fprintf(stderr, "Failed to find any nodes in DB\n"); rc = 1; goto free_res; } for (i = 0; i < num_rows; i++) { uint64_t SymbolErrors; uint64_t LinkRecovers; uint64_t LinkDowned; uint64_t RcvErrors; uint64_t RcvRemotePhysErrors; uint64_t RcvSwitchRelayErrors; uint64_t XmtDiscards; uint64_t XmtConstraintErrors; uint64_t RcvConstraintErrors; uint64_t LinkIntegrityErrors; uint64_t ExcBufOverrunErrors; uint64_t VL15Dropped; uint64_t total = 0; row = mysql_fetch_row(res); SymbolErrors = COL_TO_UINT64(0); total += CHECK_MASK(SymbolErrors, mask_vals); LinkRecovers = COL_TO_UINT64(1); total += CHECK_MASK(LinkRecovers, mask_vals); LinkDowned = COL_TO_UINT64(2); total += CHECK_MASK(LinkDowned, mask_vals); RcvErrors = COL_TO_UINT64(3); total += CHECK_MASK(RcvErrors, mask_vals); RcvRemotePhysErrors = COL_TO_UINT64(4); total += CHECK_MASK(RcvRemotePhysErrors, mask_vals); RcvSwitchRelayErrors = COL_TO_UINT64(5); total += CHECK_MASK(RcvSwitchRelayErrors, mask_vals); XmtDiscards = COL_TO_UINT64(6); total += CHECK_MASK(XmtDiscards, mask_vals); XmtConstraintErrors = COL_TO_UINT64(7); total += CHECK_MASK(XmtConstraintErrors, mask_vals); RcvConstraintErrors = COL_TO_UINT64(8); total += CHECK_MASK(RcvConstraintErrors, mask_vals); LinkIntegrityErrors = COL_TO_UINT64(9); total += CHECK_MASK(LinkIntegrityErrors, mask_vals); ExcBufOverrunErrors = COL_TO_UINT64(10); total += CHECK_MASK(ExcBufOverrunErrors, mask_vals); VL15Dropped = COL_TO_UINT64(11); total += CHECK_MASK(VL15Dropped, mask_vals); if (total > 0) { char node_desc[65]; char *node_name = NULL; strncpy(node_desc, row[12], 64); node_name = remap_node_name(node_name_map, COL_TO_UINT64(14), node_desc); print_report_error_res(node_name, row, total); free(node_name); } } free_res: mysql_free_result(res); return (rc); }
int main (int argc, char **argv) { MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; /* should be status */ char *result = NULL; char *error = NULL; char slaveresult[SLAVERESULTSIZE]; char* perf; perf = strdup (""); setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); /* Parse extra opts if any */ argv=np_extra_opts (&argc, argv, progname); if (process_arguments (argc, argv) == ERROR) usage4 (_("Could not parse arguments")); /* initialize mysql */ mysql_init (&mysql); if (opt_file != NULL) mysql_options(&mysql,MYSQL_READ_DEFAULT_FILE,opt_file); if (opt_group != NULL) mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,opt_group); else mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"client"); if (ssl) mysql_ssl_set(&mysql,key,cert,ca_cert,ca_dir,ciphers); /* establish a connection to the server and error checking */ if (!mysql_real_connect(&mysql,db_host,db_user,db_pass,db,db_port,db_socket,0)) { if (ignore_auth && mysql_errno (&mysql) == ER_ACCESS_DENIED_ERROR) { printf("MySQL OK - Version: %s (protocol %d)\n", mysql_get_server_info(&mysql), mysql_get_proto_info(&mysql) ); mysql_close (&mysql); return STATE_OK; } else if (mysql_errno (&mysql) == CR_UNKNOWN_HOST) die (STATE_WARNING, "%s\n", mysql_error (&mysql)); else if (mysql_errno (&mysql) == CR_VERSION_ERROR) die (STATE_WARNING, "%s\n", mysql_error (&mysql)); else if (mysql_errno (&mysql) == CR_OUT_OF_MEMORY) die (STATE_WARNING, "%s\n", mysql_error (&mysql)); else if (mysql_errno (&mysql) == CR_IPSOCK_ERROR) die (STATE_WARNING, "%s\n", mysql_error (&mysql)); else if (mysql_errno (&mysql) == CR_SOCKET_CREATE_ERROR) die (STATE_WARNING, "%s\n", mysql_error (&mysql)); else die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); } /* get the server stats */ result = strdup (mysql_stat (&mysql)); /* error checking once more */ if (mysql_error (&mysql)) { if (mysql_errno (&mysql) == CR_SERVER_GONE_ERROR) die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); else if (mysql_errno (&mysql) == CR_SERVER_LOST) die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); else if (mysql_errno (&mysql) == CR_UNKNOWN_ERROR) die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); } /* try to fetch some perf data */ if (mysql_query (&mysql, "show global status") == 0) { if ( (res = mysql_store_result (&mysql)) == NULL) { error = strdup(mysql_error(&mysql)); mysql_close (&mysql); die (STATE_CRITICAL, _("status store_result error: %s\n"), error); } while ( (row = mysql_fetch_row (res)) != NULL) { int i; for(i = 0; i < LENGTH_METRIC_UNIT; i++) { if (strcmp(row[0], metric_unit[i]) == 0) { xasprintf(&perf, "%s%s ", perf, perfdata(metric_unit[i], atol(row[1]), "", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0)); continue; } } for(i = 0; i < LENGTH_METRIC_COUNTER; i++) { if (strcmp(row[0], metric_counter[i]) == 0) { xasprintf(&perf, "%s%s ", perf, perfdata(metric_counter[i], atol(row[1]), "c", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0)); continue; } } } /* remove trailing space */ if (strlen(perf) > 0) perf[strlen(perf) - 1] = '\0'; } if(check_slave) { /* check the slave status */ if (mysql_query (&mysql, "show slave status") != 0) { error = strdup(mysql_error(&mysql)); mysql_close (&mysql); die (STATE_CRITICAL, _("slave query error: %s\n"), error); } /* store the result */ if ( (res = mysql_store_result (&mysql)) == NULL) { error = strdup(mysql_error(&mysql)); mysql_close (&mysql); die (STATE_CRITICAL, _("slave store_result error: %s\n"), error); } /* Check there is some data */ if (mysql_num_rows(res) == 0) { mysql_close(&mysql); die (STATE_WARNING, "%s\n", _("No slaves defined")); } /* fetch the first row */ if ( (row = mysql_fetch_row (res)) == NULL) { error = strdup(mysql_error(&mysql)); mysql_free_result (res); mysql_close (&mysql); die (STATE_CRITICAL, _("slave fetch row error: %s\n"), error); } if (mysql_field_count (&mysql) == 12) { /* mysql 3.23.x */ snprintf (slaveresult, SLAVERESULTSIZE, _("Slave running: %s"), row[6]); if (strcmp (row[6], "Yes") != 0) { mysql_free_result (res); mysql_close (&mysql); die (STATE_CRITICAL, "%s\n", slaveresult); } } else { /* mysql 4.x.x and mysql 5.x.x */ int slave_io_field = -1 , slave_sql_field = -1, seconds_behind_field = -1, i, num_fields; MYSQL_FIELD* fields; num_fields = mysql_num_fields(res); fields = mysql_fetch_fields(res); for(i = 0; i < num_fields; i++) { if (strcmp(fields[i].name, "Slave_IO_Running") == 0) { slave_io_field = i; continue; } if (strcmp(fields[i].name, "Slave_SQL_Running") == 0) { slave_sql_field = i; continue; } if (strcmp(fields[i].name, "Seconds_Behind_Master") == 0) { seconds_behind_field = i; continue; } } /* Check if slave status is available */ if ((slave_io_field < 0) || (slave_sql_field < 0) || (num_fields == 0)) { mysql_free_result (res); mysql_close (&mysql); die (STATE_CRITICAL, "Slave status unavailable\n"); } /* Save slave status in slaveresult */ snprintf (slaveresult, SLAVERESULTSIZE, "Slave IO: %s Slave SQL: %s Seconds Behind Master: %s", row[slave_io_field], row[slave_sql_field], seconds_behind_field!=-1?row[seconds_behind_field]:"Unknown"); /* Raise critical error if SQL THREAD or IO THREAD are stopped */ if (strcmp (row[slave_io_field], "Yes") != 0 || strcmp (row[slave_sql_field], "Yes") != 0) { mysql_free_result (res); mysql_close (&mysql); die (STATE_CRITICAL, "%s\n", slaveresult); } if (verbose >=3) { if (seconds_behind_field == -1) { printf("seconds_behind_field not found\n"); } else { printf ("seconds_behind_field(index %d)=%s\n", seconds_behind_field, row[seconds_behind_field]); } } /* Check Seconds Behind against threshold */ if ((seconds_behind_field != -1) && (strcmp (row[seconds_behind_field], "NULL") != 0)) { double value = atof(row[seconds_behind_field]); int status; status = get_status(value, my_threshold); xasprintf (&perf, "%s %s", perf, fperfdata ("seconds behind master", value, "s", TRUE, (double) warning_time, TRUE, (double) critical_time, FALSE, 0, FALSE, 0)); if (status == STATE_WARNING) { printf("SLOW_SLAVE %s: %s|%s\n", _("WARNING"), slaveresult, perf); exit(STATE_WARNING); } else if (status == STATE_CRITICAL) { printf("SLOW_SLAVE %s: %s|%s\n", _("CRITICAL"), slaveresult, perf); exit(STATE_CRITICAL); } } } /* free the result */ mysql_free_result (res); } /* close the connection */ mysql_close (&mysql); /* print out the result of stats */ if (check_slave) { printf ("%s %s|%s\n", result, slaveresult, perf); } else { printf ("%s|%s\n", result, perf); } return STATE_OK; }
/** ========================================================================= * Port <= 0 indicates "all" ports */ static int report(mysql_connection_t *conn, char *node, int port) { int rc = 0; unsigned int num_fields; unsigned int num_rows, i; MYSQL_RES *res; MYSQL_ROW row; #define CLAUSE_SIZE (256) char node_clause[CLAUSE_SIZE]; char port_clause[CLAUSE_SIZE]; if (node) { /* check to see if the node is specified by name or guid */ uint64_t guid = strtoull(node, NULL, 0); if (guid == 0) guid = get_guid_for_name(node_name_map, node); if (guid == 0) { snprintf(node_clause, CLAUSE_SIZE, " and n.name=\"%s\"", node); } else { snprintf(node_clause, CLAUSE_SIZE, " and n.guid=%"PRIuLEAST64, guid); } } else { node_clause[0] = '\0'; } if (port > 0) { snprintf(port_clause, CLAUSE_SIZE, " and pe.port=%d", port); } else { port_clause[0] = '\0'; } if (QUERY(conn, "select pe.SymbolErrors, pe.LinkRecovers," " pe.LinkDowned, pe.RcvErrors, pe.RcvRemotePhysErrors," " pe.RcvSwitchRelayErrors, pe.XmtDiscards," " pe.XmtConstraintErrors, pe.RcvConstraintErrors," " pe.LinkIntegrityErrors, pe.ExcBufOverrunErrors," " pe.VL15Dropped, n.name, pe.port, n.guid," " pd.xmit_data, pd.rcv_data, pd.xmit_pkts, pd.rcv_pkts," " pd.unicast_xmit_pkts, pd.unicast_rcv_pkts," " pd.multicast_xmit_pkts, pd.multicast_rcv_pkts, " " pd.port " " from " " port_errors as pe,nodes as n,port_data_counters as pd " " where" " n.guid=pe.guid and n.guid=pd.guid and pe.port=pd.port %s %s;", node_clause, port_clause)) { fprintf(stderr, "Failed to query node errors"); if (node) { fprintf(stderr, " for \"%s\"", node); } else { fprintf(stderr, "\n"); } return (1); } res = mysql_store_result(conn->conn); if ((num_fields = mysql_num_fields(res)) != 24) { fprintf(stderr, "%s:%d Failed to query node errors %d != 24\n", __FUNCTION__, __LINE__, num_fields); rc = 1; goto free_res; } num_rows = mysql_num_rows(res); if (num_rows == 0) { if (node) { if (port <= 0) { fprintf(stderr, "Node \"%s\" (port %s) not found in DB\n", node, "\"all\""); } else { fprintf(stderr, "Node \"%s\" (port %d) not found in DB\n", node, port); } } else { fprintf(stderr, "Failed to find any nodes in DB\n"); } rc = 1; goto free_res; } for (i = 0; i < num_rows; i++) { char node_desc[65]; char *node_name = NULL; row = mysql_fetch_row(res); strncpy(node_desc, row[12], 64); node_name = remap_node_name(node_name_map, COL_TO_UINT64(14), node_desc); if (skummee_output) { clean_node_name(node_name); print_report_line_res(node_name, row); } else print_report_res(node_name, row); free(node_name); } free_res: mysql_free_result(res); return (rc); }
static int query_status(mysql_connection_t *conn) { int rc = 0; unsigned int num_fields; unsigned int num_rows, i; uint64_t errors = 0; MYSQL_RES *res; MYSQL_ROW row; #if HAVE_LIBGENDERS genders_t genders_handle; char **nodes = NULL; int num_nodes = 0; switch_error_sum_t switch_error_sum; memset(&switch_error_sum, 0, (sizeof switch_error_sum)); #endif /* issue the query join for any errors */ if (QUERY(conn, "select pe.SymbolErrors, pe.LinkRecovers," " pe.LinkDowned, pe.RcvErrors, pe.RcvRemotePhysErrors," " pe.RcvSwitchRelayErrors, pe.XmtDiscards," " pe.XmtConstraintErrors, pe.RcvConstraintErrors," " pe.LinkIntegrityErrors, pe.ExcBufOverrunErrors," " pe.VL15Dropped, n.name, pe.port, n.guid" " from port_errors as pe,nodes as n where n.guid=pe.guid;")) { fprintf(stderr, "Failed to query node errors\n"); return (1); } res = mysql_store_result(conn->conn); if ((num_fields = mysql_num_fields(res)) != 15) { fprintf(stderr, "%s:%d Failed to query status %d != 14\n", __FUNCTION__, __LINE__, num_fields); rc = 1; goto free_res; } num_rows = mysql_num_rows(res); #if HAVE_LIBGENDERS genders_handle = genders_handle_create(); if (!genders_handle || genders_load_data(genders_handle, NULL)) { fprintf(stderr, "Genders load failed: %s\n", genders_handle ? genders_errormsg(genders_handle) : "handle creation failed"); goto genders_open_fail; } #endif /* The basic algo is to sum up all the errors and report them together */ for (i = 0; i < num_rows; i++) { char node_desc[65]; char *node_name = NULL; row = mysql_fetch_row(res); /* add up all the errors reported. */ errors = 0; errors += COL_TO_UINT64(0); errors += COL_TO_UINT64(1); errors += COL_TO_UINT64(2); errors += COL_TO_UINT64(3); errors += COL_TO_UINT64(4); errors += COL_TO_UINT64(5); errors += COL_TO_UINT64(6); errors += COL_TO_UINT64(7); errors += COL_TO_UINT64(8); errors += COL_TO_UINT64(9); errors += COL_TO_UINT64(10); errors += COL_TO_UINT64(11); #if HAVE_LIBGENDERS if (sum_fabric_errors && !genders_isnode(genders_handle, row[12])) { switch_error_sum.SymbolErrors += COL_TO_UINT64(0); switch_error_sum.LinkRecovers += COL_TO_UINT64(1); switch_error_sum.LinkDowned += COL_TO_UINT64(2); switch_error_sum.RcvErrors += COL_TO_UINT64(3); switch_error_sum.RcvRemotePhysErrors += COL_TO_UINT64(4); switch_error_sum.RcvSwitchRelayErrors += COL_TO_UINT64(5); switch_error_sum.XmtDiscards += COL_TO_UINT64(6); switch_error_sum.XmtConstraintErrors += COL_TO_UINT64(7); switch_error_sum.RcvConstraintErrors += COL_TO_UINT64(8); switch_error_sum.LinkIntegrityErrors += COL_TO_UINT64(9); switch_error_sum.ExcBufOverrunErrors += COL_TO_UINT64(10); switch_error_sum.VL15Dropped += COL_TO_UINT64(11); } #endif strncpy(node_desc, row[12], 64); node_name = remap_node_name(node_name_map, COL_TO_UINT64(14), node_desc); clean_node_name(node_name); printf("%s,ibport%s-error_sum,%"PRIuLEAST64"\n", node_name, row[13], errors); free(node_name); } #if HAVE_LIBGENDERS if (sum_fabric_errors) { printf("%s,SymbolErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.SymbolErrors); printf("%s,SymbolErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.SymbolErrors); printf("%s,LinkRecovers_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.LinkRecovers); printf("%s,LinkRecovers_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.LinkRecovers); printf("%s,LinkDowned_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.LinkDowned); printf("%s,LinkDowned_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.LinkDowned); printf("%s,RcvErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvErrors); printf("%s,RcvErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvErrors); printf("%s,RcvRemotePhysErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvRemotePhysErrors); printf("%s,RcvRemotePhysErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvRemotePhysErrors); printf("%s,RcvSwitchRelayErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvSwitchRelayErrors); printf("%s,RcvSwitchRelayErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvSwitchRelayErrors); printf("%s,XmtDiscards_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.XmtDiscards); printf("%s,XmtDiscards_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.XmtDiscards); printf("%s,XmtConstraintErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.XmtConstraintErrors); printf("%s,XmtConstraintErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.XmtConstraintErrors); printf("%s,RcvConstraintErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvConstraintErrors); printf("%s,RcvConstraintErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.RcvConstraintErrors); printf("%s,LinkIntegrityErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.LinkIntegrityErrors); printf("%s,LinkIntegrityErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.LinkIntegrityErrors); printf("%s,ExcBufOverrunErrors_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.ExcBufOverrunErrors); printf("%s,ExcBufOverrunErrors_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.ExcBufOverrunErrors); printf("%s,VL15Dropped_sum,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.VL15Dropped); printf("%s,VL15Dropped_sum_counter,%"PRIuLEAST64"\n", IB_SWITCH_TOTAL_NODE_NAME, switch_error_sum.VL15Dropped); } genders_open_fail: genders_handle_destroy(genders_handle); #endif free_res: mysql_free_result(res); return (rc); }
BOOL KIDSequence::GenerateID(const char cszSequenceName[], int nPrefetch, uint64_t* puRetID) { BOOL bResult = false; int nRetCode = false; KID_PREFETCH_INFO* pPrefetch = NULL; MYSQL_RES* pQueryRes = NULL; uint64_t uStartID = 0; my_ulonglong uRowCount = 0; MYSQL_ROW Row; char szQuery[256]; KID_PREFETCH_TABLE::iterator it; std::pair<KID_PREFETCH_TABLE::iterator, BOOL> InsRet; assert(cszSequenceName); assert(puRetID); assert(m_pDBHandle); assert(nPrefetch >= 1); m_Mutex.Lock(); it = m_PrefetchTable.find(cszSequenceName); if (it != m_PrefetchTable.end()) { pPrefetch = &it->second; } else { InsRet = m_PrefetchTable.insert(std::make_pair(cszSequenceName, KID_PREFETCH_INFO())); KGLOG_PROCESS_ERROR(InsRet.second); pPrefetch = &InsRet.first->second; pPrefetch->uIDEnd = 0; pPrefetch->uNextID = 0; } if (pPrefetch->uNextID < pPrefetch->uIDEnd) goto Exit1; while(true) { nRetCode = snprintf( szQuery, sizeof(szQuery), "select %s from %s where %s = '%s'", SEQ_CURRENT_ID, SEQ_TABLE_NAME, SEQ_NAME, cszSequenceName ); KGLOG_PROCESS_ERROR(nRetCode > 0 && nRetCode < (int)sizeof(szQuery)); nRetCode = DoQuery(szQuery); KGLOG_PROCESS_ERROR(nRetCode); if (pQueryRes) { mysql_free_result(pQueryRes); pQueryRes = NULL; } pQueryRes = mysql_store_result(m_pDBHandle); KGLOG_PROCESS_ERROR(pQueryRes); uRowCount = mysql_num_rows(pQueryRes); if (uRowCount == 0) { nRetCode = snprintf( szQuery, sizeof(szQuery), "insert into %s (%s, %s) values('%s', 1)", SEQ_TABLE_NAME, SEQ_NAME, SEQ_CURRENT_ID, cszSequenceName ); KGLOG_PROCESS_ERROR(nRetCode > 0 && nRetCode < (int)sizeof(szQuery)); nRetCode = DoQuery(szQuery); KGLOG_PROCESS_ERROR(nRetCode); continue; } Row = mysql_fetch_row(pQueryRes); KGLOG_PROCESS_ERROR(Row); assert(Row[0]); uStartID = (uint64_t)strtoull(Row[0], NULL, 10); KGLOG_PROCESS_ERROR(uStartID < ULLONG_MAX - nPrefetch); nRetCode = snprintf( szQuery, sizeof(szQuery), "update %s set %s = %s + %d where %s = '%s' and %s = %llu", SEQ_TABLE_NAME, SEQ_CURRENT_ID, SEQ_CURRENT_ID, nPrefetch, SEQ_NAME, cszSequenceName, SEQ_CURRENT_ID, uStartID ); KGLOG_PROCESS_ERROR(nRetCode > 0 && nRetCode < (int)sizeof(szQuery)); nRetCode = DoQuery(szQuery); KGLOG_PROCESS_ERROR(nRetCode); nRetCode = (int)mysql_affected_rows(m_pDBHandle); if (nRetCode == 1) break; } pPrefetch->uIDEnd = uStartID + nPrefetch; pPrefetch->uNextID = uStartID; Exit1: *puRetID = pPrefetch->uNextID++; bResult = true; Exit0: if (pQueryRes) { mysql_free_result(pQueryRes); pQueryRes = NULL; } m_Mutex.Unlock(); return bResult; }
/* * This is the main server bit * * It receives SQL statements and executes them, breaking at EOF */ void mainloop() { int sz; string *str = NULL; MYSQL_RES *res; int complete = -1; int ans; char format; str = new_string(); while(isloop) { signal(SIGINT, sighand); signal(SIGTERM, sighand); complete = -1; sz = message_receive(mes, str, &complete, MES_CLIENT_TO_SERVER); if(sz < 0) { /* * End of file */ isloop = 0; break; } else if(sz <= 1) continue; format = *(string_s(str)); ans = mysql_query(sqldb, string_s(str) + 1); string_clear(str); if(ans) { message_status(mes, 127, "cannot execute mysql query", MES_SERVER_TO_CLIENT); } else { if((res = mysql_store_result(sqldb)) == NULL) { if(mysql_field_count(sqldb)) message_status(mes, 127, "Error retrieveing mysql data", MES_SERVER_TO_CLIENT); else message_send(mes, str, -1, MES_SERVER_TO_CLIENT); /* Is a DML query */ } else { dolines(res, format); mysql_free_result(res); message_send(mes, str, -1, MES_SERVER_TO_CLIENT); /* Is a DML query */ } } } string_delete(str); }
PKI_MEM_STACK *URL_get_data_mysql_url ( const URL *url, ssize_t size ) { #ifdef HAVE_MYSQL MYSQL_ROW row; MYSQL * sql = NULL; MYSQL_FIELD *fields = NULL; MYSQL_RES *res = NULL; unsigned long *lengths = NULL; long long n_rows = 0; int n_fields = 0; PKI_MEM *tmp_mem = NULL; PKI_MEM_STACK *sk = NULL; char * query = NULL; if( !url ) return (NULL); if((sql = db_connect ( url )) == NULL ) { return NULL; } if ((query = parse_url_query(url)) == NULL) { PKI_log_err("Can not parse URL query"); goto end; } else mysql_query(sql, query); /* Get the Data */ if((res = mysql_store_result( sql )) == NULL) { PKI_log_err("Can not retrieve SQL data"); goto end; } if( ((n_rows = (long long) mysql_num_rows( res )) < 1 ) || ((sk = PKI_STACK_MEM_new()) == NULL)) { PKI_log_err("No returned rows found"); goto end; } while((row = mysql_fetch_row(res)) != NULL ) { /* Count the number of fields retrieved */ n_fields = (int) mysql_num_fields( res ); lengths = mysql_fetch_lengths( res ); fields = mysql_fetch_fields( res ); if (!fields) { PKI_ERROR(PKI_ERR_GENERAL, "can not fetch query fields"); break; } if (n_fields > 0) { tmp_mem = PKI_MEM_new_null(); if (size == 0 || (( size > 0 ) && ( lengths[0] < size))) { PKI_MEM_add(tmp_mem,row[0],lengths[0]); /* For now, let's only deal with one field at the time */ PKI_STACK_push( sk, tmp_mem ); } } } end: if (query) PKI_Free (query); db_close ( sql ); return ( sk ); #else return ( NULL ); #endif }
int OGRMySQLDataSource::Open( const char * pszNewName, char** papszOpenOptionsIn, int bUpdate ) { CPLAssert( nLayers == 0 ); /* -------------------------------------------------------------------- */ /* Use options process to get .my.cnf file contents. */ /* -------------------------------------------------------------------- */ int nPort = 0; char **papszTableNames=nullptr; std::string oHost, oPassword, oUser, oDB; CPLString osNewName(pszNewName); const char* apszOpenOptions[] = { "dbname", "port", "user", "password", "host", "tables" }; for(int i=0; i <(int)(sizeof(apszOpenOptions)/sizeof(char*));i++) { const char* pszVal = CSLFetchNameValue(papszOpenOptionsIn, apszOpenOptions[i]); if( pszVal ) { if( osNewName.back() != ':' ) osNewName += ","; if( i > 0 ) { osNewName += apszOpenOptions[i]; osNewName += "="; } if( EQUAL(apszOpenOptions[i], "tables") ) { for( ; *pszVal; ++pszVal ) { if( *pszVal == ',' ) osNewName += ";"; else osNewName += *pszVal; } } else osNewName += pszVal; } } /* -------------------------------------------------------------------- */ /* Parse out connection information. */ /* -------------------------------------------------------------------- */ char **papszItems = CSLTokenizeString2( osNewName+6, ",", CSLT_HONOURSTRINGS ); if( CSLCount(papszItems) < 1 ) { CSLDestroy( papszItems ); CPLError( CE_Failure, CPLE_AppDefined, "MYSQL: request missing databasename." ); return FALSE; } oDB = papszItems[0]; for( int i = 1; papszItems[i] != nullptr; i++ ) { if( STARTS_WITH_CI(papszItems[i], "user="******"password="******"host=") ) oHost = papszItems[i] + 5; else if( STARTS_WITH_CI(papszItems[i], "port=") ) nPort = atoi(papszItems[i] + 5); else if( STARTS_WITH_CI(papszItems[i], "tables=") ) { CSLDestroy(papszTableNames); papszTableNames = CSLTokenizeStringComplex( papszItems[i] + 7, ";", FALSE, FALSE ); } else CPLError( CE_Warning, CPLE_AppDefined, "'%s' in MYSQL datasource definition not recognised and ignored.", papszItems[i] ); } CSLDestroy( papszItems ); /* -------------------------------------------------------------------- */ /* Try to establish connection. */ /* -------------------------------------------------------------------- */ hConn = mysql_init( nullptr ); if( hConn == nullptr ) { CPLError( CE_Failure, CPLE_AppDefined, "mysql_init() failed." ); } /* -------------------------------------------------------------------- */ /* Set desired options on the connection: charset and timeout. */ /* -------------------------------------------------------------------- */ if( hConn ) { const char *pszTimeoutLength = CPLGetConfigOption( "MYSQL_TIMEOUT", "0" ); unsigned int timeout = atoi(pszTimeoutLength); mysql_options(hConn, MYSQL_OPT_CONNECT_TIMEOUT, (char*)&timeout); mysql_options(hConn, MYSQL_SET_CHARSET_NAME, "utf8" ); } /* -------------------------------------------------------------------- */ /* Perform connection. */ /* -------------------------------------------------------------------- */ if( hConn && mysql_real_connect( hConn, oHost.length() ? oHost.c_str() : nullptr, oUser.length() ? oUser.c_str() : nullptr, oPassword.length() ? oPassword.c_str() : nullptr, oDB.length() ? oDB.c_str() : nullptr, nPort, nullptr, CLIENT_INTERACTIVE ) == nullptr ) { CPLError( CE_Failure, CPLE_AppDefined, "MySQL connect failed for: %s\n%s", pszNewName + 6, mysql_error( hConn ) ); mysql_close( hConn ); hConn = nullptr; } if( hConn == nullptr ) { CSLDestroy( papszTableNames ); return FALSE; } else { // Enable automatic reconnection #if defined(LIBMYSQL_VERSION_ID) && (LIBMYSQL_VERSION_ID >= 80000) bool reconnect = 1; #else my_bool reconnect = 1; #endif // Must be called after mysql_real_connect() on MySQL < 5.0.19 // and at any point on more recent versions. mysql_options(hConn, MYSQL_OPT_RECONNECT, &reconnect); } pszName = CPLStrdup( pszNewName ); bDSUpdate = bUpdate; /* -------------------------------------------------------------------- */ /* Check version. */ /* -------------------------------------------------------------------- */ auto versionLyr = ExecuteSQL("SELECT VERSION()", nullptr, nullptr); if( versionLyr ) { auto versionFeat = versionLyr->GetNextFeature(); if( versionFeat ) { const char* pszVersion = versionFeat->GetFieldAsString(0); m_nMajor = atoi(pszVersion); const char* pszDot = strchr(pszVersion, '.'); if( pszDot ) m_nMinor = atoi(pszDot+1); m_bIsMariaDB = strstr(pszVersion, "MariaDB") != nullptr; } delete versionFeat; ReleaseResultSet(versionLyr); } /* -------------------------------------------------------------------- */ /* Get a list of available tables. */ /* -------------------------------------------------------------------- */ if( papszTableNames == nullptr ) { MYSQL_RES *hResultSet; MYSQL_ROW papszRow; if( mysql_query( hConn, "SHOW TABLES" ) ) { ReportError( "SHOW TABLES Failed" ); return FALSE; } hResultSet = mysql_store_result( hConn ); if( hResultSet == nullptr ) { ReportError( "mysql_store_result() failed on SHOW TABLES result."); return FALSE; } while( (papszRow = mysql_fetch_row( hResultSet )) != nullptr ) { if( papszRow[0] == nullptr ) continue; if( EQUAL(papszRow[0],"spatial_ref_sys") || EQUAL(papszRow[0],"geometry_columns") ) continue; papszTableNames = CSLAddString(papszTableNames, papszRow[0] ); } mysql_free_result( hResultSet ); } /* -------------------------------------------------------------------- */ /* Get the schema of the available tables. */ /* -------------------------------------------------------------------- */ for( int iRecord = 0; papszTableNames != nullptr && papszTableNames[iRecord] != nullptr; iRecord++ ) { // FIXME: This should be fixed to deal with tables // for which we can't open because the name is bad/ OpenTable( papszTableNames[iRecord], bUpdate ); } CSLDestroy( papszTableNames ); return nLayers > 0 || bUpdate; }
int match(int mode,char *ch,int conn_fd) { //匹配用户输入的用户名和密码 MES mes; memset(&mes,0,sizeof(MES)); char sql[50]; int res;//执行sql语句后的返回标志 MYSQL_RES *res_ptr;//指向查询结果的指针 MYSQL_FIELD *field;//字段结构指针 MYSQL_ROW result_row;//按行返回查询信息 int row,column;//查询返回的行数和列数 MYSQL *conn;//一个数据库链接 int i,j; int pan=0; char name[20],pass[20]; for(i=0;ch[i]!=';';i++) { name[i] = ch[i]; } name[i] = '\0'; i++; for(j=0;ch[i]!='\0';j++,i++) { pass[j]=ch[i]; } pass[j]='\0'; //初始化连接句柄 conn = mysql_init(NULL); if(conn == NULL) { //如果返回NULL说明初始化失败 printf("mysql_init failed!\n"); return EXIT_FAILURE; } //进行实际连接 //参数 conn连接句柄,host mysql所在的主机或地址,user用户名,passwd密码,database_name数据库名,后面的都是默认 conn = mysql_real_connect(conn,HOSTNAME,USER,PASS,DATABASE,0,NULL,0); if (!conn) { printf("Connection failed!\n"); } mysql_query(conn,"set names gbk");//防止乱码。设置和数据库的编码一致就不会乱码 if(mode == 2) { sprintf(sql,"SELECT name FROM info WHERE name='%s';",name); //puts(sql); //查询注册是否重名 res = mysql_query(conn,sql);//正确返回0 if(res) { perror("my_query"); mysql_close(conn); exit(0); } else{ //把查询结果给res_ptr res_ptr = mysql_store_result(conn); //如果结果为空,未重名,添加账号 if(res_ptr) { int ro; ro = mysql_num_rows(res_ptr); if(ro == 0){ pan = 1; } } } if(pan) { sprintf(sql,"INSERT INTO info(name,pass) VALUES('%s','%s');",name,pass); //puts(sql); res = mysql_query(conn,sql);//正确返回0 if(res) { perror("my_query"); mysql_close(conn); exit(0); } mes.resault = 1; create_friend_table(name); if(send(conn_fd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } }else { mes.resault = 0; if(send(conn_fd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } } } else if(mode == 1) { sprintf(sql,"SELECT * FROM info WHERE name='%s' AND pass='******';",name,pass); //查询登陆是否正确 res = mysql_query(conn,sql);//正确返回0 if(res) { perror("my_query"); mysql_close(conn); exit(0); } else{ //把查询结果给res_ptr res_ptr = mysql_store_result(conn); //如果结果不为空,则登陆成功 if(res_ptr) { int ro; ro = mysql_num_rows(res_ptr); if(ro != 0){ U_L *temp=head->next; while(temp!=NULL) { if(strcmp(temp->name,name) == 0) { pan = 0; break; } temp=temp->next; } if(temp==NULL) pan = 1; } } } if(pan) { mes.resault = 1; if(send(conn_fd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } }else { mes.resault = 0; if(send(conn_fd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } } } //退出前关闭连接 mysql_close(conn); return pan; }
OGRSpatialReference *OGRMySQLDataSource::FetchSRS( int nId ) { if( nId < 0 ) return nullptr; /* -------------------------------------------------------------------- */ /* First, we look through our SRID cache, is it there? */ /* -------------------------------------------------------------------- */ for( int i = 0; i < nKnownSRID; i++ ) { if( panSRID[i] == nId ) return papoSRS[i]; } OGRSpatialReference *poSRS = nullptr; // make sure to attempt to free any old results MYSQL_RES *hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; char szCommand[128] = {}; if( GetMajorVersion() < 8 || IsMariaDB() ) { snprintf( szCommand, sizeof(szCommand), "SELECT srtext FROM spatial_ref_sys WHERE srid = %d", nId ); } else { snprintf( szCommand, sizeof(szCommand), "SELECT DEFINITION FROM INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS WHERE SRS_ID = %d", nId ); } if( !mysql_query( GetConn(), szCommand ) ) hResult = mysql_store_result( GetConn() ); char *pszWKT = nullptr; char **papszRow = nullptr; if( hResult != nullptr ) papszRow = mysql_fetch_row( hResult ); if( papszRow != nullptr && papszRow[0] != nullptr ) { pszWKT = CPLStrdup(papszRow[0]); } if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; poSRS = new OGRSpatialReference(); poSRS->SetAxisMappingStrategy(OAMS_TRADITIONAL_GIS_ORDER); if( pszWKT == nullptr || poSRS->importFromWkt( pszWKT ) != OGRERR_NONE ) { delete poSRS; poSRS = nullptr; } CPLFree(pszWKT); if( poSRS ) { // The WKT found in MySQL 8 ST_SPATIAL_REFERENCE_SYSTEMS is not // compatible of what GDAL understands. const char* pszAuthorityName = poSRS->GetAuthorityName(nullptr); const char* pszAuthorityCode = poSRS->GetAuthorityCode(nullptr); if (pszAuthorityName != nullptr && EQUAL(pszAuthorityName, "EPSG") && pszAuthorityCode != nullptr && strlen(pszAuthorityCode) > 0 ) { /* Import 'clean' SRS */ poSRS->importFromEPSG( atoi(pszAuthorityCode) ); } } /* -------------------------------------------------------------------- */ /* Add to the cache. */ /* -------------------------------------------------------------------- */ panSRID = (int *) CPLRealloc(panSRID,sizeof(int) * (nKnownSRID+1) ); papoSRS = (OGRSpatialReference **) CPLRealloc(papoSRS, sizeof(void*) * (nKnownSRID + 1) ); panSRID[nKnownSRID] = nId; papoSRS[nKnownSRID] = poSRS; nKnownSRID ++; return poSRS; }
void chat_group(MES mes) { char sql[255]; int res;//执行sql语句后的返回标志 MYSQL_RES *res_ptr;//指向查询结果的指针 MYSQL_FIELD *field;//字段结构指针 MYSQL_ROW result_row;//按行返回查询信息 int row,column;//查询返回的行数和列数 MYSQL *conn;//一个数据库链接 //初始化连接句柄 conn = mysql_init(NULL); if(conn == NULL) { //如果返回NULL说明初始化失败 printf("mysql_init failed!\n"); return;// EXIT_FAILURE; } conn = mysql_real_connect(conn,HOSTNAME,USER,PASS,DATABASE,0,NULL,0); if (!conn) { printf("Connection failed!\n"); } mysql_query(conn,"set names gbk"); //防止乱码。设置和数据库的编码一致就不会乱码 sprintf(sql,"SELECT * FROM group_%s;",mes.to); //puts(sql); res = mysql_query(conn,sql);//正确返回0 if(res) { perror("my_query"); mysql_close(conn); exit(0); } else{ //把查询结果给res_ptr res_ptr = mysql_store_result(conn); if(res_ptr) { int ro; ro = mysql_num_rows(res_ptr); int i; for(i=1;i<ro+1;i++) { //将群消息发给每个人 result_row = mysql_fetch_row(res_ptr); //printf("打算发消息给%s\n",result_row[0]); int dd; if((dd=search_fd(result_row[0])) == 0) { continue; } if(search_fd(result_row[0]) == search_fd(mes.from)) { continue; } if(send(dd,&mes,sizeof(MES),0) < 0) { my_err("send",__LINE__); exit(0); } //printf("已经发消息给%s\n",result_row[0]); } add_group_message(mes); //puts("添加一条群聊记录!"); } } mysql_close(conn); }
OGRLayer * OGRMySQLDataSource::ICreateLayer( const char * pszLayerNameIn, OGRSpatialReference *poSRS, OGRwkbGeometryType eType, char ** papszOptions ) { MYSQL_RES *hResult=nullptr; CPLString osCommand; const char *pszGeometryType; const char *pszGeomColumnName; const char *pszExpectedFIDName; char *pszLayerName; // int nDimension = 3; // MySQL only supports 2d currently /* -------------------------------------------------------------------- */ /* Make sure there isn't an active transaction already. */ /* -------------------------------------------------------------------- */ InterruptLongResult(); if( CPLFetchBool(papszOptions, "LAUNDER", true) ) pszLayerName = LaunderName( pszLayerNameIn ); else pszLayerName = CPLStrdup( pszLayerNameIn ); // if( wkbFlatten(eType) == eType ) // nDimension = 2; CPLDebug("MYSQL","Creating layer %s.", pszLayerName); /* -------------------------------------------------------------------- */ /* Do we already have this layer? If so, should we blow it */ /* away? */ /* -------------------------------------------------------------------- */ for( int iLayer = 0; iLayer < nLayers; iLayer++ ) { if( EQUAL(pszLayerName,papoLayers[iLayer]->GetLayerDefn()->GetName()) ) { if( CSLFetchNameValue( papszOptions, "OVERWRITE" ) != nullptr && !EQUAL(CSLFetchNameValue(papszOptions,"OVERWRITE"),"NO") ) { DeleteLayer( iLayer ); } else { CPLError( CE_Failure, CPLE_AppDefined, "Layer %s already exists, CreateLayer failed.\n" "Use the layer creation option OVERWRITE=YES to " "replace it.", pszLayerName ); CPLFree( pszLayerName ); return nullptr; } } } pszGeomColumnName = CSLFetchNameValue( papszOptions, "GEOMETRY_NAME" ); if (!pszGeomColumnName) pszGeomColumnName="SHAPE"; pszExpectedFIDName = CSLFetchNameValue( papszOptions, "FID" ); if (!pszExpectedFIDName) pszExpectedFIDName = CSLFetchNameValue( papszOptions, "MYSQL_FID" ); if (!pszExpectedFIDName) pszExpectedFIDName="OGR_FID"; const bool bFID64 = CPLFetchBool(papszOptions, "FID64", false); const char* pszFIDType = bFID64 ? "BIGINT": "INT"; CPLDebug("MYSQL","Geometry Column Name %s.", pszGeomColumnName); CPLDebug("MYSQL","FID Column Name %s.", pszExpectedFIDName); const char *pszSI = CSLFetchNameValue( papszOptions, "SPATIAL_INDEX" ); const bool bHasSI = ( eType != wkbNone && (pszSI == nullptr || CPLTestBool(pszSI)) ); if( wkbFlatten(eType) == wkbNone ) { osCommand.Printf( "CREATE TABLE `%s` ( " " %s %s UNIQUE NOT NULL AUTO_INCREMENT )", pszLayerName, pszExpectedFIDName, pszFIDType ); } else { osCommand.Printf( "CREATE TABLE `%s` ( " " %s %s UNIQUE NOT NULL AUTO_INCREMENT, " " %s GEOMETRY %s)", pszLayerName, pszExpectedFIDName, pszFIDType, pszGeomColumnName, bHasSI ? "NOT NULL" : ""); } if( CSLFetchNameValue( papszOptions, "ENGINE" ) != nullptr ) { osCommand += " ENGINE = "; osCommand += CSLFetchNameValue( papszOptions, "ENGINE" ); } if( !mysql_query(GetConn(), osCommand ) ) { if( mysql_field_count( GetConn() ) == 0 ) CPLDebug("MYSQL","Created table %s.", pszLayerName); else { ReportError( osCommand ); return nullptr; } } else { ReportError( osCommand ); return nullptr; } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; // Calling this does no harm InitializeMetadataTables(); /* -------------------------------------------------------------------- */ /* Try to get the SRS Id of this spatial reference system, */ /* adding tot the srs table if needed. */ /* -------------------------------------------------------------------- */ int nSRSId = GetUnknownSRID(); if( poSRS != nullptr ) nSRSId = FetchSRSId( poSRS ); /* -------------------------------------------------------------------- */ /* Sometimes there is an old crufty entry in the geometry_columns */ /* table if things were not properly cleaned up before. We make */ /* an effort to clean out such cruft. */ /* */ /* -------------------------------------------------------------------- */ osCommand.Printf( "DELETE FROM geometry_columns WHERE f_table_name = '%s'", pszLayerName ); if( mysql_query(GetConn(), osCommand ) ) { ReportError( osCommand ); return nullptr; } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; /* -------------------------------------------------------------------- */ /* Attempt to add this table to the geometry_columns table, if */ /* it is a spatial layer. */ /* -------------------------------------------------------------------- */ if( eType != wkbNone ) { const int nCoordDimension = eType == wkbFlatten(eType) ? 2 : 3; pszGeometryType = OGRToOGCGeomType(eType); if( nSRSId == GetUnknownSRID() ) osCommand.Printf( "INSERT INTO geometry_columns " " (F_TABLE_NAME, " " F_GEOMETRY_COLUMN, " " COORD_DIMENSION, " " TYPE) values " " ('%s', '%s', %d, '%s')", pszLayerName, pszGeomColumnName, nCoordDimension, pszGeometryType ); else osCommand.Printf( "INSERT INTO geometry_columns " " (F_TABLE_NAME, " " F_GEOMETRY_COLUMN, " " COORD_DIMENSION, " " SRID, " " TYPE) values " " ('%s', '%s', %d, %d, '%s')", pszLayerName, pszGeomColumnName, nCoordDimension, nSRSId, pszGeometryType ); if( mysql_query(GetConn(), osCommand ) ) { ReportError( osCommand ); return nullptr; } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; } /* -------------------------------------------------------------------- */ /* Create the spatial index. */ /* */ /* We're doing this before we add geometry and record to the table */ /* so this may not be exactly the best way to do it. */ /* -------------------------------------------------------------------- */ if( bHasSI ) { osCommand.Printf( "ALTER TABLE `%s` ADD SPATIAL INDEX(`%s`) ", pszLayerName, pszGeomColumnName); if( mysql_query(GetConn(), osCommand ) ) { ReportError( osCommand ); return nullptr; } // make sure to attempt to free results of successful queries hResult = mysql_store_result( GetConn() ); if( hResult != nullptr ) mysql_free_result( hResult ); hResult = nullptr; } /* -------------------------------------------------------------------- */ /* Create the layer object. */ /* -------------------------------------------------------------------- */ OGRMySQLTableLayer *poLayer; OGRErr eErr; poLayer = new OGRMySQLTableLayer( this, pszLayerName, TRUE, nSRSId ); eErr = poLayer->Initialize(pszLayerName); if (eErr == OGRERR_FAILURE) return nullptr; if( eType != wkbNone ) poLayer->GetLayerDefn()->GetGeomFieldDefn(0)->SetNullable(FALSE); poLayer->SetLaunderFlag( CPLFetchBool(papszOptions, "LAUNDER", true) ); poLayer->SetPrecisionFlag( CPLFetchBool(papszOptions, "PRECISION", true)); /* -------------------------------------------------------------------- */ /* Add layer to data source layer list. */ /* -------------------------------------------------------------------- */ papoLayers = (OGRMySQLLayer **) CPLRealloc( papoLayers, sizeof(OGRMySQLLayer *) * (nLayers+1) ); papoLayers[nLayers++] = poLayer; CPLFree( pszLayerName ); return poLayer; }
void tMonth(const char *cResult) { MYSQL_RES *res; MYSQL_RES *res2; MYSQL_ROW field; //Internal skip reloading if(!cResult[0]) { if(guMode) ExttMonthSelectRow(); else ExttMonthSelect(); mysql_query(&gMysql,gcQuery); if(mysql_errno(&gMysql)) { if(strstr(mysql_error(&gMysql)," doesn't exist")) { CreatetMonth(); unxsISP("New tMonth table created"); } else { htmlPlainTextError(mysql_error(&gMysql)); } } res=mysql_store_result(&gMysql); if((guI=mysql_num_rows(res))) { if(guMode==6) { sprintf(gcQuery,"SELECT _rowid FROM tMonth WHERE uMonth=%u" ,uMonth); mysql_query(&gMysql,gcQuery); res2=mysql_store_result(&gMysql); field=mysql_fetch_row(res2); sscanf(field[0],"%lu",&gluRowid); gluRowid++; } PageMachine("",0,""); if(!guMode) mysql_data_seek(res,gluRowid-1); field=mysql_fetch_row(res); sscanf(field[0],"%u",&uMonth); sprintf(cLabel,"%.32s",field[1]); sscanf(field[2],"%u",&uOwner); sscanf(field[3],"%u",&uCreatedBy); sscanf(field[4],"%lu",&uCreatedDate); sscanf(field[5],"%u",&uModBy); sscanf(field[6],"%lu",&uModDate); } }//Internal Skip Header_ism3(":: tMonth",1); printf("<table width=100%% cellspacing=0 cellpadding=0>\n"); printf("<tr><td colspan=2 align=right valign=center>"); printf("<input type=hidden name=gcFunction value=tMonthTools>"); printf("<input type=hidden name=gluRowid value=%lu>",gluRowid); if(guI) { if(guMode==6) //printf(" Found"); printf(LANG_NBR_FOUND); else if(guMode==5) //printf(" Modified"); printf(LANG_NBR_MODIFIED); else if(guMode==4) //printf(" New"); printf(LANG_NBR_NEW); printf(LANG_NBRF_SHOWING,gluRowid,guI); } else { if(!cResult[0]) //printf(" No records found"); printf(LANG_NBR_NORECS); } if(cResult[0]) printf("%s",cResult); printf("</td></tr>"); printf("<tr><td valign=top width=25%%>"); ExttMonthButtons(); printf("</td><td valign=top>"); // OpenFieldSet("tMonth Record Data",100); if(guMode==2000 || guMode==2002) tMonthInput(1); else tMonthInput(0); // CloseFieldSet(); //Bottom table printf("<tr><td colspan=2>"); ExttMonthAuxTable(); Footer_ism3(); }//end of tMonth();
/* Functions: Get topo_host_node by SwitchId*/ Status Get_topo_host_node_Info(MYSQL *my_connection,ArpDynTable_INFO *arpdyntable_info, unsigned int *arpdyntable_info_nums, const unsigned int SwitchId) { MYSQL_RES *res_ptr; MYSQL_ROW sqlrow; int count=0; int res,j; char sqlbuff[SQLBUFFLEN]; sprintf(sqlbuff,"select SwitchId,ArpDynIfIndex,ArpDynIpAdd,ArpDynMacAdd,ArpDynVrf,ArpDynVlanId,ArpDynOutIfIndex,ArpDynExpireTime from topo_host_node where SwitchId=%d",SwitchId); res=mysql_query(my_connection,sqlbuff); printf("res:%d\n",res); if(res) { #ifdef DATABASE_DEBUG_MESSAGE fprintf(stderr,"[ERROR] database_public: Select error %d: %s\n",mysql_errno(my_connection),mysql_error(my_connection)); #endif return DATABASE_ERROR; } else { res_ptr=mysql_store_result(my_connection); //printf("res_ptr:%d\n",res_ptr); if(res_ptr) { #ifdef DATABASE_DEBUG_MESSAGE printf("[DEBUG] database_public: Retrieved %lu rows\n",(unsigned long)mysql_num_rows(res_ptr)); #endif *arpdyntable_info_nums=(unsigned int)mysql_num_rows(res_ptr); while((sqlrow=mysql_fetch_row(res_ptr))) { #ifdef DATABASE_DEBUG_MESSAGE printf("[DEBUG] database_public: Fetched data...\n"); #endif arpdyntable_info[count].SwitchId=atoi(sqlrow[0]); arpdyntable_info[count].ArpDynIfIndex = atoi(sqlrow[1]); //arpdyntable_info[count].ArpDynIpAdd = (char*)malloc(sizeof(char) *16); strcpy(arpdyntable_info[count].ArpDynIpAdd,sqlrow[2]); //arpdyntable_info[count].ArpDynMacAdd = (char*)malloc(sizeof(char) *20); strcpy(arpdyntable_info[count].ArpDynMacAdd,sqlrow[3]); arpdyntable_info[count].ArpDynVrf = atoi(sqlrow[4]); arpdyntable_info[count].ArpDynVlanId= atoi(sqlrow[5]); arpdyntable_info[count].ArpDynOutIfIndex = atoi(sqlrow[6]); arpdyntable_info[count].ArpDynExpireTime= atoi(sqlrow[7]); count++; } if(mysql_errno(my_connection)) { #ifdef DATABASE_DEBUG_MESSAGE fprintf(stderr,"[ERROR] database_public: Retrieve error %d: %s\n",mysql_errno(my_connection),mysql_error(my_connection)); #endif return DATABASE_ERROR; } mysql_free_result(res_ptr); } return DATABASE_OK; } }
void tMonthList(void) { MYSQL_RES *res; MYSQL_ROW field; ExttMonthListSelect(); mysql_query(&gMysql,gcQuery); if(mysql_error(&gMysql)[0]) htmlPlainTextError(mysql_error(&gMysql)); res=mysql_store_result(&gMysql); guI=mysql_num_rows(res); PageMachine("tMonthList",1,"");//1 is auto header list guMode. Opens table! //Filter select drop down ExttMonthListFilter(); printf("<input type=text size=16 name=gcCommand maxlength=98 value=\"%s\" >",gcCommand); printf("</table>\n"); printf("<table bgcolor=#9BC1B3 border=0 width=100%%>\n"); printf("<tr bgcolor=black><td><font face=arial,helvetica color=white>uMonth<td><font face=arial,helvetica color=white>cLabel<td><font face=arial,helvetica color=white>uOwner<td><font face=arial,helvetica color=white>uCreatedBy<td><font face=arial,helvetica color=white>uCreatedDate<td><font face=arial,helvetica color=white>uModBy<td><font face=arial,helvetica color=white>uModDate</tr>"); mysql_data_seek(res,guStart-1); for(guN=0;guN<(guEnd-guStart+1);guN++) { field=mysql_fetch_row(res); if(!field) { printf("<tr><td><font face=arial,helvetica>End of data</table>"); Footer_ism3(); } if(guN % 2) printf("<tr bgcolor=#BBE1D3>"); else printf("<tr>"); time_t luTime4=strtoul(field[4],NULL,10); char cBuf4[32]; if(luTime4) ctime_r(&luTime4,cBuf4); else sprintf(cBuf4,"---"); time_t luTime6=strtoul(field[6],NULL,10); char cBuf6[32]; if(luTime6) ctime_r(&luTime6,cBuf6); else sprintf(cBuf6,"---"); printf("<td><input type=submit name=ED%s value=Edit> %s<td>%s<td>%s<td>%s<td>%s<td>%s<td>%s</tr>" ,field[0] ,field[0] ,field[1] ,ForeignKey(TCLIENT,"cLabel",strtoul(field[2],NULL,10)) ,ForeignKey(TCLIENT,"cLabel",strtoul(field[3],NULL,10)) ,cBuf4 ,ForeignKey(TCLIENT,"cLabel",strtoul(field[5],NULL,10)) ,cBuf6 ); } printf("</table></form>\n"); Footer_ism3(); }//tMonthList()
char * getcoop(in_addr_t host, char *attr) { struct hostent *hostp; struct in_addr in; int i; char *value = NULL; char *ip; #ifdef WITH_MYSQL MYSQL_ROW row; MYSQL mysql; MYSQL_RES *result; char query[1024];; int mysql_ready; #endif /* * most likely the coop value has already been recorded in the * downloads table */ if (dt_table != NULL) { for (i = 0 ; i < dt_table->size ; ++i) { if ((dt_table->entry[i].host == host) && (dt_table->entry[i].coop != NULL)) { value = strdup(dt_table->entry[i].coop); #ifdef DEBUG fprintf(stderr, "getcoop: found cached value %s\n", value); #endif return(value); } } } in.s_addr = host; ip = inet_ntoa(in); #ifdef WITH_MYSQL if ((value = gethostattr(ip, attr)) != NULL) { return(value); } mysql_ready = 0; if (mysql_init(&mysql) != NULL) { if (mysql_options(&mysql, MYSQL_READ_DEFAULT_FILE, "/opt/rocks/etc/my.cnf") == 0) { if (mysql_real_connect(&mysql, "localhost", "apache", NULL, "cluster", 0, NULL, 0) != NULL) { mysql_ready = 1; } } } if (mysql_ready) { /* * try to return the rack number for this host */ sprintf(query, "select n.rack from nodes n, networks net where \ net.ip = '%s' and net.node = n.id", ip); if (mysql_real_query(&mysql, query, strlen(query)) != 0) { fprintf(stderr, "gethostattr:mysql_real_query:failed: %s\n", mysql_error(&mysql)); } if ((result = mysql_store_result(&mysql)) == NULL) { fprintf(stderr, "gethostattr:mysql_store_result:failed: %s\n", mysql_error(&mysql)); } if ((row = mysql_fetch_row(result)) != NULL) { value = strdup(row[0]); } mysql_free_result(result); mysql_close(&mysql); if (value != NULL) { return(value); } } #endif /* * the last resort - try to parse the host name */ hostp = gethostbyaddr(&in, sizeof(in), AF_INET); if (hostp != NULL) { int i; char name[128], rack[16], rank[16]; char *ptr; /* * convert the last 2 '-' characters into blanks */ for (i = 0 ; i < 2 ; ++i) { ptr = strrchr(hostp->h_name, '-'); if (ptr != NULL) { *ptr = ' '; } else { /* * this host name is not standard form */ return(NULL); } } sscanf(hostp->h_name, "%s %s %s.local", name, rack, rank); value = strdup(rack); } return(value); }
//return value: 0 means success, others means error value int Query(struct query &query, struct results **pRet, int *count) { CString cmd; *count = 0; *pRet = NULL; //construct query sentence. cmd = _T("select * from "); cmd += query.name; cmd += _T(" where "); if(query.itemValue[0].valueType == MYSQL_TYPE_STRING){ cmd += query.itemValue[0].name; cmd += _T("=\""); cmd += query.itemValue[0].value; cmd += _T("\""); }else{ cmd += query.itemValue[0].name; cmd += _T("="); cmd += query.itemValue[0].value; } for(int i = 1; i<query.itemCount; i++){ cmd += _T(","); if(query.itemValue[i].valueType == MYSQL_TYPE_STRING){ cmd += query.itemValue[i].name; cmd += _T("=\""); cmd += query.itemValue[i].value; cmd += _T("\""); } else{ cmd += query.itemValue[i].name; cmd += _T("="); cmd += query.itemValue[i].value; } } char temp_data[1024]={'\0'}; WideCharToMultiByte(CP_ACP,0,(LPCWSTR)cmd,-1,(LPSTR)temp_data,sizeof(temp_data),NULL,NULL); int ret = UNKNOW_MSG; ret = mysql_query(mysql, temp_data); if(!ret){ MYSQL_RES *res = 0; MYSQL_FIELD *fields = 0; MYSQL_ROW record; res = mysql_store_result(mysql); if(res){//there are rows *count = (int)mysql_num_rows(res); //获取结果集中的行数 if(pRet != NULL){ int num_fields = mysql_num_fields(res); //获取结果集中的列数 struct item *temp = (struct item *)malloc(sizeof(struct item)*num_fields); //用于记录结果集中的列的名称和类型 memset(temp, 0x00, sizeof(struct item)*num_fields); fields = mysql_fetch_fields(res); //获取结果集中的列信息 for(int i = 0; i<num_fields; i++){ temp[i].name.Format(_T("%s"), fields[i].name); //获取结果的列名称 temp[i].valueType = fields[i].type; //获取结果的列的类型 } int size = sizeof(struct results) + *count*sizeof(struct item); struct results *r = (struct results *)malloc(size); memset(r, 0x00, sizeof(struct results)*(*count)); r->itemCount = *count; int resCount = 0; while((record = mysql_fetch_row(res))) { for(int i = 0; i<num_fields; i++){ r->itemValue[resCount].name = temp[i].name; r->itemValue[resCount].valueType = temp[i].valueType; r->itemValue[resCount].value.Format(_T("%s"), record[i]); } resCount++; } free(temp); *pRet = r; } mysql_free_result(res); ret = 0; }else{ //mysql_store_result() returned nothing, should it have? if(mysql_field_count(mysql)==0){ //不应该返回结果集 ret = 0; }else{ ret = mysql_errno(mysql); //应该返回结果集但未返回,返回错误码 } } } return ret; }
int main(int argc, char *argv[]) { static MYSQL demo_db; char mysql_query [2048]; MYSQL_RES *mysqlres; /* To be used to fetch information into */ MYSQL_ROW mysqlrow; int res; struct issuedaddFormat issuedadd; char clickStatus[33]; unsigned int addid; char addurl[251]; char remote_addr[32]; #ifdef DEBUG printf("Content-type: text/html\n\n"); #endif if (getenv("QUERY_STRING") == NULL) { if (argc != 4 ) { fprintf(stderr,"no QUERY_STRING and no command lin input.\n\n\tUsage addout.cgi addid http://www.test.com\n"); exit(1); } else { addid = strtoul(argv[1], (char **)NULL, 10); strcpy(addurl,argv[2]); strncpy(remote_addr,argv[3],sizeof(remote_addr) -1); } } else { //leser inn cgi variabler // Initialize the CGI lib res = cgi_init(); // Was there an error initializing the CGI??? if (res != CGIERR_NONE) { fprintf(stderr,"Error # %d: %s\n", res, cgi_strerror(res)); exit(1); } if (cgi_getentrystr("addurl") == NULL) { fprintf(stderr,"Did'n receive any addurl.\n"); exit(1); } else { strncpy(addurl,cgi_getentrystr("addurl"),sizeof(addurl) -1); } if (cgi_getentrystr("addid") == NULL) { fprintf(stderr,"Did'n receive any id.\n"); exit(1); } else { addid = strtoul(cgi_getentrystr("addid"), (char **)NULL, 10); } if (getenv("REMOTE_ADDR") == NULL) { fprintf(stderr,"Did'n receive any REMOTE_ADDR.\n"); exit(1); } else { strncpy(remote_addr,getenv("REMOTE_ADDR"),sizeof(remote_addr) -1); } } mysql_init(&demo_db); //if(!mysql_real_connect(&demo_db, "www2.boitho.com", "boitho_remote", "G7J7v5L5Y7", "boitho", 3306, NULL, 0)){ if(!mysql_real_connect(&demo_db, "localhost", "boitho", "G7J7v5L5Y7", "boithoweb", 3306, NULL, 0)){ fprintf(stderr,mysql_error(&demo_db)); exit(1); } #ifdef DEBUG printf("add id %u\n",addid); #endif sprintf(mysql_query, "select keyword,bid,uri,clickfrequency,ppcuser,affuser,ipadress,UNIX_TIMESTAMP(issuetime),UNIX_TIMESTAMP(NOW()),HTTP_ACCEPT_LANGUAGE,HTTP_USER_AGENT,HTTP_REFERER,betaler_keyword_id,betaler_side_id from issuedadds where id='%u'",addid); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ fprintf(stderr,mysql_error(&demo_db)); exit(1); } //henter svaret mysqlres=mysql_store_result(&demo_db); /* Download result from server */ if ((mysqlrow=mysql_fetch_row(mysqlres)) == NULL) { /* Get a row from the results */ fprintf(stderr,"cnat't fint the add in db.\n"); strcpy(clickStatus,"CANT_FIND_ADD"); } else { #ifdef DEBUG printf("%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n%s<br>\n",mysqlrow[0],mysqlrow[1],mysqlrow[2],mysqlrow[3],mysqlrow[4],mysqlrow[5],mysqlrow[6],mysqlrow[7],mysqlrow[8],mysqlrow[9],mysqlrow[10],mysqlrow[11]); #endif strncpy(issuedadd.query,mysqlrow[0],sizeof(issuedadd.query)-1); issuedadd.bid = atof(mysqlrow[1]); strncpy(issuedadd.uri,mysqlrow[2],sizeof(issuedadd.uri) -1); issuedadd.clickfrequency = atoi(mysqlrow[3]); strncpy(issuedadd.ppcuser,mysqlrow[4],sizeof(issuedadd.ppcuser)-1); strncpy(issuedadd.affuser,mysqlrow[5],sizeof(issuedadd.ppcuser)-1); strncpy(issuedadd.ipadress,mysqlrow[6],sizeof(issuedadd.ipadress)-1); issuedadd.issuetime = atoi(mysqlrow[7]); issuedadd.nowtime = atoi(mysqlrow[8]); strncpy(issuedadd.HTTP_REFERER,mysqlrow[11],sizeof(issuedadd.HTTP_REFERER)-1); issuedadd.betaler_keyword_id = atoi(mysqlrow[12]); issuedadd.DocID = strtoul(mysqlrow[13], (char **)NULL, 10); //sjekker om vi har noe klikk på denne ipen til samme side fra før sprintf(mysql_query, "select * from short_out_logg where betaler_side_id='%u' AND ip_adresse='%s' AND tid > (NOW() - INTERVAL 24 HOUR)",issuedadd.DocID,issuedadd.ipadress); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ printf(mysql_error(&demo_db)); exit(1); } int limit24hour;; mysqlres=mysql_store_result(&demo_db); /* Download result from server */ if ((mysqlrow=mysql_fetch_row(mysqlres)) != NULL) { /* Get a row from the results */ //printf("we have a record in short_out_logg\n"); //bør kansje oppdatere klikk frekvens her limit24hour = 1; } else { //printf("we dont have a record in short_out_logg.\n %s\n",mysql_query); //legger den inn sprintf(mysql_query, "insert into short_out_logg values('%u','%s','%i',%s)", issuedadd.DocID, issuedadd.ipadress, 0, "NOW()"); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ printf(mysql_error(&demo_db)); exit(1); } limit24hour = 0; } //sjekker om dette er et gyldig klikk if (strcmp(remote_addr,issuedadd.ipadress) != 0){ strcpy(clickStatus,"IP_MISS_MATCH"); } //Sjekker om annonsen er ung nokk. // bruker now time fra mysql server isteden for time() da vi ikke nødvendivis kjører på //samme server, og klokkene ikke er synkronisert else if (issuedadd.nowtime > (issuedadd.issuetime + 3600)) { strcpy(clickStatus,"ADD_TO_OLD"); } else if (issuedadd.clickfrequency > 0) { strcpy(clickStatus,"MORE_THEN_ONE_CLICK"); } else if (limit24hour) { strcpy(clickStatus,"24_HOUR_LIMIT"); } else { //vi har en ok status strcpy(clickStatus,"OK"); } //redirekter brukeren if (strcmp(clickStatus,"OK") == 0) { printf("Location:%s\n\n",issuedadd.uri); } else { printf("Location:%s\n\n",addurl); } //kan vel egentlig stenge ned standat utputt nå? //oppdaterer klikk frekvens sprintf(mysql_query, "update issuedadds set clickfrequency = clickfrequency+1 where id='%u'",addid); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ fprintf(stderr,mysql_error(&demo_db)); exit(1); } //trekker penger hvis vi har ok status if (strcmp(clickStatus,"OK") == 0) { //trekker penger fra ppc brukene sprintf(mysql_query, "update brukere set penger=penger - %f where bruker_navn='%s'",issuedadd.bid,issuedadd.ppcuser); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ fprintf(stderr,mysql_error(&demo_db)); exit(1); } //betaler search/aff brukeren sprintf(mysql_query, "update brukere set penger=penger + %f where bruker_navn='%s'",issuedadd.bid,issuedadd.affuser); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ fprintf(stderr,mysql_error(&demo_db)); exit(1); } } //logger sprintf(mysql_query, "insert DELAYED into out_logg values(%s,%s,'%s','%s','%s','%i','%s','%s','%f','%s')", "NULL", "NOW()", issuedadd.query, issuedadd.affuser, issuedadd.ppcuser, issuedadd.betaler_keyword_id, issuedadd.ipadress, issuedadd.HTTP_REFERER, issuedadd.bid, clickStatus); if(mysql_real_query(&demo_db, mysql_query, strlen(mysql_query))){ /* Make query */ fprintf(stderr,mysql_error(&demo_db)); exit(1); } } mysql_free_result(mysqlres); mysql_close(&demo_db); }
static HB_ERRCODE mysqlOpen( SQLBASEAREAP pArea ) { MYSQL * pMySql = ( ( SDDCONN * ) pArea->pConnection->pSDDConn )->pMySql; SDDDATA * pSDDData; PHB_ITEM pItemEof, pItem; HB_ULONG ulIndex; HB_USHORT uiFields, uiCount; HB_ERRCODE errCode = 0; HB_BOOL bError; DBFIELDINFO pFieldInfo; MYSQL_FIELD * pMyField; void ** pRow; pArea->pSDDData = memset( hb_xgrab( sizeof( SDDDATA ) ), 0, sizeof( SDDDATA ) ); pSDDData = ( SDDDATA * ) pArea->pSDDData; if( mysql_real_query( pMySql, pArea->szQuery, ( unsigned long ) strlen( pArea->szQuery ) ) ) { hb_errRT_MySQLDD( EG_OPEN, ESQLDD_INVALIDQUERY, ( const char * ) mysql_error( pMySql ), pArea->szQuery, mysql_errno( pMySql ) ); return HB_FAILURE; } if( ( pSDDData->pResult = mysql_store_result( pMySql ) ) == NULL ) { hb_errRT_MySQLDD( EG_MEM, ESQLDD_INVALIDQUERY, ( const char * ) mysql_error( pMySql ), pArea->szQuery, mysql_errno( pMySql ) ); return HB_FAILURE; } uiFields = ( HB_USHORT ) mysql_num_fields( pSDDData->pResult ); SELF_SETFIELDEXTENT( ( AREAP ) pArea, uiFields ); pItemEof = hb_itemArrayNew( uiFields ); bError = HB_FALSE; for( uiCount = 0; uiCount < uiFields; uiCount++ ) { pMyField = mysql_fetch_field_direct( pSDDData->pResult, uiCount ); pFieldInfo.atomName = pMyField->name; pFieldInfo.uiLen = ( HB_USHORT ) pMyField->length; pFieldInfo.uiDec = 0; switch( pMyField->type ) { case MYSQL_TYPE_TINY: case MYSQL_TYPE_SHORT: pFieldInfo.uiType = HB_FT_INTEGER; break; case MYSQL_TYPE_LONG: case MYSQL_TYPE_LONGLONG: case MYSQL_TYPE_INT24: pFieldInfo.uiType = HB_FT_LONG; break; case MYSQL_TYPE_DECIMAL: case MYSQL_TYPE_NEWDECIMAL: case MYSQL_TYPE_FLOAT: case MYSQL_TYPE_DOUBLE: pFieldInfo.uiType = HB_FT_DOUBLE; pFieldInfo.uiDec = ( HB_USHORT ) pMyField->decimals; break; case MYSQL_TYPE_STRING: case MYSQL_TYPE_VAR_STRING: case MYSQL_TYPE_ENUM: pFieldInfo.uiType = HB_FT_STRING; break; case MYSQL_TYPE_DATE: pFieldInfo.uiType = HB_FT_DATE; break; case MYSQL_TYPE_TINY_BLOB: case MYSQL_TYPE_MEDIUM_BLOB: case MYSQL_TYPE_LONG_BLOB: case MYSQL_TYPE_BLOB: pFieldInfo.uiType = HB_FT_MEMO; break; case MYSQL_TYPE_TIMESTAMP: case MYSQL_TYPE_DATETIME: pFieldInfo.uiType = HB_FT_TIMESTAMP; pFieldInfo.uiLen = 8; break; case MYSQL_TYPE_TIME: pFieldInfo.uiType = HB_FT_TIME; pFieldInfo.uiLen = 4; break; /* case MYSQL_TYPE_YEAR: case MYSQL_TYPE_NEWDATE: case MYSQL_TYPE_ENUM: case MYSQL_TYPE_SET: */ default: bError = HB_TRUE; errCode = ( HB_ERRCODE ) pMyField->type; pFieldInfo.uiType = 0; break; } if( ! bError ) { switch( pFieldInfo.uiType ) { case HB_FT_STRING: { char * pStr; pStr = ( char * ) hb_xgrab( pFieldInfo.uiLen + 1 ); memset( pStr, ' ', pFieldInfo.uiLen ); pStr[ pFieldInfo.uiLen ] = '\0'; pItem = hb_itemPutCL( NULL, pStr, pFieldInfo.uiLen ); hb_xfree( pStr ); break; } case HB_FT_MEMO: pItem = hb_itemPutC( NULL, NULL ); break; case HB_FT_INTEGER: pItem = hb_itemPutNI( NULL, 0 ); break; case HB_FT_LONG: pItem = hb_itemPutNL( NULL, 0 ); break; case HB_FT_DOUBLE: pItem = hb_itemPutND( NULL, 0.0 ); break; case HB_FT_DATE: pItem = hb_itemPutDS( NULL, NULL ); break; case HB_FT_TIMESTAMP: case HB_FT_TIME: pItem = hb_itemPutTDT( NULL, 0, 0 ); break; default: pItem = hb_itemNew( NULL ); bError = HB_TRUE; break; } hb_arraySetForward( pItemEof, uiCount + 1, pItem ); hb_itemRelease( pItem ); /* if( pFieldInfo.uiType == HB_IT_DOUBLE || pFieldInfo.uiType == HB_IT_INTEGER ) pFieldInfo.uiType = HB_IT_LONG; */ if( ! bError ) bError = ( SELF_ADDFIELD( ( AREAP ) pArea, &pFieldInfo ) == HB_FAILURE ); } if( bError ) break; } if( bError ) { hb_itemRelease( pItemEof ); hb_errRT_MySQLDD( EG_CORRUPTION, ESQLDD_INVALIDFIELD, "Invalid field type", pArea->szQuery, errCode ); return HB_FAILURE; } pArea->ulRecCount = ( HB_ULONG ) mysql_num_rows( pSDDData->pResult ); pArea->pRow = ( void ** ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( void * ) ); pArea->pRowFlags = ( HB_BYTE * ) hb_xgrab( ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) ); memset( pArea->pRowFlags, 0, ( pArea->ulRecCount + 1 ) * sizeof( HB_BYTE ) ); pArea->ulRecMax = pArea->ulRecCount + 1; pRow = pArea->pRow; *pRow = pItemEof; pArea->pRowFlags[ 0 ] = SQLDD_FLAG_CACHED; pRow++; for( ulIndex = 1; ulIndex <= pArea->ulRecCount; ulIndex++ ) { *pRow++ = ( void * ) mysql_row_tell( pSDDData->pResult ); mysql_fetch_row( pSDDData->pResult ); } pArea->fFetched = HB_TRUE; return HB_SUCCESS; }
OGRFeatureDefn *OGRMySQLTableLayer::ReadTableDefinition( const char *pszTable ) { MYSQL_RES *hResult; CPLString osCommand; /* -------------------------------------------------------------------- */ /* Fire off commands to get back the schema of the table. */ /* -------------------------------------------------------------------- */ osCommand.Printf("DESCRIBE `%s`", pszTable ); pszGeomColumnTable = CPLStrdup(pszTable); if( mysql_query( poDS->GetConn(), osCommand ) ) { poDS->ReportError( "DESCRIBE Failed" ); return nullptr; } hResult = mysql_store_result( poDS->GetConn() ); if( hResult == nullptr ) { poDS->ReportError( "mysql_store_result() failed on DESCRIBE result." ); return nullptr; } /* -------------------------------------------------------------------- */ /* Parse the returned table information. */ /* -------------------------------------------------------------------- */ OGRFeatureDefn *poDefn = new OGRFeatureDefn( pszTable ); char **papszRow; OGRwkbGeometryType eForcedGeomType = wkbUnknown; int bGeomColumnNotNullable = FALSE; poDefn->Reference(); while( (papszRow = mysql_fetch_row( hResult )) != nullptr ) { OGRFieldDefn oField( papszRow[0], OFTString); const char *pszType = papszRow[1]; if( pszType == nullptr ) continue; int nLenType = (int)strlen(pszType); if( EQUAL(pszType,"varbinary") || (nLenType>=4 && EQUAL(pszType+nLenType-4,"blob"))) { oField.SetType( OFTBinary ); } else if( EQUAL(pszType,"varchar") || (nLenType>=4 && EQUAL(pszType+nLenType-4,"enum")) || (nLenType>=3 && EQUAL(pszType+nLenType-3,"set")) ) { oField.SetType( OFTString ); } else if( STARTS_WITH_CI(pszType, "char") ) { oField.SetType( OFTString ); char ** papszTokens; papszTokens = CSLTokenizeString2(pszType,"(),",0); if (CSLCount(papszTokens) >= 2) { /* width is the second */ oField.SetWidth(atoi(papszTokens[1])); } CSLDestroy( papszTokens ); oField.SetType( OFTString ); } if(nLenType>=4 && EQUAL(pszType+nLenType-4,"text")) { oField.SetType( OFTString ); } else if( STARTS_WITH_CI(pszType,"varchar") ) { /* pszType is usually in the form "varchar(15)" so we'll split it up and get the width and precision */ oField.SetType( OFTString ); char ** papszTokens; papszTokens = CSLTokenizeString2(pszType,"(),",0); if (CSLCount(papszTokens) >= 2) { /* width is the second */ oField.SetWidth(atoi(papszTokens[1])); } CSLDestroy( papszTokens ); oField.SetType( OFTString ); } else if( STARTS_WITH_CI(pszType, "int") ) { oField.SetType( OFTInteger ); } else if( STARTS_WITH_CI(pszType, "tinyint") ) { oField.SetType( OFTInteger ); } else if( STARTS_WITH_CI(pszType, "smallint") ) { oField.SetType( OFTInteger ); } else if( STARTS_WITH_CI(pszType, "mediumint") ) { oField.SetType( OFTInteger ); } else if( STARTS_WITH_CI(pszType, "bigint") ) { oField.SetType( OFTInteger64 ); } else if( STARTS_WITH_CI(pszType, "decimal") ) { /* pszType is usually in the form "decimal(15,2)" so we'll split it up and get the width and precision */ oField.SetType( OFTReal ); char ** papszTokens; papszTokens = CSLTokenizeString2(pszType,"(),",0); if (CSLCount(papszTokens) >= 3) { /* width is the second and precision is the third */ oField.SetWidth(atoi(papszTokens[1])); oField.SetPrecision(atoi(papszTokens[2])); } CSLDestroy( papszTokens ); } else if( STARTS_WITH_CI(pszType, "float") ) { oField.SetType( OFTReal ); } else if( EQUAL(pszType,"double") ) { oField.SetType( OFTReal ); } else if( STARTS_WITH_CI(pszType, "double") ) { // double can also be double(15,2) // so we'll handle this case here after // we check for just a regular double // without a width and precision specified char ** papszTokens = CSLTokenizeString2(pszType,"(),",0); if (CSLCount(papszTokens) >= 3) { /* width is the second and precision is the third */ oField.SetWidth(atoi(papszTokens[1])); oField.SetPrecision(atoi(papszTokens[2])); } CSLDestroy( papszTokens ); oField.SetType( OFTReal ); } else if( EQUAL(pszType,"decimal") ) { oField.SetType( OFTReal ); } else if( EQUAL(pszType, "date") ) { oField.SetType( OFTDate ); } else if( EQUAL(pszType, "time") ) { oField.SetType( OFTTime ); } else if( EQUAL(pszType, "datetime") || EQUAL(pszType, "timestamp") ) { oField.SetType( OFTDateTime ); } else if( EQUAL(pszType, "year") ) { oField.SetType( OFTString ); oField.SetWidth( 10 ); } else if( EQUAL(pszType, "geometry") || OGRFromOGCGeomType(pszType) != wkbUnknown) { if (pszGeomColumn == nullptr) { pszGeomColumn = CPLStrdup(papszRow[0]); eForcedGeomType = OGRFromOGCGeomType(pszType); bGeomColumnNotNullable = ( papszRow[2] != nullptr && EQUAL(papszRow[2], "NO") ); } else { CPLDebug("MYSQL", "Ignoring %s as geometry column. Another one(%s) has already been found before", papszRow[0], pszGeomColumn); } continue; } // Is this an integer primary key field? if( !bHasFid && papszRow[3] != nullptr && EQUAL(papszRow[3],"PRI") && (oField.GetType() == OFTInteger || oField.GetType() == OFTInteger64) ) { bHasFid = TRUE; pszFIDColumn = CPLStrdup(oField.GetNameRef()); if( oField.GetType() == OFTInteger64 ) SetMetadataItem(OLMD_FID64, "YES"); continue; } // Is not nullable ? if( papszRow[2] != nullptr && EQUAL(papszRow[2], "NO") ) oField.SetNullable(FALSE); // Has default ? const char* pszDefault = papszRow[4]; if( pszDefault != nullptr ) { if( !EQUAL(pszDefault, "NULL") && !STARTS_WITH_CI(pszDefault, "CURRENT_") && pszDefault[0] != '(' && pszDefault[0] != '\'' && CPLGetValueType(pszDefault) == CPL_VALUE_STRING ) { int nYear = 0; int nMonth = 0; int nDay = 0; int nHour = 0; int nMinute = 0; float fSecond = 0.0f; if( oField.GetType() == OFTDateTime && sscanf(pszDefault, "%d-%d-%d %d:%d:%f", &nYear, &nMonth, &nDay, &nHour, &nMinute, &fSecond) == 6 ) { oField.SetDefault(CPLSPrintf("'%04d/%02d/%02d %02d:%02d:%02d'", nYear, nMonth, nDay, nHour, nMinute, (int)(fSecond+0.5))); } else { CPLString osDefault("'"); char* pszTmp = CPLEscapeString(pszDefault, -1, CPLES_SQL); osDefault += pszTmp; CPLFree(pszTmp); osDefault += "'"; oField.SetDefault(osDefault); } } else { if( EQUAL(pszDefault, "CURRENT_TIMESTAMP()") ) oField.SetDefault("CURRENT_TIMESTAMP"); else oField.SetDefault(pszDefault); } } poDefn->AddFieldDefn( &oField ); } // set to none for now... if we have a geometry column it will be set layer. poDefn->SetGeomType( wkbNone ); if( hResult != nullptr ) { mysql_free_result( hResult ); hResultSet = nullptr; } if( bHasFid ) CPLDebug( "MySQL", "table %s has FID column %s.", pszTable, pszFIDColumn ); else CPLDebug( "MySQL", "table %s has no FID column, FIDs will not be reliable!", pszTable ); if (pszGeomColumn) { char* pszType=nullptr; // set to unknown first poDefn->SetGeomType( wkbUnknown ); poDefn->GetGeomFieldDefn(0)->SetName( pszGeomColumn ); osCommand = "SELECT type, coord_dimension FROM geometry_columns WHERE f_table_name='"; osCommand += pszTable; osCommand += "'"; hResult = nullptr; if( !mysql_query( poDS->GetConn(), osCommand ) ) hResult = mysql_store_result( poDS->GetConn() ); papszRow = nullptr; if( hResult != nullptr ) papszRow = mysql_fetch_row( hResult ); if( papszRow != nullptr && papszRow[0] != nullptr ) { pszType = papszRow[0]; OGRwkbGeometryType l_nGeomType = OGRFromOGCGeomType(pszType); if( papszRow[1] != nullptr && atoi(papszRow[1]) == 3 ) l_nGeomType = wkbSetZ(l_nGeomType); poDefn->SetGeomType( l_nGeomType ); } else if (eForcedGeomType != wkbUnknown) poDefn->SetGeomType(eForcedGeomType); if( bGeomColumnNotNullable ) poDefn->GetGeomFieldDefn(0)->SetNullable(FALSE); if( hResult != nullptr ) mysql_free_result( hResult ); //Free our query results for finding type. hResult = nullptr; } // Fetch the SRID for this table now nSRSId = FetchSRSId(); return poDefn; }
/* new_request_stat() * * Register statistics about client requests. Returns the newly generated * and unique id. * */ int new_request_stat (unsigned long ip_num, const char * type, char * user_agent) { int i, auto_id, client_id_len, child_id; char * query, * server_id, * client_id, * tmp_id; unsigned char * uchar_sign; GeoIPRecord * record; MYSQL_RES * result; MYSQL_ROW row; char * add_info; /* TODO: browser and opsys detection. */ const char browser [] = UNKNOWN_FIELD; const char opsys [] = UNKNOWN_FIELD; /* Check if statistic data gathering is enabled. */ if (stats_enabled != 1) { return (EXIT_SUCCESS); } child_id = get_child_pos(); server_id = (char *)get_server_name(); /* Calculate unique digest. */ uchar_sign = malloc(SHA_DIGEST_LENGTH); client_id = malloc(SIGN_LEN + 1); client_id_len = asprintf(&tmp_id, "%lu", ip_num); SHA1((unsigned char *)tmp_id, client_id_len, uchar_sign); free(tmp_id); for (i = 0; i < SHA_DIGEST_LENGTH; i++) { sprintf(client_id + i * 2, "%02x", uchar_sign[i]); } free(uchar_sign); if ((record = GeoIP_record_by_ipnum(gi_db, ip_num)) != NULL) { asprintf(&query, "INSERT INTO requests (%s) VALUES ('%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', CURRENT_TIMESTAMP())", REQUEST_FIELDS, client_id, server_id, child_id, type, browser, opsys, record->city, record->country_name); GeoIPRecord_delete(record); } else { asprintf(&query, "INSERT INTO requests (%s) VALUES ('%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', CURRENT_TIMESTAMP())", REQUEST_FIELDS, client_id, server_id, child_id, type, browser, opsys, UNKNOWN_FIELD, UNKNOWN_FIELD); } /* MySQL threaded interaction. * Multithread clients sharing the same connection *must* enclose * mysql_query() and mysql_store_result() in a lock to prevent access * from other threads. * */ /* Insert data and get the last autoincremented value. */ pthread_mutex_lock(&stat_lock); if (mysql_query(db_conn, query) != 0) { pthread_mutex_unlock(&stat_lock); log_message(ERROR, EMSG_INSERT, query); free(client_id); free(server_id); free(query); return (ECOD_INSERT); } pthread_mutex_unlock(&stat_lock); free(client_id); free(query); asprintf(&query, "SELECT MAX(id) FROM requests WHERE server_id = '%s' AND child_id = %d", server_id, child_id); free(server_id); pthread_mutex_lock(&stat_lock); if (mysql_query(db_conn, query) != 0) { pthread_mutex_unlock(&stat_lock); log_message(ERROR, EMSG_SELECT, query); free(query); return (ECOD_SELECT); } if ((result = mysql_store_result(db_conn)) != NULL) { pthread_mutex_unlock(&stat_lock); free(query); row = mysql_fetch_row(result); auto_id = atoi(row[0]); mysql_free_result(result); asprintf(&add_info, "Request ID: %d\n", auto_id); log_message(MESSAGE, IMSG_NEWREQSTAT, add_info); free(add_info); } else { pthread_mutex_unlock(&stat_lock); log_message(ERROR, EMSG_SELECT, query); free(query); return (ECOD_SELECT); } return (auto_id); }