LinuxForum.Fans
Тема

Помогите доделать скрипт

Автор: MIcov15 29 сообщений 4871 просмотров
30.08.2014 22:35 · отредактировано #391350

Нужно запаролить папку в ридере(эл.книга) pocketbook (ОС linux).На форуме этого ридера мне кое что написали(но как я понял не доделано) :

text
fprintf (stderr,"password=%s\n", text);
text
book="$1"
dir_path="`dirname \"$book\"`"
dir="`basename \"$dir_path\"`"
# критерий необходимости проверки может быть любым, в том числе и таким ;)
if [ "$dir" = "hidden" ]
then
# не помню, как это делалось..
#  проверить пароль
   pass="`/mnt/ext1/system/bin/password.app 2>&1|awk -F = '/^password=/ {print $2}'`"
  if [ "$pass" = 123 ] ;  then
    exec /ebrmain/bin/`basename $0` "$book"
  else
    exit 1
  fi
else
 exec /ebrmain/bin/`basename $0` "$book"
fi 

Язык Shell Bash, но я совершненно не разбираюсь.
файл password.app выводит клавиатуру для ввода пароля и выводит полученный пароль в stderr виде .Могу выложить если что.
Хотелось бы еще иметь возможность сменить пароль и папку.
Заранее спс
Вот программа которая делает похожие вещи(для pocketbook):
[url]www3.telus.net/rkomar/sh_ivtool/[/url]

30.08.2014 22:58 #391356
"MIcov15" написал:
файл password.app выводит клавиатуру для ввода пароля и выводит полученный пароль в stderr виде

Вывод этой команды подаётся на разбор awk, который вырезает из вывода введённой слово (пароль) и всё это помещается в переменную pass:

text

pass="`/mnt/ext1/system/bin/password.app 2>&1|awk -F = '/^password=/ {print $2}'`"

Далее идёт простая проверка, что введённое слово (пароль) равно выбранному паролю, в данном случае "123":

text

if [ "$pass" = 123 ] ;  then

Ну и если условие выполняется, то должна выполняться команда по переходу в директорию, но здесь подразуменвается открытие книги, только команда какая-то несколько странная, но в случае, если вы ввели "123" она должна сработать. Странная она в том плане, что несколько непонятно зачем ещё раз вызывается этот же скрипт и передаёься ему параметр book.

text

 exec /ebrmain/bin/`basename $0` "$book"
"MIcov15" написал:
Хотелось бы еще иметь возможность сменить пароль и папку.

Пароль вы теперь знаете как менять. Ну а папка здесь подразумевается, что её имя "hidden", тогда будет выполняться запрос пароля.

30.08.2014 23:09 #391361

kostik87, спасибо что ответили .
Я в начале думал что скрип для открытия папки а не для книги.
Переделайте пожалуйста для открытия папки,и еще ,не совсем понятно с папкой hidden, на сколько я могу понять она должна находиться в той же папке что и файл скрипта?Хотелось бы чтобы можно было указать путь к определенной папке,на которую надо поставить пароль

30.08.2014 23:21 #391364
"MIcov15" написал:
Я в начале думал что скрип для открытия папки а не для книги.

На вход скрипту подаётся параметр, этот параметр помещается в переменную book

Затем посредством вызова утилиты dirname в переменную dir_name помещается путь до файла, который передан в качестве параметра, то что это книга я сужу по названия переменной book

text

dir_path="`dirname \"$book\"`"

Далее от пути до директории берётся собственно имя директории и помещается в переменную dir:

text

dir="`basename \"$dir_path\"`"

Ну а дальше уже идут проверки.

"MIcov15" написал:
Переделайте пожалуйста для открытия папки,и еще ,не совсем понятно с папкой hidden, на сколько я могу понять она должна находиться в той же папке что и файл скрипта?

Так что, как видите, поведение скрипта несколько другое.

"MIcov15" написал:
Хотелось бы чтобы можно было указать путь к определенной папке,на которую надо поставить пароль
"MIcov15" написал:
Хотелось бы чтобы можно было указать путь к определенной папке,на которую надо поставить пароль

