The following reply was made to PR misc/169686; it has been noted by GNATS.

From: Oliver Pinter <oliver.p...@gmail.com>
To: Zak Blacher <zblac...@sandvine.com>
Cc: freebsd-gnats-sub...@freebsd.org
Subject: Re: misc/169686: Made OPIE support tunable at kernel level
Date: Fri, 6 Jul 2012 20:35:47 +0200

 On 7/6/12, Zak Blacher <zblac...@sandvine.com> wrote:
 >
 >>Number:         169686
 >>Category:       misc
 >>Synopsis:       Made OPIE support tunable at kernel level
 >>Confidential:   no
 >>Severity:       non-critical
 >>Priority:       low
 >>Responsible:    freebsd-bugs
 >>State:          open
 >>Quarter:
 >>Keywords:
 >>Date-Required:
 >>Class:          sw-bug
 >>Submitter-Id:   current-users
 >>Arrival-Date:   Fri Jul 06 17:20:02 UTC 2012
 >>Closed-Date:
 >>Last-Modified:
 >>Originator:     Zak Blacher
 >>Release:        releng 8.3
 >>Organization:
 > Sandvine Corporation
 >>Environment:
 > FreeBSD xxxxxxxx.sandvine.com 8.1-RELEASE FreeBSD 8.1-RELEASE (GENERIC
 > amd64) amd64
 >
 >>Description:
 > re: http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-1938
 >
 > Added option to completely remove opie related libraries and executables.
 >>How-To-Repeat:
 >
 >>Fix:
 >
 >
 > Patch attached with submission follows:
 >
 > Index: usr.bin/telnet/Makefile
 > ===================================================================
 > --- usr.bin/telnet/Makefile  (revision 238165)
 > +++ usr.bin/telnet/Makefile  (working copy)
 > @@ -10,7 +10,7 @@
 >  SRCS=               commands.c main.c network.c ring.c sys_bsd.c \
 >              telnet.c terminal.c utilities.c
 >
 > -CFLAGS+=    -DKLUDGELINEMODE -DUSE_TERMIO -DENV_HACK -DOPIE \
 > +CFLAGS+=    -DKLUDGELINEMODE -DUSE_TERMIO -DENV_HACK \
 >              -I${TELNETDIR} -I${TELNETDIR}/libtelnet/
 >
 >  .if ${MK_INET6_SUPPORT} != "no"
 > @@ -47,4 +47,8 @@
 >  .endif
 >  .endif
 >
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +CFLAGS+=    -DOPIE
 > +.endif
 > +
 >  .include <bsd.prog.mk>
 > Index: usr.bin/Makefile
 > ===================================================================
 > --- usr.bin/Makefile (revision 238165)
 > +++ usr.bin/Makefile (working copy)
 > @@ -143,9 +143,9 @@
 >      nohup \
 >      ${_nslookup} \
 >      ${_nsupdate} \
 > -    opieinfo \
 > -    opiekey \
 > -    opiepasswd \
 > +    ${_opieinfo} \
 > +    ${_opiekey} \
 > +    ${_opiepasswd} \
 >      pagesize \
 >      passwd \
 >      paste \
 > @@ -178,7 +178,6 @@
 >      split \
 >      stat \
 >      su \
 > -    systat \
 
 systat?
 
 >      tabs \
 >      tail \
 >      talk \
 > @@ -391,4 +390,10 @@
 >  _smbutil=   smbutil
 >  .endif
 >
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +_opieinfo=  opieinfo
 > +_opiekey=   opiekey
 > +_opiepasswd=        opiepasswd
 > +.endif
 > +
 >  .include <bsd.subdir.mk>
 > Index: share/mk/bsd.own.mk
 > ===================================================================
 > --- share/mk/bsd.own.mk      (revision 238165)
 > +++ share/mk/bsd.own.mk      (working copy)
 > @@ -372,6 +372,7 @@
 >      OBJC \
 >      OPENSSH \
 >      OPENSSL \
 > +    OPIE \
 >      PAM \
 >      PF \
 >      PKGTOOLS \
 > @@ -521,6 +522,7 @@
 >      KERBEROS \
 >      KVM \
 >      NETGRAPH \
 > +    OPIE \
 >      PAM \
 >      WIRELESS
 >  .if defined(WITH_${var}_SUPPORT) && defined(WITHOUT_${var}_SUPPORT)
 > Index: share/mk/bsd.libnames.mk
 > ===================================================================
 > --- share/mk/bsd.libnames.mk (revision 238165)
 > +++ share/mk/bsd.libnames.mk (working copy)
 > @@ -101,7 +101,11 @@
 >  LIBNGATM?=  ${DESTDIR}${LIBDIR}/libngatm.a
 >  LIBNVPAIR?= ${DESTDIR}${LIBDIR}/libnvpair.a
 >  LIBOBJC?=   ${DESTDIR}${LIBDIR}/libobjc.a
 > +.if ${MK_OPIE_SUPPORT} != "no"
 >  LIBOPIE?=   ${DESTDIR}${LIBDIR}/libopie.a
 > +LIBPAM+=    ${LIBOPIE}
 > +MINUSLPAM+= -lopie
 > +.endif
 >
 >  # The static PAM library doesn't know its secondary dependencies,
 >  # so we have to specify them explicitly.
 > @@ -116,7 +120,7 @@
 >  LIBPAM+=    ${LIBRADIUS} ${LIBTACPLUS} ${LIBCRYPT} \
 >              ${LIBUTIL} ${LIBOPIE} ${LIBMD}
 >  MINUSLPAM+= -lradius -ltacplus -lcrypt \
 > -            -lutil -lopie -lmd
 > +            -lutil -lmd
 >  .if ${MK_OPENSSH} != "no"
 >  LIBPAM+=    ${LIBSSH} ${LIBCRYPTO} ${LIBCRYPT}
 >  MINUSLPAM+= -lssh -lcrypto -lcrypt
 > Index: lib/Makefile
 > ===================================================================
 > --- lib/Makefile     (revision 238165)
 > +++ lib/Makefile     (working copy)
 > @@ -82,7 +82,7 @@
 >      ${_libmp} \
 >      ${_libncp} \
 >      ${_libngatm} \
 > -    libopie \
 > +    ${_libopie} \
 >      libpam \
 >      libpcap \
 >      ${_libpmc} \
 > @@ -202,4 +202,8 @@
 >  _libusb=    libusb
 >  .endif
 >
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +_libopie=   libopie
 > +.endif
 > +
 >  .include <bsd.subdir.mk>
 > Index: lib/libpam/modules/modules.inc
 > ===================================================================
 > --- lib/libpam/modules/modules.inc   (revision 238165)
 > +++ lib/libpam/modules/modules.inc   (working copy)
 > @@ -17,8 +17,10 @@
 >  MODULES             += pam_lastlog
 >  MODULES             += pam_login_access
 >  MODULES             += pam_nologin
 > +.if ${MK_OPIE_SUPPORT} != "no"
 >  MODULES             += pam_opie
 >  MODULES             += pam_opieaccess
 > +.endif
 >  MODULES             += pam_passwdqc
 >  MODULES             += pam_permit
 >  MODULES             += pam_radius
 > Index: etc/Makefile
 > ===================================================================
 > --- etc/Makefile     (revision 238165)
 > +++ etc/Makefile     (working copy)
 > @@ -104,6 +104,9 @@
 >  .if ${MK_SENDMAIL} != "no"
 >  MTREE+=     BSD.sendmail.dist
 >  .endif
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +MTREE+= BSD.opie.dist
 > +.endif
 >  .if ${MK_BIND} != "no"
 >  MTREE+=     BIND.chroot.dist
 >  .if ${MK_BIND_LIBS} != "no"
 > @@ -156,7 +159,8 @@
 >          ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 755 \
 >              ${BIN2} ${DESTDIR}/etc; \
 >          ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 600 \
 > -            master.passwd nsmb.conf opieaccess ${DESTDIR}/etc;
 > +            master.passwd nsmb.conf ${DESTDIR}/etc; \
 > +    
 >  .if ${MK_AT} == "no"
 >      sed -i "" -e 's;.*/usr/libexec/atrun;#&;' ${DESTDIR}/etc/crontab
 >  .endif
 > @@ -203,6 +207,10 @@
 >      cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
 >          ${SSL} ${DESTDIR}/etc/ssl
 >  .endif
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +    cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 600 \
 > +        opieaccess ${DESTDIR}/etc
 > +.endif
 >  .if ${MK_KERBEROS} != "no"
 >      cd ${.CURDIR}/root; \
 >          ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
 > @@ -274,6 +282,9 @@
 >  .if ${MK_SENDMAIL} != "no"
 >      mtree -deU ${MTREE_FOLLOWS_SYMLINKS} -f 
 > ${.CURDIR}/mtree/BSD.sendmail.dist
 > -p ${DESTDIR}/
 >  .endif
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +    mtree -deU ${MTREE_FOLLOWS_SYMLINKS} -f ${.CURDIR}/mtree/BSD.opie.dist 
 > -p
 > ${DESTDIR}/
 > +.endif
 >      cd ${DESTDIR}/; rm -f ${DESTDIR}/sys; ln -s usr/src/sys sys
 >      cd ${DESTDIR}/usr/share/man/en.ISO8859-1; ln -sf ../man* .
 >      cd ${DESTDIR}/usr/share/man/en.UTF-8; ln -sf ../man* .
 > @@ -305,7 +316,7 @@
 >
 >  etc-examples:
 >      cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
 > -        ${BIN1} ${BIN2} nsmb.conf opieaccess \
 > +        ${BIN1} ${BIN2} nsmb.conf \
 >          ${DESTDIR}/usr/share/examples/etc
 >      ${_+_}cd ${.CURDIR}/defaults; ${MAKE} install \
 >          DESTDIR=${DESTDIR}/usr/share/examples
 > Index: etc/mtree/BSD.var.dist
 > ===================================================================
 > --- etc/mtree/BSD.var.dist   (revision 238165)
 > +++ etc/mtree/BSD.var.dist   (working copy)
 > @@ -77,8 +77,6 @@
 >          ..
 >          mqueue
 >          ..
 > -        opielocks       mode=0700
 > -        ..
 >          output
 >              lpd
 >              ..
 > Index: etc/mtree/BSD.opie.dist
 > ===================================================================
 > --- etc/mtree/BSD.opie.dist  (revision 0)
 > +++ etc/mtree/BSD.opie.dist  (revision 0)
 > @@ -0,0 +1,15 @@
 > +# $FreeBSD$
 > +#
 > +# Please see the file src/etc/mtree/README before making changes to this
 > file.
 > +#
 > +
 > +/set type=dir uname=root gname=wheel mode=0755
 > +.               nochange
 > +    var             nochange
 > +        spool           nochange
 > +            opielocks   gname=daemon mode=0700
 > +            ..
 > +        ..
 > +    ..
 > +..
 > +
 > Index: etc/mtree/Makefile
 > ===================================================================
 > --- etc/mtree/Makefile       (revision 238165)
 > +++ etc/mtree/Makefile       (working copy)
 > @@ -10,6 +10,7 @@
 >      BSD.usr.dist \
 >      BSD.var.dist \
 >      BSD.x11-4.dist \
 > +    BSD.opie.dist \
 >      BSD.x11.dist
 >
 >  .if ${MK_BIND} != "no"
 > Index: libexec/lukemftpd/Makefile
 > ===================================================================
 > --- libexec/lukemftpd/Makefile       (revision 238165)
 > +++ libexec/lukemftpd/Makefile       (working copy)
 > @@ -1,8 +1,6 @@
 >  #   @(#)Makefile    8.2 (Berkeley) 4/4/94
 >  # $FreeBSD$
 >
 > -.include <bsd.own.mk>
 > -
 >  LUKEMFTPD=  ${.CURDIR}/../../contrib/lukemftpd
 >  .PATH: ${LUKEMFTPD}/src ${LUKEMFTPD}/libnetbsd
 >
 > @@ -14,7 +12,7 @@
 >
 >  WFORMAT= 0
 >
 > -.if ${MK_INET6_SUPPORT} != "no"
 > +.if !defined(NO_INET6)
 >  CFLAGS+= -DINET6
 >  .endif
 >
 > @@ -33,16 +31,22 @@
 >  DPADD+=     ${LIBM}
 >  LDADD+=     -lm
 >
 > -CFLAGS+= -DUSE_OPIE -DLOGIN_CAP
 > -DPADD+=     ${LIBOPIE} ${LIBMD}
 > -LDADD+=     -lopie -lmd
 > +CFLAGS+= -DLOGIN_CAP
 > +DPADD+=     ${LIBMD}
 > +LDADD+=     -lmd
 >
 > -.if ${MK_PAM_SUPPORT} != "no"
 > +.if !defined(NO_PAM)
 >  CFLAGS+= -DUSE_PAM
 >  DPADD+=     ${LIBPAM}
 >  LDADD+=     ${MINUSLPAM}
 >  .endif
 >
 > +.if !defined(NO_OPIE)
 > +CFLAGS+= -DUSE_OPIE
 > +DPADD+= ${LIBOPIE}
 > +LDADD+= -lopie
 > +.endif
 > +
 >  CLEANFILES+=        ls-unmain.c
 >  ls-unmain.c: ls.c
 >      sed -e 's/^main(/ls_main(/g' -e 's,extern.h,${LSDIR}/extern.h,' \
 > @@ -58,3 +62,4 @@
 >  .include <bsd.prog.mk>
 >
 >  ${OBJS}: ${.CURDIR}/nbsd2fbsd.h
 > +
 > Index: libexec/ftpd/Makefile
 > ===================================================================
 > --- libexec/ftpd/Makefile    (revision 238165)
 > +++ libexec/ftpd/Makefile    (working copy)
 > @@ -17,8 +17,8 @@
 >  LDADD=      -lutil -lcrypt
 >
 >  # XXX Kluge! Conversation mechanism needs to be fixed.
 > -DPADD+=     ${LIBOPIE} ${LIBMD}
 > -LDADD+=     -lopie -lmd
 > +DPADD+=     ${LIBMD}
 > +LDADD+=     -lmd
 >
 >  LSDIR=      ../../bin/ls
 >  .PATH:      ${.CURDIR}/${LSDIR}
 > @@ -33,8 +33,14 @@
 >
 >  .if ${MK_PAM_SUPPORT} != "no"
 >  CFLAGS+=-DUSE_PAM
 > -DPADD+= ${LIBPAM}
 > -LDADD+= ${MINUSLPAM}
 > +DPADD+=     ${LIBPAM}
 > +LDADD+=     ${MINUSLPAM}
 >  .endif
 >
 > +.if ${MK_OPIE_SUPPORT} != "no"
 > +CFLAGS+=    -DUSE_OPIE
 > +DPADD+=     ${LIBOPIE}
 > +LDADD+=     -lopie
 > +.endif
 > +
 >  .include <bsd.prog.mk>
 > Index: libexec/ftpd/ftpd.c
 > ===================================================================
 > --- libexec/ftpd/ftpd.c      (revision 238165)
 > +++ libexec/ftpd/ftpd.c      (working copy)
 > @@ -79,7 +79,6 @@
 >  #include <netdb.h>
 >  #include <pwd.h>
 >  #include <grp.h>
 > -#include <opie.h>
 >  #include <signal.h>
 >  #include <stdint.h>
 >  #include <stdio.h>
 > @@ -97,6 +96,10 @@
 >  #include <security/pam_appl.h>
 >  #endif
 >
 > +#ifdef USE_OPIE
 > +#include <opie.h>
 > +#endif
 > +
 >  #include "pathnames.h"
 >  #include "extern.h"
 >
 > @@ -105,6 +108,9 @@
 >  static char version[] = "Version 6.00LS";
 >  #undef main
 >
 > +extern      off_t restart_point;
 > +extern      char cbuf[];
 > +
 >  union sockunion ctrl_addr;
 >  union sockunion data_source;
 >  union sockunion data_dest;
 > @@ -181,8 +187,11 @@
 >  pam_handle_t        *pamh = NULL;
 >  #endif
 >
 > +#ifdef USE_OPIE
 >  static struct opie  opiedata;
 >  static char         opieprompt[OPIE_CHALLENGE_MAX+1];
 > +#endif
 > +
 >  static int          pwok;
 >
 >  char        *pid_file = NULL; /* means default location to pidfile(3) */
 > @@ -245,7 +254,7 @@
 >  static void  maskurg(int);
 >  static void  flagxfer(int);
 >  static int   myoob(void);
 > -static int   checkuser(char *, char *, int, char **);
 > +static int   checkuser(char *, char *, int, char **, int *);
 >  static FILE *dataconn(char *, off_t, char *);
 >  static void  dolog(struct sockaddr *);
 >  static void  end_login(void);
 > @@ -998,6 +1007,7 @@
 >  void
 >  user(char *name)
 >  {
 > +    int ecode;
 >      char *cp, *shell;
 >
 >      if (logged_in) {
 > @@ -1018,9 +1028,12 @@
 >      pw = sgetpwnam("ftp");
 >  #endif
 >      if (strcmp(name, "ftp") == 0 || strcmp(name, "anonymous") == 0) {
 > -            if (checkuser(_PATH_FTPUSERS, "ftp", 0, NULL) ||
 > -                checkuser(_PATH_FTPUSERS, "anonymous", 0, NULL))
 > +            if (checkuser(_PATH_FTPUSERS, "ftp", 0, NULL, &ecode) ||
 > +                (ecode != 0 && ecode != ENOENT))
 >                      reply(530, "User %s access denied.", name);
 > +            else if (checkuser(_PATH_FTPUSERS, "anonymous", 0, NULL, 
 > &ecode) ||
 > +                (ecode != 0 && ecode != ENOENT))
 > +                    reply(530, "User %s access denied.", name);
 >              else if (pw != NULL) {
 >                      guest = 1;
 >                      askpasswd = 1;
 > @@ -1047,7 +1060,9 @@
 >                              break;
 >              endusershell();
 >
 > -            if (cp == NULL || checkuser(_PATH_FTPUSERS, name, 1, NULL)) {
 > +            if (cp == NULL ||
 > +                (checkuser(_PATH_FTPUSERS, name, 1, NULL, &ecode) ||
 > +                (ecode != 0 && ecode != ENOENT))) {
 >                      reply(530, "User %s access denied.", name);
 >                      if (logging)
 >                              syslog(LOG_NOTICE,
 > @@ -1064,13 +1079,18 @@
 >  #ifdef USE_PAM
 >      /* XXX Kluge! The conversation mechanism needs to be fixed. */
 >  #endif
 > +
 > +#ifdef USE_OPIE
 >      if (opiechallenge(&opiedata, name, opieprompt) == 0) {
 >              pwok = (pw != NULL) &&
 >                     opieaccessfile(remotehost) &&
 >                     opiealways(pw->pw_dir);
 >              reply(331, "Response to %s %s for %s.",
 >                    opieprompt, pwok ? "requested" : "required", name);
 > -    } else {
 > +    }
 > +    else
 > +#endif
 > +    {
 >              pwok = 1;
 >              reply(331, "Password required for %s.", name);
 >      }
 > @@ -1089,13 +1109,15 @@
 >   * of the matching line in "residue" if not NULL.
 >   */
 >  static int
 > -checkuser(char *fname, char *name, int pwset, char **residue)
 > +checkuser(char *fname, char *name, int pwset, char **residue, int *ecode)
 >  {
 >      FILE *fd;
 >      int found = 0;
 >      size_t len;
 >      char *line, *mp, *p;
 >
 > +    if (ecode != NULL)
 > +            *ecode = 0;
 >      if ((fd = fopen(fname, "r")) != NULL) {
 >              while (!found && (line = fgetln(fd, &len)) != NULL) {
 >                      /* skip comments */
 > @@ -1164,7 +1186,8 @@
 >                              free(mp);
 >              }
 >              (void) fclose(fd);
 > -    }
 > +    } else if (ecode != NULL)
 > +            *ecode = errno;
 >      return (found);
 >  }
 >
 > @@ -1361,7 +1384,7 @@
 >  void
 >  pass(char *passwd)
 >  {
 > -    int rval;
 > +    int rval, ecode;
 >      FILE *fd;
 >  #ifdef      LOGIN_CAP
 >      login_cap_t *lc = NULL;
 > @@ -1385,13 +1408,18 @@
 >  #ifdef USE_PAM
 >              rval = auth_pam(&pw, passwd);
 >              if (rval >= 0) {
 > +#ifdef USE_OPIE
 >                      opieunlock();
 > +#endif
 >                      goto skip;
 >              }
 >  #endif
 > +#ifdef USE_OPIE
 >              if (opieverify(&opiedata, passwd) == 0)
 >                      xpasswd = pw->pw_passwd;
 > -            else if (pwok) {
 > +            else
 > +#endif
 > +            if (pwok) {
 >                      xpasswd = crypt(passwd, pw->pw_passwd);
 >                      if (passwd[0] == '\0' && pw->pw_passwd[0] != '\0')
 >                              xpasswd = ":";
 > @@ -1492,11 +1520,21 @@
 >                      stats = 0;
 >
 >      dochroot =
 > -            checkuser(_PATH_FTPCHROOT, pw->pw_name, 1, &residue)
 > +            checkuser(_PATH_FTPCHROOT, pw->pw_name, 1, &residue, &ecode)
 >  #ifdef      LOGIN_CAP       /* Allow login.conf configuration as well */
 >              || login_getcapbool(lc, "ftp-chroot", 0)
 >  #endif
 >      ;
 > +    /*
 > +     * It is possible that checkuser() failed to open the chroot file.
 > +     * If this is the case, report that logins are un-available, since we
 > +     * have no way of checking whether or not the user should be chrooted.
 > +     * We ignore ENOENT since it is not required that this file be present.
 > +     */
 > +    if (ecode != 0 && ecode != ENOENT) {
 > +            reply(530, "Login not available right now.");
 > +            return;
 > +    }
 >      chrootdir = NULL;
 >      /*
 >       * For a chrooted local user,
 > @@ -1543,7 +1581,6 @@
 >                      reply(550, "Can't change root.");
 >                      goto bad;
 >              }
 > -            __FreeBSD_libc_enter_restricted_mode();
 >      } else  /* real user w/o chroot */
 >              homedir = pw->pw_dir;
 >      /*
 > @@ -1874,12 +1911,20 @@
 >  #ifdef TCP_NOPUSH
 >      /*
 >       * Turn off push flag to keep sender TCP from sending short packets
 > -     * at the boundaries of each write().
 > +     * at the boundaries of each write().  Should probably do a SO_SNDBUF
 > +     * to set the send buffer size as well, but that may not be desirable
 > +     * in heavy-load situations.
 >       */
 >      on = 1;
 >      if (setsockopt(s, IPPROTO_TCP, TCP_NOPUSH, &on, sizeof on) < 0)
 >              syslog(LOG_WARNING, "data setsockopt (TCP_NOPUSH): %m");
 >  #endif
 > +#ifdef SO_SNDBUF
 > +    on = 65536;
 > +    if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, &on, sizeof on) < 0)
 > +            syslog(LOG_WARNING, "data setsockopt (SO_SNDBUF): %m");
 > +#endif
 > +
 >      return (fdopen(s, mode));
 >  bad:
 >      /* Return the real value of errno (close may change it) */
 > @@ -3471,3 +3516,4 @@
 >      }
 >      return(socks);
 >  }
 > +
 >
 >
 >>Release-Note:
 >>Audit-Trail:
 >>Unformatted:
 > _______________________________________________
 > freebsd-bugs@freebsd.org mailing list
 > http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
 > To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"
 >
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to