[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH] libinit: Falscherkennung in init_execute() korrigiert.



From: Alexander Siol <alex@alex.(none)>

! libinit: init_execute() hat im Falle von mit Programmen gleichnamigen Verzeichnissen beschlossen es gäbe keine Anwendung ohne den PATH zu durchsuchen. Dieser Fall wird jetzt abgefangen.
---
 trunk/src/modules/lib/init.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/trunk/src/modules/lib/init.c b/trunk/src/modules/lib/init.c
index 0ffd982..2da7fa1 100644
--- a/trunk/src/modules/lib/init.c
+++ b/trunk/src/modules/lib/init.c
@@ -33,6 +33,7 @@
 #include "stdlib.h"
 #include <io.h>
 #include <unistd.h>
+#include <dirent.h>
 
 // Kindprozess eintragen
 extern void wait_child_add(pid_t pid);
@@ -105,16 +106,18 @@ pid_t init_execute(const char* cmd)
     size_t program_len = strcspn(cmd, " ");
     char program[program_len + 1];
     char* abs_path;
+    DIR* dir = NULL;
 
     strncpy(program, cmd, program_len);
     program[program_len] = 0;
 
     // Pruefen ob es sich um einen Pfad handelt
     abs_path = io_get_absolute_path(program);
-    if (!abs_path || (access(abs_path, X_OK) != 0)) {
+    if (!abs_path || (access(abs_path, X_OK) != 0) || (dir = opendir(abs_path)) != 0) {
         // Den absoluten Pfad freigeben
         free(abs_path);
         abs_path = NULL;
+	closedir(dir);
 
         // Es handelt sich nicht um eine Pfadangabe, dann wird jetzt PATH
         // durchsucht.
-- 
1.6.0.4