Перепишите немного скрипт, по комментариям в этой теме вам будет легко это сделать.

Плюс раз у вас есть книга вам будет на чём тестировать этот скрипт. Потому, что я даже не представляю как он в книге вызывается. Могли бы хотя бы ссылку на форум скинуть откуда скрипт взяли.

30.08.2014 23:37 #391367

форум вот http://www.the-ebook.org/forum/viewforum.php?f=40
конкретно тема - http://www.the-ebook.org/forum/viewtopic.php?t=27611
Скрипт на 2 странице.Я если честно сам не совсем понимаю что с ним дальше делать,книга сенсорная ,все приложения ,игры и т.п с расширением .app .Надо как-то скомпилировать в этот формат ,для книги.Надеюсь найду как это сделать на форуме

30.08.2014 23:46 · отредактировано #391370
"MIcov15" написал:
Я если честно сам не совсем понимаю что с ним дальше делать

Там же написали, что текст этого скрипта нужно сохранить в файл bookshelf.app и положить в директорию system/bin/ текст лучше сохраните в UTF-8, с концом строки Unix., вам в этом поможет Notepad++


Положить в system/bin/ свой bookshelf.app, который будет проверять пароль и запускать системный bookshelf.app. Но это обходится загрузкой в безопасном режиме.

Точнее не так, вам же там всё расписали, почему вы не читаете?


Если пароль набирается часто (при каждом включении) - рано или поздно его подсмотрят. А шнур такой идет в комплекте с практически каждым гаджетом. Стандарт же.

Проверку пароля при открытии книги можно сделать, например, так:
в system/bin/ положить скрипты с именами AdobeViewer.app, djviewer.app, fbreader.app вида

Теперь ставновится ясной суть вот этой команды:

text

exec /ebrmain/bin/`basename $0` "$book"

В system/bin вы помещаете указанный скрипт под указанными именами (AdobeViewer.app, djviewer.app, fbreader.app), этим вы перекрываете просто вызов просмотрщиков книг из /ebrmain/bin, затем если пароль введён верно, то из /ebrmain/bin будет вызван просмотрщик, соответствующий формату книги, а в качестве параметра передан путь до книги.

30.08.2014 23:52 #391371

не обратил на это внимания т.к изначально в теме вопрос был "как поставить пароль на вход" в саму книжку.

30.08.2014 23:57 · отредактировано #391373
"MIcov15" написал:
не обратил на это внимания т.к изначально в теме вопрос был "как поставить пароль на вход" в саму книжку.

Перечитайт предыдущее моё сообщение, я его поправил.

Для пароля на книжку достаточно вот такого скрипта:

text

         pass=""
         until ! [  "$pass"=123 ]; do
             pass="`/mnt/ext1/system/bin/password.app 2>&1|awk -F = '/^password=/ {print $2}'`" 
         done

и "Положить в system/bin/ свой bookshelf.app".

Ну и ваш запрос на выбор директории так же вам уже должен быть ясен.

31.08.2014 00:10 · отредактировано #391375
"kostik87" написал:
В system/bin вы помещаете указанный скрипт под указанными именами (AdobeViewer.app, djviewer.app, fbreader.app), этим вы перекрываете просто вызов просмотрщиков книг из /ebrmain/bin, затем если пароль введён верно, то из /ebrmain/bin будет вызван просмотрщик, соответствующий формату книги, а в качестве параметра передан путь до книги.

С этим понятно.Я все равно не очень понимаю как изменить скрипт под нужную директорию
Та тема создавалась не мной

31.08.2014 00:22 #391376
"MIcov15" написал:
С этим понятно,но а как запаролить нужную папку?

Вас интересует именно запароливание "папки" или предотвращение просмотра книг в ней, если достаточно лишшь предотвращение просмотра в ней книг, то скрипт с этим справится, онн создаёт "заглушки" для программ просмотра книг указанных форматов и если пароль введён верно, то открывает книгу, если нет - ничего не делает.

В некотором роде это тоже запароливание "папки".

