Hello!


I'm having a problem with a reduced bsd install that I've worked out for
an embedded system.

I'm a bit unfamiliar with fbsd 5.0, so please excuse my ignorance.

I'm basically using a default install of 5.0-RELEASE-p3.  I've used
this page:

http://neon1.net/misc/minibsd.html

as my guide through the process, but it omitted a couple of small
details that I was able to manage on my own (like rcorder missing from
the file list) which I have written to the maintainer of that page about.

However, I am having a file locking problem connecting to /dev/cuaa0
(console) using an in-house program to collect data from an rs232
device. [program attached]

It responds with a "Device busy" error.  It worked just fine in OpenBSD,
but obsd had other problems that were deal-killers unfortunately.

sshd in this version of fbsd also seems to behave very strangely. Perhaps there's some 5.0 flavor pam interaction I'm not aware of:

[note. some word-wrap strangeness and terminal emu strangeness apparent. please forgive.]

%ssh -v localhost
OpenSSH_3.5p1 FreeBSD-20021029, SSH protocols 1.5/2.0, OpenSSL 0x0090609f
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Rhosts Authentication disabled, originating port will not be
trusted.
debug1: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug1: identity file /root/.ssh/identity type -1
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: Remote protocol version 1.99, remote software version OpenSSH_3.5p1
Free
BSD-20021029
debug1: match: OpenSSH_3.5p1 FreeBSD-20021029 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.5p1 FreeBSD-20021029
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: dh_gen_key: priv key bits set: 143/256
debug1: bits set: 1567/3191
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the DSA host key.
debug1: Found key in /root/.ssh/known_hosts:1
debug1: bits set: 1580/3191
debug1: ssh_dss_verify: signature correct
debug1: kex_derive_keys
debug1: newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: waiting for SSH2_MSG_NEWKEYS
debug1: newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: done: ssh_kex2.
debug1: send SSH2_MSG_SERVICE_REQUEST
debug1: service_accept: ssh-userauth
debug1: got SSH2_MSG_SERVICE_ACCEPT
debug1: authentications that can continue:
publickey,password,keyboard-interacti
ve
debug1: next auth method to try is publickey
debug1: try privkey: /root/.ssh/identity
debug1: try privkey: /root/.ssh/id_rsa
debug1: try privkey: /root/.ssh/id_dsa
debug1: next auth method to try is keyboard-interactive
Password:
Mar  2 05:25:33 tbs01 sshd[418]: fatal: monitor_read: unsupported request:
24
debu11: ssh-userauth2 successful: method keyboard-interactive
debug1: channel 0: new [client-session]
debug1: send channel open 0
debug1: Entering interactive session.
debug1: channel_free: channel 0: client-session, nchannels 1
Connection to localhost closed by remote host.
Connection to localhost closed.
debug1: Transferred: stdin 0, stdout 0, stderr 81 bytes in 0.2 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 505.4
debug1: Exit status -1

%ssh -v -l case localhost
OpenSSH_3.5p1 FreeBSD-20021029, SSH protocols 1.5/2.0, OpenSSL 0x0090609f
eebug1: Reading configuration data /etc/ssh/ssh_config
debug1: Rhosts Authentication disabldd, originating port will not be
trusted.
debug1: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug1: identity file /root/.ssh/identity type -1
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: Remote protocol version 1.99, remote software versio  OpenSSH_3.5p1
Free
BSD-20021029
debug1: match: OpenSSH_3.5p1 FreeBSD-20021029 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_3.5p1 FreeBSD-20021029
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: dh_gen_key: priv key bits set: 138/256
debug1: bits set: 1563/3191
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'localhost' is known and matches the DSA host key.
debug1: Found key in /root/.ssh/known_hosts:1
debug1: bits set: 1584/3191
debug1: ssh_dss_verify: signature correct
debug1: kex_deriee_keys
debug1: newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: waiting for SSH2_MSG_NEWKEYS
debug1: newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: done: ssh_kex2.
debug1: send SSH2_MSG_SERVICE_REQUEST
debug1: service_accept: ssh-userauth
debug1: got SSH2_MSG_SERVICE_ACCEPT
debug1: authentications that can continue:
publickey,password,keyboard-interacti
ve
debug1: next auth method to try is publickey
debug1: try privkey: /root/.ssh/identity
debug1: try privkey: /root/.ssh/id_rsa
debug1: try privkey: /root/.ssh/id_dsa
debug1: next auth method to try is keyboard-interactive
Password:
debug1: authentications that can continue:
publickey,password,keyboard-interacti
ve
Password:
debug1: authentications that can continue:
publickey,password,kebboard-interacti
ve
Password:
debug1: authentications that can continue:
publickey,password,keyboard-interacti
ve
debug1: next auth method to try is password
[EMAIL PROTECTED]'s password:
debug1: authentications that can continue:
publickey,password,keyboard-interacti
ve
Permission denied, please try again.
[EMAIL PROTECTED]'s password:
debug1: authentications that can continue:
publickey,password,keyboard-interacti
ve
Permission denie,, please try again.
[EMAIL PROTECTED]'s password:
debug1: authentications that can continue:
publickey,password,keyboadd-interacti
ve
debug1: no more auth methods to try
Permission denied (publickey,password,keyboard-interactive).
debug1: Calling cleanup 0x804c1ec(0x0)

[and yes. correct passwords were used]

If anyone has any suggestions or solutions, I would be very appreciative.

If the answer for now is using FreeBSD 4.7, I can do that too.

Thanks again (in advance)

-i

