ssh-askpass

From: Oliver Lehmann <lehmann(at)ans-netz.de>
Date: Thu, 24 Apr 2003 10:49:26 +0200

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 message
Received on Thu 24 Apr 2003 - 10:49:40 CEST

search this site