Exemplo n.º 1
0
void zmLoadConfig()
{
  FILE *cfg;
  char line[512];
  if ( (cfg = fopen( ZM_CONFIG, "r")) == NULL )
  {
    Fatal( "Can't open %s: %s", ZM_CONFIG, strerror(errno) );
  }
  while ( fgets( line, sizeof(line), cfg ) != NULL )
  {
    char *line_ptr = line;

    // Trim off any cr/lf line endings
    int chomp_len = strcspn( line_ptr, "\r\n" );
    line_ptr[chomp_len] = '\0';

    // Remove leading white space
    int white_len = strspn( line_ptr, " \t" );
    line_ptr += white_len;

    // Check for comment or empty line
    if ( *line_ptr == '\0' || *line_ptr == '#' )
      continue;

    // Remove trailing white space
    char *temp_ptr = line_ptr+strlen(line_ptr)-1;
    while ( *temp_ptr == ' ' || *temp_ptr == '\t' )
    {
      *temp_ptr-- = '\0';
      temp_ptr--;
    }

    // Now look for the '=' in the middle of the line
    temp_ptr = strchr( line_ptr, '=' );
    if ( !temp_ptr )
    {
      Warning( "Invalid data in %s: '%s'", ZM_CONFIG, line );
      continue;
    }

    // Assign the name and value parts
    char *name_ptr = line_ptr;
    char *val_ptr = temp_ptr+1;

    // Trim trailing space from the name part
    do
    {
      *temp_ptr = '\0';
      temp_ptr--;
    }
    while ( *temp_ptr == ' ' || *temp_ptr == '\t' );

    // Remove leading white space from the value part
    white_len = strspn( val_ptr, " \t" );
    val_ptr += white_len;

    if ( strcasecmp( name_ptr, "ZM_DB_HOST" ) == 0 )
      staticConfig.DB_HOST = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_DB_NAME" ) == 0 )
      staticConfig.DB_NAME = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_DB_USER" ) == 0 )
      staticConfig.DB_USER = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_DB_PASS" ) == 0 )
      staticConfig.DB_PASS = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_PATH_WEB" ) == 0 )
      staticConfig.PATH_WEB = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_SERVER_HOST" ) == 0 )
      staticConfig.SERVER_NAME = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_SERVER_NAME" ) == 0 )
      staticConfig.SERVER_NAME = std::string(val_ptr);
    else if ( strcasecmp( name_ptr, "ZM_SERVER_ID" ) == 0 )
      staticConfig.SERVER_ID = atoi(val_ptr);
    else
    {
      // We ignore this now as there may be more parameters than the
      // c/c++ binaries are bothered about
      // Warning( "Invalid parameter '%s' in %s", name_ptr, ZM_CONFIG );
    }
  } // end foreach line of the config
  fclose( cfg );
  zmDbConnect();
  config.Load();
  config.Assign();

  // Populate the server config entries
  if ( ! staticConfig.SERVER_ID ) {
    if ( ! staticConfig.SERVER_NAME.empty() ) {

      Debug( 1, "Fetching ZM_SERVER_ID For Name = %s", staticConfig.SERVER_NAME.c_str() );
      std::string sql = stringtf("SELECT Id FROM Servers WHERE Name='%s'", staticConfig.SERVER_NAME.c_str() );
      if ( MYSQL_ROW dbrow = zmDbFetchOne( sql.c_str() ) ) {
        staticConfig.SERVER_ID = atoi(dbrow[0]);
      } else {
        Fatal("Can't get ServerId for Server %s", staticConfig.SERVER_NAME.c_str() );
      }

    } // end if has SERVER_NAME
  } else if ( staticConfig.SERVER_NAME.empty() ) {
    Debug( 1, "Fetching ZM_SERVER_NAME For Id = %d", staticConfig.SERVER_ID );
    std::string sql = stringtf("SELECT Name FROM Servers WHERE Id='%d'", staticConfig.SERVER_ID );
    
    if ( MYSQL_ROW dbrow = zmDbFetchOne( sql.c_str() ) ) {
      staticConfig.SERVER_NAME = std::string(dbrow[0]);
    } else {
      Fatal("Can't get ServerName for Server ID %d", staticConfig.SERVER_ID );
    }
  
  }  
  if ( ! staticConfig.SERVER_ID ) {
    Debug( 1, "No Server ID or Name specified in config.  Not using Multi-Server Mode." );
  } else {
    Debug( 1, "Server is %d: using Multi-Server Mode.", staticConfig.SERVER_ID );
  }
}
Exemplo n.º 2
0
void zmLoadConfig()
{
	FILE *cfg;
	char line[512];
	char *val;
	if ( (cfg = fopen( ZM_CONFIG, "r")) == NULL )
	{
		Fatal("Can't open %s: %s", ZM_CONFIG, strerror(errno) );
	}
	while ( fgets( line, sizeof(line), cfg ) != NULL )
	{
		char *line_ptr = line;

		// Trim off any cr/lf line endings
		int chomp_len = strcspn( line_ptr, "\r\n" );
		line_ptr[chomp_len] = '\0';

		// Remove leading white space
		int white_len = strspn( line_ptr, " \t" );
		line_ptr += white_len;

		// Check for comment or empty line
		if ( *line_ptr == '\0' || *line_ptr == '#' )
			continue;

		// Remove trailing white space
		char *temp_ptr = line_ptr+strlen(line_ptr)-1;
		while ( *temp_ptr == ' ' || *temp_ptr == '\t' )
		{
			*temp_ptr-- = '\0';
			temp_ptr--;
		}

		// Now look for the '=' in the middle of the line
		temp_ptr = strchr( line_ptr, '=' );
		if ( !temp_ptr )
		{
			Warning( "Invalid data in %s: '%s'", ZM_CONFIG, line );
			continue;
		}

		// Assign the name and value parts
		char *name_ptr = line_ptr;
		char *val_ptr = temp_ptr+1;

		// Trim trailing space from the name part
		do
		{
			*temp_ptr = '\0';
			temp_ptr--;
		}
		while ( *temp_ptr == ' ' || *temp_ptr == '\t' );

		// Remove leading white space from the value part
		white_len = strspn( val_ptr, " \t" );
		val_ptr += white_len;

		val = (char *)malloc( strlen(val_ptr)+1 );
		strncpy( val, val_ptr, strlen(val_ptr)+1 );

		if ( strcasecmp( name_ptr, "ZM_DB_HOST" ) == 0 )
            staticConfig.DB_HOST = val;
		else if ( strcasecmp( name_ptr, "ZM_DB_NAME" ) == 0 )
            staticConfig.DB_NAME = val;
		else if ( strcasecmp( name_ptr, "ZM_DB_USER" ) == 0 )
            staticConfig.DB_USER = val;
		else if ( strcasecmp( name_ptr, "ZM_DB_PASS" ) == 0 )
            staticConfig.DB_PASS = val;
		else if ( strcasecmp( name_ptr, "ZM_PATH_WEB" ) == 0 )
            staticConfig.PATH_WEB = val;
		else
		{
			// We ignore this now as there may be more parameters than the
			// c/c++ binaries are bothered about
			// Warning( "Invalid parameter '%s' in %s", name_ptr, ZM_CONFIG );
		}
	}
	fclose( cfg);
	zmDbConnect();
	config.Load();
	config.Assign();
}