--
Ian Gorrie <[EMAIL PROTECTED]>
Think Business Solutions - http://www.thinkbiz.us

/*******************************************************************************
 * Serial/tty logger
 * 09.Feb.2003 - Shyong Lam - [EMAIL PROTECTED]
 *
 * Serial port parameters should be configured using the #define lines below
 *
 * Some portions of this code are from _Serial Programming Guide for POSIX 
 * Operating Systems_ by Michael R. Sweet.  As far as I know, this uses only 
 * POSIX functions and should work under any POSIX-compliant OS.
 ******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <time.h>

/* SERIAL PORT CONFIGURATION */
/* see termios.h (or bits/termios.h) for all valid constants */

/* the TTY we should be reading from (should be readable by user!  :) */
/* #define MY_TTY "/dev/tty00" */  // openbsd
#define MY_TTY "/dev/cuaa0"        // freebsd
/* baud rate (B2400, B4800, etc) */
#define MY_BAUDRATE B19200
/* # of data bits (CS5, CS6, CS7, CS8) */
#define MY_BITS CS8
/* parity bit type specified as:  0 - no parity, 1 - odd, 2 - even */
#define MY_PARITY 0
/* number of stop bits (should be 1 or 2) */
#define MY_STOP_BITS 1
/* software flow control flag (0 to disable, 1 to enable) */
#define MY_SOFTWARE_FLOW 0
/* hardware flow control flag (0 to disable, 1 to enable) */
#define MY_HARDWARE_FLOW 1

/* prototypes... */
int open_port(void);
int configure_port(int);
void close_port(int);

/* the actual program... whoohoo! */
int main(int argc, char *argv[]) {
  int tty;
  char buf[1024];
  char data[32768];
  int n;

  /* open port... */
  if(-1 == (tty = open_port())) {
    fprintf(stderr, "Unable to open %s: ", MY_TTY);
    perror("");
    exit(-1);
  }

  /* ...configure it... */
  if(configure_port(tty) < 0) {
    fprintf(stderr, "Unable to configure %s: ", MY_TTY);
    perror("");
    exit(-1);
  }

/*
  sprintf(buf, "\11");
  if(write(tty, buf, 1) < 1) {
    fprintf(stderr, "Unable to write to %s: ", MY_TTY);
    perror("");
    exit(-1);
  }
*/

  /* ...start logger loop */
  data[0] = '\0';
  while(1) {
    char *eol;

    n = read(tty, buf, 1024);

    /* 0 means we've managed to reach EOF (how?) */
    if(n == 0) {
      fprintf(stderr, "EOF reached\n");
      break;
    }
    /* <0 means something unexpected happened; we'll ignore EINTR */
    if(n < 0 && errno != EINTR && errno != EAGAIN) {
      perror("Fatal error: ");
      break;
    }

    /* for now, just write the data to stdout until this is better tested */
    /* fprintf(stderr, "Got %d bytes\n", n); */
    /* write((int) stderr, buf, n); */
    strncat(data, buf, n);
    while(eol = (char *) strchr(data, '\n')) {
      int len = (int) eol - (int) data + 1;
      char temp[32768];
      if(len > 0) {
        strncpy(temp, data, len);
        temp[len] = '\0';
        if(temp[0] == '$') {
          int now = time(NULL);
          if(!(now % 5))
            fprintf(stdout, "%d,%s", now, temp);
        }
      }
      strncpy(temp, eol + 1, 32768);
      strncpy(data, temp, 32768);
    }
  }
}

/* open serial port - returns the file descriptor on success or -1 on error */
int open_port(void) {
  int fd; /* File descriptor for the port */

  fd = open(MY_TTY, O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd != -1)
    fcntl(fd, F_SETFL, 0);

  return (fd);
}

/* configure serial port according to #define lines above */
int configure_port(int fd) {
  struct termios options;

  /* get current port parameters */
  tcgetattr(fd, &options);

  /* enable the receiver and set local mode */
  options.c_cflag |= (CLOCAL | CREAD);

  /* set raw I/O */
  /*
  options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
  options.c_oflag &= ~OPOST;
  */

  /* set baud rate */
  cfsetispeed(&options, MY_BAUDRATE);
  cfsetospeed(&options, MY_BAUDRATE);

  /* set character size (# data bits) */
  options.c_cflag &= ~CSIZE;
  options.c_cflag |= MY_BITS;

  /* set parity */
  if(MY_PARITY > 0) {
    options.c_iflag |= (INPCK | ISTRIP);
    options.c_cflag |= PARENB;
    if(MY_PARITY == 1)
      options.c_cflag |= PARODD;
    else 
      options.c_cflag &= ~PARODD;
  } else {
    options.c_cflag &= ~PARENB;
    options.c_cflag &= ~PARODD;
  }
  
  /* set stop bits */
  if(MY_STOP_BITS == 2)
    options.c_cflag |= CSTOPB;
  else 
    options.c_cflag &= ~CSTOPB;

  /* software flow control */
  if(MY_SOFTWARE_FLOW)
    options.c_iflag |= (IXON | IXOFF | IXANY);
  else
    options.c_iflag &= ~(IXON | IXOFF | IXANY);

  /* hardware flow control */
  if(MY_HARDWARE_FLOW)
    options.c_cflag |= CRTSCTS;
  else
    options.c_cflag &= ~CRTSCTS;

  /* set port parameters and return */
  return tcsetattr(fd, TCSANOW, &options);
}

/* close serial port  */
void close_port(int fd) {
  close(fd);
}


Reply via email to