Hallo,
ich habe jetzt gFTP dazu bewogen entweder mittels socketpair() zu
kommunizieren, bzw [pt]ty's mittels openpty() aufzumachen. Vom Author ist
es so gedacht, das wenn man ueber socketpair() geht, das ssh-askpass
utility verwendet. Wenn man jedoch ueber den device-Weg geht, soll es wohl
moeglich sein, das askpass Zeug zu "vergessen". Nur irgendwie kommt bei
mir immer dieses X11 ssh-askpass Programm zum Vorschein (welches wohl
OpenSSH startet) und ich hab ehrlich gesagt keinen Plan wie ich das
vermeiden soll. Es kann eigentlich auch nicht daran liegen, das ich
openpty() anstelle dieser "gehackten" sache verwende. Weil...
#ifdef __FreeBSD__
if( openpty( &fdm, &fds, &pts_name, NULL, NULL ) < 0 )
{
request->logging_function (gftp_logging_error,
request->user_data,
_("Cannot create a socket pair: %s\n"),
g_strerror (errno));
return (-2);
}
#else
if ((fdm = ptym_open (pts_name)) < 0)
{
request->logging_function (gftp_logging_error,
request->user_data,
_("Cannot open master pty %s: %s\n"),
pts_name,
g_strerror (errno));
return (-2);
}
#endif
is die eine sache... und die "hacked" slave sache:
#ifndef __FreeBSD__
else
{
if ((fds = ptys_open (fdm, pts_name)) < 0)
{
printf ("Cannot open slave pts %s: %s\n", pts_name,
g_strerror (errno));
return (-1);
}
close (fdm);
}
#endif
tty_raw (fds);
habe ich quasi fuer FreeBSD entfernt weil ich die ja schon von ptyopen()
bekomme.
die fuer FreeBSD relevanten parts aus ptym_open und ptys_open open:
int
ptym_open (char *pts_name)
{
int fd;
char *pos1, *pos2;
strcpy (pts_name, "/dev/ptyXY");
for (pos1 = "pqrstuvwxyzPQRST"; *pos1 != '\0'; pos1++)
{
pts_name[8] = *pos1;
for (pos2 = "0123456789abcdef"; *pos2 != '\0'; pos2++)
{
pts_name[9] = *pos2;
if ((fd = open (pts_name, O_RDWR)) < 0)
continue;
pts_name[5] = 't';
return (fd);
}
}
return (-1);
}
int
ptys_open (int fdm, char *pts_name)
{
int fds;
if (ioctl (fds, TIOCSCTTY, (char *) 0) < 0)
{
close (fdm);
return (-1);
}
return (fds);
}
so, eine Frage an die C-Profis ;) Macht der Author mit "seinem" Weg das
master und slave device zu "erzeugen" etwas anderes als ich mit openpty()
mache? Ich sage: nein. Nur frage ich mich dann wiso es im Code die
Moeglichkeit gibt, dass dort auf ein "Password:" Prompt geantwortet wird
(also kein ssh-askpass utility) Ideen?
Gruesse, Olli
-- Oliver Lehmann @home: lehmann(at)ans-netz.de @office: oliver.lehmann(at)mgi.de @www: http://www.pofo.de/ | http://wishlist.ans-netz.de/ To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Thu 24 Apr 2003 - 10:49:40 CEST