MFhead @ r289132

This commit is contained in:
ngie 2015-10-11 08:21:49 +00:00
parent c6d493a289
commit 33c7bf8e7b
70 changed files with 374 additions and 2214 deletions

View File

@ -1003,7 +1003,9 @@ distrib-dirs: .MAKE
distribution: .MAKE
cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET}
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 installconfig
${_+_}cd ${.CURDIR}; ${CROSSENV} PATH=${TMPPATH} \
${MAKE} -f Makefile.inc1 ${IMAKE_INSTALL} \
METALOG=${METALOG} installconfig
#
# buildkernel and installkernel

View File

@ -1,28 +0,0 @@
# $DragonFly: src/libexec/dma/Makefile,v 1.5 2008/09/19 00:36:57 corecode Exp $
#
version!= sh get-version.sh
CFLAGS+= -I${.CURDIR}
CFLAGS+= -DHAVE_REALLOCF -DHAVE_STRLCPY -DHAVE_GETPROGNAME
CFLAGS+= -DLIBEXEC_PATH='"${LIBEXEC}"' -DDMA_VERSION='"${version}"'
CFLAGS+= -DCONF_PATH='"${CONFDIR}"'
DPADD= ${LIBSSL} ${LIBCRYPTO}
LDADD= -lssl -lcrypto
PROG= dma
SRCS= aliases_parse.y aliases_scan.l base64.c conf.c crypto.c
SRCS+= dma.c dns.c local.c mail.c net.c spool.c util.c
MAN= dma.8
PREFIX?= /usr/local
LIBEXEC?= ${PREFIX}/libexec
CONFDIR?= ${PREFIX}/etc/dma
BINOWN= root
BINGRP= mail
BINMODE=2555
WARNS?= 6
.include <bsd.prog.mk>

View File

@ -1,5 +1,5 @@
Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
Copyright (c) 2008 The DragonFly Project.
Copyright (c) 2008-2011, Simon Schubert <2@0x2c.org>.
All rights reserved.
This code is derived from software contributed to The DragonFly Project
@ -37,7 +37,7 @@ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
Copyright (c) 1995-2001 Kungliga Tekniska Högskolan
Copyright (c) 1995-2001 Kungliga Tekniska Högskolan
(Royal Institute of Technology, Stockholm, Sweden).
All rights reserved.

View File

@ -15,8 +15,13 @@ incoming connections.
Building
--------
In Linux:
make
In BSD:
cd bsd && make
Installation
------------

View File

@ -1,5 +1,4 @@
- unquote/handle quoted local recipients
- use proper sysexit codes
- handle/use ESMTP extensions
- .forward support
- suggest way to run a queue flush on boot

View File

@ -1 +1 @@
v0.9
v0.10

View File

@ -7,8 +7,6 @@
extern int yylineno;
static void yyerror(const char *);
int yywrap(void);
int yylex(void);
static void
yyerror(const char *msg)

View File

@ -1,11 +1,11 @@
%{
#include <string.h>
#include "dma.h"
#include "aliases_parse.h"
#define YY_NO_INPUT
int yylex(void);
%}
%option yylineno

View File

@ -64,7 +64,7 @@ trim_line(char *line)
if (line[0] == '.') {
if ((linelen + 2) > 1000) {
syslog(LOG_CRIT, "Cannot escape leading dot. Buffer overflow");
exit(1);
exit(EX_DATAERR);
}
memmove((line + 1), line, (linelen + 1));
line[0] = '.';
@ -101,7 +101,7 @@ parse_authfile(const char *path)
a = fopen(path, "r");
if (a == NULL) {
errlog(1, "can not open auth file `%s'", path);
errlog(EX_NOINPUT, "can not open auth file `%s'", path);
/* NOTREACHED */
}
@ -121,7 +121,7 @@ parse_authfile(const char *path)
au = calloc(1, sizeof(*au));
if (au == NULL)
errlog(1, "calloc failed");
errlog(EX_OSERR, NULL);
data = strdup(line);
au->login = strsep(&data, "|");
@ -131,8 +131,7 @@ parse_authfile(const char *path)
if (au->login == NULL ||
au->host == NULL ||
au->password == NULL) {
errlogx(1, "syntax error in authfile %s:%d",
path, lineno);
errlogx(EX_CONFIG, "syntax error in authfile %s:%d", path, lineno);
/* NOTREACHED */
}
@ -160,7 +159,7 @@ parse_conf(const char *config_path)
/* Don't treat a non-existing config file as error */
if (errno == ENOENT)
return;
errlog(1, "can not open config `%s'", config_path);
errlog(EX_NOINPUT, "can not open config `%s'", config_path);
/* NOTREACHED */
}
@ -211,7 +210,7 @@ parse_conf(const char *config_path)
} else {
host = data;
}
if (host && *host == 0)
if (host && *host == 0)
host = NULL;
if (user && *user == 0)
user = NULL;
@ -232,13 +231,13 @@ parse_conf(const char *config_path)
else if (strcmp(word, "NULLCLIENT") == 0 && data == NULL)
config.features |= NULLCLIENT;
else {
errlogx(1, "syntax error in %s:%d", config_path, lineno);
errlogx(EX_CONFIG, "syntax error in %s:%d", config_path, lineno);
/* NOTREACHED */
}
}
if ((config.features & NULLCLIENT) && config.smarthost == NULL) {
errlogx(1, "%s: NULLCLIENT requires SMARTHOST", config_path);
errlogx(EX_CONFIG, "%s: NULLCLIENT requires SMARTHOST", config_path);
/* NOTREACHED */
}

View File

@ -1,29 +0,0 @@
dma (0.0.2010.06.17-3) unstable; urgency=low
The default delivery mode has been changed to immediate, as it is in
the upstream version of dma; the DEFER keyword is now disabled by default
in dma.conf.
-- Peter Pentchev <roam@ringlet.net> Tue, 27 Jul 2010 13:26:48 +0300
dma (0.0.2010.06.17-1) unstable; urgency=low
The dma spool directory format has changed. The Debian package of dma now
recommends a separate package containing the dma-migrate utility; if it is
present, it will be invoked at each periodic dma queue flush and attempt to
convert the existing old-style queued messages to the new format. In most
cases, this should not incur any performance penalties in normal operation,
since dma-migrate will scan the spool directory and ignore any new messages
(they should already be in the new format); however, if it appears that
the periodic queue flush runs take longer than usual to start up, you may
remove the dma-migrate package once you have ascertained that your queue
directory (/var/spool/dma) only contains files with names beginning with
the letters M or Q.
This version of dma knows how to perform MX lookups, so remote delivery is
now possible directly, not through a smarthost. However, a smarthost setup
might still be preferred on many systems for various reasons - e.g. dynamic
address assignment, a central outgoing mailserver, a roaming laptop, etc.
-- Peter Pentchev <roam@ringlet.net> Mon, 21 Jun 2010 11:03:57 +0300

View File

@ -1,12 +0,0 @@
dma for Debian
--------------
Smarthost operation by default - needs to be configured!
After first installing dma, you need to configure it for proper operation -
whether it should deliver all outgoing e-mail messages through a single
smarthost or attempt to contact the remote mail servers directly. This should
be configured through the debconf questions, but you may change the setting
using the SMARTHOST directive in the /etc/dma/dma.conf file.
-- Simon Schubert <2@0x2c.org> Fri, 29 Oct 2010 00:25:48 +0200

View File

