Minor updates:

- JSONparseCore:
  - Set File mode on create
- SelectableCore:
  - Check pipe() return value on create
  - Validate replacement of stdin with pipe
This commit is contained in:
Charl Wentzel
2017-07-17 22:51:30 +02:00
parent 9b86bf3573
commit c32875509d
2 changed files with 15 additions and 10 deletions

View File

@@ -105,7 +105,7 @@ bool CJSONparse::WriteToFile( const char * BasePath, const char * FilePath, cons
} }
// Open file // Open file
if ((Handle = open( FilePath, O_CREAT|O_WRONLY|O_TRUNC )) < 0) { if ((Handle = open( FilePath, O_CREAT|O_WRONLY|O_TRUNC, 660 )) < 0) {
Error = true; Error = true;
sprintf( ErrorText, "Could not open file" ); sprintf( ErrorText, "Could not open file" );
return false; return false;

View File

@@ -458,6 +458,7 @@ int CSelectableCore::OpenPort( THandle * Handle )
int CSelectableCore::OpenForkPipe( THandle * Handle ) int CSelectableCore::OpenForkPipe( THandle * Handle )
{ {
int pipefd[2]; int pipefd[2];
int newfd;
char * Args[50]; char * Args[50];
int Count = 0; int Count = 0;
@@ -477,8 +478,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
} }
// Create Pipe // Create Pipe
pipe( pipefd ); if ((pipe( pipefd ) == -1) || (pipefd[0] == -1) || (pipefd[1] == -1))
if ((pipefd[0] == -1) || (pipefd[1] == -1))
{ {
// Log event // Log event
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not open Pipe", Name, Handle->Name ); if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Could not open Pipe", Name, Handle->Name );
@@ -512,15 +512,20 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
else else
{ {
// Fork success - this is child // Fork success - this is child
// Replace stdin with Read-end of pipe
close( 0 );
dup( pipefd[0] );
close( pipefd[0] );
// Close Write-end of pipe // Close Write-end of pipe
close( pipefd[1] ); close( pipefd[1] );
// Replace Processing image // Replace stdin with Read-end of pipe
close( 0 );
newfd = dup2( pipefd[0], 0 );
close( pipefd[0] );
if (newfd != 0) {
// Replace failed, exit immediately
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Stdin redirect failed on forked process", Name, Handle->Name );
exit( EXIT_FAILURE );
}
// Fork : Replace Processing image
BuildArgs( Handle->Path, Count, Args ); BuildArgs( Handle->Path, Count, Args );
// printf( "Execute params [%d]:\n", Count ); // printf( "Execute params [%d]:\n", Count );
// int i = 0; // int i = 0;
@@ -532,7 +537,7 @@ int CSelectableCore::OpenForkPipe( THandle * Handle )
// Replace failed, exit immediately // Replace failed, exit immediately
if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Exec on forked process failed", Name, Handle->Name ); if (Log) Log->Message( LogLevel, dlMedium, "%s: Handle '%s' - Exec on forked process failed", Name, Handle->Name );
exit(127); exit( EXIT_FAILURE );
} }
// Add to Select Lists // Add to Select Lists