[python] Problém s os.read
Filip Bartmann
filbar na centrum.cz
Sobota Únor 13 11:36:02 CET 2010
Dne Sat, 13 Feb 2010 02:36:48 +0100 (CET)
Jan Fuchs <fuky na sunstel.asu.cas.cz> napsal(a):
> Zdravím,
> myslíš následující dokumentaci a program checkpassword?
>
> http://cr.yp.to/checkpwd/interface.html
>
> Pokud ano, tak tohle je začátek programu checkpassword:
>
> int main(int argc,char* argv[]) {
> char buf[513];
> char* last;
> int len;
> char *login,*passwd,*ptr;
> struct passwd *pw;
> struct spwd *spw;
>
> if (!argv[1]) return 2;
> for (len=0; len<512; ) {
> int tmp;
> tmp=read(3,buf+len,512-len);
> if (tmp==-1) return 111;
> if (tmp==0) break;
> len+=tmp;
> }
> close(3);
>
> Ve svém programu tedy nejprve musíš připravit fd 3 pro checkpassword.
> Takže rešení může být např.:
>
> import os
>
> r_fd, w_fd = os.pipe()
> os.write(w_fd, "username\0password\0")
>
> retcode = os.fork()
>
> if (retcode == 0):
> os.close(w_fd)
> os.execlp("checkpassword", "checkpassword", "/bin/date")
> else:
> os.close(r_fd)
> os.close(w_fd)
>
> Jelikoz jsou na zacatku otevreny pouze deskriptory 0, 1, 2 tj. stdin,
> stdout, stderr, tak fce pipe() vrati pro cteci fd 3, takze neni treba
> resit prirazeni pomoci dup(), dup2(). Dulezite je uzavrit zapisovaci
> cast roury, jinak zustane checkpassword "viset" ve fci read().
>
> S pozdravem Jan Fuchs
>
> > Snažím se napsat si autentikační plugin pro BINCimap. V dokumentaci
> > je napsáno, že jméno a heslo je odesíláno na deskriptor 3.
>
> --
> /**************************************************************
> * _ Žádný program není bezchybný, dokonalý ani nejlepší, *
> * °v° to samé platí i o lidech a nejen o nich. *
> * /(_)\ -- Jan Fuchs -- *
> * ^ ^ *
> * http://www.fuky.org Jabber: jan.fuchs.cz na gmail.com *
> **************************************************************/
Jo, přesně to myslím, jenomže jestli jsem to pochopil správně, tak je
třeba to username a password z toho deskriptoru přečíst a ne ho tam
zapisovat.
Standartní checkpasswd provádí autentifikaci přes /etc/passwd a já
potřebuju autentifikaci přes ldap, takže si musím napsat náhradu toho
checkpasswd - tedy implementovat jeho interface(tzn. přečíst z
deskriptoru 3 to username\0passwd\0timestamp\0.
Filip Bartmann
Další informace o konferenci Python