[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