@ -1,297 +0,0 @@
dma (0.9) unstable; urgency=low
[ Ed Maste ]
* Be explicit about missing user.
* Allow DMA_ROOT_USER & DMA_GROUP to be overridden.
* Add compat #ifdef for older OpenSSL
* Add CONF_DIR, as in Makefile
* More detailed error message for tmp file failure.
[ Simon Schubert ]
* spool.c: bzero contents of pointer
-- Simon Schubert <2@0x2c.org> Mon, 03 Jun 2013 15:58:44 +0200
dma (0.8) unstable; urgency=low
[ Gert van den Berg ]
* Added some more documentation on compiling
* Make Makefile and README consistent with INSTALL
[ Sascha Wildner ]
* dma.8: Fix a few small issues.
[ Simon Schubert ]
* dma.8: we only have 2 config files at the moment
* Merge pull request #2 from mohag/master
* don't treat -options following -q as argument to it
* deliver_remote: propagate back DNS errors
* don't complain when we can't lock a queue file during flush
* implement queue flushing prod
-- Simon Schubert <2@0x2c.org> Fri, 30 Mar 2012 12:03:54 +0200
dma (0.7) unstable; urgency=low
[ Simon Schubert ]
* add semicolon before date in Received: header
* parse_conf: fix bug with masqueraded domains
* clear up warnings found by clang static analysis
* mark printf-alike functions
-- Simon Schubert <2@0x2c.org> Tue, 03 Jan 2012 14:53:43 +0100
dma (0.6) unstable; urgency=low
[ Simon Schubert ]
* deliver_local: quote "From " more liberally
-- Simon Schubert <2@0x2c.org> Wed, 07 Dec 2011 12:42:22 +0100
dma (0.5) unstable; urgency=low
[ Simon Schubert ]
* implement masquerading using the MASQUERADE config option
* access config files at CONF_PATH, add makefile target to install conf files
* implement the "*" catch-all alias
-- Simon Schubert <2@0x2c.org> Wed, 16 Nov 2011 13:34:43 +0100
dma (0.4) unstable; urgency=low
[ Simon Schubert ]
* Makefile: put libraries at the end when linking
* LICENSE: add
* Merge commit 'refs/merge-requests/3' of git://gitorious.org/dma/dma
* Merge commit 'refs/merge-requests/4' of git://gitorious.org/dma/dma
* Add symlink for sendmail which is expected by many packages
* Makefile: create spool directories in a separate target
* Makefile: add symlink for mailq
* README: elaborate, use markdown
[ Peter Pentchev ]
* Fix straight SSL/TLS delivery to remote MX's.
* Fix a minor memory leak discovered by cppcheck.
-- Simon Schubert <2@0x2c.org> Wed, 16 Nov 2011 00:08:28 +0100
dma (0.3) unstable; urgency=low
[ Simon Schubert ]
* todo: we create mboxes properly now
* dma-mbox-create: group mail only needs to write to mboxes
* errlog: preserve errno
* dma-mbox-create: add error/status logging
* dns_get_mx_list: handle errors properly
[ Peter Pentchev ]
* Make add_host() really return an error code.
[ Simon Schubert ]
* readmail: accept mail without newline at the end
[ Peter Pentchev ]
* In OpenSSL 1.0, TLSv1_client_method() returns a const pointer.
[ Simon Schubert ]
* make dma compile again on DragonFly
* parse_addrs: fix parsing for multiple <addresses>
-- Simon Schubert <2@0x2c.org> Sat, 09 Jul 2011 02:38:05 +0200
dma (0.2) unstable; urgency=low
* Update to dma 0.2
- debian: better mark as UNRELEASED
- add ppa makefile recipe
- TODO: suggest way to run a queue flush on boot
- partially adopt 34-manpage-defaults.patch: AUTHPATH is not set by default
- Revert "debian: better mark as UNRELEASED"
- setlogident: openlog() wants a static variable
- writequeuef: create files with g+rw
- drop privileges when run by root
- implement mbox creation via setuid helper
- debian: build with consistent flags
- debian: remove unused files
- debian: fix lintian warnings and errors
- make ppa: force lower version number
- make ppa: proper name
-- Simon Schubert <2@0x2c.org> Sun, 31 Oct 2010 23:57:50 +0100
dma (0.1) unstable; urgency=low
* Update dma to 0.1
-- Simon Schubert <2@0x2c.org> Fri, 29 Oct 2010 00:57:26 +0200
dma (0.0.2010.06.17-6) unstable; urgency=low
* Add the 37-gnu-hurd patch to really fix the FTBFS on GNU/Hurd.
* Convert several shell output assignments from = to :=
* Switch to bzip2 compression for the Debian tarball.
-- Peter Pentchev <roam@ringlet.net> Sun, 17 Oct 2010 00:08:33 +0300
dma (0.0.2010.06.17-5) unstable; urgency=low
* Only use SA_NOCLDWAIT if available to fix the Hurd FTBFS.
-- Peter Pentchev <roam@ringlet.net> Thu, 07 Oct 2010 11:42:23 +0300
dma (0.0.2010.06.17-4) unstable; urgency=low
* Fix an infinite loop in dma-migrate if char is unsigned.
Closes: #599172
* Switch to Git and point the Vcs-* fields to Gitorious.
-- Peter Pentchev <roam@ringlet.net> Wed, 06 Oct 2010 17:30:29 +0300
dma (0.0.2010.06.17-3) unstable; urgency=low
* Update the debconf translations:
- French by Steve Petruzzello; Closes: #587883
* Bump Standards-Version to 3.9.1 with no changes.
* Disable deferred delivery by default, as in the upstream version:
- in the 03-debian-locations patch, comment the DEFER keyword in dma.conf,
as it is upstream
- refresh the 11-double-bounce.patch
- reword the README.Debian section on deferred delivery a bit
- add a news blurb
-- Peter Pentchev <roam@ringlet.net> Tue, 27 Jul 2010 13:34:27 +0300
dma (0.0.2010.06.17-2) unstable; urgency=low
* Quick on the heels of -1 to fix a momentary lapse of reason on my part:
in the 03-debian-locations patch, revert part of the 0.0.2010.06.17-1
change: do not set a un-overrideable default for the deferred delivery!
Closes: #587593
* Update the debconf translations:
- Japanese by Hideki Yamane; Closes: #587543
-- Peter Pentchev <roam@ringlet.net> Wed, 30 Jun 2010 11:59:46 +0300
dma (0.0.2010.06.17-1) unstable; urgency=low
* New upstream version:
- no longer reports the remote port number; Closes: #544820
- fixes some queue locking problems; Closes: #582593
- adapt the rules file to use the GNU Makefile instead of the BSD one
- drop pmake from Build-Depends
- remove the 01-debian-build patch, overtaken by upstream changes
- in the 03-debian-locations patch, make the Debian defaults actual
defaults for the dma binary, not just in the dma.conf file
- adapt the 04-debian-setgid patch for the GNU Makefile
- in the 10-liblockfile patch, change the GNU Makefile, too
- enhance the 11-double-bounce patch a bit:
- use dma's own delqueue() function instead of a naive unlink() so
all the queue files are cleaned up
- document the Debian default for DBOUNCEPROG in the manual page
- resurrect the 13-hardening patch, correcting a couple of
unchecked asprintf(3) and vasprintf(3) invocations
- the functionality of the 20-parse-recipient patch was implemented
upstream in a different way, so replace it with a small bugfix
- remove the 22-openfiles patch, overtaken by upstream changes
- in the 24-random-message-id patch, change the GNU Makefile, too
- add the 27-int-size patch to cast a variable to the correct type
- add the 28-valid-recipient patch to fix parsing recipients out of
the message body
- add the 29-double-free patch to fix a double-free error
- add the 30-ldflags patch to honor LDFLAGS if specified
- refresh the 09-typos, 17-mailname, 23-dirent-d_type, and
25-unsupported-starttls patches
- teach the dbounce-simple-safecat handler about the M*/Q* spool
files scheme
* Bump Standards-Version to 3.9.0 with no changes.
* Update the copyright file:
- bring it up to the latest revision of the DEP 5
- update the upstream copyright notices
- bump the year on my copyright notice
* Remove the diffsrc rules target which was intended for my own
internal use, but has outlived its time.
* Use dpkg-buildflags from dpkg-dev >= 1.15.7~ to get the default
values for CFLAGS, CPPFLAGS, and LDFLAGS; no longer rely on
dpkg-buildpackage to set them by default.
* Add the dma-migrate utility (in a separate binary package) to convert
spool files to the new queue format (M* and Q* files for each message)
* Add a dma-migrate invocation to dma.cron.d
* Shorten the Vcs-Browser URL.
* Add the 31-sigalrm-backoff patch to force a delivery attempt on SIGALRM.
* Properly substitute the debconf-supplied values for DBOUNCEPROG and
SMARTHOST into dma.conf even if they are empty without generating
an invalid dma.conf file.
* Remove the smarthost default; dma does MX lookups now, so it doesn't
really *need* one anymore.
* Reword the debconf relayhost question - dma does not really need
a smarthost anymore.
* Update the debconf translations:
- Bulgarian
- Portuguese by Américo Monteiro
- German by Helge Kreutzmann; Closes: #586531
- Russian by Yuri Kozlov; Closes: #586579
- Czech by Michal Simunek; Closes: #586791
- Swedish by Martin Bagge; Closes: #586825
- Spanish by Francisco Javier Cuadrado; Closes: #587088
* Update the smarthost configuration information in README.Debian.
* Add the 32-comment-uncomment patch to correct the manual page wording.
* Add the 33-opportunistic-tls patch to allow remote connections to proceed
even if the STARTTLS negotiation fails.
* Fix the 25-unsupported-starttls patch to actually error out if the SSL
negotiation fails.
* Forward all the non-Debian-specific patches upstream to Simon Schubert.
* Add the 34-manpage-defaults patch to properly document what dma will use
as default values if not specified in the config file instead of what
the default config file specifies. Closes: #544748
* Add the 35-delivery-retry patch to try local deliveries a bit more often
and to randomize the delivery timeout to avoid locking issues.
-- Peter Pentchev <roam@ringlet.net> Mon, 28 Jun 2010 23:26:36 +0300
dma (0.0.2009.07.17-3) unstable; urgency=low
* Really install the files in /etc/dma/ as root/mail/640 and
change the ownership of the existing files in the postinst script
when upgrading from older versions. Closes: #544664
* Install the /usr/bin/mailq and /usr/bin/newaliases symlinks.
Closes: #558421
* Switch to the 3.0 (quilt) source format.
* Update the debconf translations:
- add German. Closes: #552754
- add Japanese. Closes: #554515
- remove a double space and unfuzzy the translations. Closes: #552586
* Fix a crash when the SMTP server does not support STARTTLS.
Closes: #547594
* Always use the user-supplied value from the debconf query for
the smarthost and the double-bounce program. This may result in
debconf overriding a manually-edited config file, so add a note to
dma.conf stating that these values are handled via debconf.
Closes: #544663
* Fix a misspelling of dma/dbounceprog as dma/defer in the debconf
configuration script. Oops.
-- Peter Pentchev <roam@ringlet.net> Sat, 19 Dec 2009 14:35:10 +0200
dma (0.0.2009.07.17-2) unstable; urgency=low
* Allow the spool directory to live on a filesystem that does not
set the d_type member of the dirent structure, like XFS.
Closes: #544357
* Randomize the Message-Id a bit more. Closes: #544475
* Bump Standards-Version to 3.8.3 with no changes.
* Only enable the build hardening wrapper if the "hardening" build
option is specified.
* Switch the copyright file header from the Wiki to DEP 5.
* Remove the manual page ".Dx" patch - the groff version in Squeeze
knows about the .Dx mdoc macro. Add a lintian override for
the "Unknown DragonFly version" error.
* Convert the patch file headers to the DEP 3 format.
-- Peter Pentchev <roam@ringlet.net> Tue, 01 Sep 2009 13:36:33 +0300
dma (0.0.2009.07.17-1) unstable; urgency=low
* Initial release
(Closes: #511410, #533458, #533614, #533890, #534101, #534860)
-- Peter Pentchev <roam@ringlet.net> Tue, 11 Aug 2009 16:08:41 +0300

View File

@ -1 +0,0 @@
7

View File

@ -1,37 +0,0 @@
Source: dma
Section: mail
Priority: optional
Maintainer: Peter Pentchev <roam@ringlet.net>
DM-Upload-Allowed: yes
Build-Depends: debhelper (>= 7.0.50), byacc, dpkg-dev (>= 1.15.7~), flex, hardening-wrapper, libssl-dev, po-debconf
Standards-Version: 3.9.1
Homepage: http://devel.ringlet.net/mail/dma/
Vcs-Git: git://gitorious.org/dma-roam/pkg-debian.git
Vcs-Browser: http://gitorious.org/dma-roam/pkg-debian
Package: dma
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Provides: mail-transport-agent
Conflicts: mail-transport-agent
Replaces: mail-transport-agent
Recommends: dma-migrate
Description: lightweight mail transport agent
The DragonFly Mail Agent is a small Mail Transport Agent (MTA),
designed for home and office use. It accepts mails from local Mail
User Agents (MUA) and delivers them either to local mailboxes or
remote SMTP servers. Remote delivery includes support for features
such as TLS/SSL and SMTP authentication.
.
dma is not intended as a replacement for full-featured MTAs like
Sendmail, Postfix, or Exim. Consequently, dma does not listen on
port 25 for incoming connections.
Package: dma-migrate
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Enhances: dma
Description: migration utility for the DragonFly Mail Agent's spool files
The dma-migrate utility examines the DragonFly Mail Agent's mail queue
and performs any conversions from old message file formats to the most
recent one as needed.

View File

@ -1,91 +0,0 @@
Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135
Name: dma
Files: base64.c
Copyright: Copyright (c) 1995-2001 Kungliga Tekniska Högskolan
(Royal Institute of Technology, Stockholm, Sweden).
All rights reserved.
License: BSD-3
Files: conf.c crypto.c net.c
Copyright: Copyright (c) 2008 The DragonFly Project. All rights reserved.
This code is derived from software contributed to The DragonFly Project
by Matthias Schmidt <matthias@dragonflybsd.org>, University of Marburg,
Germany.
License: BSD-3
Files: dfcompat.c
Copyright: Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
Copyright (c) 1998, M. Warner Losh <imp@freebsd.org> All rights reserved.
License: BSD-1 BSD-2
Files: dma.8
Copyright: Copyright (c) 2008 The DragonFly Project. All rights reserved.
License: BSD-3
Files: dma.c dns.c mail.c spool.c util.c
Copyright: Copyright (c) 2008 The DragonFly Project. All rights reserved.
This code is derived from software contributed to The DragonFly Project
by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
License: BSD-3
Files: dma.h
Copyright: Copyright (c) 2008 The DragonFly Project. All rights reserved.
This code is derived from software contributed to The DragonFly Project
by Simon 'corecode' Schubert <corecode@fs.ei.tum.de> and
Matthias Schmidt <matthias@dragonflybsd.org>.
License: BSD-3
Files: debian/*
Copyright: Copyright (c) 2009, 2010 Peter Pentchev.
License: BSD-3
License: BSD-3
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
.
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
3. Neither the name of The DragonFly Project nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific, prior written permission.
License: BSD-1
Permission to use, copy, modify, and distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
License: BSD-2
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

View File

@ -1,2 +0,0 @@
usr/sbin
usr/share/man/man8

View File

@ -1 +0,0 @@
debian/migrate/dma-migrate usr/sbin

View File

@ -1 +0,0 @@
debian/migrate/dma-migrate.8

View File

@ -1,4 +0,0 @@
etc/dma
usr/sbin
usr/share/lintian/overrides
usr/share/man/man8

View File

@ -1,6 +0,0 @@
usr/sbin/dma usr/bin/mailq
usr/sbin/dma usr/bin/newaliases
usr/sbin/dma usr/sbin/sendmail
usr/share/man/man8/dma.8 usr/share/man/man8/mailq.8
usr/share/man/man8/dma.8 usr/share/man/man8/newaliases.8
usr/share/man/man8/dma.8 usr/share/man/man8/sendmail.8

View File

@ -1,8 +0,0 @@
dma: manpage-has-errors-from-man *Unknown DragonFly version*
dma: non-standard-dir-in-var var/mail/
dma: non-standard-dir-perm var/spool/dma/ 0770 != 0755
dma: non-standard-dir-perm var/spool/dma/ 2775 != 0755
dma: non-standard-file-perm etc/dma/auth.conf 0640 != 0644
dma: no-upstream-changelog
dma: setgid-binary usr/sbin/dma 2755 root/mail
dma: setuid-binary usr/lib/dma-mbox-create 4754 root/mail

View File

@ -1,4 +0,0 @@
all: dma-migrate
clean:
rm -f dma-migrate dma-migrate.o

View File

@ -1,6 +0,0 @@
Change log for dma-migrate, the DragonFly Mail Agent queue migration utility.
0.01 not yet ;)
- first public release
Comments: Peter Pentchev <roam@ringlet.net>

View File

@ -1,98 +0,0 @@
.\" Copyright (c) 2010 Peter Pentchev
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd May 11, 2009
.Dt dma-migrate 8
.Os
.Sh NAME
.Nm dma-migrate
.Nd convert the DragonFly Mail Agent's queue files
.Sh SYNOPSIS
.Nm
.Op Fl v
.Op Fl d Ar spooldir
.Nm
.Op Fl h | Fl V
.Sh DESCRIPTION
The
.Nm
utility is used to convert the mail queue files in the
.Xr dma 8
spool directory to the latest spool directory format supported by
the installed version of
.Xr dma 8 .
Currently it only handles the conversion from a single file containing
both message and delivery metadata to the M/Q format.
.Pp
The following command-line options are available:
.Bl -tag -width indent
.It Fl d
Specify the location of the
.Xr dma 8
spool directory, default
.Pa /var/spool/dma .
.It Fl h
Display usage information and exit.
.It Fl V
Display program version information and exit.
.It Fl v
Verbose output - display diagnostic messages.
.El
.Sh ENVIRONMENT
The operation of the
.Nm
utility is currently not influenced by environment variables.
.Sh FILES
The
.Nm
utility looks for the
.Xr dma 8
mail queue files in the
.Pa /var/spool/dma
directory, unless another location is specified by the
.Fl d
command-line option.
.Sh EXIT STATUS
The
.Nm
utility will scan the whole spool directory and attempt to convert all
suitable files there.
If there are no files to be converted, or if all the conversions are
successful, it will complete with an exit code of zero.
If any conversion errors are encountered, a message will be displayed
to the standard error stream and
.Nm
will exit with an exit code of 1 after attempting to convert the rest of
the suitable files in the spool directory.
.Sh SEE ALSO
.Xr dma 8
.Sh STANDARDS
No standards documentation was harmed in the process of creating
.Nm .
.Sh BUGS
Please report any bugs in
.Nm
to the author.
.Sh AUTHOR
.An Peter Pentchev Aq roam@ringlet.net

View File

@ -1,413 +0,0 @@
/*-
* Copyright (c) 2010 Peter Pentchev
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/file.h>
#include <sys/stat.h>
#include <dirent.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <inttypes.h>
#include <regex.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#ifndef __printflike
#ifdef __GNUC__
#define __printflike(fmtarg, firstvararg) \
__attribute__((__format__ (__printf__, fmtarg, firstvararg)))
#else
#define __printflike(fmtarg, firstvararg)
#endif
#endif
#define DEFAULT_SPOOLDIR "/var/spool/dma"
static int verbose = 0;
static char copybuf[BUFSIZ];
static int dma_migrate(int, const char *);
static int open_locked(const char *, int, ...);
static void cleanup_file(int, char *);
static void usage(int);
static void version(void);
static void debug(const char *, ...) __printflike(1, 2);
int
main(int argc, char **argv)
{
const char *spooldir;
int hflag, Vflag, errs, fd, res;
int ch;
DIR *d;
struct dirent *e;
struct stat sb;
srandom((unsigned long)((time(NULL) ^ getpid()) + ((uintptr_t)argv)));
hflag = Vflag = 0;
spooldir = DEFAULT_SPOOLDIR;
while (ch = getopt(argc, argv, "d:hVv"), ch != -1)
switch (ch) {
case 'd':
spooldir = optarg;
break;
case 'h':
hflag = 1;
break;
case 'V':
Vflag = 1;
break;
case 'v':
verbose = 1;
break;
case '?':
default:
usage(1);
/* NOTREACHED */
}
if (Vflag)
version();
if (hflag)
usage(0);
if (hflag || Vflag)
exit(0);
argc -= optind;
argv += optind;
/* Let's roll! */
if (chdir(spooldir) == -1)
err(1, "Could not change into spool directory %s", spooldir);
if (d = opendir("."), d == NULL)
err(1, "Could not read spool directory %s", spooldir);
errs = 0;
while (e = readdir(d), e != NULL) {
/* Do we care about this entry? */
debug("Read a directory entry: %s\n", e->d_name);
if (strncmp(e->d_name, "tmp_", 4) == 0 ||
e->d_name[0] == 'M' || e->d_name[0] == 'Q' ||
(e->d_type != DT_REG && e->d_type != DT_UNKNOWN))
continue;
if (e->d_type == DT_UNKNOWN)
if (stat(e->d_name, &sb) == -1 || !S_ISREG(sb.st_mode))
continue;
debug("- want to process it\n");
/* Try to lock it - skip it if dma is delivering the message */
if (fd = open_locked(e->d_name, O_RDONLY|O_NDELAY), fd == -1) {
debug("- seems to be locked, skipping\n");
continue;
}
/* Okay, convert it to the M/Q schema */
res = dma_migrate(fd, e->d_name);
close(fd);
if (res == -1)
errs++;
}
if (errs)
debug("Finished, %d conversion errors\n", errs);
else
debug("Everything seems to be all right\n");
return (errs && 1);
}
static int
dma_migrate(int fd, const char *fname)
{
const char *id;
char *mname, *qname, *tempname, *sender, *recp, *line, *recpline;
int mfd, qfd, tempfd;
struct stat sb;
FILE *fp, *qfp, *mfp;
size_t sz, len;
static regex_t *qidreg = NULL;
mfd = tempfd = qfd = -1;
mname = qname = sender = recp = line = NULL;
fp = qfp = NULL;
if (fstat(fd, &sb) == -1) {
warn("Could not fstat(%s)", fname);
return (-1);
}
/*
* Let's just blithely assume that the queue ID *is* the filename,
* since that's the way dma did things so far.
* Well, okay, let's check it.
*/
if (qidreg == NULL) {
regex_t *nreg;
if ((nreg = malloc(sizeof(*qidreg))) == NULL) {
warn("Could not allocate memory for a regex");
return (-1);
}
if (regcomp(nreg, "^[a-fA-F0-9]\\+\\.[a-fA-F0-9]\\+$", 0)
!= 0) {
warnx("Could not compile a dma queue ID regex");
free(nreg);
return (-1);
}
qidreg = nreg;
}
if (regexec(qidreg, fname, 0, NULL, 0) != 0) {
warnx("The name '%s' is not a valid dma queue ID", fname);
return (-1);
}
id = fname;
debug(" - queue ID %s\n", id);
if (asprintf(&mname, "M%s", id) == -1 ||
asprintf(&tempname, "tmp_%s", id) == -1 ||
asprintf(&qname, "Q%s", id) == -1 ||
mname == NULL || tempname == NULL || qname == NULL)
goto fail;
/* Create the message placeholder early to avoid races */
mfd = open_locked(mname, O_CREAT | O_EXCL | O_RDWR, 0600);
if (mfd == -1) {
warn("Could not create temporary file %s", mname);
goto fail;
}
if (stat(qname, &sb) != -1 || errno != ENOENT ||
stat(tempname, &sb) != -1 || errno != ENOENT) {
warnx("Some of the queue files for %s already exist", fname);
goto fail;
}
debug(" - mfd %d names %s, %s, %s\n", mfd, mname, tempname, qname);
fp = fdopen(fd, "r");
if (fp == NULL) {
warn("Could not reopen the descriptor for %s", fname);
goto fail;
}
/* Parse the header of the old-format message file */
/* ...sender... */
if (getline(&sender, &sz, fp) == -1) {
warn("Could not read the initial line from %s", fname);
goto fail;
}
sz = strlen(sender);
while (sz > 0 && (sender[sz - 1] == '\n' || sender[sz - 1] == '\r'))
sender[--sz] = '\0';
if (sz == 0) {
warnx("Empty sender line in %s", fname);
goto fail;
}
debug(" - sender %s\n", sender);
/* ...recipient(s)... */
len = strlen(fname);
recpline = NULL;
while (1) {
if (getline(&line, &sz, fp) == -1) {
warn("Could not read a recipient line from %s", fname);
goto fail;
}
sz = strlen(line);
while (sz > 0 &&
(line[sz - 1] == '\n' || line[sz - 1] == '\r'))
line[--sz] = '\0';
if (sz == 0) {
free(line);
line = NULL;
break;
}
if (recp == NULL &&
strncmp(line, fname, len) == 0 && line[len] == ' ') {
recp = line + len + 1;
recpline = line;
} else {
free(line);
}
line = NULL;
}
if (recp == NULL) {
warnx("Could not find its own recipient line in %s", fname);
goto fail;
}
/* ..phew, finished with the header. */
tempfd = open_locked(tempname, O_CREAT | O_EXCL | O_RDWR, 0600);
if (tempfd == -1) {
warn("Could not create a queue file for %s", fname);
goto fail;
}
qfp = fdopen(tempfd, "w");
if (qfp == NULL) {
warn("Could not fdopen(%s) for %s", tempname, fname);
goto fail;
}
mfp = fdopen(mfd, "w");
if (mfp == NULL) {
warn("Could not fdopen(%s) for %s", mname, fname);
goto fail;
}
fprintf(qfp, "ID: %s\nSender: %s\nRecipient: %s\n", id, sender, recp);
fflush(qfp);
fsync(tempfd);
/* Copy the message file over to mname */
while ((sz = fread(copybuf, 1, sizeof(copybuf), fp)) > 0)
if (fwrite(copybuf, 1, sz, mfp) != sz) {
warn("Could not copy the message from %s to %s",
fname, mname);
goto fail;
}
if (ferror(fp)) {
warn("Could not read the full message from %s", fname);
goto fail;
}
fflush(mfp);
fsync(mfd);
if (rename(tempname, qname) == -1) {
warn("Could not rename the queue file for %s", fname);
goto fail;
}
qfd = tempfd;
tempfd = -1;
if (unlink(fname) == -1) {
warn("Could not remove the old converted file %s", fname);
goto fail;
}
fclose(fp);
fclose(qfp);
free(sender);
free(line);
free(recpline);
free(mname);
free(qname);
free(tempname);
return (0);
fail:
if (fp != NULL)
fclose(fp);
if (qfp != NULL)
fclose(qfp);
if (sender != NULL)
free(sender);
if (line != NULL)
free(line);
if (recpline != NULL)
free(recpline);
cleanup_file(mfd, mname);
cleanup_file(qfd, qname);
cleanup_file(tempfd, tempname);
return (-1);
}
static void
cleanup_file(int fd, char *fname)
{
if (fd != -1) {
close(fd);
unlink(fname);
}
if (fname != NULL)
free(fname);
}
static void
usage(int ferr)
{
const char *s =
"Usage:\tdma-migrate [-hVv] [-d spooldir]\n"
"\t-d\tspecify the spool directory (" DEFAULT_SPOOLDIR ")\n"
"\t-h\tdisplay program usage information and exit\n"
"\t-V\tdisplay program version information and exit\n"
"\t-v\tverbose operation - display diagnostic messages";
if (ferr)
errx(1, "%s", s);
puts(s);
}
static void
version(void)
{
printf("dma-migrate 0.01 (dma 0.0.2010.06.17)\n");
}
static void
debug(const char *fmt, ...)
{
va_list v;
if (verbose < 1)
return;
va_start(v, fmt);
vfprintf(stderr, fmt, v);
va_end(v);
}
static int
open_locked(const char *fname, int flags, ...)
{
int mode = 0;
#ifndef O_EXLOCK
int fd, save_errno;
#endif
if (flags & O_CREAT) {
va_list ap;
va_start(ap, flags);
mode = va_arg(ap, int);
va_end(ap);
}
#ifndef O_EXLOCK
fd = open(fname, flags, mode);
if (fd < 0)
return(fd);
if (flock(fd, LOCK_EX|((flags & O_NONBLOCK)? LOCK_NB: 0)) < 0) {
save_errno = errno;
close(fd);
errno = save_errno;
return(-1);
}
return(fd);
#else
return(open(fname, flags|O_EXLOCK, mode));
#endif
}

