Exemple #1
0
// 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 );
}
Exemple #2
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);
}
Exemple #3
0
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;
}
Exemple #5
0
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);
}
Exemple #6
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;
}
Exemple #7
0
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;
}
Exemple #9
0
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);
}
Exemple #14
0
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;
}
Exemple #15
0
/*
 * 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);
}
Exemple #16
0
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
}
Exemple #17
0
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;
}
Exemple #18
0
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;
}
Exemple #19
0
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;
}
Exemple #20
0
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);
}
Exemple #21
0
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;
}
Exemple #22
0
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;
	}
}
Exemple #24
0
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()
Exemple #25
0
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);
}
Exemple #26
0
//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;
}
Exemple #27
0
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);


}
Exemple #28
0
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;
}
Exemple #29
0
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;
}
Exemple #30
0
/* 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);
}