SSTP felett alakítok ki ppp hálózatot és a jelszó bekéréséhez a pppd passprompt pluginját használom. Az a problémám, hogy ha a megadott promptprog egy Xorg-os alkalmazást hív, akkor az sstp-client valamiért leáll:
sstp-client[2827]: (sstp-option.c:46) Connection was aborted, Unknown Status Attribute
Script /opt/bin/sstp-client ... finished (pid 2823), status = 0xff
EDIT: UPDATE
nem tudom hogyan hathat a passprompt-ból forkolt processz az sstp-clientre, mert minden filedescriptort lezártam, tehát az nem lehet hogy az X-es alkalmazás véletlenül ráír valamit egy pipe-ra amit a pppd-től örökölt.
Ugyanakkor ha nem X-es progit hívok a jelszó bekérésére, akkor minden jól megy.
peer konfig:
pty "/opt/bin/sstp-client --nolaunchpppd --debug --log-stderr --log-lineno --cert-warn --ipparam NAME SSTP-SERVER-ADDRESS"
name LOGIN-NAME
plugin sstp-pppd-plugin.so
sstp-sock /var/run/sstp-client/NAME.sock
hide-password
plugin passprompt.so
promptprog /opt/bin/ppp-passprompt
noauth
require-mppe
require-mppe-128
refuse-eap
refuse-mschap
lock
nobsdcomp
nodeflate
noaccomp
usepeerdns
nodetach
persist
maxfail 1
debug
sstp-client:
https://sourceforge.net/projects/sstp-client/files/sstp-client/1.0.10/
pppd:
debian ppp-2.4.5 ftp.debian.org/debian/pool/main/p/ppp/ppp_2.4.5.orig.tar.gz
passprompt.so:
a ppp csomagban lévő annyi kiegészítéssel, hogy nem csak PAP authentikációra hook-ol, hanem CHAP-ra is.
void plugin_init(void) {
...
chap_check_hook = promptpasscheck;
chap_passwd_hook = promptpass;
}
- 1037 megtekintés
Hozzászólások
Nem biztos, hogy csak ez a baja, de szerintem
chap_check_hook
helyett
chap_passwd_hook
kene (a
{pap,chap}_check_hook
csak azt ellenorzi, hogy van-e esely az authentikaciora).
- A hozzászóláshoz be kell jelentkezni
ja igaz bocsánat, igazad van, természetesen azt is beállítottam, csak rosszat kopiztam ki:
void plugin_init(void)
{
add_options(options);
pap_check_hook = promptpasscheck;
pap_passwd_hook = promptpass;
chap_check_hook = promptpasscheck;
chap_passwd_hook = promptpass;
}
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Nezegetem a forrast, de nem igazan van otletem. Esetleg hasonlitsd ossze, hogy milyen file descriptorokat tart nyitva az X-es es a nem X-es program, hatha rajovunk valamire.
- A hozzászóláshoz be kell jelentkezni
azzal kezdem a promptprog elején hogy minden fd-t lezárok (a pipe-on kívűl amin a plugin beolvassa a jelszót,
p[0]
-val jelöli)
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Az fd-k lezarasa (szerintem) a hivo dolga (elvegre o tudja, hogy mit nyitott meg), de nem baj, ha te is lezarod, amire nincs szukseged (std{in,out,err} valoszinuleg maradhat).
Viszont ahogy elnezem a forrast, a plugin a valaszt a promptprog parancssoraban megadott fd-n varja, ha azt is lezarod, az mar baj.
Szerintem megis erdemes lenne megnezni, hogy melyik promptprog milyen fd-ket tart nyitva:
ls -l /proc/$(pidof promptprog)/fd
- A hozzászóláshoz be kell jelentkezni
a plugin kódjában a fork utáni child blokkban követem el a close()-okat:
...
sys_close();
closelog();
close(p[0]);
int i;
for(i=3; i<256; i++) if(i!=p[1]) close(i);
seteuid(getuid());
...
(helyesbítem magam, az előbbi hsz-ban
p[1]
-re gondoltam)
A promptprog egy bash script, ebben meghívott
ls -l /proc/$$/fd >/tmp/a
alapján csak a 0,1,2 van nyitva a tty-re, a 16-os fd egy pipe:[]
-wx
fele és a 255 meg a bash script fájlja
r-x
.
A 3. argban megkapott fd-re írom a választ:
password=`zenity, Xdialog, miegymás...`
echo -n "$password" >&$3
ebben az esetben pedig okés:
read -s -e -p "Enter PPP password for $1: " password
echo -n "$password" >&$3
a zenity is ugyanazt a jelszót adja át, látszik ha a pluginban kiiratom, nincs felesleges whitespace.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Mi tortenik, ha a nem X-es valtozatban is egy kulso programtol kapod meg a jelszot?
password=`echo -n "titkosjelszo"`
echo -n "$password" >&$3
- A hozzászóláshoz be kell jelentkezni
akkor se jön elő a hiba.
(/bin/echo -val hogy biztos külső legyen)
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy triviális dolog, de azért megkérdezem: az X-es program kap valami értelmezhető értéket a DISPLAY enviro-ban? Csak mert a pppd futása nagyon nem igényel X szervert, de egy X-es plugin esélyesen akkor is kér ilyesmit, ha egy bitet sem tesz ki rá. Ellenben ha a plugin X server hiányában csuklik egyet és kilép, akkor oda a pppd authentikáció is.
- A hozzászóláshoz be kell jelentkezni
a pppd-t a pon parancs indítja, a munkamenetemben be van állítva a DISPLAY env, át is örökíti, meg is jelenik az X-es ablak a megfelelő displayen. a plugin alapból nem is vizsgálja a meghívott program exit kódját, így a plugin promptpass függvénye 1-gyel tér vissza.
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
bocsánat, félrenéztem, félrevezettem magamat és titeket.
Nem az X alkalmazás miatt ön elő a hiba.
akkor dobja az sstp-client a hibát ha az elindítását követő 1.8-2.0 mp után kapja meg a begépelt jelszót.
(az tévesztett meg, hogy ha nem X-es progi indult, annak többnyire ennél hamarabb be tudtam gépelni a jelszót, vagy változóból szedték.)
ennek fényében átfogalmazom a kérdésemet: mitől időkorlátolt az sstp-client? timeoutol? elkerülhető ez?
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni