pppd sstp + passprompt.so plugin

Fórumok

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;
}

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).

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

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.

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 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

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 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

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