/************************************************************************/ /* Copyright (C) 2004 Michael C. Shultz */ /* */ /* This program is free software; you can redistribute it and/or modify */ /* it under the terms of the GNU General Public License as published by */ /* the Free Software Foundation; either version 2 of the License, or (at*/ /* your option) any later version. */ /* */ /* This program is distributed in the hope that it will be useful, */ /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ /* GNU General Public License for more details. */ /* */ /* You should have received a copy of the GNU General Public License */ /* along with this program; if not, write to the Free Software */ /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA */ /* 02111-1307, USA. */ /* */ /* Michael C. Shultz */ /* ringworm@inbox.lv */ /* Box 3238 Landers, CA 92285 */ /************************************************************************/ #include <PMGRrReadConfigure.h> int pipeToNull( char* ); int PMGRrReadConfigure( void ) { FILE* StreamConfig; MGsDb config_db; char ConfigFileName_OLD[] = LOCALBASE"etc/portmanager/portmanager.conf"; char ConfigFileNameSAMPLE[] = LOCALBASE"etc/portmanager/pm-020.conf.SAMPLE"; char ConfigFileName[] = LOCALBASE"etc/portmanager/pm-020.conf"; char config_db_fileTemp[] = DATADIR"configure.db.temp"; char config_db_file[] = DATADIR"configure.db"; char* ConfigBuffer; char id[] = "PMGRrReadConfigure"; int idx = 0; int idx2 = 0; unsigned int bufferSize = 0; unsigned int fileSize = 0; unsigned int idx1 = 0; /* update old conf file if it exists */ if( MGrIfFileExist( ConfigFileName_OLD ) == 1 ) { ConfigBuffer = (char*)malloc( strlen( "mv " ) + (strlen(ConfigFileName_OLD)*2) + strlen("_OLD") + 3 ); strncpy( ConfigBuffer, "mv ", strlen( "mv " ) + 1 ); strncat( ConfigBuffer, ConfigFileName_OLD, strlen(ConfigFileName_OLD) + 1 ); strncat( ConfigBuffer, " ", 2 ); strncat( ConfigBuffer, ConfigFileName_OLD, strlen(ConfigFileName_OLD) + 1 ); strncat( ConfigBuffer, "_OLD", strlen("_OLD") + 1 ); fprintf( stdout, "moving %s to %s%s\n", ConfigFileName_OLD, ConfigFileName_OLD, "_OLD" ); fprintf( stdout, "portmanager configuration file is now called %s. Please review %s and %s and make any nessesary changes.\n", ConfigFileName, ConfigFileNameSAMPLE, ConfigFileName_OLD); system( ConfigBuffer ); } if( MGrIfFileExist( ConfigFileName ) == 0 ) { ConfigBuffer = (char*)malloc(strlen("cp ")+strlen(ConfigFileNameSAMPLE)+strlen(" ")+strlen(ConfigFileName)+1); strncpy( ConfigBuffer, "cp ", strlen("cp ")+1 ); strncat( ConfigBuffer, ConfigFileNameSAMPLE, strlen(ConfigFileNameSAMPLE)+1); strncat( ConfigBuffer, " ", strlen(" ")+1); strncat( ConfigBuffer, ConfigFileName, strlen(ConfigFileName)+1); system( ConfigBuffer ); free( ConfigBuffer ); } fileSize = MGrFileSize( ConfigFileName ); fprintf( stdout, "reading %s, size %d\n", ConfigFileName, fileSize ); ConfigBuffer = ( char* )malloc( fileSize + 1 ); if( ( StreamConfig = fopen( ConfigFileName, "r" ) ) != 0 ) { fread( ConfigBuffer, fileSize, 1, StreamConfig); fclose( StreamConfig ); } ConfigBuffer[fileSize] = '\n'; ConfigBuffer[fileSize+1] = 0; while( ( bufferSize = MGrStripComment( ConfigBuffer, (char)'#' ) ) != 0 ) { ConfigBuffer = ( char* )realloc( ConfigBuffer, bufferSize + 1 ); ConfigBuffer[bufferSize] = 0; fileSize = bufferSize; } while( pipeToNull( ConfigBuffer ) != 0 ); /* clean out extra linefeeds */ idx = 0; while( idx < fileSize + 1 ) { if( ConfigBuffer[idx] == 10 && (ConfigBuffer[idx-1] != 0 || idx == 0) ) { idx1 = idx; while( idx1 < fileSize ) { ConfigBuffer[idx1] = ConfigBuffer[idx1+1]; idx1++; } ConfigBuffer = ( char* )realloc( ConfigBuffer, idx1-2 ); fileSize--; continue; } idx++; } /* change every other NULL to NULL LF */ idx = 0; while( idx < fileSize + 1 ) { if( ConfigBuffer[idx] == 0 ) { idx++; while( ConfigBuffer[idx] != 0 && idx < fileSize + 1 ) { idx++; } if( ConfigBuffer[idx+1] == '\t' || ConfigBuffer[idx+1] == ' ' ) { ConfigBuffer[idx+1] = 10; } } idx++; } /* tidy up end of file */ while( ConfigBuffer[fileSize-2] != 0 && ConfigBuffer[fileSize-1] != '\n' ) { ConfigBuffer[fileSize-1] = -1; fileSize--; } if( !( StreamConfig = fopen( config_db_fileTemp, "w" ) ) ) { fprintf( stderr, "%s %s error: unable to open %s for write\n", id, ver, config_db_fileTemp ); fprintf( stderr, "you must run this program as root\n" ); perror( "system message" ); return( 1 ); } else { fwrite( ConfigBuffer, 1, fileSize, StreamConfig ); fclose( StreamConfig ); } StreamConfig = fopen( config_db_file, "w" ); MGmDbArray( config_db, config_db_fileTemp, "r" ); idx = 0; idx1 = 0; idx2 = 0; while( idx < config_db.recordQty ) { /* trim leading whitespace */ while( config_db.array[idx][0][idx1] == ' ' || config_db.array[idx][0][idx1] == '\n' || config_db.array[idx][0][idx1] == '\t' ) { idx1++; } while( config_db.array[idx][1][idx2] == ' ' || config_db.array[idx][1][idx2] == '\n' || config_db.array[idx][1][idx2] == '\t' ) { idx2++; } fprintf( StreamConfig, "%s%c%s%c\n", config_db.array[idx][0]+idx1, 0, config_db.array[idx][1]+idx2, 0 ); idx++; } fclose( StreamConfig ); MGmDbArrayFree(config_db); free(ConfigBuffer); /* MGmDbArray( config_db, config_db_file, "r" ); idx = 0; while( idx < config_db.recordQty ) { fprintf( stdout, "key:%s data:%s\n", config_db.array[idx][0], config_db.array[idx][1] ); idx++; } MGmDbArrayFree(config_db); */ return( 0 ); } int pipeToNull( char* buffer ) { char* toNull; if( ( toNull = strrchr( buffer, '|' ) ) != NULL ) { toNull[0] = 0; return( 1 ); } return( 0 ); }