История изменений
Исправление firkax, (текущая версия) :
опробовал полное экранирование
sprintf(shellcmd,"\"openssl sha1 \\\"%s\\\"\"",filename);
Это не полное экранирование, экранировать надо всё, в том числе имя файла. Разбирай его посимвольно, видишь кавычки и слэши - экранируй. А, ну и кавычки вокруг команды зачем добавил? И кавычки вокруг имени файла зачем-то экранировал - это не надо было делать. Они тут синтаксис шелла и нужны как есть.
Только, повторю, вместо этой возни лучше использовать exec.
execl(shell path, «sh», "-c", command, (char *)0);
Это ты пытаешься эмулировать popen и получаешь все те же проблемы которые у него были. Бесполезное занятие. Запускать надо openssl безо всяких шеллов.
Исправление firkax, :
опробовал полное экранирование
sprintf(shellcmd,"\"openssl sha1 \\\"%s\\\"\"",filename);
Это не полное экранирование, экранировать надо всё, в том числе имя файла. Разбирай его посимвольно, видишь кавычки и слэши - экранируй. А, ну и кавычки вокруг команды зачем добавил?
Только, повторю, вместо этой возни лучше использовать exec.
execl(shell path, «sh», "-c", command, (char *)0);
Это ты пытаешься эмулировать popen и получаешь все те же проблемы которые у него были. Бесполезное занятие. Запускать надо openssl безо всяких шеллов.
Исправление firkax, :
опробовал полное экранирование
sprintf(shellcmd,"\"openssl sha1 \\\"%s\\\"\"",filename);
Это не полное экранирование, экранировать надо всё, в том числе имя файла. Разбирай его посимвольно, видишь кавычки и слэши - экранируй. А, ну и кавычки вокруг команды зачем добавил? Да ещё и с экранированием. И слеши экранировал дважды зачем-то.
Только, повторю, вместо этой возни лучше использовать exec.
execl(shell path, «sh», "-c", command, (char *)0);
Это ты пытаешься эмулировать popen и получаешь все те же проблемы которые у него были. Бесполезное занятие. Запускать надо openssl безо всяких шеллов.
Исправление firkax, :
опробовал полное экранирование
sprintf(shellcmd,"\"openssl sha1 \\\"%s\\\"\"",filename);
Это не полное экранирование, экранировать надо всё, в том числе имя файла. Разбирай его посимвольно, видишь кавычки и слэши - экранируй. А, ну и кавычки вокруг команды зачем добавил? Да ещё и с экранированием.
Только, повторю, вместо этой возни лучше использовать exec.
execl(shell path, «sh», "-c", command, (char *)0);
Это ты пытаешься эмулировать popen и получаешь все те же проблемы которые у него были. Бесполезное занятие. Запускать надо openssl безо всяких шеллов.
Исходная версия firkax, :
опробовал полное экранирование
sprintf(shellcmd,«\„openssl sha1 \\\“%s\\\»\"",filename);
Это не полное экранирование, экранировать надо всё, в том числе имя файла. Разбирай его посимвольно, видишь кавычки и слэши - экранируй.
Только, повторю, вместо этой возни лучше использовать exec.
execl(shell path, «sh», "-c", command, (char *)0);
Это ты пытаешься эмулировать popen и получаешь все те же проблемы которые у него были. Бесполезное занятие. Запускать надо openssl безо всяких шеллов.