Как избежать знака @ в поле пароля URL-адреса smb: // - PullRequest
11 голосов
/ 01 сентября 2010

Я пытаюсь написать сценарий bash, в котором я подключаюсь к серверу samba, получая имя пользователя и пароль, затем говоря $ username: $password@SERVERNAME.

Однако это не удастся, еслив пароле есть @.Есть ли способ избежать @ из пароля в bash?

Заранее спасибо

Обновление: я настраиваю этот сетевой принтер

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E

иэто работает, за исключением случая, когда $ password имеет знак @;переменные $ username и $ passwords получены из чтения stdin

Ответы [ 2 ]

7 голосов
/ 01 сентября 2010

Ах, нет, на самом деле речь идет не о цитировании Баша, а о самбе. У вас есть это:

lpadmin -p PRINTER -v smb://$username:$password@SERVER -E

, который Баш покорно расширяется до

lpadmin -p PRINTER -v smb://alice:passw@rd@SERVER -E

, а затем клиентская библиотека Samba считает, что пароль заканчивается на первом знаке @, и он должен подключаться к серверу с именем rd@server, не говоря уже о том, что вы не можете вставить это имя в DNS.

lpadmin происходит от CUPS, а не от Samba ( вот его справочная страница ), и, читая эти документы немного, я думаю, что вы сможете использовать этот альтернативный синтаксис:

lpadmin -p PRINTER -U "${username}%${password}" -v smb://SERVER -E

Я удивлен, что не смог @, так как %40 не работает. Для меня это похоже на ошибку в клиентской библиотеке samba.

3 голосов
/ 01 апреля 2011

Я использую cups admin на http://localhost:631/ для добавления принтеров.Кодировка @ как% 40 работала на меня.

...