]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Redo MFC @ r289134
authorngie <ngie@FreeBSD.org>
Sun, 11 Oct 2015 08:28:36 +0000 (08:28 +0000)
committerngie <ngie@FreeBSD.org>
Sun, 11 Oct 2015 08:28:36 +0000 (08:28 +0000)
64 files changed:
Makefile.inc1
contrib/dma/BSDmakefile [deleted file]
contrib/dma/LICENSE
contrib/dma/README.markdown
contrib/dma/TODO
contrib/dma/VERSION
contrib/dma/aliases_parse.y
contrib/dma/aliases_scan.l
contrib/dma/conf.c
contrib/dma/debian/NEWS [deleted file]
contrib/dma/debian/README.Debian [deleted file]
contrib/dma/debian/changelog [deleted file]
contrib/dma/debian/compat [deleted file]
contrib/dma/debian/control [deleted file]
contrib/dma/debian/copyright [deleted file]
contrib/dma/debian/dma-migrate.dirs [deleted file]
contrib/dma/debian/dma-migrate.install [deleted file]
contrib/dma/debian/dma-migrate.manpages [deleted file]
contrib/dma/debian/dma.dirs [deleted file]
contrib/dma/debian/dma.links [deleted file]
contrib/dma/debian/dma.lintian-overrides [deleted file]
contrib/dma/debian/migrate/Makefile [deleted file]
contrib/dma/debian/migrate/NEWS [deleted file]
contrib/dma/debian/migrate/dma-migrate.8 [deleted file]
contrib/dma/debian/migrate/dma-migrate.c [deleted file]
contrib/dma/debian/rules [deleted file]
contrib/dma/debian/source/format [deleted file]
contrib/dma/debian/source/options [deleted file]
contrib/dma/dma-mbox-create.c
contrib/dma/dma.8
contrib/dma/dma.c
contrib/dma/dma.h
contrib/dma/dns.c
contrib/dma/get-version.sh
contrib/dma/local.c
contrib/dma/mail.c
contrib/dma/net.c
contrib/dma/spool.c
contrib/dma/util.c
lib/libc/sys/shmctl.2
libexec/dma/Makefile.inc
libexec/dma/dmagent/Makefile
sbin/geom/class/nop/gnop.8
sbin/mdconfig/mdconfig.8
sbin/mdconfig/mdconfig.c
share/man/man4/vtnet.4
share/mk/Makefile
share/mk/bsd.confs.mk
share/mk/bsd.own.mk
sys/dev/cxgbe/iw_cxgbe/cm.c
sys/dev/drm2/i915/i915_gem.c
sys/dev/iicbus/icee.c
sys/dev/iicbus/iiconf.h
sys/dev/wpi/if_wpi.c
sys/dev/wpi/if_wpireg.h
sys/dev/wpi/if_wpivar.h
sys/geom/nop/g_nop.c
sys/geom/nop/g_nop.h
sys/kern/kern_module.c
sys/kern/sysv_shm.c
sys/mips/conf/AP135.hints
sys/mips/conf/TP-MR3020
sys/mips/conf/TP-MR3020.hints
usr.sbin/ppp/Makefile