View File

@ -1,49 +0,0 @@
#!/usr/bin/make -f
# -*- makefile -*-
# Debian build rules for dma, the DragonFly mail agent
DDIR= $(CURDIR)/debian
D= $(DDIR)/dma
BUILDDEFS= DESTDIR=$D PREFIX=/usr
CFLAGS:= $(shell dpkg-buildflags --get CFLAGS)
CPPFLAGS:= $(shell dpkg-buildflags --get CPPFLAGS)
LDFLAGS:= $(shell dpkg-buildflags --get LDFLAGS)
CONFFILES= dma.conf auth.conf
ifneq (,$(filter werror,$(DEB_BUILD_OPTIONS)))
CFLAGS+= -Werror
endif
ifneq (,$(filter nostrip,$(DEB_BUILD_OPTIONS)))
export STRIPFLAG=
endif
ifneq (,$(filter hardening,$(DEB_BUILD_OPTIONS)))
export DEB_BUILD_HARDENING=1
else
export DEB_BUILD_HARDENING=0
endif
export CFLAGS CPPFLAGS LDFLAGS
override_dh_auto_build:
$(MAKE) -f Makefile ${BUILDDEFS}
$(MAKE) -C $(DDIR)/migrate
override_dh_auto_clean:
$(MAKE) -f Makefile clean
$(MAKE) -C $(DDIR)/migrate clean
override_dh_auto_install:
$(MAKE) -f Makefile ${BUILDDEFS} install sendmail-link mailq-link install-spool-dirs install-etc
override_dh_fixperms:
dh_fixperms -Xusr/sbin/dma -Xusr/lib/dma-mbox-create -Xvar/spool/dma -Xetc/dma
override_dh_installchangelogs:
dh_installchangelogs -p dma
dh_installchangelogs -p dma-migrate debian/migrate/NEWS
%:
dh $@

View File

@ -1 +0,0 @@
3.0 (native)

View File

@ -1,2 +0,0 @@
compression = "bzip2"
compression-level = 9

View File

@ -1,9 +1,9 @@
/*
* Copyright (c) 2010 Simon Schubert <2@0x2c.org>
* Copyright (c) 2010-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -54,7 +54,7 @@
static void
logfail(const char *fmt, ...)
logfail(int exitcode, const char *fmt, ...)
{
int oerrno = errno;
va_list ap;
@ -73,7 +73,7 @@ logfail(const char *fmt, ...)
else
syslog(LOG_ERR, errno ? "%m" : "unknown error");
exit(1);
exit(exitcode);
}
/*
@ -98,21 +98,21 @@ main(int argc, char **argv)
errno = 0;
gr = getgrnam(DMA_GROUP);
if (!gr)
logfail("cannot find dma group `%s'", DMA_GROUP);
logfail(EX_CONFIG, "cannot find dma group `%s'", DMA_GROUP);
mail_gid = gr->gr_gid;
if (setgid(mail_gid) != 0)
logfail("cannot set gid to %d (%s)", mail_gid, DMA_GROUP);
logfail(EX_NOPERM, "cannot set gid to %d (%s)", mail_gid, DMA_GROUP);
if (getegid() != mail_gid)
logfail("cannot set gid to %d (%s), still at %d", mail_gid, DMA_GROUP, getegid());
logfail(EX_NOPERM, "cannot set gid to %d (%s), still at %d", mail_gid, DMA_GROUP, getegid());
/*
* We take exactly one argument: the username.
*/
if (argc != 2) {
errno = 0;
logfail("no arguments");
logfail(EX_USAGE, "no arguments");
}
user = argv[1];
@ -121,7 +121,7 @@ main(int argc, char **argv)
/* the username may not contain a pathname separator */
if (strchr(user, '/')) {
errno = 0;
logfail("path separator in username `%s'", user);
logfail(EX_DATAERR, "path separator in username `%s'", user);
exit(1);
}
@ -129,7 +129,7 @@ main(int argc, char **argv)
errno = 0;
pw = getpwnam(user);
if (!pw)
logfail("cannot find user `%s'", user);
logfail(EX_NOUSER, "cannot find user `%s'", user);
user_uid = pw->pw_uid;
@ -137,20 +137,20 @@ main(int argc, char **argv)
if (error < 0 || (size_t)error >= sizeof(fn)) {
if (error >= 0) {
errno = 0;
logfail("mbox path too long");
logfail(EX_USAGE, "mbox path too long");
}
logfail("cannot build mbox path for `%s/%s'", _PATH_MAILDIR, user);
logfail(EX_CANTCREAT, "cannot build mbox path for `%s/%s'", _PATH_MAILDIR, user);
}
f = open(fn, O_RDONLY|O_CREAT, 0600);
if (f < 0)
logfail("cannot open mbox `%s'", fn);
logfail(EX_NOINPUT, "cannt open mbox `%s'", fn);
if (fchown(f, user_uid, mail_gid))
logfail("cannot change owner of mbox `%s'", fn);
logfail(EX_OSERR, "cannot change owner of mbox `%s'", fn);
if (fchmod(f, 0620))
logfail("cannot change permissions of mbox `%s'", fn);
logfail(EX_OSERR, "cannot change permissions of mbox `%s'", fn);
/* file should be present with the right owner and permissions */

View File

@ -1,4 +1,5 @@
.\"
.\" Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
.\" Copyright (c) 2008
.\" The DragonFly Project. All rights reserved.
.\"

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -247,7 +248,7 @@ go_background(struct queue *queue)
if (daemonize && daemon(0, 0) != 0) {
syslog(LOG_ERR, "can not daemonize: %m");
exit(1);
exit(EX_OSERR);
}
daemonize = 0;
@ -264,7 +265,7 @@ go_background(struct queue *queue)
switch (pid) {
case -1:
syslog(LOG_ERR, "can not fork: %m");
exit(1);
exit(EX_OSERR);
break;
case 0:
@ -286,11 +287,11 @@ go_background(struct queue *queue)
break;
case 1:
if (doqueue)
exit(0);
exit(EX_OK);
syslog(LOG_WARNING, "could not lock queue file");
exit(1);
exit(EX_SOFTWARE);
default:
exit(1);
exit(EX_SOFTWARE);
}
dropspool(queue, it);
return (it);
@ -306,7 +307,7 @@ go_background(struct queue *queue)
}
syslog(LOG_CRIT, "reached dead code");
exit(1);
exit(EX_SOFTWARE);
}
static void
@ -331,12 +332,12 @@ deliver(struct qitem *it)
case 0:
delqueue(it);
syslog(LOG_INFO, "delivery successful");
exit(0);
exit(EX_OK);
case 1:
if (stat(it->queuefn, &st) != 0) {
syslog(LOG_ERR, "lost queue file `%s'", it->queuefn);
exit(1);
exit(EX_SOFTWARE);
}
if (gettimeofday(&now, NULL) == 0 &&
(now.tv_sec - st.st_mtim.tv_sec > MAX_TIMEOUT)) {
@ -438,16 +439,16 @@ main(int argc, char **argv)
pw = getpwnam(DMA_ROOT_USER);
if (pw == NULL) {
if (errno == 0)
errx(1, "user '%s' not found", DMA_ROOT_USER);
errx(EX_CONFIG, "user '%s' not found", DMA_ROOT_USER);
else
err(1, "cannot drop root privileges");
err(EX_OSERR, "cannot drop root privileges");
}
if (setuid(pw->pw_uid) != 0)
err(1, "cannot drop root privileges");
err(EX_OSERR, "cannot drop root privileges");
if (geteuid() == 0 || getuid() == 0)
errx(1, "cannot drop root privileges");
errx(EX_OSERR, "cannot drop root privileges");
}
atexit(deltmp);
@ -460,15 +461,15 @@ main(int argc, char **argv)
argv++; argc--;
showq = 1;
if (argc != 0)
errx(1, "invalid arguments");
errx(EX_USAGE, "invalid arguments");
goto skipopts;
} else if (strcmp(argv[0], "newaliases") == 0) {
logident_base = "dma";
setlogident("%s", logident_base);
if (read_aliases() != 0)
errx(1, "could not parse aliases file `%s'", config.aliases);
exit(0);
errx(EX_SOFTWARE, "could not parse aliases file `%s'", config.aliases);
exit(EX_OK);
}
opterr = 0;
@ -547,7 +548,7 @@ main(int argc, char **argv)
default:
fprintf(stderr, "invalid argument: `-%c'\n", optopt);
exit(1);
exit(EX_USAGE);
}
}
argc -= optind;
@ -555,10 +556,10 @@ main(int argc, char **argv)
opterr = 1;
if (argc != 0 && (showq || doqueue))
errx(1, "sending mail and queue operations are mutually exclusive");
errx(EX_USAGE, "sending mail and queue operations are mutually exclusive");
if (showq + doqueue > 1)
errx(1, "conflicting queue operations");
errx(EX_USAGE, "conflicting queue operations");
skipopts:
if (logident_base == NULL)
@ -578,7 +579,7 @@ main(int argc, char **argv)
if (showq) {
if (load_queue(&queue) < 0)
errlog(1, "can not load queue");
errlog(EX_NOINPUT, "can not load queue");
show_queue(&queue);
return (0);
}
@ -586,38 +587,38 @@ main(int argc, char **argv)
if (doqueue) {
flushqueue_signal();
if (load_queue(&queue) < 0)
errlog(1, "can not load queue");
errlog(EX_NOINPUT, "can not load queue");
run_queue(&queue);
return (0);
}
if (read_aliases() != 0)
errlog(1, "could not parse aliases file `%s'", config.aliases);
errlog(EX_SOFTWARE, "could not parse aliases file `%s'", config.aliases);
if ((sender = set_from(&queue, sender)) == NULL)
errlog(1, "set_from failed");
errlog(EX_SOFTWARE, NULL);
if (newspoolf(&queue) != 0)
errlog(1, "can not create temp file in `%s'", config.spooldir);
errlog(EX_CANTCREAT, "can not create temp file in `%s'", config.spooldir);
setlogident("%s", queue.id);
for (i = 0; i < argc; i++) {
if (add_recp(&queue, argv[i], EXPAND_WILDCARD) != 0)
errlogx(1, "invalid recipient `%s'", argv[i]);
errlogx(EX_DATAERR, "invalid recipient `%s'", argv[i]);
}
if (LIST_EMPTY(&queue.queue) && !recp_from_header)
errlogx(1, "no recipients");
errlogx(EX_NOINPUT, "no recipients");
if (readmail(&queue, nodot, recp_from_header) != 0)
errlog(1, "can not read mail");
errlog(EX_NOINPUT, "can not read mail");
if (LIST_EMPTY(&queue.queue))
errlogx(1, "no recipients");
errlogx(EX_NOINPUT, "no recipients");
if (linkspool(&queue) != 0)
errlog(1, "can not create spools");
errlog(EX_CANTCREAT, "can not create spools");
/* From here on the mail is safe. */

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de> and
* by Simon Schubert <2@0x2c.org> and
* Matthias Schmidt <matthias@dragonflybsd.org>.
*
* Redistribution and use in source and binary forms, with or without
@ -43,6 +44,7 @@
#include <arpa/inet.h>
#include <openssl/ssl.h>
#include <netdb.h>
#include <sysexits.h>
#define VERSION "DragonFly Mail Agent " DMA_VERSION
@ -173,6 +175,8 @@ extern char errmsg[ERRMSG_SIZE];
/* aliases_parse.y */
int yyparse(void);
int yywrap(void);
int yylex(void);
extern FILE *yyin;
/* conf.c */

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -67,7 +68,6 @@ add_host(int pref, const char *host, int port, struct mx_hostentry **he, size_t
char servname[10];
struct mx_hostentry *p;
const int count_inc = 10;
int err;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
@ -75,9 +75,26 @@ add_host(int pref, const char *host, int port, struct mx_hostentry **he, size_t
hints.ai_protocol = IPPROTO_TCP;
snprintf(servname, sizeof(servname), "%d", port);
err = getaddrinfo(host, servname, &hints, &res0);
if (err)
return (err == EAI_AGAIN ? 1 : -1);
switch (getaddrinfo(host, servname, &hints, &res0)) {
case 0:
break;
case EAI_AGAIN:
case EAI_NONAME:
/*
* EAI_NONAME gets returned for:
* SMARTHOST set but DNS server not reachable -> defer
* SMARTHOST set but DNS server returns "host does not exist"
* -> buggy configuration
* -> either defer or bounce would be ok -> defer
* MX entry was returned by DNS server but name doesn't resolve
* -> hopefully transient situation -> defer
* all other DNS problems should have been caught earlier
* in dns_get_mx_list().
*/
goto out;
default:
return(-1);
}
for (res = res0; res != NULL; res = res->ai_next) {
if (*ps + 1 >= roundup(*ps, count_inc)) {

View File

@ -1,7 +1,9 @@
#!/bin/sh
tmp=$1
file=${tmp:=VERSION}
gitver=$(git describe 2>/dev/null | tr - .)
filever=$(cat VERSION)
filever=$(cat ${file} 2>/dev/null)
version=${gitver}
: ${version:=$filever}

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -81,7 +82,7 @@ create_mbox(const char *name)
execl(LIBEXEC_PATH "/dma-mbox-create", "dma-mbox-create", name, NULL);
syslog(LOG_ERR, "cannot execute "LIBEXEC_PATH"/dma-mbox-create: %m");
exit(1);
exit(EX_SOFTWARE);
default:
/* parent */

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -51,7 +52,7 @@ bounce(struct qitem *it, const char *reason)
/* Don't bounce bounced mails */
if (it->sender[0] == 0) {
syslog(LOG_INFO, "can not bounce a bounce message, discarding");
exit(1);
exit(EX_SOFTWARE);
}
bzero(&bounceq, sizeof(bounceq));
@ -132,7 +133,7 @@ bounce(struct qitem *it, const char *reason)
fail:
syslog(LOG_CRIT, "error creating bounce: %m");
delqueue(it);
exit(1);
exit(EX_IOERR);
}
struct parse_state {
@ -332,10 +333,10 @@ parse_addrs(struct parse_state *ps, char *s, struct queue *queue)
ps->pos = 0;
addr = strdup(ps->addr);
if (addr == NULL)
errlog(1, "strdup failed");
errlog(EX_SOFTWARE, NULL);
if (add_recp(queue, addr, EXPAND_WILDCARD) != 0)
errlogx(1, "invalid recipient `%s'", addr);
errlogx(EX_DATAERR, "invalid recipient `%s'", addr);
goto again;
}
@ -374,7 +375,9 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
if (fgets(line, sizeof(line) - 1, stdin) == NULL)
break;
if (had_last_line)
errlogx(1, "bad mail input format");
errlogx(EX_DATAERR, "bad mail input format:"
" from %s (uid %d) (envelope-from %s)",
username, useruid, queue->sender);
linelen = strlen(line);
if (linelen == 0 || line[linelen - 1] != '\n') {
/*
@ -405,7 +408,7 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
if (parse_state.state != NONE) {
if (parse_addrs(&parse_state, line, queue) < 0) {
errlogx(1, "invalid address in header\n");
errlogx(EX_DATAERR, "invalid address in header\n");
/* NOTREACHED */
}
}
@ -416,7 +419,7 @@ readmail(struct queue *queue, int nodot, int recp_from_header)
strprefixcmp(line, "Bcc:") == 0)) {
parse_state.state = START;
if (parse_addrs(&parse_state, line, queue) < 0) {
errlogx(1, "invalid address in header\n");
errlogx(EX_DATAERR, "invalid address in header\n");
/* NOTREACHED */
}
}