Если вам нужно именно предотвратить даже возможность перехода в директорию и просмотра её содержимого, то тут нужно чётко понимать как работает операционная система книги и можно ли повесить какой-либо скрипт на событие смены директории, я если честно не уверен. Думаю всё, что возможно - это именно то, что вам уже предложили, а именно "заглушки" на программы просмотра, которые будут срабатывать в указанной директории, в других директориях просто будет запускаться программа просмотра. Как эти "заглушки" работают, каждому формату книги сопоставлена определённая программа просмотра, она ищется по определённому пути с определённым именем, вам предлагают поместить в путь, который проверяется раньше скрипт с тем же именем, что и программа просмотра и если книга находится в указанной директори, то "заглушка" запросит пароль и если он верен, то запустит программу просмотра. Вот и получается, что обработать открытие книги легко, а смену директории ("папки") не ясно как. Ну или ставьте пароль на книгу, я вам уже описал как.

31.08.2014 00:27 #391378
"MIcov15" написал:
Я все равно не очень понимаю как изменить скрипт под нужную директорию
text

dir_path="`dirname \"$book\"`"
dir="`basename \"$dir_path\"`"
if [ "$dir" = "hidden" ]

В место этого можете написать либо полный путь до директории, если вы знаете как книга его представляет:

text

dir_path="`dirname \"$book\"`"
if [ "$dir_path" = "/путь/до/директории" ]

ну или вместо hidden указать вашу директорию, но скрипт будет срабатывать на все директории с таким именем, без разницы на каком уровне вложенности они находятся

text

dir_path="`dirname \"$book\"`"
dir="`basename \"$dir_path\"`"
if [ "$dir" = "ваша_директория" ]
31.08.2014 00:44 · отредактировано #391384

"MIcov15" написал:
как запаролить нужную папку?
этот вопрос не имеет смысла. Если программа для чтения не умеет "паролить папку", то вы её и не "запаролите". И как я понимаю, программа умеет "паролить" только книжки по отдельности.

PS: однако я ошибся, и скрипт таки проверяет пароль.

Вам значит надо получить полный путь, в обычном linux это делается так:
[console]$ readlink -f time.h
/usr/include/bits/time.h
[/console]
если эта команда у вас работает(в чём я не уверен), то всё просто, надо извлечь путь
[console]$ FULL_NAME=$(readlink -f time.h)
$ PATH_NAME=$(dirname "$FULL_NAME")[/console]
и теперь можно проверять путь. Если этот путь входит в список "запароленых", то нужно проверить пароль перед запуском программы-читалки.
31.08.2014 00:57 #391387
"kostik87" написал:
dir_path="`dirname \"$book\"`"

точнее

text
dir_path=$(dirname "$book")
31.08.2014 01:30 #391394
"drBatty" написал:
точнее
text

dir_path=$(dirname "$book")

Да, но я ленив, мне проще скопировать кусок готового скрипта для ответа и не править его, но работать будет и так, т.к. значение переменной экранируется кавычками и подаётся на вход dirname.

31.08.2014 01:35 #391397

"kostik87" написал:
но работать будет и так, т.к. значение переменной экранируется кавычками и подаётся на вход dirname.
да, но кавычки вокруг `` лишние.
31.08.2014 01:40 #391400
"drBatty" написал:
да, но кавычки вокруг `` лишние.

Они указывают, что нужно выполнить команду в них, если их убрать, то в dir_path будет строка "dirname \"/путь/до/книги/файл_книги\"", а не "/путь/до/книги".

31.08.2014 01:54 #391401

kostik87,
тут вообще никаких кавычек не нужно, кроме те, что вокруг $book
[console]$ book="/a a/b b/c c"
$ dir_path=`dirname "$book"`; echo "dir_path='$dir_path'"
dir_path='/a a/b b'
[/console]

31.08.2014 12:46 #391425

спасибо что помогаете ,буду пробовать разные варианты ,в конце отпишу.
kostik87, спасибо за ссылки ,не все понятно,но надеюсь поможет

31.08.2014 14:00 #391432

в общем скрипт похоже работает ,но клавиатура не вызывается и книга просто не открывается,может я как то не так вызвал программу password.app ?

Войдите или зарегистрируйтесь, чтобы ответить.