index d4e24e4b5d37a7b5dad62d922360746da490c24e..9332b300e06065bbeab64d0bbf2ee1767342b49b 100644 (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
diff --git a/contrib/dma/BSDmakefile b/contrib/dma/BSDmakefile
deleted file mode 100644 (file)
index af3a0ac..0000000
+++ /dev/null
@@ -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>
index b89e5bcd16f366f1c9f4129914d7e274362f1a43..277b3e4e8be34cc8f3a0bfe170d70803e9832c49 100644 (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.
 
index 13ff20c9aa417308ad607e217372164b06550a98..3e043de33df9ed8000efd26aa3fb6453c98f64c4 100644 (file)
@@ -15,8 +15,13 @@ incoming connections.
 Building
 --------
 
+In Linux:
+
        make
 
+In BSD:
+
+       cd bsd && make
 
 Installation
 ------------
index 01de465d66af19078b40534820d1d2e34de2f92b..e70814cf61272f11abc4a8646646d48c0d527401 100644 (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
index 490a0cdcc1398290263f20f9f3eb38febaccf23b..9097bf9dbe5f4b742b02c05b9146c9afc3b7c01a 100644 (file)
@@ -1 +1 @@
-v0.9
+v0.10
index a5a9e7b32f071aa0ca3026938296dea8f8847ef8..46728e6f205dd3db4b79fcd2b87ee4765d62794c 100644 (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)
index 809d1e1687310515b4f91cbb06b8a2dbe9017eb7..8130c3e43098dc6a3ba7c444234764d96c9e6a64 100644 (file)
@@ -1,11 +1,11 @@
 %{
 
 #include <string.h>
+#include "dma.h"
 #include "aliases_parse.h"
 
 #define YY_NO_INPUT
 
-int yylex(void);
 %}
 
 %option yylineno
index 86d72f7bf9064908472b4c4092d52e7f75c60099..3e3c7d3d8bd2af783d196ee850451bcb2f5f09df 100644 (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 */
        }
 
diff --git a/contrib/dma/debian/NEWS b/contrib/dma/debian/NEWS
deleted file mode 100644 (file)
index 36ed11a..0000000
+++ /dev/null
@@ -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
-
diff --git a/contrib/dma/debian/README.Debian b/contrib/dma/debian/README.Debian
deleted file mode 100644 (file)
index 564aaa7..0000000
+++ /dev/null
@@ -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
diff --git a/contrib/dma/debian/changelog b/contrib/dma/debian/changelog
deleted file mode 100644 (file)
index 4d55300..0000000
+++ /dev/null
@@ -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
diff --git a/contrib/dma/debian/compat b/contrib/dma/debian/compat
deleted file mode 100644 (file)
index 7f8f011..0000000
+++ /dev/null
@@ -1 +0,0 @@
-7
diff --git a/contrib/dma/debian/control b/contrib/dma/debian/control
deleted file mode 100644 (file)
index 6eeea08..0000000
+++ /dev/null
@@ -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.
diff --git a/contrib/dma/debian/copyright b/contrib/dma/debian/copyright
deleted file mode 100644 (file)
index 4ad8fbb..0000000
+++ /dev/null
@@ -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.
diff --git a/contrib/dma/debian/dma-migrate.dirs b/contrib/dma/debian/dma-migrate.dirs
deleted file mode 100644 (file)
index b174b44..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/sbin
-usr/share/man/man8
diff --git a/contrib/dma/debian/dma-migrate.install b/contrib/dma/debian/dma-migrate.install
deleted file mode 100644 (file)
index 1c35b0a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-debian/migrate/dma-migrate usr/sbin
diff --git a/contrib/dma/debian/dma-migrate.manpages b/contrib/dma/debian/dma-migrate.manpages
deleted file mode 100644 (file)
index 3629dbe..0000000
+++ /dev/null
@@ -1 +0,0 @@
-debian/migrate/dma-migrate.8
diff --git a/contrib/dma/debian/dma.dirs b/contrib/dma/debian/dma.dirs
deleted file mode 100644 (file)
index f10c005..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-etc/dma
-usr/sbin
-usr/share/lintian/overrides
-usr/share/man/man8
diff --git a/contrib/dma/debian/dma.links b/contrib/dma/debian/dma.links
deleted file mode 100644 (file)
index d9ac22a..0000000
+++ /dev/null
@@ -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
diff --git a/contrib/dma/debian/dma.lintian-overrides b/contrib/dma/debian/dma.lintian-overrides
deleted file mode 100644 (file)
index 03f5d6e..0000000
+++ /dev/null
@@ -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
diff --git a/contrib/dma/debian/migrate/Makefile b/contrib/dma/debian/migrate/Makefile
deleted file mode 100644 (file)
index cc7d347..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-all:   dma-migrate
-
-clean:
-       rm -f dma-migrate dma-migrate.o
diff --git a/contrib/dma/debian/migrate/NEWS b/contrib/dma/debian/migrate/NEWS
deleted file mode 100644 (file)
index 29dca0d..0000000
+++ /dev/null
@@ -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>
diff --git a/contrib/dma/debian/migrate/dma-migrate.8 b/contrib/dma/debian/migrate/dma-migrate.8
deleted file mode 100644 (file)
index e40acef..0000000
+++ /dev/null
@@ -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
diff --git a/contrib/dma/debian/migrate/dma-migrate.c b/contrib/dma/debian/migrate/dma-migrate.c
deleted file mode 100644 (file)
index 56bfa2a..0000000
+++ /dev/null
@@ -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
-}
diff --git a/contrib/dma/debian/rules b/contrib/dma/debian/rules
deleted file mode 100755 (executable)
index 461a0a8..0000000
+++ /dev/null
@@ -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 $@
diff --git a/contrib/dma/debian/source/format b/contrib/dma/debian/source/format
deleted file mode 100644 (file)
index 89ae9db..0000000
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (native)
diff --git a/contrib/dma/debian/source/options b/contrib/dma/debian/source/options
deleted file mode 100644 (file)
index 779dbfd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-compression = "bzip2"
-compression-level = 9
index c84652b74d47afa6347b6a53a5bbc965d60a00ba..532a7afbe0b53b43bf23515b4de8deec66ed367e 100644 (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 */
 
index 5d786c6be2caf9b1bc02ce524ea7ca0e8ae205fe..76ab174fe590061454e91454bcc09816460f8412 100644 (file)
@@ -1,4 +1,5 @@
 .\"
+.\" Copyright (c) 2008-2014, Simon Schubert <2@0x2c.org>.
 .\" Copyright (c) 2008
 .\"    The DragonFly Project.  All rights reserved.
 .\"
index a3a62c9bac407d2860374a14d3dfa9661327ca55..0d1dba2af32de9be8f0be1f1ea953b595b38e109 100644 (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 @@ retit:
                                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 @@ retit:
        }
 
        syslog(LOG_CRIT, "reached dead code");
-       exit(1);
+       exit(EX_SOFTWARE);
 }
 
 static void
@@ -331,12 +332,12 @@ retry:
        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 @@ skipopts:
 
        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 @@ skipopts:
        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. */
 
index 4ce00944a5ee1b22972a0292806bd51e912a003b..acf5e44d07bcced8faf1420a05304323b4986fab 100644 (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 */
index fc5213f1ca605600baa07ebcc9b0281671b133fd..dd9ebfca8d8298bb9566c585a4f40d04283d8e6c 100644 (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)) {
index aecc3331f446311d8bac4993c1618d3e638a6f30..d9691ac37c95f5c6775a0a9e48578d2989dd42c3 100755 (executable)
@@ -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}
index 6a6407ef86527fd83c3273e77ee039acaf888a5d..e3e015217feac05493b5dc30f530a82c3905f366 100644 (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 */
index f899d4b1af2ea8a9cef3d557a1aeb3b0afff28b2..a6d11fcae685a9dd1440fd4782de4a5628826cee 100644 (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 @@ newaddr:
        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 */
                                }
                        }
index d95a7884b87e336f72077b64b8b1336d8c170ddc..26935a8feec8306bf6b5f7be7daa563e0c9cabd6 100644 (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
index 2864909cf6a67316e412be13057a624f99798416..d71332b7d7f90c81989e7bea100800235f802bf4 100644 (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;
index a139b20d383166db75fd48f722f506509942f96f..d528f313d091769b17582f8d46704165c10dcaea 100644 (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
index 98ddf13e8ec44f7bd34af1afe7ec89da2c202bc5..788e79f1900d4128eee4268acd0955db2eb066b9 100644 (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.
index cdc9cea2bfaec92e7dcb8a04243d68fd14930f73..e9a0d0a1c614878ab4dffd33f51f2d307d85afbd 100644 (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
index 6a45a8d598b2f88e75ebeba46966d2caaf826e43..6ce13c03c4a063faa5f10987e2a67017760bb347 100644 (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
index c83c2f56ba1f1e0f068ee2a7d9a0845d85098da6..fc7732db15647103b977d6f3b0c2449676be6fce 100644 (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
index 6818d7bb951349507be9a894123ec72e2eebba7a..d5000cf1903a62d1e8796ad29ecf407585ad751b 100644 (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
index d741c7770cfc902e5bceb24bc6e3884d1316333c..1b4e4ce2fa4007e626f1d0cc8644227d9d175b09 100644 (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;
index 8825049ad6a75538ac6982549ee5cb5cecc0730f..0e733e5d86ba56dc7e12b4d4c18083d3d88dec08 100644 (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
index eaa8e0f82867afb35994e32a31a37d381e4086c1..a3560b92ff5ccdc75bdaf52cdc5364dd960d22eb 100644 (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 \
index a65410c0346a52ca539a663371958ae46a3add77..4e219e828bcfb521139265abb685e86d116fca16 100644 (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}
index 450db08448622f535bf5ca6a15086a373d29e040..53fd073a44ba86ab5cf81c2635b7c5c6c9003338 100644 (file)
@@ -213,7 +213,7 @@ NLSGRP?=    ${SHAREGRP}
 NLSMODE?=      ${NOBINMODE}
 
 INCLUDEDIR?=   /usr/include
-ETCDIR?=       /etc
+CONFIGDIR?=    /etc
 
 #
 # install(1) parameters.
index b665289d7473ee65dce5cc2df068f267bf5fb7d0..71f54879adde7b6500b94059091ae901f58339dd 100644 (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 @@ abort:
 
        /* 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,
index 3a59623bf6ec5a0e1cf42a90035258ea56da8cc9..07b516c07ed48cd8c662e9ef3076a370a2d12763 100644 (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)
index bb06aa36e11024d55d13a3e6c5038e3581710f2a..800ec4c6dff720299c1e2e66dbb62a589770dce3 100644 (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;
 }
 
index 462165682a859aa27a46d6a3b603df8366bc73be..aca0137d7ea09f76e1727531269b4169fc583192 100644 (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
index a36c2ed404e23086ec11c5eec55accbe38d88493..dfd6424c71097b7c0bd69262ee7dd6f8d38ebe82 100644 (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__);
-
-       WPI_TXQ_UNLOCK(sc);
-
-       return 0;
-
-fail:  m_freem(buf->m);
-
-       DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_END_ERR, __func__);
+end:   DPRINTF(sc, WPI_DEBUG_TRACE, error ? TRACE_STR_END_ERR : TRACE_STR_END,
+           __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) {
index b0aa35c992d541a91aa0d07404904bf9ac9e5d84..f36dd2512473dfa2dc9ea4a4ed9621d976e6e937 100644 (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 */
        {
index 80195b59d16c410f7a124756a7631b4005270523..fb566b50945b082accd4fc29bc2ebe261748f4c3 100644 (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;
 
index 837f3f4e3394514af6717ae1dc32404100ee97c1..f36472dc6450e14b1c4217ac3e7395111004b2c1 100644 (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,
index b5e954ad6337dc63e2a915e94d261f6fdbdbe071..beba43e50ae5984f448400a0b2949381ff4d0e0c 100644 (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;
index b7693203283ac139bc3114f12814636e560a2eb1..479345e43f74c6bb3e47129653a50281cb6407b2 100644 (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);
index 3d5dd11a2edbf8f199d6e4fd6f337cbfdcc78b4b..b426f4561ef152ae04540f8eae625357432bd1b8 100644 (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");
index 3db44d0193585fe6408f906c1d2c872c0757bcea..ec7761e849db9081c3287b70aa69f00c4015b485 100644 (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
index f0ecb4be017a817518ba0551370ced9c6320f7df..a19f41bcb0708b8273763742943a589a194777ca 100644 (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\"
index dfabb42c14d3624df494637a34ce3f69e3cd6bbf..e346a22ef3e05e1a24cf4be94393e73f03f925eb 100644 (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:
 #
index 6a3d8f2d1591f8de33f521689d5c09b6982c3a0a..8bd11534a3b4c3dfa191bc93e48242cce37a4973 100644 (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"