View File

@ -1,4 +1,5 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -289,7 +290,7 @@ load_queue(struct queue *queue)
spooldir = opendir(config.spooldir);
if (spooldir == NULL)
err(1, "reading queue");
err(EX_NOINPUT, "reading queue");
while ((de = readdir(spooldir)) != NULL) {
queuefn = NULL;

View File

@ -1,8 +1,9 @@
/*
* Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
* Copyright (c) 2008 The DragonFly Project. All rights reserved.
*
* This code is derived from software contributed to The DragonFly Project
* by Simon 'corecode' Schubert <corecode@fs.ei.tum.de>.
* by Simon Schubert <2@0x2c.org>.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions

View File

@ -1,457 +0,0 @@
# $FreeBSD$
LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
ATF_TESTS_SH+= functional_test
BINDIR= ${TESTSDIR}
PROGS+= libarchive_test
CFLAGS+= -I${.CURDIR:H} -I${.OBJDIR}
CFLAGS+= -I${LIBARCHIVEDIR}/libarchive -I${LIBARCHIVEDIR}/test_utils
CFLAGS+= -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1
DEBUG_CFLAGS+= -g
LIBADD.libarchive_test= archive
# Uncomment to link against dmalloc
#LDADD+= -L/usr/local/lib -ldmalloc
#CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
.PATH: ${LIBARCHIVEDIR}/libarchive/test
TESTS_SRCS= \
test_acl_freebsd_nfs4.c \
test_acl_freebsd_posix1e.c \
test_acl_nfs4.c \
test_acl_pax.c \
test_acl_posix1e.c \
test_archive_api_feature.c \
test_archive_clear_error.c \
test_archive_cmdline.c \
test_archive_crypto.c \
test_archive_getdate.c \
test_archive_match_time.c \
test_archive_match_owner.c \
test_archive_match_path.c \
test_archive_pathmatch.c \
test_archive_read_close_twice.c \
test_archive_read_close_twice_open_fd.c \
test_archive_read_close_twice_open_filename.c \
test_archive_read_multiple_data_objects.c \
test_archive_read_next_header_empty.c \
test_archive_read_next_header_raw.c \
test_archive_read_open2.c \
test_archive_read_set_filter_option.c \
test_archive_read_set_format_option.c \
test_archive_read_set_option.c \
test_archive_read_set_options.c \
test_archive_read_support.c \
test_archive_set_error.c \
test_archive_string.c \
test_archive_string_conversion.c \
test_archive_write_add_filter_by_name.c \
test_archive_write_set_filter_option.c \
test_archive_write_set_format_by_name.c \
test_archive_write_set_format_option.c \
test_archive_write_set_option.c \
test_archive_write_set_options.c \
test_bad_fd.c \
test_compat_bzip2.c \
test_compat_cpio.c \
test_compat_gtar.c \
test_compat_gzip.c \
test_compat_lzip.c \
test_compat_lzma.c \
test_compat_lzop.c \
test_compat_mac.c \
test_compat_pax_libarchive_2x.c \
test_compat_solaris_tar_acl.c \
test_compat_solaris_pax_sparse.c \
test_compat_tar_hardlink.c \
test_compat_uudecode.c \
test_compat_xz.c \
test_compat_zip.c \
test_empty_write.c \
test_entry.c \
test_entry_strmode.c \
test_extattr_freebsd.c \
test_filter_count.c \
test_fuzz.c \
test_gnutar_filename_encoding.c \
test_link_resolver.c \
test_open_fd.c \
test_open_failure.c \
test_open_file.c \
test_open_filename.c \
test_pax_filename_encoding.c \
test_read_data_large.c \
test_read_disk.c \
test_read_disk_directory_traversals.c \
test_read_disk_entry_from_file.c \
test_read_extract.c \
test_read_file_nonexistent.c \
test_read_filter_grzip.c \
test_read_filter_lrzip.c \
test_read_filter_lzop.c \
test_read_filter_lzop_multiple_parts.c \
test_read_filter_program.c \
test_read_filter_program_signature.c \
test_read_filter_uudecode.c \
test_read_format_7zip.c \
test_read_format_ar.c \
test_read_format_cab.c \
test_read_format_cab_filename.c \
test_read_format_cpio_afio.c \
test_read_format_cpio_bin.c \
test_read_format_cpio_bin_Z.c \
test_read_format_cpio_bin_be.c \
test_read_format_cpio_bin_bz2.c \
test_read_format_cpio_bin_gz.c \
test_read_format_cpio_bin_lzip.c \
test_read_format_cpio_bin_lzma.c \
test_read_format_cpio_bin_xz.c \
test_read_format_cpio_filename.c \
test_read_format_cpio_odc.c \
test_read_format_cpio_svr4_gzip.c \
test_read_format_cpio_svr4c_Z.c \
test_read_format_cpio_svr4_bzip2_rpm.c \
test_read_format_cpio_svr4_gzip_rpm.c \
test_read_format_empty.c \
test_read_format_gtar_filename.c \
test_read_format_gtar_gz.c \
test_read_format_gtar_lzma.c \
test_read_format_gtar_sparse.c \
test_read_format_gtar_sparse_skip_entry.c \
test_read_format_iso_Z.c \
test_read_format_iso_multi_extent.c \
test_read_format_iso_xorriso.c \
test_read_format_isorr_rr_moved.c \
test_read_format_isojoliet_bz2.c \
test_read_format_isojoliet_long.c \
test_read_format_isojoliet_rr.c \
test_read_format_isojoliet_versioned.c \
test_read_format_isorr_bz2.c \
test_read_format_isorr_ce.c \
test_read_format_isorr_new_bz2.c \
test_read_format_isozisofs_bz2.c \
test_read_format_lha.c \
test_read_format_lha_filename.c \
test_read_format_mtree.c \
test_read_format_pax_bz2.c \
test_read_format_rar.c \
test_read_format_raw.c \
test_read_format_tar.c \
test_read_format_tar_empty_filename.c \
test_read_format_tar_filename.c \
test_read_format_tbz.c \
test_read_format_tgz.c \
test_read_format_tlz.c \
test_read_format_txz.c \
test_read_format_tz.c \
test_read_format_ustar_filename.c \
test_read_format_xar.c \
test_read_format_zip.c \
test_read_format_zip_comment_stored.c \
test_read_format_zip_filename.c \
test_read_format_zip_mac_metadata.c \
test_read_format_zip_sfx.c \
test_read_large.c \
test_read_pax_truncated.c \
test_read_position.c \
test_read_set_format.c \
test_read_truncated.c \
test_read_truncated_filter.c \
test_sparse_basic.c \
test_tar_filenames.c \
test_tar_large.c \
test_ustar_filenames.c \
test_ustar_filename_encoding.c \
test_write_disk.c \
test_write_disk_appledouble.c \
test_write_disk_failures.c \
test_write_disk_hardlink.c \
test_write_disk_hfs_compression.c \
test_write_disk_lookup.c \
test_write_disk_mac_metadata.c \
test_write_disk_no_hfs_compression.c \
test_write_disk_perms.c \
test_write_disk_secure.c \
test_write_disk_sparse.c \
test_write_disk_symlink.c \
test_write_disk_times.c \
test_write_filter_b64encode.c \
test_write_filter_bzip2.c \
test_write_filter_compress.c \
test_write_filter_gzip.c \
test_write_filter_gzip_timestamp.c \
test_write_filter_lrzip.c \
test_write_filter_lzip.c \
test_write_filter_lzma.c \
test_write_filter_lzop.c \
test_write_filter_program.c \
test_write_filter_uuencode.c \
test_write_filter_xz.c \
test_write_format_7zip.c \
test_write_format_7zip_empty.c \
test_write_format_7zip_large.c \
test_write_format_ar.c \
test_write_format_cpio.c \
test_write_format_cpio_empty.c \
test_write_format_cpio_newc.c \
test_write_format_cpio_odc.c \
test_write_format_gnutar.c \
test_write_format_iso9660.c \
test_write_format_iso9660_boot.c \
test_write_format_iso9660_empty.c \
test_write_format_iso9660_filename.c \
test_write_format_iso9660_zisofs.c \
test_write_format_mtree.c \
test_write_format_mtree_absolute_path.c \
test_write_format_mtree_classic.c \
test_write_format_mtree_classic_indent.c \
test_write_format_mtree_fflags.c \
test_write_format_mtree_no_separator.c \
test_write_format_mtree_quoted_filename.c \
test_write_format_pax.c \
test_write_format_shar_empty.c \
test_write_format_tar.c \
test_write_format_tar_empty.c \
test_write_format_tar_sparse.c \
test_write_format_tar_ustar.c \
test_write_format_tar_v7tar.c \
test_write_format_xar.c \
test_write_format_xar_empty.c \
test_write_format_zip.c \
test_write_format_zip_empty.c \
test_write_format_zip_no_compression.c \
test_write_zip_set_compression_store.c \
test_write_open_memory.c \
test_zip_filename_encoding.c
# Deterministic failures:
# Crashes with SIGBUS
BROKEN_TESTS+= test_archive_rmd160
# Fails with `libarchive/test/test_archive_crypto.c:121: md != actualmd`
BROKEN_TESTS+= test_archive_sha384
# Fails with `test_compat_pax_libarchive_2x.c:122: ARCHIVE_WARN != archive_read_next_header(a, &ae)`
BROKEN_TESTS+= test_compat_pax_libarchive_2x
# Fails with `test_read_disk_directory_traversals.c:1094: File at has atime 886622, 1443306049 seconds ago`
BROKEN_TESTS+= test_read_disk_directory_traversals
# Non-deterministic failures:
# (Times out?) [and] crashes
BROKEN_TESTS+= test_fuzz_rar
# Build the test program.
SRCS.libarchive_test= \
${TESTS_SRCS} \
main.c \
read_open_memory.c
DPSRCS.libarchive_test= \
list.h
.PATH: ${LIBARCHIVEDIR}/test_utils
SRCS.libarchive_test+= test_utils.c
# list.h is just a list of all tests, as indicated by DEFINE_TEST macro lines
list.h: ${TESTS_SRCS} Makefile
@(cd ${LIBARCHIVEDIR}/libarchive/test && \
grep -h DEFINE_TEST ${.ALLSRC:N*Makefile} | \
egrep -v '${BROKEN_TESTS:tW:C/ /|/g}') > ${.TARGET}.tmp
@mv ${.TARGET}.tmp ${.TARGET}
FILES+= README
FILES+= test_acl_pax.tar.uu
FILES+= test_archive_string_conversion.txt.Z.uu
FILES+= test_compat_bzip2_1.tbz.uu
FILES+= test_compat_bzip2_2.tbz.uu
FILES+= test_compat_cpio_1.cpio.uu
FILES+= test_compat_gtar_1.tar.uu
FILES+= test_compat_gzip_1.tgz.uu
FILES+= test_compat_gzip_2.tgz.uu
FILES+= test_compat_lzip_1.tlz.uu
FILES+= test_compat_lzip_2.tlz.uu
FILES+= test_compat_lzma_1.tlz.uu
FILES+= test_compat_lzma_2.tlz.uu
FILES+= test_compat_lzma_3.tlz.uu
FILES+= test_compat_lzop_1.tar.lzo.uu
FILES+= test_compat_lzop_2.tar.lzo.uu
FILES+= test_compat_lzop_3.tar.lzo.uu
FILES+= test_compat_mac-1.tar.Z.uu
FILES+= test_compat_mac-2.tar.Z.uu
FILES+= test_compat_pax_libarchive_2x.tar.Z.uu
FILES+= test_compat_solaris_pax_sparse_1.pax.Z.uu
FILES+= test_compat_solaris_pax_sparse_2.pax.Z.uu
FILES+= test_compat_solaris_tar_acl.tar.uu
FILES+= test_compat_tar_hardlink_1.tar.uu
FILES+= test_compat_xz_1.txz.uu
FILES+= test_compat_zip_1.zip.uu
FILES+= test_compat_zip_2.zip.uu
FILES+= test_compat_zip_3.zip.uu
FILES+= test_compat_zip_4.zip.uu
FILES+= test_compat_zip_5.zip.uu
FILES+= test_compat_zip_6.zip.uu
FILES+= test_compat_zip_7.xps.uu
FILES+= test_fuzz.cab.uu
FILES+= test_fuzz.lzh.uu
FILES+= test_fuzz_1.iso.Z.uu
FILES+= test_pax_filename_encoding.tar.uu
FILES+= test_rar_multivolume_multiple_files.part1.rar.uu
FILES+= test_rar_multivolume_multiple_files.part2.rar.uu
FILES+= test_rar_multivolume_multiple_files.part3.rar.uu
FILES+= test_rar_multivolume_multiple_files.part4.rar.uu
FILES+= test_rar_multivolume_multiple_files.part5.rar.uu
FILES+= test_rar_multivolume_multiple_files.part6.rar.uu
FILES+= test_rar_multivolume_single_file.part1.rar.uu
FILES+= test_rar_multivolume_single_file.part2.rar.uu
FILES+= test_rar_multivolume_single_file.part3.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part01.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part02.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part03.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part04.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part05.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part06.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part07.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part08.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part09.rar.uu
FILES+= test_rar_multivolume_uncompressed_files.part10.rar.uu
FILES+= test_read_filter_grzip.tar.grz.uu
FILES+= test_read_filter_lrzip.tar.lrz.uu
FILES+= test_read_filter_lzop.tar.lzo.uu
FILES+= test_read_filter_lzop_multiple_parts.tar.lzo.uu
FILES+= test_read_format_7zip_bcj2_bzip2.7z.uu
FILES+= test_read_format_7zip_bcj2_copy_1.7z.uu
FILES+= test_read_format_7zip_bcj2_copy_2.7z.uu
FILES+= test_read_format_7zip_bcj2_copy_lzma.7z.uu
FILES+= test_read_format_7zip_bcj2_deflate.7z.uu
FILES+= test_read_format_7zip_bcj2_lzma1_1.7z.uu
FILES+= test_read_format_7zip_bcj2_lzma1_2.7z.uu
FILES+= test_read_format_7zip_bcj2_lzma2_1.7z.uu
FILES+= test_read_format_7zip_bcj2_lzma2_2.7z.uu
FILES+= test_read_format_7zip_bcj_bzip2.7z.uu
FILES+= test_read_format_7zip_bcj_copy.7z.uu
FILES+= test_read_format_7zip_bcj_deflate.7z.uu
FILES+= test_read_format_7zip_bcj_lzma1.7z.uu
FILES+= test_read_format_7zip_bcj_lzma2.7z.uu
FILES+= test_read_format_7zip_bzip2.7z.uu
FILES+= test_read_format_7zip_copy.7z.uu
FILES+= test_read_format_7zip_copy_2.7z.uu
FILES+= test_read_format_7zip_deflate.7z.uu
FILES+= test_read_format_7zip_delta_lzma1.7z.uu
FILES+= test_read_format_7zip_delta_lzma2.7z.uu
FILES+= test_read_format_7zip_empty_archive.7z.uu
FILES+= test_read_format_7zip_empty_file.7z.uu
FILES+= test_read_format_7zip_lzma1.7z.uu
FILES+= test_read_format_7zip_lzma1_2.7z.uu
FILES+= test_read_format_7zip_lzma1_lzma2.7z.uu
FILES+= test_read_format_7zip_lzma2.7z.uu
FILES+= test_read_format_7zip_ppmd.7z.uu
FILES+= test_read_format_7zip_symbolic_name.7z.uu
FILES+= test_read_format_ar.ar.uu
FILES+= test_read_format_cab_1.cab.uu
FILES+= test_read_format_cab_2.cab.uu
FILES+= test_read_format_cab_3.cab.uu
FILES+= test_read_format_cab_filename_cp932.cab.uu
FILES+= test_read_format_cpio_bin_be.cpio.uu
FILES+= test_read_format_cpio_filename_cp866.cpio.uu
FILES+= test_read_format_cpio_filename_eucjp.cpio.uu
FILES+= test_read_format_cpio_filename_koi8r.cpio.uu
FILES+= test_read_format_cpio_filename_utf8_jp.cpio.uu
FILES+= test_read_format_cpio_filename_utf8_ru.cpio.uu
FILES+= test_read_format_cpio_svr4_bzip2_rpm.rpm.uu
FILES+= test_read_format_cpio_svr4_gzip_rpm.rpm.uu
FILES+= test_read_format_gtar_filename_cp866.tar.Z.uu
FILES+= test_read_format_gtar_filename_eucjp.tar.Z.uu
FILES+= test_read_format_gtar_filename_koi8r.tar.Z.uu
FILES+= test_read_format_gtar_sparse_1_13.tar.uu
FILES+= test_read_format_gtar_sparse_1_17.tar.uu
FILES+= test_read_format_gtar_sparse_1_17_posix00.tar.uu
FILES+= test_read_format_gtar_sparse_1_17_posix01.tar.uu
FILES+= test_read_format_gtar_sparse_1_17_posix10.tar.uu
FILES+= test_read_format_gtar_sparse_1_17_posix10_modified.tar.uu
FILES+= test_read_format_gtar_sparse_skip_entry.tar.Z.uu
FILES+= test_read_format_iso.iso.Z.uu
FILES+= test_read_format_iso_2.iso.Z.uu
FILES+= test_read_format_iso_joliet.iso.Z.uu
FILES+= test_read_format_iso_joliet_by_nero.iso.Z.uu
FILES+= test_read_format_iso_joliet_long.iso.Z.uu
FILES+= test_read_format_iso_joliet_rockridge.iso.Z.uu
FILES+= test_read_format_iso_multi_extent.iso.Z.uu
FILES+= test_read_format_iso_rockridge.iso.Z.uu
FILES+= test_read_format_iso_rockridge_ce.iso.Z.uu
FILES+= test_read_format_iso_rockridge_new.iso.Z.uu
FILES+= test_read_format_iso_rockridge_rr_moved.iso.Z.uu
FILES+= test_read_format_iso_xorriso.iso.Z.uu
FILES+= test_read_format_iso_zisofs.iso.Z.uu
FILES+= test_read_format_lha_filename_cp932.lzh.uu
FILES+= test_read_format_lha_header0.lzh.uu
FILES+= test_read_format_lha_header1.lzh.uu
FILES+= test_read_format_lha_header2.lzh.uu
FILES+= test_read_format_lha_header3.lzh.uu
FILES+= test_read_format_lha_lh0.lzh.uu
FILES+= test_read_format_lha_lh6.lzh.uu
FILES+= test_read_format_lha_lh7.lzh.uu
FILES+= test_read_format_lha_withjunk.lzh.uu
FILES+= test_read_format_mtree.mtree.uu
FILES+= test_read_format_mtree_nomagic.mtree.uu
FILES+= test_read_format_mtree_nomagic2.mtree.uu
FILES+= test_read_format_mtree_nomagic3.mtree.uu
FILES+= test_read_format_rar.rar.uu
FILES+= test_read_format_rar_binary_data.rar.uu
FILES+= test_read_format_rar_compress_best.rar.uu
FILES+= test_read_format_rar_compress_normal.rar.uu
FILES+= test_read_format_rar_multi_lzss_blocks.rar.uu
FILES+= test_read_format_rar_multivolume.part0001.rar.uu
FILES+= test_read_format_rar_multivolume.part0002.rar.uu
FILES+= test_read_format_rar_multivolume.part0003.rar.uu
FILES+= test_read_format_rar_multivolume.part0004.rar.uu
FILES+= test_read_format_rar_noeof.rar.uu
FILES+= test_read_format_rar_ppmd_lzss_conversion.rar.uu
FILES+= test_read_format_rar_sfx.exe.uu
FILES+= test_read_format_rar_subblock.rar.uu
FILES+= test_read_format_rar_unicode.rar.uu
FILES+= test_read_format_rar_windows.rar.uu
FILES+= test_read_format_raw.data.Z.uu
FILES+= test_read_format_raw.data.uu
FILES+= test_read_format_tar_empty_filename.tar.uu
FILES+= test_read_format_tar_filename_koi8r.tar.Z.uu
FILES+= test_read_format_ustar_filename_cp866.tar.Z.uu
FILES+= test_read_format_ustar_filename_eucjp.tar.Z.uu
FILES+= test_read_format_ustar_filename_koi8r.tar.Z.uu
FILES+= test_read_format_zip.zip.uu
FILES+= test_read_format_zip_comment_stored_1.zip.uu
FILES+= test_read_format_zip_comment_stored_2.zip.uu
FILES+= test_read_format_zip_filename_cp866.zip.uu
FILES+= test_read_format_zip_filename_cp932.zip.uu
FILES+= test_read_format_zip_filename_koi8r.zip.uu
FILES+= test_read_format_zip_filename_utf8_jp.zip.uu
FILES+= test_read_format_zip_filename_utf8_ru.zip.uu
FILES+= test_read_format_zip_filename_utf8_ru2.zip.uu
FILES+= test_read_format_zip_length_at_end.zip.uu
FILES+= test_read_format_zip_mac_metadata.zip.uu
FILES+= test_read_format_zip_sfx.uu
FILES+= test_read_format_zip_symlink.zip.uu
FILES+= test_read_format_zip_ux.zip.uu
FILES+= test_read_large_splitted_rar_aa.uu
FILES+= test_read_large_splitted_rar_ab.uu
FILES+= test_read_large_splitted_rar_ac.uu
FILES+= test_read_large_splitted_rar_ad.uu
FILES+= test_read_large_splitted_rar_ae.uu
FILES+= test_read_splitted_rar_aa.uu
FILES+= test_read_splitted_rar_ab.uu
FILES+= test_read_splitted_rar_ac.uu
FILES+= test_read_splitted_rar_ad.uu
FILES+= test_splitted_rar_seek_support_aa.uu
FILES+= test_splitted_rar_seek_support_ab.uu
FILES+= test_splitted_rar_seek_support_ac.uu
FILES+= test_write_disk_appledouble.cpio.gz.uu
FILES+= test_write_disk_hfs_compression.tgz.uu
FILES+= test_write_disk_mac_metadata.tar.gz.uu
FILES+= test_write_disk_no_hfs_compression.tgz.uu
CLEANFILES+= list.h list.h.tmp
.include <bsd.test.mk>

View File

@ -1,50 +0,0 @@
#
# Copyright 2015 EMC Corp.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $FreeBSD$
SRCDIR=$(atf_get_srcdir)
TESTER="${SRCDIR}/libarchive_test"
check()
{
local testcase=${1}; shift
atf_check -o ignore -s exit:0 ${TESTER} -d -r "${SRCDIR}" -v "${testcase}"
}
atf_init_test_cases()
{
# Redirect stderr to stdout for the usage message because if you don't
# kyua list/kyua test will break:
# https://github.com/jmmv/kyua/issues/149
testcases=$(${TESTER} -h 2>&1 | awk 'p != 0 && $1 ~ /^[0-9]+:/ { print $NF } /Available tests:/ { p=1 }')
for testcase in ${testcases}; do
atf_test_case ${testcase}
eval "${testcase}_body() { check ${testcase}; }"
atf_add_test_case ${testcase}
done
}

View File

@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd July 17, 1995
.Dd October 10, 2015
.Dt SHMCTL 2
.Os
.Sh NAME
@ -72,15 +72,18 @@ or it must have superuser privileges.
.It Dv IPC_RMID
Removes the segment from the system.
The removal will not take
effect until all processes having attached the segment have exited;
however, once the IPC_RMID operation has taken place, no further
processes will be allowed to attach the segment.
effect until all processes having attached the segment have exited.
For the operation
to succeed, the calling process's effective uid must match
.Fa shm_perm.uid
or
.Fa shm_perm.cuid ,
or the process must have superuser privileges.
If the
.Va kern.ipc.shm_allow_removed
.Xr sysctl 3
variable is set to 0, once the IPC_RMID operation has taken place,
no further processes will be allowed to attach the segment.
.\" .It Dv SHM_LOCK
.\" Locks the segment in memory. The calling process must have
.\" superuser privileges. Not implemented in FreeBSD.

View File

@ -7,7 +7,7 @@ DMA_SOURCES= ${.CURDIR}/../../../contrib/dma
CFLAGS= -I${DMA_SOURCES} \
-DHAVE_REALLOCF -DHAVE_STRLCPY -DHAVE_GETPROGNAME \
-DCONF_PATH='"/etc/dma"' \
-DLIBEXEC_PATH='"/usr/libexec"' -DDMA_VERSION='"v0.9+"' \
-DLIBEXEC_PATH='"/usr/libexec"' -DDMA_VERSION='"v0.10"' \
-DDMA_ROOT_USER='"mailnull"' \
-DDMA_GROUP='"mail"'
BINGRP= mail

View File

@ -17,7 +17,7 @@ SRCS= aliases_parse.y \
util.c
MAN8= dma.8
CONFS= dma.conf
CONFSDIR= ${ETCDIR}/dma
CONFSDIR= ${CONFIGDIR}/dma
YFLAGS+= -i
CLEANFILES= aliases_parse.i
FILES= mailer.conf

View File

@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd September 15, 2015
.Dd October 10, 2015
.Dt GNOP 8
.Os
.Sh NAME
@ -72,9 +72,10 @@ The
utility is used for setting up transparent providers on existing ones.
Its main purpose is testing other GEOM classes, as it allows forced provider
removal and I/O error simulation with a given probability.
It also gathers the following statistics: number of read requests, number of
write requests, number of bytes read and number of bytes written.
In addition, it can be used as a good starting point for implementing new GEOM
It also gathers statistics on the number of read, write, delete,
getattr, flush, and other requests, and the number of bytes read and written.
.Nm
can also be used as a good starting point for implementing new GEOM
classes.
.Pp
The first argument to

View File

@ -37,7 +37,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd August 6, 2015
.Dd October 10, 2015
.Dt MDCONFIG 8
.Os
.Sh NAME
@ -159,11 +159,11 @@ prefix.
Size of the memory disk.
.Ar Size
is the number of 512 byte sectors unless suffixed with a
.Cm b , k , m , g ,
.Cm b , k , m , g , t ,
or
.Cm t
.Cm p
which
denotes byte, kilobyte, megabyte, gigabyte and terabyte respectively.
denotes byte, kilobyte, megabyte, gigabyte, terabyte and petabyte respectively.
When used without the
.Fl r
option, the

View File

@ -88,8 +88,8 @@ usage(void)
fprintf(stderr, "\t\ttype = {malloc, vnode, swap}\n");
fprintf(stderr, "\t\toption = {cluster, compress, reserve}\n");
fprintf(stderr, "\t\tsize = %%d (512 byte blocks), %%db (B),\n");
fprintf(stderr, "\t\t %%dk (kB), %%dm (MB), %%dg (GB) or\n");
fprintf(stderr, "\t\t %%dt (TB)\n");
fprintf(stderr, "\t\t %%dk (kB), %%dm (MB), %%dg (GB), \n");
fprintf(stderr, "\t\t %%dt (TB), or %%dp (PB)\n");
exit(1);
}
@ -217,6 +217,9 @@ main(int argc, char **argv)
else if (*p == 't' || *p == 'T') {
mdio.md_mediasize <<= 30;
mdio.md_mediasize <<= 10;
} else if (*p == 'p' || *p == 'P') {
mdio.md_mediasize <<= 30;
mdio.md_mediasize <<= 20;
} else
errx(1, "unknown suffix on -s argument");
break;

View File

@ -52,9 +52,9 @@ device driver provides support for VirtIO Ethernet devices.
If the hypervisor advertises the appreciate features, the
.Nm
driver supports TCP/UDP checksum offload for both transmit and receive,
TCP segmentation offload (TSO), TCP large receive offload (LRO), and
hardware VLAN tag stripping/insertion features, as well as a multicast
hash filter, as well as Jumbo Frames (up to 9216 bytes), which can be
TCP segmentation offload (TSO), TCP large receive offload (LRO),
hardware VLAN tag stripping/insertion features, a multicast hash filter,
as well as Jumbo Frames (up to 9216 bytes), which can be
configured via the interface MTU setting.
Selecting an MTU larger than 1500 bytes with the
.Xr ifconfig 8

View File

@ -13,6 +13,7 @@ FILES= \
bsd.README \
bsd.arch.inc.mk \
bsd.compiler.mk \
bsd.confs.mk \
bsd.cpu.mk \
bsd.crunchgen.mk \
bsd.dep.mk \

View File

@ -22,7 +22,7 @@ all: buildconfig
${group}OWN?= ${SHAREOWN}
${group}GRP?= ${SHAREGRP}
${group}MODE?= ${CONFMODE}
${group}DIR?= ${ETCDIR}/
${group}DIR?= ${CONFIGDIR}/
STAGE_SETS+= ${group}
STAGE_DIR.${group}= ${STAGE_OBJTOP}${${group}DIR}
STAGE_SYMLINKS_DIR.${group}= ${STAGE_OBJTOP}

View File

@ -213,7 +213,7 @@ NLSGRP?= ${SHAREGRP}
NLSMODE?= ${NOBINMODE}
INCLUDEDIR?= /usr/include
ETCDIR?= /etc
CONFIGDIR?= /etc
#
# install(1) parameters.

View File

@ -99,7 +99,7 @@ static int abort_connection(struct c4iw_ep *ep);
static void peer_close_upcall(struct c4iw_ep *ep);
static void peer_abort_upcall(struct c4iw_ep *ep);
static void connect_reply_upcall(struct c4iw_ep *ep, int status);
static void connect_request_upcall(struct c4iw_ep *ep);
static int connect_request_upcall(struct c4iw_ep *ep);
static void established_upcall(struct c4iw_ep *ep);
static void process_mpa_reply(struct c4iw_ep *ep);
static void process_mpa_request(struct c4iw_ep *ep);
@ -1216,7 +1216,6 @@ static int abort_connection(struct c4iw_ep *ep)
int err;
CTR2(KTR_IW_CXGBE, "%s:abB %p", __func__, ep);
close_complete_upcall(ep, -ECONNRESET);
state_set(&ep->com, ABORTING);
abort_socket(ep);
err = close_socket(&ep->com, 0);
@ -1319,9 +1318,10 @@ static void connect_reply_upcall(struct c4iw_ep *ep, int status)
CTR2(KTR_IW_CXGBE, "%s:cruE %p", __func__, ep);
}
static void connect_request_upcall(struct c4iw_ep *ep)
static int connect_request_upcall(struct c4iw_ep *ep)
{
struct iw_cm_event event;
int ret;
CTR3(KTR_IW_CXGBE, "%s: ep %p, mpa_v1 %d", __func__, ep,
ep->tried_with_mpa_v1);
@ -1355,10 +1355,14 @@ static void connect_request_upcall(struct c4iw_ep *ep)
}
c4iw_get_ep(&ep->com);
ep->parent_ep->com.cm_id->event_handler(ep->parent_ep->com.cm_id,
ret = ep->parent_ep->com.cm_id->event_handler(ep->parent_ep->com.cm_id,
&event);
if(ret)
c4iw_put_ep(&ep->com);
set_bit(CONNREQ_UPCALL, &ep->com.history);
c4iw_put_ep(&ep->parent_ep->com);
return ret;
}
static void established_upcall(struct c4iw_ep *ep)
@ -1835,9 +1839,11 @@ process_mpa_request(struct c4iw_ep *ep)
/* drive upcall */
mutex_lock(&ep->parent_ep->com.mutex);
if (ep->parent_ep->com.state != DEAD)
connect_request_upcall(ep);
else
if (ep->parent_ep->com.state != DEAD) {
if(connect_request_upcall(ep)) {
abort_connection(ep);
}
}else
abort_connection(ep);
mutex_unlock(&ep->parent_ep->com.mutex);
}
@ -2213,7 +2219,7 @@ int c4iw_ep_disconnect(struct c4iw_ep *ep, int abrupt, gfp_t gfp)
CTR2(KTR_IW_CXGBE, "%s:ced1 %p", __func__, ep);
fatal = 1;
close_complete_upcall(ep, -EIO);
close_complete_upcall(ep, -ECONNRESET);
ep->com.state = DEAD;
}
CTR3(KTR_IW_CXGBE, "%s:ced2 %p %s", __func__, ep,

View File

@ -2527,10 +2527,8 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
if (obj->gtt_space == NULL)
return 0;
if (obj->pin_count) {
DRM_ERROR("Attempting to unbind pinned buffer\n");
if (obj->pin_count)
return -EINVAL;
}
ret = i915_gem_object_finish_gpu(obj);
if (ret == -ERESTARTSYS || ret == -EINTR)

View File

@ -48,7 +48,7 @@ __FBSDID("$FreeBSD$");
struct icee_softc {
device_t sc_dev; /* Myself */
struct sx sc_lock; /* basically a perimeter lock */
device_t sc_busdev; /* Parent bus */
struct cdev *cdev; /* user interface */
int addr;
int size; /* How big am I? */
@ -57,12 +57,6 @@ struct icee_softc {
int wr_sz; /* What's the write page size */
};
#define ICEE_LOCK(_sc) sx_xlock(&(_sc)->sc_lock)
#define ICEE_UNLOCK(_sc) sx_xunlock(&(_sc)->sc_lock)
#define ICEE_LOCK_INIT(_sc) sx_init(&_sc->sc_lock, "icee")
#define ICEE_LOCK_DESTROY(_sc) sx_destroy(&_sc->sc_lock);
#define ICEE_ASSERT_LOCKED(_sc) sx_assert(&_sc->sc_lock, SA_XLOCKED);
#define ICEE_ASSERT_UNLOCKED(_sc) sx_assert(&_sc->sc_lock, SA_UNLOCKED);
#define CDEV2SOFTC(dev) ((dev)->si_drv1)
/* cdev routines */
@ -97,6 +91,7 @@ icee_attach(device_t dev)
int dunit, err;
sc->sc_dev = dev;
sc->sc_busdev = device_get_parent(sc->sc_dev);
sc->addr = iicbus_get_addr(dev);
err = 0;
dname = device_get_name(dev);
@ -117,7 +112,6 @@ icee_attach(device_t dev)
goto out;
}
sc->cdev->si_drv1 = sc;
ICEE_LOCK_INIT(sc);
out:
return (err);
}
@ -155,7 +149,9 @@ icee_read(struct cdev *dev, struct uio *uio, int ioflag)
return (EIO);
if (sc->type != 8 && sc->type != 16)
return (EINVAL);
ICEE_LOCK(sc);
error = iicbus_request_bus(sc->sc_busdev, sc->sc_dev, IIC_INTRWAIT);
if (error!= 0)
return (iic2errno(error));
slave = error = 0;
while (uio->uio_resid > 0) {
if (uio->uio_offset >= sc->size)
@ -180,13 +176,15 @@ icee_read(struct cdev *dev, struct uio *uio, int ioflag)
for (i = 0; i < 2; i++)
msgs[i].slave = slave;
error = iicbus_transfer(sc->sc_dev, msgs, 2);
if (error)
if (error) {
error = iic2errno(error);
break;
}
error = uiomove(data, len, uio);
if (error)
break;
}
ICEE_UNLOCK(sc);
iicbus_release_bus(sc->sc_busdev, sc->sc_dev);
return (error);
}
@ -214,7 +212,10 @@ icee_write(struct cdev *dev, struct uio *uio, int ioflag)
return (EIO);
if (sc->type != 8 && sc->type != 16)
return (EINVAL);
ICEE_LOCK(sc);
error = iicbus_request_bus(sc->sc_busdev, sc->sc_dev, IIC_INTRWAIT);
if (error!= 0)
return (iic2errno(error));
slave = error = 0;
while (uio->uio_resid > 0) {
if (uio->uio_offset >= sc->size)
@ -239,18 +240,22 @@ icee_write(struct cdev *dev, struct uio *uio, int ioflag)
if (error)
break;
error = iicbus_transfer(sc->sc_dev, wr, 1);
if (error)
if (error) {
error = iic2errno(error);
break;
}
/* Read after write to wait for write-done. */
waitlimit = 10000;
rd[0].slave = slave;
do {
error = iicbus_transfer(sc->sc_dev, rd, 1);
} while (waitlimit-- > 0 && error != 0);
if (error)
if (error) {
error = iic2errno(error);
break;
}
}
ICEE_UNLOCK(sc);
iicbus_release_bus(sc->sc_busdev, sc->sc_dev);
return error;
}

