[python] Problém s os.read

Jan Fuchs fuky na sunstel.asu.cas.cz
Sobota Únor 13 02:36:48 CET 2010


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


Další informace o konferenci Python