View File

@ -43,6 +43,7 @@
#define IIC_NOINTR 0
#define IIC_WAIT 0x1
#define IIC_INTR 0x2
#define IIC_INTRWAIT (IIC_INTR | IIC_WAIT)
/*
* i2c modes

View File

@ -156,7 +156,7 @@ static void wpi_update_rx_ring_ps(struct wpi_softc *);
static void wpi_reset_rx_ring(struct wpi_softc *);
static void wpi_free_rx_ring(struct wpi_softc *);
static int wpi_alloc_tx_ring(struct wpi_softc *, struct wpi_tx_ring *,
int);
uint8_t);
static void wpi_update_tx_ring(struct wpi_softc *, struct wpi_tx_ring *);
static void wpi_update_tx_ring_ps(struct wpi_softc *,
struct wpi_tx_ring *);
@ -165,19 +165,18 @@ static void wpi_free_tx_ring(struct wpi_softc *, struct wpi_tx_ring *);
static int wpi_read_eeprom(struct wpi_softc *,
uint8_t macaddr[IEEE80211_ADDR_LEN]);
static uint32_t wpi_eeprom_channel_flags(struct wpi_eeprom_chan *);
static void wpi_read_eeprom_band(struct wpi_softc *, int);
static int wpi_read_eeprom_channels(struct wpi_softc *, int);
static void wpi_read_eeprom_band(struct wpi_softc *, uint8_t);
static int wpi_read_eeprom_channels(struct wpi_softc *, uint8_t);
static struct wpi_eeprom_chan *wpi_find_eeprom_channel(struct wpi_softc *,
struct ieee80211_channel *);
static int wpi_setregdomain(struct ieee80211com *,
struct ieee80211_regdomain *, int,
struct ieee80211_channel[]);
static int wpi_read_eeprom_group(struct wpi_softc *, int);
static int wpi_add_node_entry_adhoc(struct wpi_softc *);
static int wpi_read_eeprom_group(struct wpi_softc *, uint8_t);
static struct ieee80211_node *wpi_node_alloc(struct ieee80211vap *,
const uint8_t mac[IEEE80211_ADDR_LEN]);
static void wpi_node_free(struct ieee80211_node *);
static void wpi_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
static void wpi_ibss_recv_mgmt(struct ieee80211_node *, struct mbuf *, int,
const struct ieee80211_rx_stats *,
int, int);
static void wpi_restore_node(void *, struct ieee80211_node *);
@ -210,7 +209,8 @@ static void wpi_watchdog_rfkill(void *);
static void wpi_scan_timeout(void *);
static void wpi_tx_timeout(void *);
static void wpi_parent(struct ieee80211com *);
static int wpi_cmd(struct wpi_softc *, int, const void *, size_t, int);
static int wpi_cmd(struct wpi_softc *, uint8_t, const void *, uint16_t,
int);
static int wpi_mrr_setup(struct wpi_softc *);
static int wpi_add_node(struct wpi_softc *, struct ieee80211_node *);
static int wpi_add_broadcast_node(struct wpi_softc *, int);
@ -257,7 +257,8 @@ static int wpi_key_set(struct ieee80211vap *,
static int wpi_key_delete(struct ieee80211vap *,
const struct ieee80211_key *);
static int wpi_post_alive(struct wpi_softc *);
static int wpi_load_bootcode(struct wpi_softc *, const uint8_t *, int);
static int wpi_load_bootcode(struct wpi_softc *, const uint8_t *,
uint32_t);
static int wpi_load_firmware(struct wpi_softc *);
static int wpi_read_firmware(struct wpi_softc *);
static void wpi_unload_firmware(struct wpi_softc *);
@ -327,7 +328,8 @@ wpi_attach(device_t dev)
{
struct wpi_softc *sc = (struct wpi_softc *)device_get_softc(dev);
struct ieee80211com *ic;
int i, error, rid;
uint8_t i;
int error, rid;
#ifdef WPI_DEBUG
int supportsa = 1;
const struct wpi_ident *ident;
@ -387,10 +389,11 @@ wpi_attach(device_t dev)
sc->sc_st = rman_get_bustag(sc->mem);
sc->sc_sh = rman_get_bushandle(sc->mem);
i = 1;
rid = 0;
if (pci_alloc_msi(dev, &i) == 0)
rid = 1;
if (pci_alloc_msi(dev, &rid) == 0)
rid = 1;
else
rid = 0;
/* Install interrupt handler. */
sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE |
(rid != 0 ? 0 : RF_SHAREABLE));
@ -422,7 +425,7 @@ wpi_attach(device_t dev)
}
/* Allocate TX rings - 4 for QoS purposes, 1 for commands. */
for (i = 0; i < WPI_NTXQUEUES; i++) {
for (i = 0; i < WPI_DRV_NTXQUEUES; i++) {
if ((error = wpi_alloc_tx_ring(sc, &sc->txq[i], i)) != 0) {
device_printf(dev,
"could not allocate TX ring %d, error %d\n", i,
@ -637,8 +640,10 @@ wpi_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ], int unit,
/* Override with driver methods. */
vap->iv_key_set = wpi_key_set;
vap->iv_key_delete = wpi_key_delete;
wvp->wv_recv_mgmt = vap->iv_recv_mgmt;
vap->iv_recv_mgmt = wpi_recv_mgmt;
if (opmode == IEEE80211_M_IBSS) {
wvp->wv_recv_mgmt = vap->iv_recv_mgmt;
vap->iv_recv_mgmt = wpi_ibss_recv_mgmt;
}
wvp->wv_newstate = vap->iv_newstate;
vap->iv_newstate = wpi_newstate;
vap->iv_update_beacon = wpi_update_beacon;
@ -677,7 +682,7 @@ wpi_detach(device_t dev)
{
struct wpi_softc *sc = device_get_softc(dev);
struct ieee80211com *ic = &sc->sc_ic;
int qid;
uint8_t qid;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_BEGIN, __func__);
@ -708,7 +713,7 @@ wpi_detach(device_t dev)
if (sc->txq[0].data_dmat) {
/* Free DMA resources. */
for (qid = 0; qid < WPI_NTXQUEUES; qid++)
for (qid = 0; qid < WPI_DRV_NTXQUEUES; qid++)
wpi_free_tx_ring(sc, &sc->txq[qid]);
wpi_free_rx_ring(sc);
@ -828,9 +833,9 @@ wpi_prph_clrbits(struct wpi_softc *sc, uint32_t addr, uint32_t mask)
static __inline void
wpi_prph_write_region_4(struct wpi_softc *sc, uint32_t addr,
const uint32_t *data, int count)
const uint32_t *data, uint32_t count)
{
for (; count > 0; count--, data++, addr += 4)
for (; count != 0; count--, data++, addr += 4)
wpi_prph_write(sc, addr, *data);
}
@ -1088,6 +1093,7 @@ wpi_update_rx_ring_ps(struct wpi_softc *sc)
return;
}
WPI_TXQ_LOCK(sc);
WPI_SETBITS(sc, WPI_GP_CNTRL, WPI_GP_CNTRL_MAC_ACCESS_REQ);
if (WPI_READ(sc, WPI_GP_CNTRL) & WPI_GP_CNTRL_SLEEP) {
DPRINTF(sc, WPI_DEBUG_PWRSAVE, "%s: wakeup request\n",
@ -1097,6 +1103,7 @@ wpi_update_rx_ring_ps(struct wpi_softc *sc)
wpi_update_rx_ring(sc);
WPI_CLRBITS(sc, WPI_GP_CNTRL, WPI_GP_CNTRL_MAC_ACCESS_REQ);
}
WPI_TXQ_UNLOCK(sc);
}
static void
@ -1152,7 +1159,7 @@ wpi_free_rx_ring(struct wpi_softc *sc)
}
static int
wpi_alloc_tx_ring(struct wpi_softc *sc, struct wpi_tx_ring *ring, int qid)
wpi_alloc_tx_ring(struct wpi_softc *sc, struct wpi_tx_ring *ring, uint8_t qid)
{
bus_addr_t paddr;
bus_size_t size;
@ -1181,16 +1188,6 @@ wpi_alloc_tx_ring(struct wpi_softc *sc, struct wpi_tx_ring *ring, int qid)
bus_dmamap_sync(sc->shared_dma.tag, sc->shared_dma.map,
BUS_DMASYNC_PREWRITE);
/*
* We only use rings 0 through 4 (4 EDCA + cmd) so there is no need
* to allocate commands space for other rings.
* XXX Do we really need to allocate descriptors for other rings?
*/
if (qid > WPI_CMD_QUEUE_NUM) {
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END, __func__);
return 0;
}
size = WPI_TX_RING_COUNT * sizeof (struct wpi_tx_cmd);
error = wpi_dma_contig_alloc(sc, &ring->cmd_dma, (void **)&ring->cmd,
size, 4);
@ -1332,7 +1329,8 @@ wpi_read_eeprom(struct wpi_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
if ((error = res) != 0) \
goto fail; \
} while (0)
int error, i;
uint8_t i;
int error;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_BEGIN, __func__);
@ -1416,14 +1414,14 @@ wpi_eeprom_channel_flags(struct wpi_eeprom_chan *channel)
}
static void
wpi_read_eeprom_band(struct wpi_softc *sc, int n)
wpi_read_eeprom_band(struct wpi_softc *sc, uint8_t n)
{
struct ieee80211com *ic = &sc->sc_ic;
struct wpi_eeprom_chan *channels = sc->eeprom_channels[n];
const struct wpi_chan_band *band = &wpi_bands[n];
struct ieee80211_channel *c;
uint8_t chan;
int i, nflags;
uint32_t nflags;
uint8_t chan, i;
for (i = 0; i < band->nchan; i++) {
if (!(channels[i].flags & WPI_EEPROM_CHAN_VALID)) {
@ -1473,7 +1471,7 @@ wpi_read_eeprom_band(struct wpi_softc *sc, int n)
* band and update net80211 with what we find.
*/
static int
wpi_read_eeprom_channels(struct wpi_softc *sc, int n)
wpi_read_eeprom_channels(struct wpi_softc *sc, uint8_t n)
{
struct ieee80211com *ic = &sc->sc_ic;
const struct wpi_chan_band *band = &wpi_bands[n];
@ -1537,7 +1535,7 @@ wpi_setregdomain(struct ieee80211com *ic, struct ieee80211_regdomain *rd,
}
static int
wpi_read_eeprom_group(struct wpi_softc *sc, int n)
wpi_read_eeprom_group(struct wpi_softc *sc, uint8_t n)
{
struct wpi_power_group *group = &sc->groups[n];
struct wpi_eeprom_group rgroup;
@ -1575,10 +1573,10 @@ wpi_read_eeprom_group(struct wpi_softc *sc, int n)
return 0;
}
static int
static __inline uint8_t
wpi_add_node_entry_adhoc(struct wpi_softc *sc)
{
int newid = WPI_ID_IBSS_MIN;
uint8_t newid = WPI_ID_IBSS_MIN;
for (; newid <= WPI_ID_IBSS_MAX; newid++) {
if ((sc->nodesmsk & (1 << newid)) == 0) {
@ -1590,7 +1588,7 @@ wpi_add_node_entry_adhoc(struct wpi_softc *sc)
return WPI_ID_UNDEFINED;
}
static __inline int
static __inline uint8_t
wpi_add_node_entry_sta(struct wpi_softc *sc)
{
sc->nodesmsk |= 1 << WPI_ID_BSS;
@ -1660,7 +1658,7 @@ wpi_check_bss_filter(struct wpi_softc *sc)
}
static void
wpi_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, int subtype,
wpi_ibss_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, int subtype,
const struct ieee80211_rx_stats *rxs,
int rssi, int nf)
{
@ -1671,8 +1669,7 @@ wpi_recv_mgmt(struct ieee80211_node *ni, struct mbuf *m, int subtype,
wvp->wv_recv_mgmt(ni, m, subtype, rxs, rssi, nf);
if (vap->iv_opmode == IEEE80211_M_IBSS &&
vap->iv_state == IEEE80211_S_RUN &&
if (vap->iv_state == IEEE80211_S_RUN &&
(subtype == IEEE80211_FC0_SUBTYPE_BEACON ||
subtype == IEEE80211_FC0_SUBTYPE_PROBE_RESP)) {
ni_tstamp = le64toh(ni->ni_tstamp.tsf);
@ -2585,7 +2582,9 @@ wpi_cmd2(struct wpi_softc *sc, struct wpi_buf *buf)
struct wpi_tx_ring *ring;
struct mbuf *m1;
bus_dma_segment_t *seg, segs[WPI_MAX_SCATTER];
int error, i, hdrlen, nsegs, totlen, pad;
uint8_t pad;
uint16_t hdrlen;
int error, i, nsegs, totlen;
WPI_TXQ_LOCK(sc);
@ -2596,7 +2595,7 @@ wpi_cmd2(struct wpi_softc *sc, struct wpi_buf *buf)
if (__predict_false(sc->sc_running == 0)) {
/* wpi_stop() was called */
error = ENETDOWN;
goto fail;
goto end;
}
wh = mtod(buf->m, struct ieee80211_frame *);
@ -2605,7 +2604,7 @@ wpi_cmd2(struct wpi_softc *sc, struct wpi_buf *buf)
if (__predict_false(totlen < sizeof(struct ieee80211_frame_min))) {
error = EINVAL;
goto fail;
goto end;
}
if (hdrlen & 3) {
@ -2636,7 +2635,7 @@ wpi_cmd2(struct wpi_softc *sc, struct wpi_buf *buf)
if (error != 0 && error != EFBIG) {
device_printf(sc->sc_dev,
"%s: can't map mbuf (error %d)\n", __func__, error);
goto fail;
goto end;
}
if (error != 0) {
/* Too many DMA segments, linearize mbuf. */
@ -2645,17 +2644,29 @@ wpi_cmd2(struct wpi_softc *sc, struct wpi_buf *buf)
device_printf(sc->sc_dev,
"%s: could not defrag mbuf\n", __func__);
error = ENOBUFS;
goto fail;
goto end;
}
buf->m = m1;
error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map,
buf->m, segs, &nsegs, BUS_DMA_NOWAIT);
if (__predict_false(error != 0)) {
/* XXX fix this (applicable to the iwn(4) too) */
/*
* NB: Do not return error;
* original mbuf does not exist anymore.
*/
device_printf(sc->sc_dev,
"%s: can't map mbuf (error %d)\n", __func__,
error);
goto fail;
if (ring->qid < WPI_CMD_QUEUE_NUM) {
if_inc_counter(buf->ni->ni_vap->iv_ifp,
IFCOUNTER_OERRORS, 1);
ieee80211_free_node(buf->ni);
}
m_freem(buf->m);
error = 0;
goto end;
}
}
@ -2699,19 +2710,12 @@ wpi_cmd2(struct wpi_softc *sc, struct wpi_buf *buf)
WPI_TXQ_STATE_UNLOCK(sc);
}
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END, __func__);
end: DPRINTF(sc, WPI_DEBUG_TRACE, error ? TRACE_STR_END_ERR : TRACE_STR_END,
__func__);
WPI_TXQ_UNLOCK(sc);
return 0;
fail: m_freem(buf->m);
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END_ERR, __func__);
WPI_TXQ_UNLOCK(sc);
return error;
return (error);
}
/*
@ -2730,9 +2734,9 @@ wpi_tx_data(struct wpi_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
struct wpi_buf tx_data;
struct wpi_cmd_data *tx = (struct wpi_cmd_data *)&tx_data.data;
uint32_t flags;
uint16_t qos;
uint8_t tid, type;
int ac, error, swcrypt, rate, ismcast, totlen;
uint16_t ac, qos;
uint8_t tid, type, rate;
int swcrypt, ismcast, totlen;
wh = mtod(m, struct ieee80211_frame *);
type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
@ -2772,10 +2776,9 @@ wpi_tx_data(struct wpi_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
/* Retrieve key for TX. */
k = ieee80211_crypto_encap(ni, m);
if (k == NULL) {
error = ENOBUFS;
goto fail;
}
if (k == NULL)
return (ENOBUFS);
swcrypt = k->wk_flags & IEEE80211_KEY_SWCRYPT;
/* 802.11 header may have moved. */
@ -2844,8 +2847,7 @@ wpi_tx_data(struct wpi_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
if (wn->id == WPI_ID_UNDEFINED) {
device_printf(sc->sc_dev,
"%s: undefined node id\n", __func__);
error = EINVAL;
goto fail;
return (EINVAL);
}
tx->id = wn->id;
@ -2881,9 +2883,6 @@ wpi_tx_data(struct wpi_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
tx_data.ac = ac;
return wpi_cmd2(sc, &tx_data);
fail: m_freem(m);
return error;
}
static int
@ -2896,8 +2895,8 @@ wpi_tx_data_raw(struct wpi_softc *sc, struct mbuf *m,
struct wpi_buf tx_data;
struct wpi_cmd_data *tx = (struct wpi_cmd_data *)&tx_data.data;
uint32_t flags;
uint8_t type;
int ac, rate, swcrypt, totlen;
uint8_t ac, type, rate;
int swcrypt, totlen;
wh = mtod(m, struct ieee80211_frame *);
type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
@ -2924,10 +2923,9 @@ wpi_tx_data_raw(struct wpi_softc *sc, struct mbuf *m,
if (params->ibp_flags & IEEE80211_BPF_CRYPTO) {
/* Retrieve key for TX. */
k = ieee80211_crypto_encap(ni, m);
if (k == NULL) {
m_freem(m);
return ENOBUFS;
}
if (k == NULL)
return (ENOBUFS);
swcrypt = k->wk_flags & IEEE80211_KEY_SWCRYPT;
/* 802.11 header may have moved. */
@ -2991,7 +2989,7 @@ wpi_tx_data_raw(struct wpi_softc *sc, struct mbuf *m,
}
static __inline int
wpi_tx_ring_is_full(struct wpi_softc *sc, int ac)
wpi_tx_ring_is_full(struct wpi_softc *sc, uint16_t ac)
{
struct wpi_tx_ring *ring = &sc->txq[ac];
int retval;
@ -3003,21 +3001,14 @@ wpi_tx_ring_is_full(struct wpi_softc *sc, int ac)
return retval;
}
static __inline void
wpi_handle_tx_failure(struct ieee80211_node *ni)
{
/* NB: m is reclaimed on tx failure */
if_inc_counter(ni->ni_vap->iv_ifp, IFCOUNTER_OERRORS, 1);
ieee80211_free_node(ni);
}
static int
wpi_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
const struct ieee80211_bpf_params *params)
{
struct ieee80211com *ic = ni->ni_ic;
struct wpi_softc *sc = ic->ic_softc;
int ac, error = 0;
uint16_t ac;
int error = 0;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_BEGIN, __func__);
@ -3026,7 +3017,6 @@ wpi_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
WPI_TX_LOCK(sc);
if (sc->sc_running == 0 || wpi_tx_ring_is_full(sc, ac)) {
m_freem(m);
error = sc->sc_running ? ENOBUFS : ENETDOWN;
goto unlock;
}
@ -3048,7 +3038,8 @@ wpi_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
unlock: WPI_TX_UNLOCK(sc);
if (error != 0) {
wpi_handle_tx_failure(ni);
m_freem(m);
ieee80211_free_node(ni);
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END_ERR, __func__);
return error;
@ -3064,7 +3055,8 @@ wpi_transmit(struct ieee80211com *ic, struct mbuf *m)
{
struct wpi_softc *sc = ic->ic_softc;
struct ieee80211_node *ni;
int ac, error;
uint16_t ac;
int error;
WPI_TX_LOCK(sc);
DPRINTF(sc, WPI_DEBUG_XMIT, "%s: called\n", __func__);
@ -3085,7 +3077,9 @@ wpi_transmit(struct ieee80211com *ic, struct mbuf *m)
error = 0;
ni = (struct ieee80211_node *)m->m_pkthdr.rcvif;
if (wpi_tx_data(sc, m, ni) != 0) {
wpi_handle_tx_failure(ni);
if_inc_counter(ni->ni_vap->iv_ifp, IFCOUNTER_OERRORS, 1);
ieee80211_free_node(ni);
m_freem(m);
}
DPRINTF(sc, WPI_DEBUG_XMIT, "%s: done\n", __func__);
@ -3154,7 +3148,7 @@ wpi_parent(struct ieee80211com *ic)
* Send a command to the firmware.
*/
static int
wpi_cmd(struct wpi_softc *sc, int code, const void *buf, size_t size,
wpi_cmd(struct wpi_softc *sc, uint8_t code, const void *buf, uint16_t size,
int async)
{
struct wpi_tx_ring *ring = &sc->txq[WPI_CMD_QUEUE_NUM];
@ -3163,7 +3157,8 @@ wpi_cmd(struct wpi_softc *sc, int code, const void *buf, size_t size,
struct wpi_tx_cmd *cmd;
struct mbuf *m;
bus_addr_t paddr;
int totlen, error;
uint16_t totlen;
int error;
WPI_TXQ_LOCK(sc);
@ -3182,7 +3177,7 @@ wpi_cmd(struct wpi_softc *sc, int code, const void *buf, size_t size,
if (async == 0)
WPI_LOCK_ASSERT(sc);
DPRINTF(sc, WPI_DEBUG_CMD, "%s: cmd %s size %zu async %d\n",
DPRINTF(sc, WPI_DEBUG_CMD, "%s: cmd %s size %u async %d\n",
__func__, wpi_cmd_str(code), size, async);
desc = &ring->desc[ring->cur];
@ -3258,7 +3253,8 @@ wpi_mrr_setup(struct wpi_softc *sc)
{
struct ieee80211com *ic = &sc->sc_ic;
struct wpi_mrr_setup mrr;
int i, error;
uint8_t i;
int error;
/* CCK rates (not used with 802.11a). */
for (i = WPI_RIDX_CCK1; i <= WPI_RIDX_CCK11; i++) {
@ -3715,8 +3711,8 @@ wpi_set_pslevel(struct wpi_softc *sc, uint8_t dtim, int level, int async)
{
struct wpi_pmgt_cmd cmd;
const struct wpi_pmgt *pmgt;
uint32_t max, skip_dtim;
uint32_t reg;
uint32_t max, reg;
uint8_t skip_dtim;
int i;
DPRINTF(sc, WPI_DEBUG_PWRSAVE,
@ -3951,7 +3947,7 @@ wpi_limit_dwell(struct wpi_softc *sc, uint16_t dwell_time)
{
struct ieee80211com *ic = &sc->sc_ic;
struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
int bintval = 0;
uint16_t bintval = 0;
/* bintval is in TU (1.024mS) */
if (vap != NULL)
@ -4015,9 +4011,9 @@ wpi_scan(struct wpi_softc *sc, struct ieee80211_channel *c)
struct wpi_scan_chan *chan;
struct ieee80211_frame *wh;
struct ieee80211_rateset *rs;
uint16_t dwell_active, dwell_passive;
uint8_t *buf, *frm;
int bgscan, bintval, buflen, error, i, nssid;
uint16_t bintval, buflen, dwell_active, dwell_passive;
uint8_t *buf, *frm, i, nssid;
int bgscan, error;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_BEGIN, __func__);
@ -4297,6 +4293,7 @@ wpi_config_beacon(struct wpi_vap *wvp)
device_printf(sc->sc_dev,
"%s: could not update beacon frame, error %d", __func__,
error);
m_freem(bcn->m);
}
/* Restore mbuf. */
@ -4809,7 +4806,7 @@ wpi_post_alive(struct wpi_softc *sc)
* the NIC internal memory (no DMA transfer).
*/
static int
wpi_load_bootcode(struct wpi_softc *sc, const uint8_t *ucode, int size)
wpi_load_bootcode(struct wpi_softc *sc, const uint8_t *ucode, uint32_t size)
{
int error, ntries;
@ -5159,7 +5156,8 @@ wpi_nic_config(struct wpi_softc *sc)
static int
wpi_hw_init(struct wpi_softc *sc)
{
int chnl, ntries, error;
uint8_t chnl;
int ntries, error;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_BEGIN, __func__);
@ -5274,7 +5272,8 @@ wpi_hw_init(struct wpi_softc *sc)
static void
wpi_hw_stop(struct wpi_softc *sc)
{
int chnl, qid, ntries;
uint8_t chnl, qid;
int ntries;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_DOING, __func__);
@ -5313,7 +5312,7 @@ wpi_hw_stop(struct wpi_softc *sc)
wpi_reset_rx_ring(sc);
/* Reset all TX rings. */
for (qid = 0; qid < WPI_NTXQUEUES; qid++)
for (qid = 0; qid < WPI_DRV_NTXQUEUES; qid++)
wpi_reset_tx_ring(sc, &sc->txq[qid]);
if (wpi_nic_lock(sc) == 0) {

View File

@ -978,7 +978,7 @@ static const struct wpi_pmgt {
uint32_t rxtimeout;
uint32_t txtimeout;
uint32_t intval[5];
int skip_dtim;
uint8_t skip_dtim;
} wpi_pmgt[WPI_NDTIMRANGES][WPI_NPOWERLEVELS] = {
/* DTIM <= 10 */
{

View File

@ -72,10 +72,10 @@ struct wpi_tx_ring {
struct wpi_tx_cmd *cmd;
struct wpi_tx_data data[WPI_TX_RING_COUNT];
bus_dma_tag_t data_dmat;
int qid;
int queued;
int cur;
int update;
uint8_t qid;
uint8_t cur;
int16_t queued;
int update:1;
};
struct wpi_rx_data {
@ -88,7 +88,7 @@ struct wpi_rx_ring {
uint32_t *desc;
struct wpi_rx_data data[WPI_RX_RING_COUNT];
bus_dma_tag_t data_dmat;
int cur;
uint16_t cur;
int update;
};
@ -116,8 +116,8 @@ struct wpi_buf {
struct ieee80211_node *ni;
struct mbuf *m;
size_t size;
int code;
int ac;
uint8_t code;
uint16_t ac;
};
struct wpi_vap {
@ -126,7 +126,7 @@ struct wpi_vap {
struct wpi_buf wv_bcbuf;
struct mtx wv_mtx;
uint32_t wv_gtk;
uint8_t wv_gtk;
#define WPI_VAP_KEY(kid) (1 << kid)
int (*wv_newstate)(struct ieee80211vap *,
@ -176,7 +176,7 @@ struct wpi_softc {
struct wpi_dma_info shared_dma;
struct wpi_shared *shared;
struct wpi_tx_ring txq[WPI_NTXQUEUES];
struct wpi_tx_ring txq[WPI_DRV_NTXQUEUES];
struct mtx txq_mtx;
struct mtx txq_state_mtx;

View File

@ -119,6 +119,24 @@ g_nop_start(struct bio *bp)
sc->sc_wrotebytes += bp->bio_length;
failprob = sc->sc_wfailprob;
break;
case BIO_DELETE:
sc->sc_deletes++;
break;
case BIO_GETATTR:
sc->sc_getattrs++;
break;
case BIO_FLUSH:
sc->sc_flushes++;
break;
case BIO_CMD0:
sc->sc_cmd0s++;
break;
case BIO_CMD1:
sc->sc_cmd1s++;
break;
case BIO_CMD2:
sc->sc_cmd2s++;
break;
}
mtx_unlock(&sc->sc_lock);
if (failprob > 0) {
@ -238,6 +256,12 @@ g_nop_create(struct gctl_req *req, struct g_class *mp, struct g_provider *pp,
sc->sc_wfailprob = wfailprob;
sc->sc_reads = 0;
sc->sc_writes = 0;
sc->sc_deletes = 0;
sc->sc_getattrs = 0;
sc->sc_flushes = 0;
sc->sc_cmd0s = 0;
sc->sc_cmd1s = 0;
sc->sc_cmd2s = 0;
sc->sc_readbytes = 0;
sc->sc_wrotebytes = 0;
mtx_init(&sc->sc_lock, "gnop lock", NULL, MTX_DEF);
@ -602,6 +626,12 @@ g_nop_ctl_reset(struct gctl_req *req, struct g_class *mp)
sc = pp->geom->softc;
sc->sc_reads = 0;
sc->sc_writes = 0;
sc->sc_deletes = 0;
sc->sc_getattrs = 0;
sc->sc_flushes = 0;
sc->sc_cmd0s = 0;
sc->sc_cmd1s = 0;
sc->sc_cmd2s = 0;
sc->sc_readbytes = 0;
sc->sc_wrotebytes = 0;
}
@ -659,6 +689,12 @@ g_nop_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp,
sbuf_printf(sb, "%s<Error>%d</Error>\n", indent, sc->sc_error);
sbuf_printf(sb, "%s<Reads>%ju</Reads>\n", indent, sc->sc_reads);
sbuf_printf(sb, "%s<Writes>%ju</Writes>\n", indent, sc->sc_writes);
sbuf_printf(sb, "%s<Deletes>%ju</Deletes>\n", indent, sc->sc_deletes);
sbuf_printf(sb, "%s<Getattrs>%ju</Getattrs>\n", indent, sc->sc_getattrs);
sbuf_printf(sb, "%s<Flushes>%ju</Flushes>\n", indent, sc->sc_flushes);
sbuf_printf(sb, "%s<Cmd0s>%ju</Cmd0s>\n", indent, sc->sc_cmd0s);
sbuf_printf(sb, "%s<Cmd1s>%ju</Cmd1s>\n", indent, sc->sc_cmd1s);
sbuf_printf(sb, "%s<Cmd2s>%ju</Cmd2s>\n", indent, sc->sc_cmd2s);
sbuf_printf(sb, "%s<ReadBytes>%ju</ReadBytes>\n", indent,
sc->sc_readbytes);
sbuf_printf(sb, "%s<WroteBytes>%ju</WroteBytes>\n", indent,

View File

@ -65,6 +65,12 @@ struct g_nop_softc {
u_int sc_wfailprob;
uintmax_t sc_reads;
uintmax_t sc_writes;
uintmax_t sc_deletes;
uintmax_t sc_getattrs;
uintmax_t sc_flushes;
uintmax_t sc_cmd0s;
uintmax_t sc_cmd1s;
uintmax_t sc_cmd2s;
uintmax_t sc_readbytes;
uintmax_t sc_wrotebytes;
struct mtx sc_lock;

View File

@ -158,16 +158,12 @@ module_register(const moduledata_t *data, linker_file_t container)
newmod = module_lookupbyname(data->name);
if (newmod != NULL) {
MOD_XUNLOCK;
printf("module_register: module %s already exists!\n",
data->name);
printf("%s: cannot register %s from %s; already loaded from %s\n",
__func__, data->name, container->filename, newmod->file->filename);
return (EEXIST);
}
namelen = strlen(data->name) + 1;
newmod = malloc(sizeof(struct module) + namelen, M_MODULE, M_WAITOK);
if (newmod == NULL) {
MOD_XUNLOCK;
return (ENOMEM);
}
newmod->refs = 1;
newmod->id = nextid++;
newmod->name = (char *)(newmod + 1);

View File

@ -162,7 +162,7 @@ struct shminfo shminfo = {
};
static int shm_use_phys;
static int shm_allow_removed;
static int shm_allow_removed = 1;
SYSCTL_ULONG(_kern_ipc, OID_AUTO, shmmax, CTLFLAG_RWTUN, &shminfo.shmmax, 0,
"Maximum shared memory segment size");

View File

@ -127,6 +127,17 @@ hint.ath.0.eepromsize=16384
#
# bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),6336k(rootfs),1408k(uImage),8256k(mib0),64k(ART)
# The default flash layout isn't enough to fit a freebsd kernel
# now, so the layout has been shuffled around.
#
# By default it's set to:
# 256KB uboot, 64KB uboot-env, 6336KB rootfs, 1344KB kernel, 64KB cfg, 8256MB mib0, 64KB ART
# With 'bootcmd=bootm 0x9f680000' in the environment.
#
# Instead, now let's make it:
# 256KB uboot, 64KB uboot-env, 2048MB kernel, 6144MB rootfs, 7644KB mib0, 64KB cfg, 64KB ART
# .. and then you change the boot env to be:
# 'bootcmd=bootm 0x9f050000'
# 256KiB u-boot
hint.map.0.at="flash/spi0"
@ -142,37 +153,37 @@ hint.map.1.end=0x00050000 # 64k u-boot-env
hint.map.1.name="u-boot-env"
hint.map.1.readonly=1
# 6336KiB rootfs
# 2048KiB kernel
hint.map.2.at="flash/spi0"
hint.map.2.start=0x00050000
hint.map.2.end=0x00680000 # 6336k rootfs
hint.map.2.name="rootfs"
hint.map.2.end=0x00250000 # 2048k rootfs
hint.map.2.name="kernel"
hint.map.2.readonly=1
# 1344KiB uImage
# 6144KiB rootfs
hint.map.3.at="flash/spi0"
hint.map.3.start=0x00680000
hint.map.3.end=0x007d0000 # 1408k uImage, 64k off the end..
hint.map.3.name="uImage"
hint.map.3.start=0x00250000
hint.map.3.end=0x00850000
hint.map.3.name="rootfs"
hint.map.3.readonly=1
# 64KiB cfg
# 7644KiB mib0
hint.map.4.at="flash/spi0"
hint.map.4.start=0x007d0000
hint.map.4.end=0x007e0000
hint.map.4.name="cfg"
hint.map.4.start=0x00850000
hint.map.4.end=0x00fe0000
hint.map.4.name="mib0"
hint.map.4.readonly=0
# 8256 KiB mib0
# 64KiB cfg
hint.map.5.at="flash/spi0"
hint.map.5.start=0x007e0000
hint.map.5.end=0x00ff0000 # 64k mib0
hint.map.5.name="mib0"
hint.map.5.readonly=1
hint.map.5.start=0x00fe0000
hint.map.5.end=0x00ff0000
hint.map.5.name="cfg"
hint.map.5.readonly=0
# 64KiB ART
hint.map.6.at="flash/spi0"
hint.map.6.start=0x007f0000
hint.map.6.start=0x00ff0000
hint.map.6.end=0x01000000 # 64k ART
hint.map.6.name="ART"
hint.map.6.readonly=1

View File

@ -50,16 +50,6 @@ device geom_uncompress
# Used for the static uboot partition map
device geom_map
# Boot off of the rootfs, as defined in the geom_map setup.
# Probably, this should be a USB device as the memory available
# compressed rootfs is simply too small for FreeBSD
#options ROOTDEVNAME=\"ufs:map/rootfs.uncompress\"
# Boot off of a uboot tftp ramdisk kernel image. Because the flash
# on this unit is so small, this is the only way to do dev work.
# For full deployment, you will *have* to use a usb storage device
# as a rootfs and use the flash to hold the kernel only.
options MD_ROOT # md device usable as a potential root device
options MD_ROOT_SIZE=10240
#makeoptions MFS_IMAGE=/tftpboot/mfsroot-tl-mr3020.img.ulzma
options ROOTDEVNAME=\"ufs:md0.uncompress\"
# With only 4MB of flash, we are stuck using USB
# for the rootfs.
options ROOTDEVNAME=\"ufs:da0\"

View File

@ -34,8 +34,10 @@ hint.arge.1.fduplex=1
# Where the ART is - last 64k in the flash
# 0x9fff1000 ?
hint.ath.0.eepromaddr=0x1fff0000
hint.ath.0.eepromaddr=0x1fff1000
hint.ath.0.eepromsize=16384
hint.ar71xx.0.eeprom_mac_addr=0x1f01fc00
# The board 16MiB flash layout in uboot env:
#

View File

@ -1,114 +0,0 @@
# $FreeBSD$
LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
ATF_TESTS_SH+= functional_test
PROGS+= bsdcpio_test
BINDIR= ${TESTSDIR}
.PATH: ${LIBARCHIVEDIR}/cpio
CPIO_SRCS= cmdline.c
.PATH: ${LIBARCHIVEDIR}/libarchive_fe
CPIO_SRCS+= err.c
.PATH: ${LIBARCHIVEDIR}/cpio/test
TESTS_SRCS= \
test_0.c \
test_basic.c \
test_cmdline.c \
test_extract_cpio_Z.c \
test_extract_cpio_bz2.c \
test_extract_cpio_grz.c \
test_extract_cpio_gz.c \
test_extract_cpio_lrz.c \
test_extract_cpio_lz.c \
test_extract_cpio_lzma.c \
test_extract_cpio_lzo.c \
test_extract_cpio_xz.c \
test_format_newc.c \
test_gcpio_compat.c \
test_option_0.c \
test_option_B_upper.c \
test_option_C_upper.c \
test_option_J_upper.c \
test_option_L_upper.c \
test_option_Z_upper.c \
test_option_a.c \
test_option_b64encode.c \
test_option_c.c \
test_option_d.c \
test_option_f.c \
test_option_grzip.c \
test_option_help.c \
test_option_l.c \
test_option_lrzip.c \
test_option_lzma.c \
test_option_lzop.c \
test_option_m.c \
test_option_t.c \
test_option_u.c \
test_option_uuencode.c \
test_option_version.c \
test_option_xz.c \
test_option_y.c \
test_option_z.c \
test_owner_parse.c \
test_passthrough_dotdot.c \
test_passthrough_reverse.c
# Build the test program
SRCS.bsdcpio_test= list.h \
${CPIO_SRCS} \
${TESTS_SRCS} \
main.c
.PATH: ${LIBARCHIVEDIR}/test_utils
SRCS.bsdcpio_test+= test_utils.c
CLEANFILES+= list.h
CFLAGS+= -DPLATFORM_CONFIG_H=\"${SRCTOP}/lib/libarchive/config_freebsd.h\"
CFLAGS+= -I${SRCTOP}/lib/libarchive -I${.OBJDIR}
LIBADD= archive
DEBUG_FLAGS+= -g
CFLAGS+= -I${.OBJDIR}
CFLAGS+= -I${LIBARCHIVEDIR}/cpio -I${LIBARCHIVEDIR}/libarchive_fe
CFLAGS+= -I${LIBARCHIVEDIR}/test_utils
# Uncomment to link against dmalloc
#LDADD+= -L/usr/local/lib -ldmalloc
#CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
list.h: ${TESTS_SRCS} Makefile
@(cd ${LIBARCHIVEDIR}/tar/test && \
grep -h DEFINE_TEST ${.ALLSRC:N*Makefile}) > ${.TARGET}.tmp
@mv ${.TARGET}.tmp ${.TARGET}
FILES+= test_extract.cpio.Z.uu
FILES+= test_extract.cpio.bz2.uu
FILES+= test_extract.cpio.grz.uu
FILES+= test_extract.cpio.gz.uu
FILES+= test_extract.cpio.lrz.uu
FILES+= test_extract.cpio.lz.uu
FILES+= test_extract.cpio.lzma.uu
FILES+= test_extract.cpio.lzo.uu
FILES+= test_extract.cpio.xz.uu
FILES+= test_gcpio_compat_ref.bin.uu
FILES+= test_gcpio_compat_ref.crc.uu
FILES+= test_gcpio_compat_ref.newc.uu
FILES+= test_gcpio_compat_ref.ustar.uu
FILES+= test_gcpio_compat_ref_nosym.bin.uu
FILES+= test_gcpio_compat_ref_nosym.crc.uu
FILES+= test_gcpio_compat_ref_nosym.newc.uu
FILES+= test_gcpio_compat_ref_nosym.ustar.uu
FILES+= test_option_f.cpio.uu
FILES+= test_option_m.cpio.uu
FILES+= test_option_t.cpio.uu
FILES+= test_option_t.stdout.uu
FILES+= test_option_tv.stdout.uu
.include <bsd.test.mk>

View File

@ -1,56 +0,0 @@
#
# Copyright 2015 EMC Corp.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $FreeBSD$
SRCDIR=$(atf_get_srcdir)
TESTER="${SRCDIR}/bsdcpio_test"
export BSDCPIO=$(which cpio)
check()
{
local testcase=${1}; shift
# For some odd reason /bin/sh spuriously writes
# "write error on stdout" with some of the testcases
#
# Probably an issue with how they're written as it calls system(3) to
# clean up directories..
atf_check -e ignore -o ignore -s exit:0 ${TESTER} -d -r "${SRCDIR}" -v "${testcase}"
}
atf_init_test_cases()
{
# Redirect stderr to stdout for the usage message because if you don't
# kyua list/kyua test will break:
# https://github.com/jmmv/kyua/issues/149
testcases=$(${TESTER} -h 2>&1 | awk 'p != 0 && $1 ~ /^[0-9]+:/ { print $NF } /Available tests:/ { p=1 }')
for testcase in ${testcases}; do
atf_test_case ${testcase}
eval "${testcase}_body() { check ${testcase}; }"
atf_add_test_case ${testcase}
done
}

View File

@ -1,115 +0,0 @@
# $FreeBSD$
LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
ATF_TESTS_SH+= functional_test
BINDIR= ${TESTSDIR}
PROGS+= bsdtar_test
.PATH: ${LIBARCHIVEDIR}/tar/test
TESTS_SRCS= \
test_0.c \
test_basic.c \
test_copy.c \
test_empty_mtree.c \
test_extract_tar_bz2.c \
test_extract_tar_grz.c \
test_extract_tar_gz.c \
test_extract_tar_lrz.c \
test_extract_tar_lz.c \
test_extract_tar_lzma.c \
test_extract_tar_lzo.c \
test_extract_tar_xz.c \
test_format_newc.c \
test_help.c \
test_option_C_upper.c \
test_option_H_upper.c \
test_option_L_upper.c \
test_option_O_upper.c \
test_option_T_upper.c \
test_option_U_upper.c \
test_option_X_upper.c \
test_option_a.c \
test_option_b.c \
test_option_b64encode.c \
test_option_exclude.c \
test_option_gid_gname.c \
test_option_grzip.c \
test_option_j.c \
test_option_k.c \
test_option_keep_newer_files.c \
test_option_lrzip.c \
test_option_lzma.c \
test_option_lzop.c \
test_option_n.c \
test_option_newer_than.c \
test_option_nodump.c \
test_option_older_than.c \
test_option_q.c \
test_option_r.c \
test_option_s.c \
test_option_uid_uname.c \
test_option_uuencode.c \
test_option_xz.c \
test_option_z.c \
test_patterns.c \
test_print_longpath.c \
test_stdio.c \
test_strip_components.c \
test_symlink_dir.c \
test_version.c
# Build the test program
SRCS.bsdtar_test= \
${TESTS_SRCS} \
list.h \
main.c
BROKEN_TESTS=
DPSRCS.bsdtar_test+= list.h
.PATH: ${LIBARCHIVEDIR}/test_utils
SRCS.bsdtar_test+= test_utils.c
CLEANFILES+= list.h
LIBADD+= archive
DEBUG_FLAGS+= -g
CFLAGS+= -DPLATFORM_CONFIG_H=\"${SRCTOP}/lib/libarchive/config_freebsd.h\"
CFLAGS+= -static -Wall
CFLAGS+= -I${SRCTOP}/lib/libarchive -I${.OBJDIR}
CFLAGS+= -I${LIBARCHIVEDIR}/tar -I${LIBARCHIVEDIR}/test_utils
# Uncomment to link against dmalloc
#LDADD+= -L/usr/local/lib -ldmalloc
#CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
list.h: ${TESTS_SRCS} Makefile
@(cd ${LIBARCHIVEDIR}/tar/test && \
grep -h DEFINE_TEST ${.ALLSRC:N*Makefile}) > ${.TARGET}.tmp
@mv ${.TARGET}.tmp ${.TARGET}
CLEANFILES+= list.h list.h.tmp
FILES+= test_extract.tar.Z.uu
FILES+= test_extract.tar.bz2.uu
FILES+= test_extract.tar.grz.uu
FILES+= test_extract.tar.gz.uu
FILES+= test_extract.tar.lrz.uu
FILES+= test_extract.tar.lz.uu
FILES+= test_extract.tar.lzma.uu
FILES+= test_extract.tar.lzo.uu
FILES+= test_extract.tar.xz.uu
FILES+= test_option_keep_newer_files.tar.Z.uu
FILES+= test_option_s.tar.Z.uu
FILES+= test_patterns_2.tar.uu
FILES+= test_patterns_3.tar.uu
FILES+= test_patterns_4.tar.uu
FILES+= test_print_longpath.tar.Z.uu
.include <bsd.test.mk>

View File

@ -1,51 +0,0 @@
#
# Copyright 2015 EMC Corp.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# $FreeBSD$
export BSDTAR=$(which tar)
SRCDIR=$(atf_get_srcdir)
TESTER="${SRCDIR}/bsdtar_test"
check()
{
local testcase=${1}; shift
atf_check -o ignore -s exit:0 ${TESTER} -d -r "${SRCDIR}" -v "${testcase}"
}
atf_init_test_cases()
{
# Redirect stderr to stdout for the usage message because if you don't
# kyua list/kyua test will break:
# https://github.com/jmmv/kyua/issues/149
testcases=$(${TESTER} -h 2>&1 | awk 'p != 0 && $1 ~ /^[0-9]+:/ { print $NF } /Available tests:/ { p=1 }')
for testcase in ${testcases}; do
atf_test_case ${testcase}
eval "${testcase}_body() { check ${testcase}; }"
atf_add_test_case ${testcase}
done
}

View File

@ -22,7 +22,7 @@ PPP_NO_RADIUS=
PPP_NO_SUID=
.endif
CONFS= ppp.conf
CONFSDIR= ${ETCDIR}/ppp
CONFSDIR= ${CONFIGDIR}/ppp
CONFSMODE= 600
.if ${MK_ATM} == "no"