]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
Merge remote-tracking branch 'mfischer/dhcpcd' into next
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 16 Mar 2015 16:53:23 +0000 (17:53 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 16 Mar 2015 16:53:23 +0000 (17:53 +0100)
271 files changed:
config/backup/backup.pl
config/backup/includes/haproxy [new file with mode: 0644]
config/backup/includes/teamspeak [deleted file]
config/firewall/rules.pl
config/haproxy/haproxy.cfg [new file with mode: 0644]
config/httpd/global.conf
config/lib/firmware/brcm/brcmfmac4329-sdio.txt [deleted file]
config/lib/firmware/brcm/brcmfmac4330-sdio.txt [deleted file]
config/rootfiles/common/armv5tel/initscripts
config/rootfiles/common/curl
config/rootfiles/common/dhcp
config/rootfiles/common/fuse
config/rootfiles/common/i586/initscripts
config/rootfiles/common/installer
config/rootfiles/common/logrotate
config/rootfiles/common/ntfs-3g
config/rootfiles/common/setup
config/rootfiles/common/stage2
config/rootfiles/common/strongswan
config/rootfiles/common/udev
config/rootfiles/core/88/exclude [moved from config/rootfiles/core/85/exclude with 100% similarity]
config/rootfiles/core/88/filelists/daq [moved from config/rootfiles/core/87/filelists/daq with 100% similarity]
config/rootfiles/core/88/filelists/ddns [moved from config/rootfiles/core/87/filelists/ddns with 100% similarity]
config/rootfiles/core/88/filelists/dnsmasq [moved from config/rootfiles/core/87/filelists/dnsmasq with 100% similarity]
config/rootfiles/core/88/filelists/ethtool [moved from config/rootfiles/core/87/filelists/ethtool with 100% similarity]
config/rootfiles/core/88/filelists/fcron [moved from config/rootfiles/core/87/filelists/fcron with 100% similarity]
config/rootfiles/core/88/filelists/file [moved from config/rootfiles/core/87/filelists/file with 100% similarity]
config/rootfiles/core/88/filelists/files [moved from config/rootfiles/core/87/filelists/files with 55% similarity]
config/rootfiles/core/88/filelists/gnupg [moved from config/rootfiles/core/87/filelists/gnupg with 100% similarity]
config/rootfiles/core/88/filelists/grep [moved from config/rootfiles/core/87/filelists/grep with 100% similarity]
config/rootfiles/core/88/filelists/hdparm [moved from config/rootfiles/core/87/filelists/hdparm with 100% similarity]
config/rootfiles/core/88/filelists/libart [moved from config/rootfiles/core/87/filelists/libart with 100% similarity]
config/rootfiles/core/88/filelists/libcap [moved from config/rootfiles/core/86/filelists/libcap with 100% similarity]
config/rootfiles/core/88/filelists/libffi [moved from config/rootfiles/core/87/filelists/libffi with 100% similarity]
config/rootfiles/core/88/filelists/libpcap [moved from config/rootfiles/core/87/filelists/libpcap with 100% similarity]
config/rootfiles/core/88/filelists/pcre [moved from config/rootfiles/core/87/filelists/pcre with 100% similarity]
config/rootfiles/core/88/filelists/screen [moved from config/rootfiles/core/87/filelists/screen with 100% similarity]
config/rootfiles/core/88/filelists/smartmontools [moved from config/rootfiles/core/87/filelists/smartmontools with 100% similarity]
config/rootfiles/core/88/filelists/snort [moved from config/rootfiles/core/87/filelists/snort with 100% similarity]
config/rootfiles/core/88/filelists/sqlite [moved from config/rootfiles/core/87/filelists/sqlite with 100% similarity]
config/rootfiles/core/88/filelists/squid [moved from config/rootfiles/core/87/filelists/squid with 100% similarity]
config/rootfiles/core/88/filelists/tar [moved from config/rootfiles/core/87/filelists/tar with 100% similarity]
config/rootfiles/core/88/filelists/wget [moved from config/rootfiles/core/87/filelists/wget with 100% similarity]
config/rootfiles/core/88/filelists/zlib [moved from config/rootfiles/core/87/filelists/zlib with 100% similarity]
config/rootfiles/core/88/meta [moved from config/rootfiles/core/85/meta with 100% similarity]
config/rootfiles/core/88/update.sh [moved from config/rootfiles/core/87/update.sh with 97% similarity]
config/rootfiles/oldcore/85/exclude [moved from config/rootfiles/core/87/exclude with 100% similarity]
config/rootfiles/oldcore/85/filelists/files [moved from config/rootfiles/core/85/filelists/files with 100% similarity]
config/rootfiles/oldcore/85/filelists/openssl [moved from config/rootfiles/core/85/filelists/openssl with 100% similarity]
config/rootfiles/oldcore/85/filelists/openssl-compat [moved from config/rootfiles/core/85/filelists/openssl-compat with 100% similarity]
config/rootfiles/oldcore/85/meta [moved from config/rootfiles/core/86/meta with 100% similarity]
config/rootfiles/oldcore/85/update.sh [moved from config/rootfiles/core/85/update.sh with 100% similarity]
config/rootfiles/oldcore/86/filelists/hwdata [moved from config/rootfiles/core/86/filelists/hwdata with 100% similarity]
config/rootfiles/oldcore/87/exclude [moved from config/rootfiles/core/86/exclude with 84% similarity]
config/rootfiles/oldcore/87/filelists/armv5tel/glibc [new symlink]
config/rootfiles/oldcore/87/filelists/armv5tel/initscripts [moved from config/rootfiles/core/86/filelists/armv5tel/initscripts with 100% similarity]
config/rootfiles/oldcore/87/filelists/armv5tel/linux-kirkwood [moved from config/rootfiles/core/86/filelists/armv5tel/linux-kirkwood with 100% similarity]
config/rootfiles/oldcore/87/filelists/armv5tel/linux-multi [moved from config/rootfiles/core/86/filelists/armv5tel/linux-multi with 100% similarity]
config/rootfiles/oldcore/87/filelists/armv5tel/linux-rpi [moved from config/rootfiles/core/86/filelists/armv5tel/linux-rpi with 100% similarity]
config/rootfiles/oldcore/87/filelists/armv5tel/swconfig [moved from config/rootfiles/core/86/filelists/armv5tel/swconfig with 100% similarity]
config/rootfiles/oldcore/87/filelists/armv5tel/u-boot [moved from config/rootfiles/core/86/filelists/armv5tel/u-boot with 100% similarity]
config/rootfiles/oldcore/87/filelists/bash [moved from config/rootfiles/core/86/filelists/bash with 100% similarity]
config/rootfiles/oldcore/87/filelists/coreutils [moved from config/rootfiles/core/86/filelists/coreutils with 100% similarity]
config/rootfiles/oldcore/87/filelists/crda [moved from config/rootfiles/core/86/filelists/crda with 100% similarity]
config/rootfiles/oldcore/87/filelists/dracut [moved from config/rootfiles/core/86/filelists/dracut with 100% similarity]
config/rootfiles/oldcore/87/filelists/files [moved from config/rootfiles/core/86/filelists/files with 92% similarity]
config/rootfiles/oldcore/87/filelists/fireinfo [moved from config/rootfiles/core/86/filelists/fireinfo with 100% similarity]
config/rootfiles/oldcore/87/filelists/hwdata [new symlink]
config/rootfiles/oldcore/87/filelists/i586/glibc [moved from config/rootfiles/core/86/filelists/i586/glibc with 100% similarity]
config/rootfiles/oldcore/87/filelists/i586/grub [moved from config/rootfiles/core/86/filelists/i586/grub with 100% similarity]
config/rootfiles/oldcore/87/filelists/i586/initscripts [moved from config/rootfiles/core/86/filelists/i586/initscripts with 100% similarity]
config/rootfiles/oldcore/87/filelists/i586/linux [moved from config/rootfiles/core/86/filelists/i586/linux with 100% similarity]
config/rootfiles/oldcore/87/filelists/i586/linux-initrd [moved from config/rootfiles/core/86/filelists/i586/linux-initrd with 100% similarity]
config/rootfiles/oldcore/87/filelists/iw [moved from config/rootfiles/core/86/filelists/iw with 100% similarity]
config/rootfiles/oldcore/87/filelists/kbd [moved from config/rootfiles/core/86/filelists/kbd with 100% similarity]
config/rootfiles/oldcore/87/filelists/libcap [moved from config/rootfiles/core/87/filelists/libcap with 100% similarity]
config/rootfiles/oldcore/87/filelists/libsmooth [moved from config/rootfiles/core/86/filelists/libsmooth with 100% similarity]
config/rootfiles/oldcore/87/filelists/lvm2 [moved from config/rootfiles/core/86/filelists/lvm2 with 100% similarity]
config/rootfiles/oldcore/87/filelists/mdadm [moved from config/rootfiles/core/86/filelists/mdadm with 100% similarity]
config/rootfiles/oldcore/87/filelists/misc-progs [moved from config/rootfiles/core/86/filelists/misc-progs with 100% similarity]
config/rootfiles/oldcore/87/filelists/multipath-tools [moved from config/rootfiles/core/86/filelists/multipath-tools with 100% similarity]
config/rootfiles/oldcore/87/filelists/newt [moved from config/rootfiles/core/86/filelists/newt with 100% similarity]
config/rootfiles/oldcore/87/filelists/ntp [moved from config/rootfiles/core/86/filelists/ntp with 100% similarity]
config/rootfiles/oldcore/87/filelists/openssl [moved from config/rootfiles/core/86/filelists/openssl with 100% similarity]
config/rootfiles/oldcore/87/filelists/openssl-compat [moved from config/rootfiles/core/86/filelists/openssl-compat with 100% similarity]
config/rootfiles/oldcore/87/filelists/openvpn [moved from config/rootfiles/core/86/filelists/openvpn with 100% similarity]
config/rootfiles/oldcore/87/filelists/parted [moved from config/rootfiles/core/86/filelists/parted with 100% similarity]
config/rootfiles/oldcore/87/filelists/patch [moved from config/rootfiles/core/86/filelists/patch with 100% similarity]
config/rootfiles/oldcore/87/filelists/pigz [moved from config/rootfiles/core/86/filelists/pigz with 100% similarity]
config/rootfiles/oldcore/87/filelists/setup [moved from config/rootfiles/core/86/filelists/setup with 100% similarity]
config/rootfiles/oldcore/87/filelists/slang [moved from config/rootfiles/core/86/filelists/slang with 100% similarity]
config/rootfiles/oldcore/87/filelists/strongswan [moved from config/rootfiles/core/86/filelists/strongswan with 100% similarity]
config/rootfiles/oldcore/87/filelists/tzdata [moved from config/rootfiles/core/86/filelists/tzdata with 100% similarity]
config/rootfiles/oldcore/87/filelists/updated-firmwares [moved from config/rootfiles/core/86/filelists/updated-firmwares with 98% similarity]
config/rootfiles/oldcore/87/filelists/wireless-regdb [moved from config/rootfiles/core/86/filelists/wireless-regdb with 100% similarity]
config/rootfiles/oldcore/87/filelists/wpa_supplicant [moved from config/rootfiles/core/86/filelists/wpa_supplicant with 100% similarity]
config/rootfiles/oldcore/87/filelists/xfsprogs [moved from config/rootfiles/core/86/filelists/xfsprogs with 100% similarity]
config/rootfiles/oldcore/87/meta [moved from config/rootfiles/core/87/meta with 100% similarity]
config/rootfiles/oldcore/87/update.sh [moved from config/rootfiles/core/86/update.sh with 85% similarity]
config/rootfiles/packages/clamav
config/rootfiles/packages/haproxy [new file with mode: 0644]
config/rootfiles/packages/owncloud
config/rootfiles/packages/teamspeak [deleted file]
config/u-boot/uEnv.txt
config/udev/60-net.rules [new file with mode: 0644]
config/udev/network-hotplug-rename [new file with mode: 0644]
config/xen-image/README
config/xen-image/xen-image-maker.sh
html/cgi-bin/connections.cgi
html/cgi-bin/firewall.cgi
html/cgi-bin/fwhosts.cgi
html/cgi-bin/logs.cgi/firewalllog.dat
html/cgi-bin/vpnmain.cgi
lfs/acpid
lfs/asterisk
lfs/clamav
lfs/curl
lfs/ddns
lfs/dhcp
lfs/dnsmasq
lfs/fuse
lfs/haproxy [moved from lfs/teamspeak with 57% similarity]
lfs/initscripts
lfs/libsrtp
lfs/linux
lfs/logrotate
lfs/ntfs-3g
lfs/owncloud
lfs/samba
lfs/strongswan
lfs/udev
make.sh
src/initscripts/init.d/dnsmasq
src/initscripts/init.d/haproxy [new file with mode: 0644]
src/initscripts/init.d/network-trigger [new file with mode: 0644]
src/initscripts/init.d/teamspeak [deleted file]
src/installer/hw.c
src/installer/main.c
src/installer/po/LINGUAS
src/installer/po/da.po
src/installer/po/fa.po
src/installer/po/fr.po
src/installer/po/ja_JP.po [deleted file]
src/installer/po/pt_BR.po
src/installer/po/ru.po
src/installer/po/ru_RU.po [deleted file]
src/installer/po/tr.po
src/paks/linux-pae/install.sh
src/paks/linux-pae/uninstall.sh
src/paks/linux-pae/update.sh
src/paks/teamspeak/install.sh [deleted file]
src/paks/teamspeak/uninstall.sh [deleted file]
src/paks/teamspeak/update.sh [deleted file]
src/patches/clamav/llvm-glibc.patch [new file with mode: 0644]
src/patches/dhcp-4.2.0-add_timeout_when_NULL.patch [deleted file]
src/patches/dhcp-4.2.0-errwarn-message.patch [deleted file]
src/patches/dhcp-4.2.0-garbage-chars.patch [deleted file]
src/patches/dhcp-4.2.0-inherit-leases.patch [deleted file]
src/patches/dhcp-4.2.0-logpid.patch [deleted file]
src/patches/dhcp-4.2.0-missing-ipv6-not-fatal.patch [deleted file]
src/patches/dhcp-4.2.0-noprefixavail.patch [deleted file]
src/patches/dhcp-4.2.1-64_bit_lease_parse.patch [deleted file]
src/patches/dhcp-4.2.1-invalid-dhclient-conf.patch [deleted file]
src/patches/dhcp-4.2.1-retransmission.patch [deleted file]
src/patches/dhcp-4.2.2-dhclient-usage.patch [deleted file]
src/patches/dhcp-4.2.2-remove-bind.patch [deleted file]
src/patches/dhcp-4.2.2-sharedlib.patch [deleted file]
src/patches/dhcp/dhcp-64_bit_lease_parse.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-CLOEXEC.patch [moved from src/patches/dhcp-4.2.2-CLOEXEC.patch with 52% similarity]
src/patches/dhcp/dhcp-PPP.patch [moved from src/patches/dhcp-4.2.0-PPP.patch with 59% similarity]
src/patches/dhcp/dhcp-UseMulticast.patch [moved from src/patches/dhcp-4.2.0-UseMulticast.patch with 83% similarity]
src/patches/dhcp/dhcp-add_timeout_when_NULL.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-capability.patch [moved from src/patches/dhcp-4.2.2-capability.patch with 51% similarity]
src/patches/dhcp/dhcp-default-requested-options.patch [moved from src/patches/dhcp-4.2.0-default-requested-options.patch with 81% similarity]
src/patches/dhcp/dhcp-dhclient-decline-backoff.patch [moved from src/patches/dhcp-4.2.0-dhclient-decline-backoff.patch with 58% similarity]
src/patches/dhcp/dhcp-dhclient-options.patch [moved from src/patches/dhcp-4.2.2-options.patch with 65% similarity]
src/patches/dhcp/dhcp-errwarn-message.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-garbage-chars.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-gpxe-cid.patch [moved from src/patches/dhcp-4.2.2-gpxe-cid.patch with 50% similarity]
src/patches/dhcp/dhcp-honor-expired.patch [moved from src/patches/dhcp-4.2.0-honor-expired.patch with 77% similarity]
src/patches/dhcp/dhcp-improved-xid.patch [moved from src/patches/dhcp-4.2.2-improved-xid.patch with 78% similarity]
src/patches/dhcp/dhcp-logpid.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-lpf-ib.patch [moved from src/patches/dhcp-4.2.2-lpf-ib.patch with 67% similarity]
src/patches/dhcp/dhcp-manpages.patch [moved from src/patches/dhcp-4.2.1-manpages.patch with 53% similarity]
src/patches/dhcp/dhcp-paranoia.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-paths.patch [moved from src/patches/dhcp-4.2.0-paths.patch with 72% similarity]
src/patches/dhcp/dhcp-release-by-ifup.patch [moved from src/patches/dhcp-4.2.0-release-by-ifup.patch with 88% similarity]
src/patches/dhcp/dhcp-remove-bind.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-rfc3442-classless-static-routes.patch [moved from src/patches/dhcp-4.2.2-rfc3442-classless-static-routes.patch with 74% similarity]
src/patches/dhcp/dhcp-sendDecline.patch [moved from src/patches/dhcp-4.2.1-sendDecline.patch with 89% similarity]
src/patches/dhcp/dhcp-sharedlib.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-stateless-DUID-LLT.patch [new file with mode: 0644]
src/patches/dhcp/dhcp-unicast-bootp.patch [moved from src/patches/dhcp-4.2.0-unicast-bootp.patch with 72% similarity]
src/patches/dhcp/dhcp-xen-checksum.patch [moved from src/patches/dhcp-4.2.2-xen-checksum.patch with 71% similarity]
src/patches/dnsmasq/0001-Add-newline-at-the-end-of-example-config-file.patch [new file with mode: 0644]
src/patches/dnsmasq/0002-crash-at-startup-when-an-empty-suffix-is-supplied-to.patch [new file with mode: 0644]
src/patches/dnsmasq/0003-Debian-build-fixes-for-kFreeBSD.patch [new file with mode: 0644]
src/patches/dnsmasq/0004-Set-conntrack-mark-before-connect-call.patch [new file with mode: 0644]
src/patches/dnsmasq/0005-Fix-typo-in-new-Dbus-code.patch [new file with mode: 0644]
src/patches/dnsmasq/0006-Fit-example-conf-file-typo.patch [new file with mode: 0644]
src/patches/dnsmasq/0007-Improve-RFC-compliance-when-unable-to-supply-address.patch [new file with mode: 0644]
src/patches/dnsmasq/0008-Fix-conntrack-with-bind-interfaces.patch [new file with mode: 0644]
src/patches/dnsmasq/0009-Use-inotify-instead-of-polling-on-Linux.patch [new file with mode: 0644]
src/patches/dnsmasq/0010-Teach-the-new-inotify-code-about-symlinks.patch [new file with mode: 0644]
src/patches/dnsmasq/0011-Remove-floor-on-EDNS0-packet-size-with-DNSSEC.patch [new file with mode: 0644]
src/patches/dnsmasq/0012-CHANGELOG-re.-inotify.patch [new file with mode: 0644]
src/patches/dnsmasq/0013-Fix-breakage-of-domain-domain-subnet-local.patch [new file with mode: 0644]
src/patches/dnsmasq/0014-Remove-redundant-IN6_IS_ADDR_ULA-a-macro-defn.patch [new file with mode: 0644]
src/patches/dnsmasq/0015-Eliminate-IPv6-privacy-addresses-from-interface-name.patch [new file with mode: 0644]
src/patches/dnsmasq/0016-Tweak-field-width-in-cache-dump-to-avoid-truncating-.patch [new file with mode: 0644]
src/patches/dnsmasq/0017-Fix-crash-in-DNSSEC-code-when-attempting-to-verify-l.patch [new file with mode: 0644]
src/patches/dnsmasq/0018-Make-caching-work-for-CNAMEs-pointing-to-A-AAAA-reco.patch [new file with mode: 0644]
src/patches/dnsmasq/0019-Fix-problems-validating-NSEC3-and-wildcards.patch [new file with mode: 0644]
src/patches/dnsmasq/0020-Initialise-return-value.patch [new file with mode: 0644]
src/patches/dnsmasq/0021-Add-ignore-address-option.patch [new file with mode: 0644]
src/patches/dnsmasq/0022-Bad-packet-protection.patch [new file with mode: 0644]
src/patches/dnsmasq/0023-Fix-build-failure-in-new-inotify-code-on-BSD.patch [new file with mode: 0644]
src/patches/dnsmasq/0024-Implement-makefile-dependencies-on-COPTS-variable.patch [new file with mode: 0644]
src/patches/dnsmasq/0025-Fix-race-condition-issue-in-makefile.patch [new file with mode: 0644]
src/patches/dnsmasq/0026-DNSSEC-do-top-down-search-for-limit-of-secure-delega.patch [new file with mode: 0644]
src/patches/dnsmasq/0027-Add-log-queries-extra-option-for-more-complete-loggi.patch [new file with mode: 0644]
src/patches/dnsmasq/0028-Add-min-cache-ttl-option.patch [new file with mode: 0644]
src/patches/dnsmasq/0029-Log-port-of-requestor-when-doing-extra-logging.patch [new file with mode: 0644]
src/patches/dnsmasq/0030-Don-t-answer-from-cache-RRsets-from-wildcards-as-we-.patch [new file with mode: 0644]
src/patches/dnsmasq/0031-Logs-for-DS-records-consistent.patch [new file with mode: 0644]
src/patches/dnsmasq/0032-Cope-with-multiple-interfaces-with-the-same-LL-addre.patch [new file with mode: 0644]
src/patches/dnsmasq/0033-Don-t-treat-SERVFAIL-as-a-recoverable-error.patch [new file with mode: 0644]
src/patches/dnsmasq/0034-Add-dhcp-hostsdir-config-option.patch [new file with mode: 0644]
src/patches/dnsmasq/0035-Update-German-translation.patch [new file with mode: 0644]
src/patches/dnsmasq/0036-Don-t-reply-to-DHCPv6-SOLICIT-messages-when-not-conf.patch [new file with mode: 0644]
src/patches/dnsmasq/0037-Allow-inotify-to-be-disabled-at-compile-time-on-Linu.patch [new file with mode: 0644]
src/patches/dnsmasq/0038-Expand-inotify-code-to-dhcp-hostsdir-dhcp-optsdir-an.patch [new file with mode: 0644]
src/patches/dnsmasq/0039-Update-copyrights-for-dawn-of-2015.patch [new file with mode: 0644]
src/patches/dnsmasq/0040-inotify-documentation-updates.patch [new file with mode: 0644]
src/patches/dnsmasq/0041-Fix-broken-ECDSA-DNSSEC-signatures.patch [new file with mode: 0644]
src/patches/dnsmasq/0042-BSD-make-support.patch [new file with mode: 0644]
src/patches/dnsmasq/0043-Fix-build-failure-on-openBSD.patch [new file with mode: 0644]
src/patches/dnsmasq/0044-Manpage-typo-fix.patch [new file with mode: 0644]
src/patches/dnsmasq/0045-Fixup-dhcp-configs-after-reading-extra-hostfiles-wit.patch [new file with mode: 0644]
src/patches/dnsmasq/0046-Extra-logging-for-inotify-code.patch [new file with mode: 0644]
src/patches/dnsmasq/0047-man-page-typo.patch [new file with mode: 0644]
src/patches/dnsmasq/0048-Fix-get-version-script-which-returned-wrong-tag-in-s.patch [new file with mode: 0644]
src/patches/dnsmasq/0049-Typos.patch [new file with mode: 0644]
src/patches/dnsmasq/0050-Make-dynamic-hosts-files-work-when-no-hosts-set.patch [new file with mode: 0644]
src/patches/dnsmasq/0051-Fix-trivial-memory-leaks-to-quieten-valgrind.patch [new file with mode: 0644]
src/patches/dnsmasq/0052-Fix-uninitialized-value-used-in-get_client_mac.patch [new file with mode: 0644]
src/patches/dnsmasq/0053-Log-parsing-utils-in-contrib-reverse-dns.patch [new file with mode: 0644]
src/patches/dnsmasq/0054-Add-dnssec-timestamp-option-and-facility.patch [new file with mode: 0644]
src/patches/dnsmasq/0055-Fix-last-commit-to-not-crash-if-uid-changing-not-con.patch [new file with mode: 0644]
src/patches/dnsmasq/0056-New-version-of-contrib-reverse-dns.patch [new file with mode: 0644]
src/patches/dnsmasq/0057-Tweak-DNSSEC-timestamp-code-to-create-file-later-rem.patch [new file with mode: 0644]
src/patches/kernel/utilite/linux-3.10-compulab-utilite-support.patch [deleted file]
src/patches/linux-3.14.x-lamobo-r1-fix-sata-pwr.patch [new file with mode: 0644]
src/patches/linux-3.14.x-update_banana_dts.patch [deleted file]
src/patches/strongswan-5.2.2-issue-816-650a3ad.patch [new file with mode: 0644]
src/patches/strongswan-5.2.2-issue-816-dd0ebb.patch [new file with mode: 0644]
src/patches/strongswan-5.2.2-issue-816-eb25190.patch [new file with mode: 0644]
src/patches/strongswan-5.2.2-issue-816.patch [deleted file]
src/scripts/backupiso
src/setup/netstuff.c
src/setup/networking.c
src/setup/po/LINGUAS
src/setup/po/fr.po
src/setup/po/ja_JP.po [deleted file]
src/setup/po/nl.po
src/setup/po/pt_BR.po
src/setup/po/ru.po
src/setup/po/ru_RU.po [deleted file]
src/setup/po/sq.po
src/setup/po/tr.po
src/setup/setup.h

index f4823fcfbde655009d95b59401a19643f99e83e5..d430f34674a83d80505c01e94d85f34f44ef05d7 100644 (file)
@@ -160,12 +160,10 @@ sub createinclude(){
   close(DATEI);
   
   foreach (@Zeilen){
-  if ( $_ =~ /\*/){
-    my @files = `ls $_`;
+    chomp($_);
+    my @files = `find $_ -maxdepth 0 2>/dev/null`;
     foreach (@files){
       push(@include,$_);
-     }
-   }
-  else {push(@include,$_);}
+    }
   }
 }
diff --git a/config/backup/includes/haproxy b/config/backup/includes/haproxy
new file mode 100644 (file)
index 0000000..4516e18
--- /dev/null
@@ -0,0 +1 @@
+/etc/haproxy/haproxy.cfg
diff --git a/config/backup/includes/teamspeak b/config/backup/includes/teamspeak
deleted file mode 100644 (file)
index 13705d3..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/opt/teamspeak/bad_names.txt
-/opt/teamspeak/server.dbs
-/opt/teamspeak/server.ini
-/opt/teamspeak/server.log
-/opt/teamspeak/whitelist.txt
-
-
index 97b8897af87bba6f84ec2e961e3bbb62849a17ef..8abc675f7f6f8d5693598ade0523748a5b20f20d 100755 (executable)
@@ -88,14 +88,27 @@ sub main {
        # Flush all chains.
        &flush();
 
-       # Reload firewall rules.
-       &preparerules();
+       # Prepare firewall rules.
+       if (! -z  "${General::swroot}/firewall/input"){
+               &buildrules(\%configinputfw);
+       }
+       if (! -z  "${General::swroot}/firewall/outgoing"){
+               &buildrules(\%configoutgoingfw);
+       }
+       if (! -z  "${General::swroot}/firewall/config"){
+               &buildrules(\%configfwdfw);
+       }
 
        # Load P2P block rules.
        &p2pblock();
 
        # Reload firewall policy.
        run("/usr/sbin/firewall-policy");
+
+       #Reload firewall.local if present
+       if ( -f '/etc/sysconfig/firewall.local'){
+               run("/etc/sysconfig/firewall.local reload");
+       }
 }
 
 sub run {
@@ -146,18 +159,6 @@ sub flush {
        run("$IPTABLES -t mangle -F $CHAIN_MANGLE_NAT_DESTINATION_FIX");
 }
 
-sub preparerules {
-       if (! -z  "${General::swroot}/firewall/input"){
-               &buildrules(\%configinputfw);
-       }
-       if (! -z  "${General::swroot}/firewall/outgoing"){
-               &buildrules(\%configoutgoingfw);
-       }
-       if (! -z  "${General::swroot}/firewall/config"){
-               &buildrules(\%configfwdfw);
-       }
-}
-
 sub buildrules {
        my $hash = shift;
 
@@ -512,10 +513,6 @@ sub buildrules {
                        }
                }
        }
-       #Reload firewall.local if present
-       if ( -f '/etc/sysconfig/firewall.local'){
-               run("/etc/sysconfig/firewall.local reload");
-       }
 }
 
 # Formats the given timestamp into the iptables format which is "hh:mm" UTC.
diff --git a/config/haproxy/haproxy.cfg b/config/haproxy/haproxy.cfg
new file mode 100644 (file)
index 0000000..324ad5e
--- /dev/null
@@ -0,0 +1,86 @@
+#---------------------------------------------------------------------
+# Example configuration for a possible web application.  See the
+# full configuration options online.
+#
+#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
+#
+#---------------------------------------------------------------------
+
+#---------------------------------------------------------------------
+# Global settings
+#---------------------------------------------------------------------
+global
+    # to have these messages end up in /var/log/haproxy.log you will
+    # need to:
+    #
+    # 1) configure syslog to accept network log events.  This is done
+    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
+    #    /etc/sysconfig/syslog
+    #
+    # 2) configure local2 events to go to the /var/log/haproxy.log
+    #   file. A line like the following can be added to
+    #   /etc/sysconfig/syslog
+    #
+    #    local2.*                       /var/log/haproxy.log
+    #
+    log         127.0.0.1 local2
+
+    chroot      /var/lib/haproxy
+    pidfile     /var/run/haproxy.pid
+    maxconn     4000
+    user        haproxy
+    group       haproxy
+    daemon
+
+    # turn on stats unix socket
+    stats socket /var/lib/haproxy/stats
+
+#---------------------------------------------------------------------
+# common defaults that all the 'listen' and 'backend' sections will
+# use if not designated in their block
+#---------------------------------------------------------------------
+defaults
+    mode                    http
+    log                     global
+    option                  httplog
+    option                  dontlognull
+    option http-server-close
+    option forwardfor       except 127.0.0.0/8
+    option                  redispatch
+    retries                 3
+    timeout http-request    10s
+    timeout queue           1m
+    timeout connect         10s
+    timeout client          1m
+    timeout server          1m
+    timeout http-keep-alive 10s
+    timeout check           10s
+    maxconn                 3000
+
+#---------------------------------------------------------------------
+# main frontend which proxys to the backends
+#---------------------------------------------------------------------
+frontend  main *:5000
+    acl url_static       path_beg       -i /static /images /javascript /stylesheets
+    acl url_static       path_end       -i .jpg .gif .png .css .js
+
+    use_backend static          if url_static
+    default_backend             app
+
+#---------------------------------------------------------------------
+# static backend for serving up images, stylesheets and such
+#---------------------------------------------------------------------
+backend static
+    balance     roundrobin
+    server      static 127.0.0.1:4331 check
+
+#---------------------------------------------------------------------
+# round robin balancing between the various backends
+#---------------------------------------------------------------------
+backend app
+    balance     roundrobin
+    server  app1 127.0.0.1:5001 check
+    server  app2 127.0.0.1:5002 check
+    server  app3 127.0.0.1:5003 check
+    server  app4 127.0.0.1:5004 check
+
index a9770264366361a611db5ea5e91238fa81289c6f..3fbd5e2946d9b36a7d225510e79715b9095a73b5 100644 (file)
@@ -1,7 +1,7 @@
 Timeout 300
 ServerSignature on
 UseCanonicalName off
-ServerTokens Full
+ServerTokens Prod
 LogLevel warn
 CustomLog /var/log/httpd/access_log combined
 Include /etc/httpd/conf/hostname.conf
diff --git a/config/lib/firmware/brcm/brcmfmac4329-sdio.txt b/config/lib/firmware/brcm/brcmfmac4329-sdio.txt
deleted file mode 100644 (file)
index 3832006..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# bcm4329 NVRAM file for Wandboard Dual
-
-sromrev=3
-vendid=0x14e4
-devid=0x432f
-boardtype=0x53e
-
-boardrev=0x41
-
-#boardflags=0x1200
-boardflags=0x200
-
-# Specify the xtalfreq if it is otherthan 38.4MHz
-xtalfreq=37400
-
-aa2g=3
-aa5g=0
-
-ag0=255
-#tri2g=0x64
-
-# 11g paparams
-pa0b0=5542,5542,5542
-pa0b1=64244,64244,64244
-pa0b2=65202,65202,65202
-
-pa0itssit=62
-pa0maxpwr=74
-opo=0
-mcs2gpo0=0x6666
-mcs2gpo1=0x6666
-
-# 11g rssi params
-rssismf2g=0xa,0xa,0xa
-rssismc2g=0xb,0xb,0xb
-rssisav2g=0x3,0x3,0x3
-bxa2g=0
-
-# country code
-ccode=ALL
-cctl=0x0
-cckdigfilttype=0
-ofdmdigfilttype=1
-
-rxpo2g=0
-
-boardnum=1
-macaddr=DE:AD:BE:EF:00:00
-
-# xtal pu and pd time control variable
-# pu time is driver default (0x1501)
-#r13t=0x1501
-
-#######
-nocrc=1
-
-#for mfgc
-otpimagesize=182
-
-# sdio extra configs
-hwhdr=0x05ffff031030031003100000
-
-#This generates empty F1, F2 and F3 tuple chains, and may be used if the host SDIO stack does not require the standard tuples.
-#RAW1=80 02 fe ff
-
-#This includes the standard FUNCID and FUNCE tuples in the F1, F2, F3 and common CIS.
-RAW1=80 32 fe 21 02 0c 00 22 2a 01 01 00 00 c5 0 e6 00 00 00 00 00 40 00 00 ff ff 80 00 00 00 00 00 00 00 00 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 20 04 D0 2 29 43 21 02 0c 00 22 04 00 20 00 5A
-nvramver=4.218.214.0
diff --git a/config/lib/firmware/brcm/brcmfmac4330-sdio.txt b/config/lib/firmware/brcm/brcmfmac4330-sdio.txt
deleted file mode 100644 (file)
index c5c2611..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-# bcm4330 NVRAM file for Wandboard Quad
-
-manfid=0x2d0
-prodid=0x0532
-vendid=0x14e4
-devid=0x4360
-boardtype=0x0532
-boardrev=0x20
-boardflags=0x10080201
-
-nocrc=1
-xtalfreq=37400
-xtalmode=0x20,0x4,0
-boardnum=22
-macaddr=DE:AD:BE:EF:00:00
-ag0=252
-ag1=252
-aa2g=1
-aa5g=1
-ccode=EU
-regrev=5
-
-#for BT-coexistence
-btc_params80=0
-btc_params6=10
-btc_params8=10000
-
-sd_gpout=0
-# sd_oobonly=1
-muxenab=0x10
-
-# 2G PA param_B42R 110927
-pa0b0=0x12E4
-pa0b1=0xFE09
-pa0b2=0xFF9A
-#pa0itssit=62
-rssismf2g=0xa
-rssismc2g=0x3
-rssisav2g=0x7
-
-# rssi params for 5GHz B42R_110803
-#rssismf5g=0x4
-rssismf5g=0xa
-rssismc5g=0x7
-rssisav5g=0x1
-#PA parameters for lower band
-pa1lob0=0x144F
-pa1lob1=0xFD6B
-pa1lob2=0xFF3B
-#PA parameters for midband
-pa1b0=0x139C
-pa1b1=0xFD87
-pa1b2=0xFF4F
-#PA parameters for high band
-pa1hib0=0x12CA
-pa1hib1=0xFD9A
-pa1hib2=0xFF4E
-
-# 2G PA offset
-maxp2ga0=64
-sromrev=3
-cckpo=0
-ofdm2gpo=0x66666666
-mcs2gpo0=0xaaaa
-mcs2gpo1=0xaaaa
-
-# 5G PA offset
-maxp5ga0=66
-maxp5gla0=66
-maxp5gha0=66
-ofdm5gpo=0x22222222
-ofdm5glpo=0x11111111
-ofdm5ghpo=0x22222222
-mcs5gpo0=0x6666
-mcs5gpo1=0x6666
-mcs5glpo0=0x5555
-mcs5glpo1=0x5555
-mcs5ghpo0=0x6666
-mcs5ghpo1=0x6666
-
-cckPwrOffset=4
-cckdigfilttype=22
-ofdmdigfilttype=2
-extpagain5g=2
-#wl0id=0x431b
-
-# For 2GHz Tx EVM/SM
-rfreg033=0x19
-rfreg033_cck=0x1d
-pacalidx2g=65
-dacrate2g=160
-txalpfbyp2g=1
-bphyscale=17
-
-# 5GHz LOFT and IQ CAL
-txgaintbl5g=1
-txiqlopapu5g=1
-txiqlopag5g=0x10
-iqlocalidx5g=24
-
-# 5GHz Noise CAL parameter
-noise_cal_po_5g=5
-noise_cal_enable_5g=0
-
-# 2GHz RxPER at low rates
-noise_cal_ref_2g=56
-noise_cal_po_bias_2g=-4
-noise_cal_enable_2g=1
-
-# Max input level on a-band
-triso5g=9
-
-# Tx power control, especially temp.
-tssitime=1
-
-#fc+1.7GHz Spur Elimination
-loidacmode5g=1
-
-swctrlmap_2g=0x84048404, 0x82028202, 0x84048404, 0x010202, 0x1ff
-swctrlmap_5g=0xC040C040, 0xB030A020, 0xA020C040, 0x010A02, 0x2F8
-
-
index 6347cafc4c90d97677e2c65339ff3041855c8f90..05b8ceebe84d45295eec6c4d5b7cad8320243d1f 100755 (executable)
@@ -60,6 +60,7 @@ etc/rc.d/init.d/mounttmpfs
 #etc/rc.d/init.d/mysql
 #etc/rc.d/init.d/netsnmpd
 etc/rc.d/init.d/network
+etc/rc.d/init.d/network-trigger
 etc/rc.d/init.d/network-vlans
 #etc/rc.d/init.d/networking
 etc/rc.d/init.d/networking/any
@@ -121,7 +122,6 @@ etc/rc.d/init.d/swap
 etc/rc.d/init.d/swconfig
 etc/rc.d/init.d/sysctl
 etc/rc.d/init.d/sysklogd
-etc/rc.d/init.d/teamspeak
 etc/rc.d/init.d/template
 #etc/rc.d/init.d/tftpd
 etc/rc.d/init.d/tmpfs
@@ -229,6 +229,7 @@ etc/rc.d/rcsysinit.d/S73swconfig
 etc/rc.d/rcsysinit.d/S75firstsetup
 etc/rc.d/rcsysinit.d/S80localnet
 etc/rc.d/rcsysinit.d/S85firewall
+etc/rc.d/rcsysinit.d/S90network-trigger
 etc/rc.d/rcsysinit.d/S91network-vlans
 etc/rc.d/rcsysinit.d/S92rngd
 etc/rc.d/rc3.d/S15fireinfo
index c5567519b6d3d764e2fcdc8f3c1620895ef6e853..af32dfa6a13243921c0011a0e849e10c8fe0b8fc 100644 (file)
@@ -10,7 +10,6 @@ usr/bin/curl
 #usr/include/curl/multi.h
 #usr/include/curl/stdcheaders.h
 #usr/include/curl/typecheck-gcc.h
-#usr/include/curl/types.h
 #usr/lib/libcurl.a
 #usr/lib/libcurl.la
 usr/lib/libcurl.so
@@ -18,9 +17,233 @@ usr/lib/libcurl.so.3
 usr/lib/libcurl.so.4
 usr/lib/libcurl.so.4.3.0
 #usr/lib/pkgconfig/libcurl.pc
+#usr/share/aclocal/libcurl.m4
 #usr/share/man/man1/curl-config.1
 #usr/share/man/man1/curl.1
-#usr/share/man/man1/mk-ca-bundle.1
+#usr/share/man/man3/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
+#usr/share/man/man3/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
+#usr/share/man/man3/CURLMOPT_MAXCONNECTS.3
+#usr/share/man/man3/CURLMOPT_MAX_HOST_CONNECTIONS.3
+#usr/share/man/man3/CURLMOPT_MAX_PIPELINE_LENGTH.3
+#usr/share/man/man3/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
+#usr/share/man/man3/CURLMOPT_PIPELINING.3
+#usr/share/man/man3/CURLMOPT_PIPELINING_SERVER_BL.3
+#usr/share/man/man3/CURLMOPT_PIPELINING_SITE_BL.3
+#usr/share/man/man3/CURLMOPT_SOCKETDATA.3
+#usr/share/man/man3/CURLMOPT_SOCKETFUNCTION.3
+#usr/share/man/man3/CURLMOPT_TIMERDATA.3
+#usr/share/man/man3/CURLMOPT_TIMERFUNCTION.3
+#usr/share/man/man3/CURLOPT_ACCEPTTIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_ACCEPT_ENCODING.3
+#usr/share/man/man3/CURLOPT_ADDRESS_SCOPE.3
+#usr/share/man/man3/CURLOPT_APPEND.3
+#usr/share/man/man3/CURLOPT_AUTOREFERER.3
+#usr/share/man/man3/CURLOPT_BUFFERSIZE.3
+#usr/share/man/man3/CURLOPT_CAINFO.3
+#usr/share/man/man3/CURLOPT_CAPATH.3
+#usr/share/man/man3/CURLOPT_CERTINFO.3
+#usr/share/man/man3/CURLOPT_CHUNK_BGN_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CHUNK_DATA.3
+#usr/share/man/man3/CURLOPT_CHUNK_END_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CLOSESOCKETDATA.3
+#usr/share/man/man3/CURLOPT_CLOSESOCKETFUNCTION.3
+#usr/share/man/man3/CURLOPT_CONNECTTIMEOUT.3
+#usr/share/man/man3/CURLOPT_CONNECTTIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_CONNECT_ONLY.3
+#usr/share/man/man3/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
+#usr/share/man/man3/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
+#usr/share/man/man3/CURLOPT_COOKIE.3
+#usr/share/man/man3/CURLOPT_COOKIEFILE.3
+#usr/share/man/man3/CURLOPT_COOKIEJAR.3
+#usr/share/man/man3/CURLOPT_COOKIELIST.3
+#usr/share/man/man3/CURLOPT_COOKIESESSION.3
+#usr/share/man/man3/CURLOPT_COPYPOSTFIELDS.3
+#usr/share/man/man3/CURLOPT_CRLF.3
+#usr/share/man/man3/CURLOPT_CRLFILE.3
+#usr/share/man/man3/CURLOPT_CUSTOMREQUEST.3
+#usr/share/man/man3/CURLOPT_DEBUGDATA.3
+#usr/share/man/man3/CURLOPT_DEBUGFUNCTION.3
+#usr/share/man/man3/CURLOPT_DIRLISTONLY.3
+#usr/share/man/man3/CURLOPT_DNS_CACHE_TIMEOUT.3
+#usr/share/man/man3/CURLOPT_DNS_INTERFACE.3
+#usr/share/man/man3/CURLOPT_DNS_LOCAL_IP4.3
+#usr/share/man/man3/CURLOPT_DNS_LOCAL_IP6.3
+#usr/share/man/man3/CURLOPT_DNS_SERVERS.3
+#usr/share/man/man3/CURLOPT_DNS_USE_GLOBAL_CACHE.3
+#usr/share/man/man3/CURLOPT_EGDSOCKET.3
+#usr/share/man/man3/CURLOPT_ERRORBUFFER.3
+#usr/share/man/man3/CURLOPT_EXPECT_100_TIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_FAILONERROR.3
+#usr/share/man/man3/CURLOPT_FILETIME.3
+#usr/share/man/man3/CURLOPT_FNMATCH_DATA.3
+#usr/share/man/man3/CURLOPT_FNMATCH_FUNCTION.3
+#usr/share/man/man3/CURLOPT_FOLLOWLOCATION.3
+#usr/share/man/man3/CURLOPT_FORBID_REUSE.3
+#usr/share/man/man3/CURLOPT_FRESH_CONNECT.3
+#usr/share/man/man3/CURLOPT_FTPPORT.3
+#usr/share/man/man3/CURLOPT_FTPSSLAUTH.3
+#usr/share/man/man3/CURLOPT_FTP_ACCOUNT.3
+#usr/share/man/man3/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
+#usr/share/man/man3/CURLOPT_FTP_CREATE_MISSING_DIRS.3
+#usr/share/man/man3/CURLOPT_FTP_FILEMETHOD.3
+#usr/share/man/man3/CURLOPT_FTP_RESPONSE_TIMEOUT.3
+#usr/share/man/man3/CURLOPT_FTP_SKIP_PASV_IP.3
+#usr/share/man/man3/CURLOPT_FTP_SSL_CCC.3
+#usr/share/man/man3/CURLOPT_FTP_USE_EPRT.3
+#usr/share/man/man3/CURLOPT_FTP_USE_EPSV.3
+#usr/share/man/man3/CURLOPT_FTP_USE_PRET.3
+#usr/share/man/man3/CURLOPT_GSSAPI_DELEGATION.3
+#usr/share/man/man3/CURLOPT_HEADER.3
+#usr/share/man/man3/CURLOPT_HEADERDATA.3
+#usr/share/man/man3/CURLOPT_HEADERFUNCTION.3
+#usr/share/man/man3/CURLOPT_HEADEROPT.3
+#usr/share/man/man3/CURLOPT_HTTP200ALIASES.3
+#usr/share/man/man3/CURLOPT_HTTPAUTH.3
+#usr/share/man/man3/CURLOPT_HTTPGET.3
+#usr/share/man/man3/CURLOPT_HTTPHEADER.3
+#usr/share/man/man3/CURLOPT_HTTPPOST.3
+#usr/share/man/man3/CURLOPT_HTTPPROXYTUNNEL.3
+#usr/share/man/man3/CURLOPT_HTTP_CONTENT_DECODING.3
+#usr/share/man/man3/CURLOPT_HTTP_TRANSFER_DECODING.3
+#usr/share/man/man3/CURLOPT_HTTP_VERSION.3
+#usr/share/man/man3/CURLOPT_IGNORE_CONTENT_LENGTH.3
+#usr/share/man/man3/CURLOPT_INFILESIZE.3
+#usr/share/man/man3/CURLOPT_INFILESIZE_LARGE.3
+#usr/share/man/man3/CURLOPT_INTERFACE.3
+#usr/share/man/man3/CURLOPT_INTERLEAVEDATA.3
+#usr/share/man/man3/CURLOPT_INTERLEAVEFUNCTION.3
+#usr/share/man/man3/CURLOPT_IOCTLDATA.3
+#usr/share/man/man3/CURLOPT_IOCTLFUNCTION.3
+#usr/share/man/man3/CURLOPT_IPRESOLVE.3
+#usr/share/man/man3/CURLOPT_ISSUERCERT.3
+#usr/share/man/man3/CURLOPT_KEYPASSWD.3
+#usr/share/man/man3/CURLOPT_KRBLEVEL.3
+#usr/share/man/man3/CURLOPT_LOCALPORT.3
+#usr/share/man/man3/CURLOPT_LOCALPORTRANGE.3
+#usr/share/man/man3/CURLOPT_LOGIN_OPTIONS.3
+#usr/share/man/man3/CURLOPT_LOW_SPEED_LIMIT.3
+#usr/share/man/man3/CURLOPT_LOW_SPEED_TIME.3
+#usr/share/man/man3/CURLOPT_MAIL_AUTH.3
+#usr/share/man/man3/CURLOPT_MAIL_FROM.3
+#usr/share/man/man3/CURLOPT_MAIL_RCPT.3
+#usr/share/man/man3/CURLOPT_MAXCONNECTS.3
+#usr/share/man/man3/CURLOPT_MAXFILESIZE.3
+#usr/share/man/man3/CURLOPT_MAXFILESIZE_LARGE.3
+#usr/share/man/man3/CURLOPT_MAXREDIRS.3
+#usr/share/man/man3/CURLOPT_MAX_RECV_SPEED_LARGE.3
+#usr/share/man/man3/CURLOPT_MAX_SEND_SPEED_LARGE.3
+#usr/share/man/man3/CURLOPT_NETRC.3
+#usr/share/man/man3/CURLOPT_NETRC_FILE.3
+#usr/share/man/man3/CURLOPT_NEW_DIRECTORY_PERMS.3
+#usr/share/man/man3/CURLOPT_NEW_FILE_PERMS.3
+#usr/share/man/man3/CURLOPT_NOBODY.3
+#usr/share/man/man3/CURLOPT_NOPROGRESS.3
+#usr/share/man/man3/CURLOPT_NOPROXY.3
+#usr/share/man/man3/CURLOPT_NOSIGNAL.3
+#usr/share/man/man3/CURLOPT_OPENSOCKETDATA.3
+#usr/share/man/man3/CURLOPT_OPENSOCKETFUNCTION.3
+#usr/share/man/man3/CURLOPT_PASSWORD.3
+#usr/share/man/man3/CURLOPT_PORT.3
+#usr/share/man/man3/CURLOPT_POST.3
+#usr/share/man/man3/CURLOPT_POSTFIELDS.3
+#usr/share/man/man3/CURLOPT_POSTFIELDSIZE.3
+#usr/share/man/man3/CURLOPT_POSTFIELDSIZE_LARGE.3
+#usr/share/man/man3/CURLOPT_POSTQUOTE.3
+#usr/share/man/man3/CURLOPT_POSTREDIR.3
+#usr/share/man/man3/CURLOPT_PREQUOTE.3
+#usr/share/man/man3/CURLOPT_PRIVATE.3
+#usr/share/man/man3/CURLOPT_PROGRESSDATA.3
+#usr/share/man/man3/CURLOPT_PROGRESSFUNCTION.3
+#usr/share/man/man3/CURLOPT_PROTOCOLS.3
+#usr/share/man/man3/CURLOPT_PROXY.3
+#usr/share/man/man3/CURLOPT_PROXYAUTH.3
+#usr/share/man/man3/CURLOPT_PROXYHEADER.3
+#usr/share/man/man3/CURLOPT_PROXYPASSWORD.3
+#usr/share/man/man3/CURLOPT_PROXYPORT.3
+#usr/share/man/man3/CURLOPT_PROXYTYPE.3
+#usr/share/man/man3/CURLOPT_PROXYUSERNAME.3
+#usr/share/man/man3/CURLOPT_PROXYUSERPWD.3
+#usr/share/man/man3/CURLOPT_PROXY_TRANSFER_MODE.3
+#usr/share/man/man3/CURLOPT_PUT.3
+#usr/share/man/man3/CURLOPT_QUOTE.3
+#usr/share/man/man3/CURLOPT_RANDOM_FILE.3
+#usr/share/man/man3/CURLOPT_RANGE.3
+#usr/share/man/man3/CURLOPT_READDATA.3
+#usr/share/man/man3/CURLOPT_READFUNCTION.3
+#usr/share/man/man3/CURLOPT_REDIR_PROTOCOLS.3
+#usr/share/man/man3/CURLOPT_REFERER.3
+#usr/share/man/man3/CURLOPT_RESOLVE.3
+#usr/share/man/man3/CURLOPT_RESUME_FROM.3
+#usr/share/man/man3/CURLOPT_RESUME_FROM_LARGE.3
+#usr/share/man/man3/CURLOPT_RTSP_CLIENT_CSEQ.3
+#usr/share/man/man3/CURLOPT_RTSP_REQUEST.3
+#usr/share/man/man3/CURLOPT_RTSP_SERVER_CSEQ.3
+#usr/share/man/man3/CURLOPT_RTSP_SESSION_ID.3
+#usr/share/man/man3/CURLOPT_RTSP_STREAM_URI.3
+#usr/share/man/man3/CURLOPT_RTSP_TRANSPORT.3
+#usr/share/man/man3/CURLOPT_SASL_IR.3
+#usr/share/man/man3/CURLOPT_SEEKDATA.3
+#usr/share/man/man3/CURLOPT_SEEKFUNCTION.3
+#usr/share/man/man3/CURLOPT_SHARE.3
+#usr/share/man/man3/CURLOPT_SOCKOPTDATA.3
+#usr/share/man/man3/CURLOPT_SOCKOPTFUNCTION.3
+#usr/share/man/man3/CURLOPT_SOCKS5_GSSAPI_NEC.3
+#usr/share/man/man3/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
+#usr/share/man/man3/CURLOPT_SSH_AUTH_TYPES.3
+#usr/share/man/man3/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
+#usr/share/man/man3/CURLOPT_SSH_KEYDATA.3
+#usr/share/man/man3/CURLOPT_SSH_KEYFUNCTION.3
+#usr/share/man/man3/CURLOPT_SSH_KNOWNHOSTS.3
+#usr/share/man/man3/CURLOPT_SSH_PRIVATE_KEYFILE.3
+#usr/share/man/man3/CURLOPT_SSH_PUBLIC_KEYFILE.3
+#usr/share/man/man3/CURLOPT_SSLCERT.3
+#usr/share/man/man3/CURLOPT_SSLCERTTYPE.3
+#usr/share/man/man3/CURLOPT_SSLENGINE.3
+#usr/share/man/man3/CURLOPT_SSLENGINE_DEFAULT.3
+#usr/share/man/man3/CURLOPT_SSLKEY.3
+#usr/share/man/man3/CURLOPT_SSLKEYTYPE.3
+#usr/share/man/man3/CURLOPT_SSLVERSION.3
+#usr/share/man/man3/CURLOPT_SSL_CIPHER_LIST.3
+#usr/share/man/man3/CURLOPT_SSL_CTX_DATA.3
+#usr/share/man/man3/CURLOPT_SSL_CTX_FUNCTION.3
+#usr/share/man/man3/CURLOPT_SSL_ENABLE_ALPN.3
+#usr/share/man/man3/CURLOPT_SSL_ENABLE_NPN.3
+#usr/share/man/man3/CURLOPT_SSL_OPTIONS.3
+#usr/share/man/man3/CURLOPT_SSL_SESSIONID_CACHE.3
+#usr/share/man/man3/CURLOPT_SSL_VERIFYHOST.3
+#usr/share/man/man3/CURLOPT_SSL_VERIFYPEER.3
+#usr/share/man/man3/CURLOPT_STDERR.3
+#usr/share/man/man3/CURLOPT_TCP_KEEPALIVE.3
+#usr/share/man/man3/CURLOPT_TCP_KEEPIDLE.3
+#usr/share/man/man3/CURLOPT_TCP_KEEPINTVL.3
+#usr/share/man/man3/CURLOPT_TCP_NODELAY.3
+#usr/share/man/man3/CURLOPT_TELNETOPTIONS.3
+#usr/share/man/man3/CURLOPT_TFTP_BLKSIZE.3
+#usr/share/man/man3/CURLOPT_TIMECONDITION.3
+#usr/share/man/man3/CURLOPT_TIMEOUT.3
+#usr/share/man/man3/CURLOPT_TIMEOUT_MS.3
+#usr/share/man/man3/CURLOPT_TIMEVALUE.3
+#usr/share/man/man3/CURLOPT_TLSAUTH_PASSWORD.3
+#usr/share/man/man3/CURLOPT_TLSAUTH_TYPE.3
+#usr/share/man/man3/CURLOPT_TLSAUTH_USERNAME.3
+#usr/share/man/man3/CURLOPT_TRANSFERTEXT.3
+#usr/share/man/man3/CURLOPT_TRANSFER_ENCODING.3
+#usr/share/man/man3/CURLOPT_UNIX_SOCKET_PATH.3
+#usr/share/man/man3/CURLOPT_UNRESTRICTED_AUTH.3
+#usr/share/man/man3/CURLOPT_UPLOAD.3
+#usr/share/man/man3/CURLOPT_URL.3
+#usr/share/man/man3/CURLOPT_USERAGENT.3
+#usr/share/man/man3/CURLOPT_USERNAME.3
+#usr/share/man/man3/CURLOPT_USERPWD.3
+#usr/share/man/man3/CURLOPT_USE_SSL.3
+#usr/share/man/man3/CURLOPT_VERBOSE.3
+#usr/share/man/man3/CURLOPT_WILDCARDMATCH.3
+#usr/share/man/man3/CURLOPT_WRITEDATA.3
+#usr/share/man/man3/CURLOPT_WRITEFUNCTION.3
+#usr/share/man/man3/CURLOPT_XFERINFODATA.3
+#usr/share/man/man3/CURLOPT_XFERINFOFUNCTION.3
+#usr/share/man/man3/CURLOPT_XOAUTH2_BEARER.3
 #usr/share/man/man3/curl_easy_cleanup.3
 #usr/share/man/man3/curl_easy_duphandle.3
 #usr/share/man/man3/curl_easy_escape.3
index 2c2cfeeb386de7b51520619a241b3947440b1995..ff225a5714b1cd34b032de240a7910d3fdf3427d 100644 (file)
@@ -1,6 +1,7 @@
 #etc/dhcp
-#etc/dhcp/dhclient.conf
+#etc/dhcp/dhclient.conf.example
 etc/dhcp/dhcpd.conf
+#etc/dhcp/dhcpd.conf.example
 #usr/bin/omshell
 #usr/include/dhcpctl
 #usr/include/dhcpctl/dhcpctl.h
index 3b7ad597f29f27da4cd9c925a0886075e2526257..1ab1d4810ac5e9a814b39a7813e68defe16310d8 100644 (file)
@@ -1,5 +1,6 @@
 #etc/init.d
 #etc/init.d/fuse
+#etc/rc.d/init.d/fuse
 etc/udev/rules.d/99-fuse.rules
 sbin/mount.fuse
 usr/bin/fusermount
@@ -19,10 +20,13 @@ usr/bin/ulockmgr_server
 #usr/lib/libfuse.la
 usr/lib/libfuse.so
 usr/lib/libfuse.so.2
-usr/lib/libfuse.so.2.8.3
+usr/lib/libfuse.so.2.9.3
 #usr/lib/libulockmgr.a
 #usr/lib/libulockmgr.la
 usr/lib/libulockmgr.so
 usr/lib/libulockmgr.so.1
 usr/lib/libulockmgr.so.1.0.1
 #usr/lib/pkgconfig/fuse.pc
+#usr/share/man/man1/fusermount.1
+#usr/share/man/man1/ulockmgr_server.1
+#usr/share/man/man8/mount.fuse.8
index 58b67c88fb2e8d0ab91c67d42e9448c1d41d53ef..d4779ab054230c54c893e27120899faf9b791be1 100755 (executable)
@@ -62,6 +62,7 @@ etc/rc.d/init.d/mounttmpfs
 #etc/rc.d/init.d/mysql
 #etc/rc.d/init.d/netsnmpd
 etc/rc.d/init.d/network
+etc/rc.d/init.d/network-trigger
 etc/rc.d/init.d/network-vlans
 #etc/rc.d/init.d/networking
 etc/rc.d/init.d/networking/any
@@ -122,7 +123,6 @@ etc/rc.d/init.d/static-routes
 etc/rc.d/init.d/swap
 etc/rc.d/init.d/sysctl
 etc/rc.d/init.d/sysklogd
-etc/rc.d/init.d/teamspeak
 etc/rc.d/init.d/template
 #etc/rc.d/init.d/tftpd
 etc/rc.d/init.d/tmpfs
@@ -234,6 +234,7 @@ etc/rc.d/rcsysinit.d/S70console
 etc/rc.d/rcsysinit.d/S75firstsetup
 etc/rc.d/rcsysinit.d/S80localnet
 etc/rc.d/rcsysinit.d/S85firewall
+etc/rc.d/rcsysinit.d/S90network-trigger
 etc/rc.d/rcsysinit.d/S91network-vlans
 etc/rc.d/rcsysinit.d/S92rngd
 etc/rc.d/rc3.d/S15fireinfo
index 72845214e024dc2e9f8d5c1abe95c9c690293b49..63a072fa12d92e98ab03efb2d3574d193f8a04fa 100644 (file)
@@ -21,7 +21,6 @@
 #usr/share/locale/id/LC_MESSAGES/installer.mo
 #usr/share/locale/it/LC_MESSAGES/installer.mo
 #usr/share/locale/ja/LC_MESSAGES/installer.mo
-#usr/share/locale/ja_JP/LC_MESSAGES/installer.mo
 #usr/share/locale/jv/LC_MESSAGES/installer.mo
 #usr/share/locale/km_KH/LC_MESSAGES/installer.mo
 #usr/share/locale/nl/LC_MESSAGES/installer.mo
@@ -30,7 +29,6 @@
 #usr/share/locale/pt_PT/LC_MESSAGES/installer.mo
 #usr/share/locale/ro_RO/LC_MESSAGES/installer.mo
 #usr/share/locale/ru/LC_MESSAGES/installer.mo
-#usr/share/locale/ru_RU/LC_MESSAGES/installer.mo
 #usr/share/locale/rw/LC_MESSAGES/installer.mo
 #usr/share/locale/sk/LC_MESSAGES/installer.mo
 #usr/share/locale/sq/LC_MESSAGES/installer.mo
index 8410c395f7912c0fee57580808fa384a392b6cfc..7f3e709ead13609beb54da3f87e38941ad527d58 100644 (file)
@@ -1,3 +1,5 @@
+#etc/logrotate.d
+etc/logrotate.d/.empty
 #usr/man/man8/logrotate.8
 usr/sbin/logrotate
 var/lib/logrotate.status
index 186e12be277dc2e075ff9c4998366f61f5691e1a..44f13c389dafddd9854b3d9fc7db543b73f79c69 100644 (file)
@@ -1,13 +1,20 @@
 bin/lowntfs-3g
 bin/ntfs-3g
-lib/libntfs-3g.so
-lib/libntfs-3g.so.80
-lib/libntfs-3g.so.80.0.0
+#lib/libntfs-3g.so
+lib/libntfs-3g.so.85
+lib/libntfs-3g.so.85.0.0
+sbin/mkfs.ntfs
 sbin/mount.lowntfs-3g
 sbin/mount.ntfs-3g
 usr/bin/ntfs-3g.probe
 usr/bin/ntfs-3g.secaudit
 usr/bin/ntfs-3g.usermap
+usr/bin/ntfscat
+usr/bin/ntfscluster
+usr/bin/ntfscmp
+usr/bin/ntfsfix
+usr/bin/ntfsinfo
+usr/bin/ntfsls
 #usr/include/ntfs-3g
 #usr/include/ntfs-3g/acls.h
 #usr/include/ntfs-3g/attrib.h
@@ -36,6 +43,7 @@ usr/bin/ntfs-3g.usermap
 #usr/include/ntfs-3g/ntfstime.h
 #usr/include/ntfs-3g/object_id.h
 #usr/include/ntfs-3g/param.h
+#usr/include/ntfs-3g/realpath.h
 #usr/include/ntfs-3g/reparse.h
 #usr/include/ntfs-3g/runlist.h
 #usr/include/ntfs-3g/security.h
@@ -46,13 +54,33 @@ usr/bin/ntfs-3g.usermap
 #usr/include/ntfs-3g/xattrs.h
 #usr/lib/libntfs-3g.a
 #usr/lib/libntfs-3g.la
-usr/lib/libntfs-3g.so
+#usr/lib/libntfs-3g.so
 usr/lib/pkgconfig/libntfs-3g.pc
+usr/sbin/mkntfs
+usr/sbin/ntfsclone
+usr/sbin/ntfscp
+usr/sbin/ntfslabel
+usr/sbin/ntfsresize
+usr/sbin/ntfsundelete
 #usr/share/doc/ntfs-3g
 #usr/share/doc/ntfs-3g/README
+#usr/share/man/man8/mkfs.ntfs.8
+#usr/share/man/man8/mkntfs.8
 #usr/share/man/man8/mount.lowntfs-3g.8
 #usr/share/man/man8/mount.ntfs-3g.8
 #usr/share/man/man8/ntfs-3g.8
 #usr/share/man/man8/ntfs-3g.probe.8
 #usr/share/man/man8/ntfs-3g.secaudit.8
 #usr/share/man/man8/ntfs-3g.usermap.8
+#usr/share/man/man8/ntfscat.8
+#usr/share/man/man8/ntfsclone.8
+#usr/share/man/man8/ntfscluster.8
+#usr/share/man/man8/ntfscmp.8
+#usr/share/man/man8/ntfscp.8
+#usr/share/man/man8/ntfsfix.8
+#usr/share/man/man8/ntfsinfo.8
+#usr/share/man/man8/ntfslabel.8
+#usr/share/man/man8/ntfsls.8
+#usr/share/man/man8/ntfsprogs.8
+#usr/share/man/man8/ntfsresize.8
+#usr/share/man/man8/ntfsundelete.8
index 2b51e3001134ebcb3c802a2a2337b2b7b5ddef6e..6e4d351c9d8accb2bfdbe7b4c52802c5ebed2e36 100644 (file)
@@ -18,9 +18,6 @@ usr/share/locale/hu/LC_MESSAGES/setup.mo
 usr/share/locale/id/LC_MESSAGES/setup.mo
 usr/share/locale/it/LC_MESSAGES/setup.mo
 usr/share/locale/ja/LC_MESSAGES/setup.mo
-#usr/share/locale/ja_JP
-#usr/share/locale/ja_JP/LC_MESSAGES
-usr/share/locale/ja_JP/LC_MESSAGES/setup.mo
 #usr/share/locale/jv
 #usr/share/locale/jv/LC_MESSAGES
 usr/share/locale/jv/LC_MESSAGES/setup.mo
@@ -37,9 +34,6 @@ usr/share/locale/pt_PT/LC_MESSAGES/setup.mo
 #usr/share/locale/ro_RO/LC_MESSAGES
 usr/share/locale/ro_RO/LC_MESSAGES/setup.mo
 usr/share/locale/ru/LC_MESSAGES/setup.mo
-#usr/share/locale/ru_RU
-#usr/share/locale/ru_RU/LC_MESSAGES
-usr/share/locale/ru_RU/LC_MESSAGES/setup.mo
 usr/share/locale/rw/LC_MESSAGES/setup.mo
 usr/share/locale/sk/LC_MESSAGES/setup.mo
 usr/share/locale/sq/LC_MESSAGES/setup.mo
index 663aef57aed0bfc25dba38bbe6777ea8921fb9f8..44f24b4369504ec1bf84267b689b7244eb75f6c0 100644 (file)
@@ -48,8 +48,6 @@ home/nobody
 #lib
 #lib/firmware
 #lib/firmware/brcm
-lib/firmware/brcm/brcmfmac4329-sdio.txt
-lib/firmware/brcm/brcmfmac4330-sdio.txt
 lib/firmware/brcm/brcmfmac43362-sdio.txt
 #media
 media/cdrom
index e55c43c03b9975fe0f6dd106dc84dba5255cd018..a26a86c3e2bace808fc74e38266a437398b9c4ae 100644 (file)
@@ -30,6 +30,7 @@ etc/strongswan.d/charon/eap-tls.conf
 etc/strongswan.d/charon/eap-ttls.conf
 etc/strongswan.d/charon/farp.conf
 etc/strongswan.d/charon/fips-prf.conf
+etc/strongswan.d/charon/gcm.conf
 etc/strongswan.d/charon/gcrypt.conf
 etc/strongswan.d/charon/gmp.conf
 etc/strongswan.d/charon/hmac.conf
@@ -107,6 +108,7 @@ usr/lib/ipsec/plugins/libstrongswan-eap-tls.so
 usr/lib/ipsec/plugins/libstrongswan-eap-ttls.so
 usr/lib/ipsec/plugins/libstrongswan-farp.so
 usr/lib/ipsec/plugins/libstrongswan-fips-prf.so
+usr/lib/ipsec/plugins/libstrongswan-gcm.so
 usr/lib/ipsec/plugins/libstrongswan-gcrypt.so
 usr/lib/ipsec/plugins/libstrongswan-gmp.so
 usr/lib/ipsec/plugins/libstrongswan-hmac.so
@@ -187,6 +189,7 @@ usr/sbin/ipsec
 #usr/share/strongswan/templates/config/plugins/eap-ttls.conf
 #usr/share/strongswan/templates/config/plugins/farp.conf
 #usr/share/strongswan/templates/config/plugins/fips-prf.conf
+#usr/share/strongswan/templates/config/plugins/gcm.conf
 #usr/share/strongswan/templates/config/plugins/gcrypt.conf
 #usr/share/strongswan/templates/config/plugins/gmp.conf
 #usr/share/strongswan/templates/config/plugins/hmac.conf
index bc1cdaa1ff3ba1ceae448a37f13ed5b8314b6e85..d01c4610158f05d6da4b1febd2f1ac5b1e6ee772 100644 (file)
@@ -2,7 +2,6 @@ bin/udevadm
 etc/modprobe.d/blacklist.conf
 etc/udev
 #etc/udev/rules.d
-#etc/udev/rules.d/30-persistent-network.rules
 #etc/udev/rules.d/55-lfs.rules
 #etc/udev/rules.d/81-cdrom.rules
 #etc/udev/rules.d/83-cdrom-symlinks.rules
@@ -29,6 +28,7 @@ lib/udev
 #lib/udev/hwdb.d/60-keyboard.hwdb
 #lib/udev/init-net-rules.sh
 #lib/udev/mtd_probe
+#lib/udev/network-hotplug-rename
 #lib/udev/rule_generator.functions
 #lib/udev/rules.d
 #lib/udev/rules.d/25-alsa.rules
@@ -37,6 +37,7 @@ lib/udev
 #lib/udev/rules.d/50-udev-default.rules
 #lib/udev/rules.d/60-cdrom_id.rules
 #lib/udev/rules.d/60-keyboard.rules
+#lib/udev/rules.d/60-net.rules
 #lib/udev/rules.d/60-persistent-alsa.rules
 #lib/udev/rules.d/60-persistent-input.rules
 #lib/udev/rules.d/60-persistent-serial.rules
similarity index 55%
rename from config/rootfiles/core/87/filelists/files
rename to config/rootfiles/core/88/filelists/files
index 971e9e9c711b08fbebdca51d3bddc0187889c002..0251b5d6b791232a9e976e5d75f058600e67487e 100644 (file)
@@ -1,4 +1,6 @@
 etc/system-release
 etc/issue
+srv/web/ipfire/cgi-bin/fwhosts.cgi
 srv/web/ipfire/cgi-bin/ovpnmain.cgi
+var/ipfire/backup/bin/backup.pl
 var/ipfire/langs
similarity index 97%
rename from config/rootfiles/core/87/update.sh
rename to config/rootfiles/core/88/update.sh
index f21fc037ac0a5484482db6079fb74c29abe677fe..18dd9af521469b1847e567e0d26d99bc3f4a13b5 100644 (file)
@@ -25,7 +25,7 @@
 /usr/local/bin/backupctrl exclude >/dev/null 2>&1
 
 # Remove old core updates from pakfire cache to save space...
-core=87
+core=88
 for (( i=1; i<=$core; i++ ))
 do
        rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
@@ -48,6 +48,9 @@ rm -f \
        /opt/pakfire/db/installed/meta-sqlite \
        /opt/pakfire/db/rootfiles/sqlite
 
+# Fix #10625
+mkdir -p /etc/logrotate.d
+
 sync
 
 # This update need a reboot...
similarity index 84%
rename from config/rootfiles/core/86/exclude
rename to config/rootfiles/oldcore/87/exclude
index 37c2aaab1fd3a06b028912c3eee7da956e13bf60..5be5371aafeee1541a471dbc75edb8dcc0ad1fb3 100644 (file)
@@ -5,12 +5,15 @@ etc/ipsec.secrets
 etc/ipsec.user.conf
 etc/ipsec.user.secrets
 etc/localtime
+etc/rc.d/rcsysinit.d/S19checkfstab
+etc/rc.d/rcsysinit.d/S70console
 etc/shadow
 etc/ssh/ssh_config
 etc/ssh/sshd_config
 etc/ssl/openssl.cnf
 etc/sudoers
 etc/sysconfig/firewall.local
+etc/sysconfig/modules
 etc/sysconfig/rc.local
 etc/udev/rules.d/30-persistent-network.rules
 srv/web/ipfire/html/proxy.pac
diff --git a/config/rootfiles/oldcore/87/filelists/armv5tel/glibc b/config/rootfiles/oldcore/87/filelists/armv5tel/glibc
new file mode 120000 (symlink)
index 0000000..4c70d72
--- /dev/null
@@ -0,0 +1 @@
+../../../../common/armv5tel/glibc
\ No newline at end of file
similarity index 92%
rename from config/rootfiles/core/86/filelists/files
rename to config/rootfiles/oldcore/87/filelists/files
index 5bdca354c0e550b5523633f28033d8f40dc0df3b..f0c37082515c0cd3c7f498d5821ac5f254837376 100644 (file)
@@ -5,6 +5,7 @@ etc/rc.d/init.d/collectd
 etc/rc.d/init.d/leds
 opt/pakfire/etc/pakfire.conf
 usr/lib/firewall/rules.pl
+usr/local/bin/backupiso
 usr/local/bin/update-bootloader
 usr/local/share/GeoIP/GeoIP.dat
 var/ipfire/header.pl
diff --git a/config/rootfiles/oldcore/87/filelists/hwdata b/config/rootfiles/oldcore/87/filelists/hwdata
new file mode 120000 (symlink)
index 0000000..ced9116
--- /dev/null
@@ -0,0 +1 @@
+../../../common/hwdata
\ No newline at end of file
similarity index 98%
rename from config/rootfiles/core/86/filelists/updated-firmwares
rename to config/rootfiles/oldcore/87/filelists/updated-firmwares
index f923b15d1c0850b072fbc1b5e9474f27826d9bbb..172312f33ff587a2f5fb0b1ae278baa1af3eb6b4 100644 (file)
@@ -200,6 +200,4 @@ lib/firmware/ti-connectivity/wl18xx-fw-3.bin
 lib/firmware/ti-connectivity/wl18xx-fw-4.bin
 lib/firmware/v4l-cx23885-enc-broken.fw
 lib/firmware/WHENCE
-lib/firmware/brcm/brcmfmac4329-sdio.txt
-lib/firmware/brcm/brcmfmac4330-sdio.txt
 lib/firmware/brcm/brcmfmac43362-sdio.txt
similarity index 85%
rename from config/rootfiles/core/86/update.sh
rename to config/rootfiles/oldcore/87/update.sh
index ab72e684e26a6268a5429ca005b2ec3743be47e6..172d854ec7063d8c2e5182cf016902a4d147d422 100644 (file)
 . /opt/pakfire/lib/functions.sh
 /usr/local/bin/backupctrl exclude >/dev/null 2>&1
 
+
+function find_device() {
+       local mountpoint="${1}"
+
+       local root
+       local dev mp fs flags rest
+       while read -r dev mp fs flags rest; do
+               # Skip unwanted entries
+               [ "${dev}" = "rootfs" ] && continue
+
+               if [ "${mp}" = "${mountpoint}" ] && [ -b "${dev}" ]; then
+                       root="$(basename "${dev}")"
+                       break
+               fi
+       done < /proc/mounts
+
+       # Get the actual device from the partition that holds /
+       while [ -n "${root}" ]; do
+               if [ -e "/sys/block/${root}" ]; then
+                       echo "${root}"
+                       return 0
+               fi
+
+               # Remove last character
+               root="${root::-1}"
+       done
+
+       return 1
+}
+
+
 #
 # Remove old core updates from pakfire cache to save space...
-core=86
+core=87
 for (( i=1; i<=${core}; i++ ))
 do
        rm -f /var/cache/pakfire/core-upgrade-*-$i.ipfire
@@ -165,23 +196,31 @@ fi
 
 case "$(uname -m)" in
        i?86)
-               #
-               # Update to GRUB2
-               #
-               echo
-               echo Update grub configuration ...
-               if grep -qE "^serial" /boot/old-grub-config; then
-                       sed -i /etc/default/grub \
-                               -e "s|panic=10|& console=ttyS0,115200n8|g"
-                       echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub
-                       echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
-               fi
+       case "$(find_device "/")" in
+               xvd* )
+                       echo Skip remove grub2 files, because pygrub fail.
+                       rm -f /boot/grub/*
+                       echo config will recreated by linux-pae install.
+                       ;;
+               * )
+                       #
+                       # Update to GRUB2
+                       #
+                       echo
+                       echo Update grub configuration ...
+                       if grep -qE "^serial" /boot/old-grub-config; then
+                               sed -i /etc/default/grub \
+                                       -e "s|panic=10|& console=ttyS0,115200n8|g"
+                               echo "GRUB_TERMINAL=\"serial\"" >> /etc/default/grub
+                               echo "GRUB_SERIAL_COMMAND=\"serial --unit=0 --speed=115200\"" >> /etc/default/grub
+                       fi
 
-               if ! /usr/local/bin/update-bootloader; then
-                       logger -p syslog.emerg -t ipfire \
-                               "Could not update the bootloader!"
-               fi
-               ;;
+                       if ! /usr/local/bin/update-bootloader; then
+                               logger -p syslog.emerg -t ipfire \
+                                       "Could not update the bootloader!"
+                       fi
+                       ;;
+       esac
 esac
 
 # Force (re)install pae kernel if pae is supported
index 60a3a9fa83b108785f6cf2d989849a06165077dd..73533130058563a3a2454e24ae3c2a32f47316ef 100644 (file)
@@ -11,15 +11,15 @@ usr/bin/sigtool
 #usr/lib/libclamav.la
 usr/lib/libclamav.so
 usr/lib/libclamav.so.6
-usr/lib/libclamav.so.6.1.22
+usr/lib/libclamav.so.6.1.25
 #usr/lib/libclamunrar.la
 usr/lib/libclamunrar.so
 usr/lib/libclamunrar.so.6
-usr/lib/libclamunrar.so.6.1.22
+usr/lib/libclamunrar.so.6.1.25
 #usr/lib/libclamunrar_iface.la
 usr/lib/libclamunrar_iface.so
 usr/lib/libclamunrar_iface.so.6
-usr/lib/libclamunrar_iface.so.6.1.22
+usr/lib/libclamunrar_iface.so.6.1.25
 #usr/lib/pkgconfig/libclamav.pc
 usr/sbin/clamd
 usr/share/clamav
@@ -41,6 +41,5 @@ var/ipfire/clamav/clamd.conf
 var/ipfire/clamav/clamd.conf.sample
 var/ipfire/clamav/freshclam.conf
 var/ipfire/clamav/freshclam.conf.sample
-#var/run/clamav
 etc/rc.d/init.d/clamav
 usr/local/bin/clamavctrl
diff --git a/config/rootfiles/packages/haproxy b/config/rootfiles/packages/haproxy
new file mode 100644 (file)
index 0000000..515145d
--- /dev/null
@@ -0,0 +1,8 @@
+#etc/haproxy
+etc/haproxy/haproxy.cfg
+etc/rc.d/init.d/haproxy
+usr/sbin/haproxy
+#usr/sbin/haproxy-systemd-wrapper
+#usr/share/man/man1/haproxy.1
+var/ipfire/backup/addons/includes/haproxy
+var/lib/haproxy
index fed3b09c441758debc9ad91c7285f1739c7145e5..5ce778929daceede65a59e9fb5092bdca1940c6b 100644 (file)
@@ -858,80 +858,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/fontawesome/font/fontawesome-webfont.svg
 #srv/web/owncloud/3rdparty/fontawesome/font/fontawesome-webfont.ttf
 #srv/web/owncloud/3rdparty/fontawesome/font/fontawesome-webfont.woff
-#srv/web/owncloud/3rdparty/getid3
-#srv/web/owncloud/3rdparty/getid3/extension.cache.dbm.php
-#srv/web/owncloud/3rdparty/getid3/extension.cache.mysql.php
-#srv/web/owncloud/3rdparty/getid3/extension.cache.sqlite3.php
-#srv/web/owncloud/3rdparty/getid3/getid3.lib.php
-#srv/web/owncloud/3rdparty/getid3/getid3.php
-#srv/web/owncloud/3rdparty/getid3/license.txt
-#srv/web/owncloud/3rdparty/getid3/module.archive.gzip.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.rar.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.szip.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.tar.php
-#srv/web/owncloud/3rdparty/getid3/module.archive.zip.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.asf.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.bink.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.flv.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.matroska.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.mpeg.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.nsv.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.quicktime.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.real.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.riff.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.swf.php
-#srv/web/owncloud/3rdparty/getid3/module.audio-video.ts.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.aa.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.aac.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.ac3.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.au.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.avr.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.bonk.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.dss.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.dts.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.flac.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.la.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.lpac.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.midi.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.mod.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.monkey.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.mp3.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.mpc.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.ogg.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.optimfrog.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.rkau.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.shorten.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.tta.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.voc.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.vqf.php
-#srv/web/owncloud/3rdparty/getid3/module.audio.wavpack.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.bmp.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.efax.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.gif.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.jpg.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.pcd.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.png.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.svg.php
-#srv/web/owncloud/3rdparty/getid3/module.graphic.tiff.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.cue.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.exe.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.iso.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.msoffice.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.par2.php
-#srv/web/owncloud/3rdparty/getid3/module.misc.pdf.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.apetag.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.id3v1.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.id3v2.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.lyrics3.php
-#srv/web/owncloud/3rdparty/getid3/module.tag.xmp.php
-#srv/web/owncloud/3rdparty/getid3/write.apetag.php
-#srv/web/owncloud/3rdparty/getid3/write.id3v1.php
-#srv/web/owncloud/3rdparty/getid3/write.id3v2.php
-#srv/web/owncloud/3rdparty/getid3/write.lyrics3.php
-#srv/web/owncloud/3rdparty/getid3/write.metaflac.php
-#srv/web/owncloud/3rdparty/getid3/write.php
-#srv/web/owncloud/3rdparty/getid3/write.real.php
-#srv/web/owncloud/3rdparty/getid3/write.vorbiscomment.php
 #srv/web/owncloud/3rdparty/guzzle
 #srv/web/owncloud/3rdparty/guzzle/common
 #srv/web/owncloud/3rdparty/guzzle/common/Guzzle
@@ -1041,26 +967,97 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/guzzle/stream/Guzzle/Stream/StreamInterface.php
 #srv/web/owncloud/3rdparty/guzzle/stream/Guzzle/Stream/StreamRequestFactoryInterface.php
 #srv/web/owncloud/3rdparty/guzzle/stream/Guzzle/Stream/composer.json
-#srv/web/owncloud/3rdparty/isoft
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver/PDODblib
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver/PDODblib/Connection.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Driver/PDODblib/Driver.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Platforms
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Platforms/DblibPlatform.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Readme.md
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/RealestateMssqlBundle.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Schema
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Schema/DblibSchemaManager.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/DateTimeType.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/DateType.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/RealestateDateTime.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/Types/UniqueidentifierType.php
-#srv/web/owncloud/3rdparty/isoft/mssql-bundle/Realestate/MssqlBundle/composer.json
+#srv/web/owncloud/3rdparty/james-heinrich
+#srv/web/owncloud/3rdparty/james-heinrich/getid3
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/.gitattributes
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/README.md
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/changelog.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/composer.json
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/dependencies.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/extension.cache.dbm.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/extension.cache.mysql.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/extension.cache.sqlite3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/getid3.lib.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/getid3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.gzip.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.rar.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.szip.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.tar.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.archive.zip.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.asf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.bink.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.flv.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.matroska.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.mpeg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.nsv.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.quicktime.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.real.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.riff.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.swf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio-video.ts.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.aa.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.aac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.ac3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.amr.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.au.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.avr.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.bonk.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.dss.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.dts.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.flac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.la.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.lpac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.midi.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.mod.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.monkey.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.mp3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.mpc.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.ogg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.optimfrog.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.rkau.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.shorten.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.tta.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.voc.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.vqf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.audio.wavpack.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.bmp.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.efax.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.gif.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.jpg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.pcd.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.png.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.svg.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.graphic.tiff.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.cue.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.exe.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.iso.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.msoffice.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.par2.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.misc.pdf.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.apetag.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.id3v1.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.id3v2.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.lyrics3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/module.tag.xmp.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.apetag.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.id3v1.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.id3v2.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.lyrics3.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.metaflac.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.real.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/getid3/write.vorbiscomment.php
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/license.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.gpl-10.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.gpl-20.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.gpl-30.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.lgpl-30.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/licence.mpl-20.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/licenses/license.commercial.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/readme.txt
+#srv/web/owncloud/3rdparty/james-heinrich/getid3/structure.txt
 #srv/web/owncloud/3rdparty/js
 #srv/web/owncloud/3rdparty/js/chosen
 #srv/web/owncloud/3rdparty/js/chosen/LICENSE.md
@@ -1419,9 +1416,6 @@ srv/web/owncloud
 #srv/web/owncloud/3rdparty/patches.txt
 #srv/web/owncloud/3rdparty/phpass
 #srv/web/owncloud/3rdparty/phpass/PasswordHash.php
-#srv/web/owncloud/3rdparty/phpass/c
-#srv/web/owncloud/3rdparty/phpass/c/Makefile
-#srv/web/owncloud/3rdparty/phpass/c/crypt_private.c
 #srv/web/owncloud/3rdparty/phpass/test.php
 #srv/web/owncloud/3rdparty/phpmailer
 #srv/web/owncloud/3rdparty/phpmailer/phpmailer
@@ -3206,17 +3200,16 @@ srv/web/owncloud
 #srv/web/owncloud/apps/activity/l10n/hy.php
 #srv/web/owncloud/apps/activity/l10n/ia.php
 #srv/web/owncloud/apps/activity/l10n/id.php
+#srv/web/owncloud/apps/activity/l10n/io.php
 #srv/web/owncloud/apps/activity/l10n/is.php
 #srv/web/owncloud/apps/activity/l10n/it.php
 #srv/web/owncloud/apps/activity/l10n/ja.php
-#srv/web/owncloud/apps/activity/l10n/ja_JP.php
 #srv/web/owncloud/apps/activity/l10n/jv.php
 #srv/web/owncloud/apps/activity/l10n/ka_GE.php
 #srv/web/owncloud/apps/activity/l10n/km.php
 #srv/web/owncloud/apps/activity/l10n/kn.php
 #srv/web/owncloud/apps/activity/l10n/ko.php
 #srv/web/owncloud/apps/activity/l10n/ku_IQ.php
-#srv/web/owncloud/apps/activity/l10n/l10n.pl
 #srv/web/owncloud/apps/activity/l10n/lb.php
 #srv/web/owncloud/apps/activity/l10n/lt_LT.php
 #srv/web/owncloud/apps/activity/l10n/lv.php
@@ -3300,6 +3293,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/activity/tests/hooksdeleteusertest.php
 #srv/web/owncloud/apps/activity/tests/mailqueuehandlertest.php
 #srv/web/owncloud/apps/activity/tests/navigationtest.php
+#srv/web/owncloud/apps/activity/tests/parameterhelpertest.php
 #srv/web/owncloud/apps/activity/tests/phpunit.xml
 #srv/web/owncloud/apps/activity/tests/usersettingstest.php
 #srv/web/owncloud/apps/admin_dependencies_chk
@@ -3416,330 +3410,212 @@ srv/web/owncloud
 #srv/web/owncloud/apps/bookmarks/js/full_tags.php
 #srv/web/owncloud/apps/bookmarks/js/settings.js
 #srv/web/owncloud/apps/bookmarks/l10n
-#srv/web/owncloud/apps/bookmarks/l10n/ach
-#srv/web/owncloud/apps/bookmarks/l10n/ach/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ady
-#srv/web/owncloud/apps/bookmarks/l10n/ady/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/af
-#srv/web/owncloud/apps/bookmarks/l10n/af/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/af_ZA
 #srv/web/owncloud/apps/bookmarks/l10n/af_ZA.php
-#srv/web/owncloud/apps/bookmarks/l10n/af_ZA/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ak
-#srv/web/owncloud/apps/bookmarks/l10n/ak/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/am_ET
-#srv/web/owncloud/apps/bookmarks/l10n/am_ET/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ar
+#srv/web/owncloud/apps/bookmarks/l10n/ar.js
+#srv/web/owncloud/apps/bookmarks/l10n/ar.json
 #srv/web/owncloud/apps/bookmarks/l10n/ar.php
-#srv/web/owncloud/apps/bookmarks/l10n/ar/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ast
+#srv/web/owncloud/apps/bookmarks/l10n/ast.js
+#srv/web/owncloud/apps/bookmarks/l10n/ast.json
 #srv/web/owncloud/apps/bookmarks/l10n/ast.php
-#srv/web/owncloud/apps/bookmarks/l10n/ast/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/az
-#srv/web/owncloud/apps/bookmarks/l10n/az/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/be
+#srv/web/owncloud/apps/bookmarks/l10n/az.js
+#srv/web/owncloud/apps/bookmarks/l10n/az.json
+#srv/web/owncloud/apps/bookmarks/l10n/az.php
 #srv/web/owncloud/apps/bookmarks/l10n/be.php
-#srv/web/owncloud/apps/bookmarks/l10n/be/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bg_BG
+#srv/web/owncloud/apps/bookmarks/l10n/bg_BG.js
+#srv/web/owncloud/apps/bookmarks/l10n/bg_BG.json
 #srv/web/owncloud/apps/bookmarks/l10n/bg_BG.php
-#srv/web/owncloud/apps/bookmarks/l10n/bg_BG/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bn_BD
+#srv/web/owncloud/apps/bookmarks/l10n/bn_BD.js
+#srv/web/owncloud/apps/bookmarks/l10n/bn_BD.json
 #srv/web/owncloud/apps/bookmarks/l10n/bn_BD.php
-#srv/web/owncloud/apps/bookmarks/l10n/bn_BD/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bn_IN
-#srv/web/owncloud/apps/bookmarks/l10n/bn_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/bs
+#srv/web/owncloud/apps/bookmarks/l10n/bn_IN.js
+#srv/web/owncloud/apps/bookmarks/l10n/bn_IN.json
+#srv/web/owncloud/apps/bookmarks/l10n/bn_IN.php
 #srv/web/owncloud/apps/bookmarks/l10n/bs.php
-#srv/web/owncloud/apps/bookmarks/l10n/bs/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ca
+#srv/web/owncloud/apps/bookmarks/l10n/ca.js
+#srv/web/owncloud/apps/bookmarks/l10n/ca.json
 #srv/web/owncloud/apps/bookmarks/l10n/ca.php
-#srv/web/owncloud/apps/bookmarks/l10n/ca/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ca@valencia
-#srv/web/owncloud/apps/bookmarks/l10n/ca@valencia/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ
+#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ.js
+#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ.json
 #srv/web/owncloud/apps/bookmarks/l10n/cs_CZ.php
-#srv/web/owncloud/apps/bookmarks/l10n/cs_CZ/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/cy_GB
+#srv/web/owncloud/apps/bookmarks/l10n/cy_GB.js
+#srv/web/owncloud/apps/bookmarks/l10n/cy_GB.json
 #srv/web/owncloud/apps/bookmarks/l10n/cy_GB.php
-#srv/web/owncloud/apps/bookmarks/l10n/cy_GB/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/da
+#srv/web/owncloud/apps/bookmarks/l10n/da.js
+#srv/web/owncloud/apps/bookmarks/l10n/da.json
 #srv/web/owncloud/apps/bookmarks/l10n/da.php
-#srv/web/owncloud/apps/bookmarks/l10n/da/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de
+#srv/web/owncloud/apps/bookmarks/l10n/de.js
+#srv/web/owncloud/apps/bookmarks/l10n/de.json
 #srv/web/owncloud/apps/bookmarks/l10n/de.php
-#srv/web/owncloud/apps/bookmarks/l10n/de/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de_AT
 #srv/web/owncloud/apps/bookmarks/l10n/de_AT.php
-#srv/web/owncloud/apps/bookmarks/l10n/de_AT/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de_CH
+#srv/web/owncloud/apps/bookmarks/l10n/de_CH.js
+#srv/web/owncloud/apps/bookmarks/l10n/de_CH.json
 #srv/web/owncloud/apps/bookmarks/l10n/de_CH.php
-#srv/web/owncloud/apps/bookmarks/l10n/de_CH/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/de_DE
+#srv/web/owncloud/apps/bookmarks/l10n/de_DE.js
+#srv/web/owncloud/apps/bookmarks/l10n/de_DE.json
 #srv/web/owncloud/apps/bookmarks/l10n/de_DE.php
-#srv/web/owncloud/apps/bookmarks/l10n/de_DE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/el
+#srv/web/owncloud/apps/bookmarks/l10n/el.js
+#srv/web/owncloud/apps/bookmarks/l10n/el.json
 #srv/web/owncloud/apps/bookmarks/l10n/el.php
-#srv/web/owncloud/apps/bookmarks/l10n/el/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/en@pirate
-#srv/web/owncloud/apps/bookmarks/l10n/en@pirate/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/en_GB
+#srv/web/owncloud/apps/bookmarks/l10n/en_GB.js
+#srv/web/owncloud/apps/bookmarks/l10n/en_GB.json
 #srv/web/owncloud/apps/bookmarks/l10n/en_GB.php
-#srv/web/owncloud/apps/bookmarks/l10n/en_GB/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/en_NZ
-#srv/web/owncloud/apps/bookmarks/l10n/en_NZ/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/eo
+#srv/web/owncloud/apps/bookmarks/l10n/eo.js
+#srv/web/owncloud/apps/bookmarks/l10n/eo.json
 #srv/web/owncloud/apps/bookmarks/l10n/eo.php
-#srv/web/owncloud/apps/bookmarks/l10n/eo/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es
+#srv/web/owncloud/apps/bookmarks/l10n/es.js
+#srv/web/owncloud/apps/bookmarks/l10n/es.json
 #srv/web/owncloud/apps/bookmarks/l10n/es.php
-#srv/web/owncloud/apps/bookmarks/l10n/es/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_AR
+#srv/web/owncloud/apps/bookmarks/l10n/es_AR.js
+#srv/web/owncloud/apps/bookmarks/l10n/es_AR.json
 #srv/web/owncloud/apps/bookmarks/l10n/es_AR.php
-#srv/web/owncloud/apps/bookmarks/l10n/es_AR/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_BO
-#srv/web/owncloud/apps/bookmarks/l10n/es_BO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_CL
 #srv/web/owncloud/apps/bookmarks/l10n/es_CL.php
-#srv/web/owncloud/apps/bookmarks/l10n/es_CL/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_CO
-#srv/web/owncloud/apps/bookmarks/l10n/es_CO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_CR
-#srv/web/owncloud/apps/bookmarks/l10n/es_CR/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_EC
-#srv/web/owncloud/apps/bookmarks/l10n/es_EC/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_MX
+#srv/web/owncloud/apps/bookmarks/l10n/es_MX.js
+#srv/web/owncloud/apps/bookmarks/l10n/es_MX.json
 #srv/web/owncloud/apps/bookmarks/l10n/es_MX.php
-#srv/web/owncloud/apps/bookmarks/l10n/es_MX/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_PE
-#srv/web/owncloud/apps/bookmarks/l10n/es_PE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_PY
-#srv/web/owncloud/apps/bookmarks/l10n/es_PY/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_US
-#srv/web/owncloud/apps/bookmarks/l10n/es_US/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/es_UY
-#srv/web/owncloud/apps/bookmarks/l10n/es_UY/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/et_EE
+#srv/web/owncloud/apps/bookmarks/l10n/et_EE.js
+#srv/web/owncloud/apps/bookmarks/l10n/et_EE.json
 #srv/web/owncloud/apps/bookmarks/l10n/et_EE.php
-#srv/web/owncloud/apps/bookmarks/l10n/et_EE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/eu
+#srv/web/owncloud/apps/bookmarks/l10n/eu.js
+#srv/web/owncloud/apps/bookmarks/l10n/eu.json
 #srv/web/owncloud/apps/bookmarks/l10n/eu.php
-#srv/web/owncloud/apps/bookmarks/l10n/eu/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/eu_ES
 #srv/web/owncloud/apps/bookmarks/l10n/eu_ES.php
-#srv/web/owncloud/apps/bookmarks/l10n/eu_ES/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fa
+#srv/web/owncloud/apps/bookmarks/l10n/fa.js
+#srv/web/owncloud/apps/bookmarks/l10n/fa.json
 #srv/web/owncloud/apps/bookmarks/l10n/fa.php
-#srv/web/owncloud/apps/bookmarks/l10n/fa/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fi
 #srv/web/owncloud/apps/bookmarks/l10n/fi.php
-#srv/web/owncloud/apps/bookmarks/l10n/fi/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fi_FI
+#srv/web/owncloud/apps/bookmarks/l10n/fi_FI.js
+#srv/web/owncloud/apps/bookmarks/l10n/fi_FI.json
 #srv/web/owncloud/apps/bookmarks/l10n/fi_FI.php
-#srv/web/owncloud/apps/bookmarks/l10n/fi_FI/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fr
+#srv/web/owncloud/apps/bookmarks/l10n/fr.js
+#srv/web/owncloud/apps/bookmarks/l10n/fr.json
 #srv/web/owncloud/apps/bookmarks/l10n/fr.php
-#srv/web/owncloud/apps/bookmarks/l10n/fr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/fr_CA
-#srv/web/owncloud/apps/bookmarks/l10n/fr_CA/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/gl
+#srv/web/owncloud/apps/bookmarks/l10n/gl.js
+#srv/web/owncloud/apps/bookmarks/l10n/gl.json
 #srv/web/owncloud/apps/bookmarks/l10n/gl.php
-#srv/web/owncloud/apps/bookmarks/l10n/gl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/he
+#srv/web/owncloud/apps/bookmarks/l10n/he.js
+#srv/web/owncloud/apps/bookmarks/l10n/he.json
 #srv/web/owncloud/apps/bookmarks/l10n/he.php
-#srv/web/owncloud/apps/bookmarks/l10n/he/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hi
 #srv/web/owncloud/apps/bookmarks/l10n/hi.php
-#srv/web/owncloud/apps/bookmarks/l10n/hi/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hi_IN
-#srv/web/owncloud/apps/bookmarks/l10n/hi_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hr
 #srv/web/owncloud/apps/bookmarks/l10n/hr.php
-#srv/web/owncloud/apps/bookmarks/l10n/hr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hu_HU
+#srv/web/owncloud/apps/bookmarks/l10n/hu_HU.js
+#srv/web/owncloud/apps/bookmarks/l10n/hu_HU.json
 #srv/web/owncloud/apps/bookmarks/l10n/hu_HU.php
-#srv/web/owncloud/apps/bookmarks/l10n/hu_HU/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/hy
 #srv/web/owncloud/apps/bookmarks/l10n/hy.php
-#srv/web/owncloud/apps/bookmarks/l10n/hy/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ia
+#srv/web/owncloud/apps/bookmarks/l10n/ia.js
+#srv/web/owncloud/apps/bookmarks/l10n/ia.json
 #srv/web/owncloud/apps/bookmarks/l10n/ia.php
-#srv/web/owncloud/apps/bookmarks/l10n/ia/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/id
+#srv/web/owncloud/apps/bookmarks/l10n/id.js
+#srv/web/owncloud/apps/bookmarks/l10n/id.json
 #srv/web/owncloud/apps/bookmarks/l10n/id.php
-#srv/web/owncloud/apps/bookmarks/l10n/id/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/is
+#srv/web/owncloud/apps/bookmarks/l10n/is.js
+#srv/web/owncloud/apps/bookmarks/l10n/is.json
 #srv/web/owncloud/apps/bookmarks/l10n/is.php
-#srv/web/owncloud/apps/bookmarks/l10n/is/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/it
+#srv/web/owncloud/apps/bookmarks/l10n/it.js
+#srv/web/owncloud/apps/bookmarks/l10n/it.json
 #srv/web/owncloud/apps/bookmarks/l10n/it.php
-#srv/web/owncloud/apps/bookmarks/l10n/it/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ja
+#srv/web/owncloud/apps/bookmarks/l10n/ja.js
+#srv/web/owncloud/apps/bookmarks/l10n/ja.json
 #srv/web/owncloud/apps/bookmarks/l10n/ja.php
-#srv/web/owncloud/apps/bookmarks/l10n/ja/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ja_JP.php
-#srv/web/owncloud/apps/bookmarks/l10n/jv
 #srv/web/owncloud/apps/bookmarks/l10n/jv.php
-#srv/web/owncloud/apps/bookmarks/l10n/jv/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ka
-#srv/web/owncloud/apps/bookmarks/l10n/ka/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ka_GE
+#srv/web/owncloud/apps/bookmarks/l10n/ka_GE.js
+#srv/web/owncloud/apps/bookmarks/l10n/ka_GE.json
 #srv/web/owncloud/apps/bookmarks/l10n/ka_GE.php
-#srv/web/owncloud/apps/bookmarks/l10n/ka_GE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/km
+#srv/web/owncloud/apps/bookmarks/l10n/km.js
+#srv/web/owncloud/apps/bookmarks/l10n/km.json
 #srv/web/owncloud/apps/bookmarks/l10n/km.php
-#srv/web/owncloud/apps/bookmarks/l10n/km/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/kn
-#srv/web/owncloud/apps/bookmarks/l10n/kn/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ko
+#srv/web/owncloud/apps/bookmarks/l10n/ko.js
+#srv/web/owncloud/apps/bookmarks/l10n/ko.json
 #srv/web/owncloud/apps/bookmarks/l10n/ko.php
-#srv/web/owncloud/apps/bookmarks/l10n/ko/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ku_IQ
 #srv/web/owncloud/apps/bookmarks/l10n/ku_IQ.php
-#srv/web/owncloud/apps/bookmarks/l10n/ku_IQ/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/l10n.pl
-#srv/web/owncloud/apps/bookmarks/l10n/lb
+#srv/web/owncloud/apps/bookmarks/l10n/lb.js
+#srv/web/owncloud/apps/bookmarks/l10n/lb.json
 #srv/web/owncloud/apps/bookmarks/l10n/lb.php
-#srv/web/owncloud/apps/bookmarks/l10n/lb/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/lt_LT
+#srv/web/owncloud/apps/bookmarks/l10n/lt_LT.js
+#srv/web/owncloud/apps/bookmarks/l10n/lt_LT.json
 #srv/web/owncloud/apps/bookmarks/l10n/lt_LT.php
-#srv/web/owncloud/apps/bookmarks/l10n/lt_LT/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/lv
+#srv/web/owncloud/apps/bookmarks/l10n/lv.js
+#srv/web/owncloud/apps/bookmarks/l10n/lv.json
 #srv/web/owncloud/apps/bookmarks/l10n/lv.php
-#srv/web/owncloud/apps/bookmarks/l10n/lv/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/mk
+#srv/web/owncloud/apps/bookmarks/l10n/mk.js
+#srv/web/owncloud/apps/bookmarks/l10n/mk.json
 #srv/web/owncloud/apps/bookmarks/l10n/mk.php
-#srv/web/owncloud/apps/bookmarks/l10n/mk/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ml
-#srv/web/owncloud/apps/bookmarks/l10n/ml/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ml_IN
-#srv/web/owncloud/apps/bookmarks/l10n/ml_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/mn
-#srv/web/owncloud/apps/bookmarks/l10n/mn/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ms_MY
 #srv/web/owncloud/apps/bookmarks/l10n/ms_MY.php
-#srv/web/owncloud/apps/bookmarks/l10n/ms_MY/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/my_MM
 #srv/web/owncloud/apps/bookmarks/l10n/my_MM.php
-#srv/web/owncloud/apps/bookmarks/l10n/my_MM/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nb_NO
+#srv/web/owncloud/apps/bookmarks/l10n/nb_NO.js
+#srv/web/owncloud/apps/bookmarks/l10n/nb_NO.json
 #srv/web/owncloud/apps/bookmarks/l10n/nb_NO.php
-#srv/web/owncloud/apps/bookmarks/l10n/nb_NO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nds
-#srv/web/owncloud/apps/bookmarks/l10n/nds/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ne
-#srv/web/owncloud/apps/bookmarks/l10n/ne/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nl
+#srv/web/owncloud/apps/bookmarks/l10n/nl.js
+#srv/web/owncloud/apps/bookmarks/l10n/nl.json
 #srv/web/owncloud/apps/bookmarks/l10n/nl.php
-#srv/web/owncloud/apps/bookmarks/l10n/nl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nn_NO
+#srv/web/owncloud/apps/bookmarks/l10n/nn_NO.js
+#srv/web/owncloud/apps/bookmarks/l10n/nn_NO.json
 #srv/web/owncloud/apps/bookmarks/l10n/nn_NO.php
-#srv/web/owncloud/apps/bookmarks/l10n/nn_NO/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/nqo
-#srv/web/owncloud/apps/bookmarks/l10n/nqo/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/oc
 #srv/web/owncloud/apps/bookmarks/l10n/oc.php
-#srv/web/owncloud/apps/bookmarks/l10n/oc/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/or_IN
-#srv/web/owncloud/apps/bookmarks/l10n/or_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pa
 #srv/web/owncloud/apps/bookmarks/l10n/pa.php
-#srv/web/owncloud/apps/bookmarks/l10n/pa/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pl
+#srv/web/owncloud/apps/bookmarks/l10n/pl.js
+#srv/web/owncloud/apps/bookmarks/l10n/pl.json
 #srv/web/owncloud/apps/bookmarks/l10n/pl.php
-#srv/web/owncloud/apps/bookmarks/l10n/pl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pl_PL
 #srv/web/owncloud/apps/bookmarks/l10n/pl_PL.php
-#srv/web/owncloud/apps/bookmarks/l10n/pl_PL/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pt_BR
+#srv/web/owncloud/apps/bookmarks/l10n/pt_BR.js
+#srv/web/owncloud/apps/bookmarks/l10n/pt_BR.json
 #srv/web/owncloud/apps/bookmarks/l10n/pt_BR.php
-#srv/web/owncloud/apps/bookmarks/l10n/pt_BR/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/pt_PT
+#srv/web/owncloud/apps/bookmarks/l10n/pt_PT.js
+#srv/web/owncloud/apps/bookmarks/l10n/pt_PT.json
 #srv/web/owncloud/apps/bookmarks/l10n/pt_PT.php
-#srv/web/owncloud/apps/bookmarks/l10n/pt_PT/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ro
+#srv/web/owncloud/apps/bookmarks/l10n/ro.js
+#srv/web/owncloud/apps/bookmarks/l10n/ro.json
 #srv/web/owncloud/apps/bookmarks/l10n/ro.php
-#srv/web/owncloud/apps/bookmarks/l10n/ro/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ru
+#srv/web/owncloud/apps/bookmarks/l10n/ru.js
+#srv/web/owncloud/apps/bookmarks/l10n/ru.json
 #srv/web/owncloud/apps/bookmarks/l10n/ru.php
-#srv/web/owncloud/apps/bookmarks/l10n/ru/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ru_RU
 #srv/web/owncloud/apps/bookmarks/l10n/ru_RU.php
-#srv/web/owncloud/apps/bookmarks/l10n/ru_RU/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/si_LK
+#srv/web/owncloud/apps/bookmarks/l10n/si_LK.js
+#srv/web/owncloud/apps/bookmarks/l10n/si_LK.json
 #srv/web/owncloud/apps/bookmarks/l10n/si_LK.php
-#srv/web/owncloud/apps/bookmarks/l10n/si_LK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sk
 #srv/web/owncloud/apps/bookmarks/l10n/sk.php
-#srv/web/owncloud/apps/bookmarks/l10n/sk/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sk_SK
+#srv/web/owncloud/apps/bookmarks/l10n/sk_SK.js
+#srv/web/owncloud/apps/bookmarks/l10n/sk_SK.json
 #srv/web/owncloud/apps/bookmarks/l10n/sk_SK.php
-#srv/web/owncloud/apps/bookmarks/l10n/sk_SK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sl
+#srv/web/owncloud/apps/bookmarks/l10n/sl.js
+#srv/web/owncloud/apps/bookmarks/l10n/sl.json
 #srv/web/owncloud/apps/bookmarks/l10n/sl.php
-#srv/web/owncloud/apps/bookmarks/l10n/sl/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sq
 #srv/web/owncloud/apps/bookmarks/l10n/sq.php
-#srv/web/owncloud/apps/bookmarks/l10n/sq/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sr
+#srv/web/owncloud/apps/bookmarks/l10n/sr.js
+#srv/web/owncloud/apps/bookmarks/l10n/sr.json
 #srv/web/owncloud/apps/bookmarks/l10n/sr.php
-#srv/web/owncloud/apps/bookmarks/l10n/sr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sr@latin
 #srv/web/owncloud/apps/bookmarks/l10n/sr@latin.php
-#srv/web/owncloud/apps/bookmarks/l10n/sr@latin/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/su
-#srv/web/owncloud/apps/bookmarks/l10n/su/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sv
+#srv/web/owncloud/apps/bookmarks/l10n/sv.js
+#srv/web/owncloud/apps/bookmarks/l10n/sv.json
 #srv/web/owncloud/apps/bookmarks/l10n/sv.php
-#srv/web/owncloud/apps/bookmarks/l10n/sv/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/sw_KE
-#srv/web/owncloud/apps/bookmarks/l10n/sw_KE/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ta_IN
-#srv/web/owncloud/apps/bookmarks/l10n/ta_IN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ta_LK
+#srv/web/owncloud/apps/bookmarks/l10n/ta_IN.php
+#srv/web/owncloud/apps/bookmarks/l10n/ta_LK.js
+#srv/web/owncloud/apps/bookmarks/l10n/ta_LK.json
 #srv/web/owncloud/apps/bookmarks/l10n/ta_LK.php
-#srv/web/owncloud/apps/bookmarks/l10n/ta_LK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/te
 #srv/web/owncloud/apps/bookmarks/l10n/te.php
-#srv/web/owncloud/apps/bookmarks/l10n/te/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/templates
-#srv/web/owncloud/apps/bookmarks/l10n/templates/bookmarks.pot
-#srv/web/owncloud/apps/bookmarks/l10n/th_TH
+#srv/web/owncloud/apps/bookmarks/l10n/th_TH.js
+#srv/web/owncloud/apps/bookmarks/l10n/th_TH.json
 #srv/web/owncloud/apps/bookmarks/l10n/th_TH.php
-#srv/web/owncloud/apps/bookmarks/l10n/th_TH/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/tr
+#srv/web/owncloud/apps/bookmarks/l10n/tr.js
+#srv/web/owncloud/apps/bookmarks/l10n/tr.json
 #srv/web/owncloud/apps/bookmarks/l10n/tr.php
-#srv/web/owncloud/apps/bookmarks/l10n/tr/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/tzm
-#srv/web/owncloud/apps/bookmarks/l10n/tzm/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ug
+#srv/web/owncloud/apps/bookmarks/l10n/ug.js
+#srv/web/owncloud/apps/bookmarks/l10n/ug.json
 #srv/web/owncloud/apps/bookmarks/l10n/ug.php
-#srv/web/owncloud/apps/bookmarks/l10n/ug/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/uk
+#srv/web/owncloud/apps/bookmarks/l10n/uk.js
+#srv/web/owncloud/apps/bookmarks/l10n/uk.json
 #srv/web/owncloud/apps/bookmarks/l10n/uk.php
-#srv/web/owncloud/apps/bookmarks/l10n/uk/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ur
-#srv/web/owncloud/apps/bookmarks/l10n/ur/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/ur_PK
 #srv/web/owncloud/apps/bookmarks/l10n/ur_PK.php
-#srv/web/owncloud/apps/bookmarks/l10n/ur_PK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/uz
-#srv/web/owncloud/apps/bookmarks/l10n/uz/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/vi
+#srv/web/owncloud/apps/bookmarks/l10n/vi.js
+#srv/web/owncloud/apps/bookmarks/l10n/vi.json
 #srv/web/owncloud/apps/bookmarks/l10n/vi.php
-#srv/web/owncloud/apps/bookmarks/l10n/vi/bookmarks.po
 #srv/web/owncloud/apps/bookmarks/l10n/xgettextfiles
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.GB2312
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.GB2312.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.GB2312/bookmarks.po
+#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.js
+#srv/web/owncloud/apps/bookmarks/l10n/zh_CN.json
 #srv/web/owncloud/apps/bookmarks/l10n/zh_CN.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_CN/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/zh_HK
 #srv/web/owncloud/apps/bookmarks/l10n/zh_HK.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_HK/bookmarks.po
-#srv/web/owncloud/apps/bookmarks/l10n/zh_TW
+#srv/web/owncloud/apps/bookmarks/l10n/zh_TW.js
+#srv/web/owncloud/apps/bookmarks/l10n/zh_TW.json
 #srv/web/owncloud/apps/bookmarks/l10n/zh_TW.php
-#srv/web/owncloud/apps/bookmarks/l10n/zh_TW/bookmarks.po
 #srv/web/owncloud/apps/bookmarks/lib
 #srv/web/owncloud/apps/bookmarks/lib/bookmarks.php
 #srv/web/owncloud/apps/bookmarks/lib/search.php
@@ -3749,7 +3625,9 @@ srv/web/owncloud
 #srv/web/owncloud/apps/bookmarks/templates/list.php
 #srv/web/owncloud/apps/bookmarks/templates/settings.php
 #srv/web/owncloud/apps/bookmarks/tests
-#srv/web/owncloud/apps/bookmarks/tests/lib_bookmark.php
+#srv/web/owncloud/apps/bookmarks/tests/bootstrap.php
+#srv/web/owncloud/apps/bookmarks/tests/lib_bookmark_test.php
+#srv/web/owncloud/apps/bookmarks/tests/phpunit.xml
 #srv/web/owncloud/apps/calendar
 #srv/web/owncloud/apps/calendar/3rdparty
 #srv/web/owncloud/apps/calendar/3rdparty/fullcalendar
@@ -4624,7 +4502,9 @@ srv/web/owncloud
 #srv/web/owncloud/apps/contacts/lib/jsonresponse.php
 #srv/web/owncloud/apps/contacts/lib/middleware
 #srv/web/owncloud/apps/contacts/lib/middleware/http.php
-#srv/web/owncloud/apps/contacts/lib/searchprovider.php
+#srv/web/owncloud/apps/contacts/lib/search
+#srv/web/owncloud/apps/contacts/lib/search/contact.php
+#srv/web/owncloud/apps/contacts/lib/search/provider.php
 #srv/web/owncloud/apps/contacts/lib/share
 #srv/web/owncloud/apps/contacts/lib/share/addressbook.php
 #srv/web/owncloud/apps/contacts/lib/share/contact.php
@@ -6973,6 +6853,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_external/ajax
 #srv/web/owncloud/apps/files_external/ajax/addMountPoint.php
 #srv/web/owncloud/apps/files_external/ajax/addRootCertificate.php
+#srv/web/owncloud/apps/files_external/ajax/applicable.php
 #srv/web/owncloud/apps/files_external/ajax/dropbox.php
 #srv/web/owncloud/apps/files_external/ajax/google.php
 #srv/web/owncloud/apps/files_external/ajax/removeMountPoint.php
@@ -7077,6 +6958,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_external/lib/api.php
 #srv/web/owncloud/apps/files_external/lib/config.php
 #srv/web/owncloud/apps/files_external/lib/dropbox.php
+#srv/web/owncloud/apps/files_external/lib/etagpropagator.php
 #srv/web/owncloud/apps/files_external/lib/ftp.php
 #srv/web/owncloud/apps/files_external/lib/google.php
 #srv/web/owncloud/apps/files_external/lib/owncloud.php
@@ -7094,16 +6976,19 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_external/templates/settings.php
 #srv/web/owncloud/apps/files_external/tests
 #srv/web/owncloud/apps/files_external/tests/amazons3.php
+#srv/web/owncloud/apps/files_external/tests/amazons3migration.php
 #srv/web/owncloud/apps/files_external/tests/appSpec.js
 #srv/web/owncloud/apps/files_external/tests/config.php
 #srv/web/owncloud/apps/files_external/tests/dropbox.php
 #srv/web/owncloud/apps/files_external/tests/dynamicmountconfig.php
+#srv/web/owncloud/apps/files_external/tests/etagpropagator.php
 #srv/web/owncloud/apps/files_external/tests/ftp.php
 #srv/web/owncloud/apps/files_external/tests/google.php
 #srv/web/owncloud/apps/files_external/tests/js
 #srv/web/owncloud/apps/files_external/tests/js/mountsfilelistSpec.js
 #srv/web/owncloud/apps/files_external/tests/mountconfig.php
 #srv/web/owncloud/apps/files_external/tests/owncloud.php
+#srv/web/owncloud/apps/files_external/tests/owncloudfunctions.php
 #srv/web/owncloud/apps/files_external/tests/sftp.php
 #srv/web/owncloud/apps/files_external/tests/smb.php
 #srv/web/owncloud/apps/files_external/tests/smbfunctions.php
@@ -7383,6 +7268,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_sharing/lib/cache.php
 #srv/web/owncloud/apps/files_sharing/lib/connector
 #srv/web/owncloud/apps/files_sharing/lib/connector/publicauth.php
+#srv/web/owncloud/apps/files_sharing/lib/exceptions.php
 #srv/web/owncloud/apps/files_sharing/lib/external
 #srv/web/owncloud/apps/files_sharing/lib/external/cache.php
 #srv/web/owncloud/apps/files_sharing/lib/external/manager.php
@@ -7414,9 +7300,11 @@ srv/web/owncloud
 #srv/web/owncloud/apps/files_sharing/templates/settings-admin.php
 #srv/web/owncloud/apps/files_sharing/tests
 #srv/web/owncloud/apps/files_sharing/tests/api.php
+#srv/web/owncloud/apps/files_sharing/tests/backend.php
 #srv/web/owncloud/apps/files_sharing/tests/base.php
 #srv/web/owncloud/apps/files_sharing/tests/cache.php
 #srv/web/owncloud/apps/files_sharing/tests/externalstorage.php
+#srv/web/owncloud/apps/files_sharing/tests/helper.php
 #srv/web/owncloud/apps/files_sharing/tests/js
 #srv/web/owncloud/apps/files_sharing/tests/js/appSpec.js
 #srv/web/owncloud/apps/files_sharing/tests/js/shareSpec.js
@@ -8812,9 +8700,11 @@ srv/web/owncloud
 #srv/web/owncloud/apps/updater/admin.php
 #srv/web/owncloud/apps/updater/ajax
 #srv/web/owncloud/apps/updater/ajax/backup
+#srv/web/owncloud/apps/updater/ajax/backup.php
 #srv/web/owncloud/apps/updater/ajax/backup/delete.php
 #srv/web/owncloud/apps/updater/ajax/backup/download.php
 #srv/web/owncloud/apps/updater/ajax/backup/list.php
+#srv/web/owncloud/apps/updater/ajax/download.php
 #srv/web/owncloud/apps/updater/ajax/update.php
 #srv/web/owncloud/apps/updater/appinfo
 #srv/web/owncloud/apps/updater/appinfo/app.php
@@ -8911,13 +8801,16 @@ srv/web/owncloud
 #srv/web/owncloud/apps/updater/lib
 #srv/web/owncloud/apps/updater/lib/app.php
 #srv/web/owncloud/apps/updater/lib/backup.php
+#srv/web/owncloud/apps/updater/lib/collection.php
 #srv/web/owncloud/apps/updater/lib/downloader.php
+#srv/web/owncloud/apps/updater/lib/fsexception.php
 #srv/web/owncloud/apps/updater/lib/helper.php
 #srv/web/owncloud/apps/updater/lib/location
 #srv/web/owncloud/apps/updater/lib/location.php
 #srv/web/owncloud/apps/updater/lib/location/3rdparty.php
 #srv/web/owncloud/apps/updater/lib/location/apps.php
 #srv/web/owncloud/apps/updater/lib/location/core.php
+#srv/web/owncloud/apps/updater/lib/permissionexception.php
 #srv/web/owncloud/apps/updater/lib/updater.php
 #srv/web/owncloud/apps/updater/templates
 #srv/web/owncloud/apps/updater/templates/admin.php
@@ -8966,6 +8859,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/user_ldap/group_ldap.php
 #srv/web/owncloud/apps/user_ldap/group_proxy.php
 #srv/web/owncloud/apps/user_ldap/js
+#srv/web/owncloud/apps/user_ldap/js/experiencedAdmin.js
 #srv/web/owncloud/apps/user_ldap/js/ldapFilter.js
 #srv/web/owncloud/apps/user_ldap/js/settings.js
 #srv/web/owncloud/apps/user_ldap/l10n
@@ -9118,6 +9012,7 @@ srv/web/owncloud
 #srv/web/owncloud/apps/user_ldap/tests/data
 #srv/web/owncloud/apps/user_ldap/tests/data/sid.dat
 #srv/web/owncloud/apps/user_ldap/tests/group_ldap.php
+#srv/web/owncloud/apps/user_ldap/tests/helper.php
 #srv/web/owncloud/apps/user_ldap/tests/user
 #srv/web/owncloud/apps/user_ldap/tests/user/manager.php
 #srv/web/owncloud/apps/user_ldap/tests/user/user.php
@@ -9266,155 +9161,54 @@ srv/web/owncloud
 #srv/web/owncloud/core/css/jquery.ocdialog.css
 #srv/web/owncloud/core/css/mobile.css
 #srv/web/owncloud/core/css/multiselect.css
+#srv/web/owncloud/core/css/select2
+#srv/web/owncloud/core/css/select2/select2-spinner.gif
+#srv/web/owncloud/core/css/select2/select2.css
+#srv/web/owncloud/core/css/select2/select2.png
+#srv/web/owncloud/core/css/select2/select2x2.png
 #srv/web/owncloud/core/css/share.css
 #srv/web/owncloud/core/css/styles.css
 #srv/web/owncloud/core/doc
 #srv/web/owncloud/core/doc/admin
 #srv/web/owncloud/core/doc/admin/_images
-#srv/web/owncloud/core/doc/admin/_images/100000000000003800000018D49F1CE7.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000050000000DB83B8FA5B.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000950000004412998BE7.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000A800000073F49785A6.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000B600000120706C3C75.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000CD000000ECA8DE7780.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F1000000F56125BDBA.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F1000000F6704F46D3.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F300000068AF0ECD53.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F40000019A110DD159.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F5000000675DC5F68C.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F500000067A8845EF8.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F60000006754ED2A1E.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000000F6000000685DFB3767.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000012C0000009C444B4720.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000013C0000017D4FC6CEF5.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001400000008A557EF7E3.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001440000005A2989832F.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000160000000DBB2FB0223.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000165000000D3FF2168AB.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000167000000B43E4BF478.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001800000009A9494E037.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001880000007EA4444400.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000018B000000A090F31164.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000018E000000C4BA62B2A3.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000193000001AE9AB8B0A2.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000194000000498325A766.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000194000000FAD39BC0D8.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001980000009271BE0D26.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000019E0000004CD2A0F407.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001A3000000AAFE82893A.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001AC000000477C76808F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001BF00000012349EAE2F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001C1000000FE663748B2.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001C9000000AF9C1CE57F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001CF00000176B0BE1EBC.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001D30000014DC251C948.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001E50000006E3ECDC427.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000001FD000000DF8D2D7546.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000200000000BCCCC35DEB.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002170000004A27056037.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000021C0000004CACBF786C.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002210000002DE3BE7515.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000227000000935D9B1EF6.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000023B000000125381F51B.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000247000000A77440E4D3.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002720000013FB6EDA793.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000027B0000011D10F70F88.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002840000016729388B7F.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000288000001A1D5BE4881.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000289000001A9D7F3941F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002910000018B31D51F03.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000291000001951B69B9A6.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002950000019EF5732E36.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002950000021E245F6883.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000298000001870B0581FA.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000298000001874D3CA506.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000029B0000018885B5282E.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002A6000000BFBE298238.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002B1000002258C08D304.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002B3000000365E1CD00D.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002BB000000266DB6AD1A.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000002F3000000926CA65D02.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000304000001B964698779.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000336000000F38C3FAF84.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000372000002AF943ADDA0.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003730000002B6865E951.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003A60000011E274A1A28.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003A6000002A9C7A660BE.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003A800000039364066E4.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003B30000021B5EE5D338.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003DF00000071A41D8A1F.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003DF000000D953A456B6.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003E8000001524A147A04.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003EC000000AB60616FA7.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000003FB000002359BAFB40E.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004010000017E4A6552BC.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000403000001632F0B76F6.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000404000000FCFC13E732.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004100000005657010336.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004170000016ACB5E15AE.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000041D0000017D8D1BC4D9.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000042500000163D2B339D5.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000427000000324F58266D.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000042E000001D3EEB9978B.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000042F000000CC3EDDE79E.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000430000000AF9D6E724E.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000043000000164DA0CE8C9.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000043200000169BCD20493.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000044C000002B0B421E27E.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000045800000197FE462F2B.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000462000000D44541CF9A.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000046C000000C2D3E5CF30.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004770000008AAF3CFFDB.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004920000028D9C8DC2CB.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004C0000000795BB2C146.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004CA000002B52116BE0C.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000004ED000000BE3B9E25D5.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000523000000C6F786381C.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000052500000088DBB95005.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000525000000BE30CF0423.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000527000000A7AB409FE0.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000052F000000C2867B7294.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000530000001410CF0028A.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000053100000142D9A4C916.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000532000000285DDBBF37.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000053A00000067708C8F53.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000552000000BF22E90239.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000557000002E148BAB6D4.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005970000006AE23997C9.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005AF00000074604B1A67.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005B90000007866D92D14.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005BB0000007C1DF71FA7.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005C30000006CAFFAAD61.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005D00000003B29340A7A.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005D50000009458C5EE48.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005E20000009B1BA5A8CF.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005E6000000676902E040.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005EB000000A68BA73E2D.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005EC00000073E678DFEC.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005F30000030F1372448D.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005F70000005F0912E904.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005F70000007E43DB8026.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005FA0000005CE8491B77.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000005FF0000005F35710398.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000006000000005EDA7B96BE.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000060300000065DF96536B.png
-#srv/web/owncloud/core/doc/admin/_images/10000000000006060000006A0106CA0C.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000061A0000006FC014C3A4.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000061D0000007047877972.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000061E0000006BCF9ECC0B.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000062A0000005F61A18950.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000631000000E19D116AA0.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000063F00000090AAE1FA4A.png
-#srv/web/owncloud/core/doc/admin/_images/1000000000000668000002D29EAD9899.png
-#srv/web/owncloud/core/doc/admin/_images/100000000000066D000001AAD8CE8256.png
-#srv/web/owncloud/core/doc/admin/_images/10000201000002FC000001DC2DDAD2F1.png
-#srv/web/owncloud/core/doc/admin/_images/1000020100000359000000A8B848DE68.png
-#srv/web/owncloud/core/doc/admin/_images/10000201000005F90000029D8BA200FB.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-1.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-2.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-3.png
-#srv/web/owncloud/core/doc/admin/_images/custom_mount_config_gui-4.png
-#srv/web/owncloud/core/doc/admin/_images/edit_encrypted_file.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-app.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-config.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-daemon-socket.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-executable.png
+#srv/web/owncloud/core/doc/admin/_images/antivirus-logging.png
+#srv/web/owncloud/core/doc/admin/_images/create_public_share.png
+#srv/web/owncloud/core/doc/admin/_images/documents_app_enable.png
+#srv/web/owncloud/core/doc/admin/_images/encryption1.png
+#srv/web/owncloud/core/doc/admin/_images/encryption2.png
+#srv/web/owncloud/core/doc/admin/_images/encryption3.png
+#srv/web/owncloud/core/doc/admin/_images/encryption4.png
+#srv/web/owncloud/core/doc/admin/_images/encryption5.png
+#srv/web/owncloud/core/doc/admin/_images/encryption6.png
+#srv/web/owncloud/core/doc/admin/_images/encryption7.png
+#srv/web/owncloud/core/doc/admin/_images/encryption8.png
+#srv/web/owncloud/core/doc/admin/_images/encryption9.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-amazons3.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-add.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-enable.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-local.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-app-usermounts.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-allowshare.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-app.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-configapp.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox-oc.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-dropbox.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-ftp.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-0auth.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-9.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive-sdk.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive1.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive2.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive5.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive7.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-google-drive8.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-smb.png
+#srv/web/owncloud/core/doc/admin/_images/external-storage-webdav.png
 #srv/web/owncloud/core/doc/admin/_images/install-wizard-advanced.png
 #srv/web/owncloud/core/doc/admin/_images/install-wizard.png
 #srv/web/owncloud/core/doc/admin/_images/ldap-advanced-1-connection.png
@@ -9428,84 +9222,73 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/admin/_images/ldap-wizard-2-user.png
 #srv/web/owncloud/core/doc/admin/_images/ldap-wizard-3-login.png
 #srv/web/owncloud/core/doc/admin/_images/ldap-wizard-4-group.png
+#srv/web/owncloud/core/doc/admin/_images/lucene-search-enable.png
+#srv/web/owncloud/core/doc/admin/_images/lucene-search-user.png
 #srv/web/owncloud/core/doc/admin/_images/oc_admin_app_page.png
-#srv/web/owncloud/core/doc/admin/_images/oc_admin_user_manage.png
+#srv/web/owncloud/core/doc/admin/_images/preview_images.png
+#srv/web/owncloud/core/doc/admin/_images/remote_shares.png
+#srv/web/owncloud/core/doc/admin/_images/sharing-admin.png
+#srv/web/owncloud/core/doc/admin/_images/sharing-user-local.png
+#srv/web/owncloud/core/doc/admin/_images/sharing-user.png
+#srv/web/owncloud/core/doc/admin/_images/smtp-config-php-sendmail.png
+#srv/web/owncloud/core/doc/admin/_images/smtp-config-smtp.png
+#srv/web/owncloud/core/doc/admin/_images/smtp-config-wizard.png
 #srv/web/owncloud/core/doc/admin/_images/ucs-app-center-install.png
 #srv/web/owncloud/core/doc/admin/_images/ucs-app-center-module.png
 #srv/web/owncloud/core/doc/admin/_images/ucsint.png
 #srv/web/owncloud/core/doc/admin/_images/ucsint1.png
 #srv/web/owncloud/core/doc/admin/_images/ucsint2.png
 #srv/web/owncloud/core/doc/admin/_images/untrusted-domain.png
+#srv/web/owncloud/core/doc/admin/_images/updater-1.png
+#srv/web/owncloud/core/doc/admin/_images/updater-2.png
+#srv/web/owncloud/core/doc/admin/_images/updater-3.png
+#srv/web/owncloud/core/doc/admin/_images/updater-4.png
+#srv/web/owncloud/core/doc/admin/_images/updater-5.png
+#srv/web/owncloud/core/doc/admin/_images/updater-6.png
+#srv/web/owncloud/core/doc/admin/_images/updater-7.png
+#srv/web/owncloud/core/doc/admin/_images/users-config.png
+#srv/web/owncloud/core/doc/admin/_images/users-create.png
+#srv/web/owncloud/core/doc/admin/_images/users-groups.png
 #srv/web/owncloud/core/doc/admin/_images/win7features.jpg
 #srv/web/owncloud/core/doc/admin/_images/winserverroles.jpg
 #srv/web/owncloud/core/doc/admin/_sources
-#srv/web/owncloud/core/doc/admin/_sources/apps
-#srv/web/owncloud/core/doc/admin/_sources/apps/activity
-#srv/web/owncloud/core/doc/admin/_sources/apps/activity/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/admin_dependencies_chk
-#srv/web/owncloud/core/doc/admin/_sources/apps/admin_dependencies_chk/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_antivirus
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_antivirus/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_encryption
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_encryption/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_external
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_external/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_sharing
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_sharing/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_trashbin
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_trashbin/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_versions
-#srv/web/owncloud/core/doc/admin/_sources/apps/files_versions/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/firstrunwizard
-#srv/web/owncloud/core/doc/admin/_sources/apps/firstrunwizard/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/user_ldap
-#srv/web/owncloud/core/doc/admin/_sources/apps/user_ldap/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/apps/viewers
-#srv/web/owncloud/core/doc/admin/_sources/apps/viewers/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/config
-#srv/web/owncloud/core/doc/admin/_sources/config/apps.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/code_locations.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/default_parameters.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/deleted_items.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/logging.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/mail_parameters.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/maintenance.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/miscellaneous.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/previews.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/reverse_proxy_configurations.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/session_info.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/user_experience.txt
-#srv/web/owncloud/core/doc/admin/_sources/config/verification.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration
 #srv/web/owncloud/core/doc/admin/_sources/configuration/auth_ldap.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/background_jobs.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration-antivirus.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_3rdparty.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_apps.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_assets.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_automation.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_config_sample_php.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_custom_clients.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_database.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_encryption.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_file_sharing.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_files_locking.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_knowledgebase.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_language.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_logging.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_mail.txt
-#srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_maintenance.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_preview.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_reverseproxy.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuration_users.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_big_file_upload.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_documents.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/configuring_search.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/custom_mount_config.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/custom_mount_config_gui.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/custom_user_backend.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/index.txt
+#srv/web/owncloud/core/doc/admin/_sources/configuration/server_to_server_managing.txt
 #srv/web/owncloud/core/doc/admin/_sources/configuration/xsendfile.txt
 #srv/web/owncloud/core/doc/admin/_sources/contents.txt
-#srv/web/owncloud/core/doc/admin/_sources/cron
-#srv/web/owncloud/core/doc/admin/_sources/cron/index.txt
 #srv/web/owncloud/core/doc/admin/_sources/index.txt
 #srv/web/owncloud/core/doc/admin/_sources/installation
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_hiawatha.txt
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_lighttpd.txt
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_nginx.txt
+#srv/web/owncloud/core/doc/admin/_sources/installation/configuration_yaws.txt
 #srv/web/owncloud/core/doc/admin/_sources/installation/index.txt
 #srv/web/owncloud/core/doc/admin/_sources/installation/installation_appliance.txt
 #srv/web/owncloud/core/doc/admin/_sources/installation/installation_linux.txt
@@ -9519,19 +9302,14 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/admin/_sources/issues/index.txt
 #srv/web/owncloud/core/doc/admin/_sources/maintenance
 #srv/web/owncloud/core/doc/admin/_sources/maintenance/backup.txt
+#srv/web/owncloud/core/doc/admin/_sources/maintenance/convert_db.txt
+#srv/web/owncloud/core/doc/admin/_sources/maintenance/enable_maintenance.txt
 #srv/web/owncloud/core/doc/admin/_sources/maintenance/index.txt
 #srv/web/owncloud/core/doc/admin/_sources/maintenance/migrating.txt
 #srv/web/owncloud/core/doc/admin/_sources/maintenance/restore.txt
 #srv/web/owncloud/core/doc/admin/_sources/maintenance/update.txt
-#srv/web/owncloud/core/doc/admin/_sources/quota
-#srv/web/owncloud/core/doc/admin/_sources/quota/index.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/create_a_new_share.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/delete_share.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/get_all_shares.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/get_information_about_a_known_share.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/get_shares_from_a_specific_file_or_folder.txt
-#srv/web/owncloud/core/doc/admin/_sources/sharing_api/index.txt
+#srv/web/owncloud/core/doc/admin/_sources/maintenance/upgrade.txt
+#srv/web/owncloud/core/doc/admin/_sources/whats_new_admin.txt
 #srv/web/owncloud/core/doc/admin/_static
 #srv/web/owncloud/core/doc/admin/_static/ajax-loader.gif
 #srv/web/owncloud/core/doc/admin/_static/basic.css
@@ -9563,74 +9341,44 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/admin/_static/up-pressed.png
 #srv/web/owncloud/core/doc/admin/_static/up.png
 #srv/web/owncloud/core/doc/admin/_static/websupport.js
-#srv/web/owncloud/core/doc/admin/apps
-#srv/web/owncloud/core/doc/admin/apps/activity
-#srv/web/owncloud/core/doc/admin/apps/activity/index.html
-#srv/web/owncloud/core/doc/admin/apps/admin_dependencies_chk
-#srv/web/owncloud/core/doc/admin/apps/admin_dependencies_chk/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_antivirus
-#srv/web/owncloud/core/doc/admin/apps/files_antivirus/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_encryption
-#srv/web/owncloud/core/doc/admin/apps/files_encryption/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_external
-#srv/web/owncloud/core/doc/admin/apps/files_external/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_sharing
-#srv/web/owncloud/core/doc/admin/apps/files_sharing/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_trashbin
-#srv/web/owncloud/core/doc/admin/apps/files_trashbin/index.html
-#srv/web/owncloud/core/doc/admin/apps/files_versions
-#srv/web/owncloud/core/doc/admin/apps/files_versions/index.html
-#srv/web/owncloud/core/doc/admin/apps/firstrunwizard
-#srv/web/owncloud/core/doc/admin/apps/firstrunwizard/index.html
-#srv/web/owncloud/core/doc/admin/apps/index.html
-#srv/web/owncloud/core/doc/admin/apps/user_ldap
-#srv/web/owncloud/core/doc/admin/apps/user_ldap/index.html
-#srv/web/owncloud/core/doc/admin/apps/viewers
-#srv/web/owncloud/core/doc/admin/apps/viewers/index.html
-#srv/web/owncloud/core/doc/admin/config
-#srv/web/owncloud/core/doc/admin/config/apps.html
-#srv/web/owncloud/core/doc/admin/config/code_locations.html
-#srv/web/owncloud/core/doc/admin/config/default_parameters.html
-#srv/web/owncloud/core/doc/admin/config/deleted_items.html
-#srv/web/owncloud/core/doc/admin/config/index.html
-#srv/web/owncloud/core/doc/admin/config/logging.html
-#srv/web/owncloud/core/doc/admin/config/mail_parameters.html
-#srv/web/owncloud/core/doc/admin/config/maintenance.html
-#srv/web/owncloud/core/doc/admin/config/miscellaneous.html
-#srv/web/owncloud/core/doc/admin/config/previews.html
-#srv/web/owncloud/core/doc/admin/config/reverse_proxy_configurations.html
-#srv/web/owncloud/core/doc/admin/config/session_info.html
-#srv/web/owncloud/core/doc/admin/config/user_experience.html
-#srv/web/owncloud/core/doc/admin/config/verification.html
 #srv/web/owncloud/core/doc/admin/configuration
 #srv/web/owncloud/core/doc/admin/configuration/auth_ldap.html
 #srv/web/owncloud/core/doc/admin/configuration/background_jobs.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration-antivirus.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_3rdparty.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_apps.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_assets.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_automation.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_config_sample_php.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_custom_clients.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_database.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_encryption.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_file_sharing.html
+#srv/web/owncloud/core/doc/admin/configuration/configuration_files_locking.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_knowledgebase.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_language.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_logging.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_mail.html
-#srv/web/owncloud/core/doc/admin/configuration/configuration_maintenance.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_preview.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_reverseproxy.html
 #srv/web/owncloud/core/doc/admin/configuration/configuration_users.html
 #srv/web/owncloud/core/doc/admin/configuration/configuring_big_file_upload.html
+#srv/web/owncloud/core/doc/admin/configuration/configuring_documents.html
+#srv/web/owncloud/core/doc/admin/configuration/configuring_search.html
 #srv/web/owncloud/core/doc/admin/configuration/custom_mount_config.html
 #srv/web/owncloud/core/doc/admin/configuration/custom_mount_config_gui.html
 #srv/web/owncloud/core/doc/admin/configuration/custom_user_backend.html
 #srv/web/owncloud/core/doc/admin/configuration/index.html
+#srv/web/owncloud/core/doc/admin/configuration/server_to_server_managing.html
 #srv/web/owncloud/core/doc/admin/configuration/xsendfile.html
 #srv/web/owncloud/core/doc/admin/contents.html
-#srv/web/owncloud/core/doc/admin/cron
-#srv/web/owncloud/core/doc/admin/cron/index.html
 #srv/web/owncloud/core/doc/admin/genindex.html
 #srv/web/owncloud/core/doc/admin/index.html
 #srv/web/owncloud/core/doc/admin/installation
+#srv/web/owncloud/core/doc/admin/installation/configuration_hiawatha.html
+#srv/web/owncloud/core/doc/admin/installation/configuration_lighttpd.html
+#srv/web/owncloud/core/doc/admin/installation/configuration_nginx.html
+#srv/web/owncloud/core/doc/admin/installation/configuration_yaws.html
 #srv/web/owncloud/core/doc/admin/installation/index.html
 #srv/web/owncloud/core/doc/admin/installation/installation_appliance.html
 #srv/web/owncloud/core/doc/admin/installation/installation_linux.html
@@ -9644,70 +9392,58 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/admin/issues/index.html
 #srv/web/owncloud/core/doc/admin/maintenance
 #srv/web/owncloud/core/doc/admin/maintenance/backup.html
+#srv/web/owncloud/core/doc/admin/maintenance/convert_db.html
+#srv/web/owncloud/core/doc/admin/maintenance/enable_maintenance.html
 #srv/web/owncloud/core/doc/admin/maintenance/index.html
 #srv/web/owncloud/core/doc/admin/maintenance/migrating.html
 #srv/web/owncloud/core/doc/admin/maintenance/restore.html
 #srv/web/owncloud/core/doc/admin/maintenance/update.html
+#srv/web/owncloud/core/doc/admin/maintenance/upgrade.html
 #srv/web/owncloud/core/doc/admin/objects.inv
-#srv/web/owncloud/core/doc/admin/quota
-#srv/web/owncloud/core/doc/admin/quota/index.html
 #srv/web/owncloud/core/doc/admin/search.html
 #srv/web/owncloud/core/doc/admin/searchindex.js
-#srv/web/owncloud/core/doc/admin/sharing_api
-#srv/web/owncloud/core/doc/admin/sharing_api/create_a_new_share.html
-#srv/web/owncloud/core/doc/admin/sharing_api/delete_share.html
-#srv/web/owncloud/core/doc/admin/sharing_api/get_all_shares.html
-#srv/web/owncloud/core/doc/admin/sharing_api/get_information_about_a_known_share.html
-#srv/web/owncloud/core/doc/admin/sharing_api/get_shares_from_a_specific_file_or_folder.html
-#srv/web/owncloud/core/doc/admin/sharing_api/index.html
+#srv/web/owncloud/core/doc/admin/whats_new_admin.html
 #srv/web/owncloud/core/doc/user
 #srv/web/owncloud/core/doc/user/_images
-#srv/web/owncloud/core/doc/user/_images/1000000000000163000000E9CDA84C92.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000175000000FAB2A2B294.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000195000000EF7E44082C.png
-#srv/web/owncloud/core/doc/user/_images/10000000000001CE000000F2E2084BA1.png
-#srv/web/owncloud/core/doc/user/_images/100000000000041D0000003D52225C0D.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000453000001BFFCF48776.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000467000002B63162E59B.png
-#srv/web/owncloud/core/doc/user/_images/10000000000004690000026615360BEB.png
-#srv/web/owncloud/core/doc/user/_images/100000000000046D0000015F4B5494A9.png
-#srv/web/owncloud/core/doc/user/_images/100000000000046F000000DEA2BFCD9B.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000470000001B68AE60DD3.png
-#srv/web/owncloud/core/doc/user/_images/10000000000004710000014BBC34499D.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047200000129CB014025.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047700000219A3013A92.png
-#srv/web/owncloud/core/doc/user/_images/1000000000000479000002887E7F48EA.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047A000000B727198874.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047A000000FB86FF2A9A.png
-#srv/web/owncloud/core/doc/user/_images/100000000000047A0000011C6682A254.png
-#srv/web/owncloud/core/doc/user/_images/100000000000048100000245268CDB7A.png
 #srv/web/owncloud/core/doc/user/_images/bookmark_addurl.png
 #srv/web/owncloud/core/doc/user/_images/bookmark_setting.png
-#srv/web/owncloud/core/doc/user/_images/calendar_createevent.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_event.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_event_repeat.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_event_share.png
+#srv/web/owncloud/core/doc/user/_images/calendar_create_new.png
+#srv/web/owncloud/core/doc/user/_images/calendar_default.png
+#srv/web/owncloud/core/doc/user/_images/calendar_edit_event.png
 #srv/web/owncloud/core/doc/user/_images/calendar_export.png
 #srv/web/owncloud/core/doc/user/_images/calendar_import.png
-#srv/web/owncloud/core/doc/user/_images/calendar_manage-calendars.png
 #srv/web/owncloud/core/doc/user/_images/calendar_newtimezone1.png
+#srv/web/owncloud/core/doc/user/_images/calendar_settings.png
+#srv/web/owncloud/core/doc/user/_images/contact_address_book_add.png
 #srv/web/owncloud/core/doc/user/_images/contact_bottombar.png
 #srv/web/owncloud/core/doc/user/_images/contact_crop.jpg
-#srv/web/owncloud/core/doc/user/_images/contact_del_ab.png
-#srv/web/owncloud/core/doc/user/_images/contact_emptycontact.png
-#srv/web/owncloud/core/doc/user/_images/contact_picture.jpg
+#srv/web/owncloud/core/doc/user/_images/contact_new.png
+#srv/web/owncloud/core/doc/user/_images/contact_picture.png
+#srv/web/owncloud/core/doc/user/_images/contact_picture_default.png
 #srv/web/owncloud/core/doc/user/_images/contact_syncopt.jpg
 #srv/web/owncloud/core/doc/user/_images/contact_thunderbird-Symbol_Gear.jpg
 #srv/web/owncloud/core/doc/user/_images/contact_thunderbird-Symbol_Impeller.jpg
 #srv/web/owncloud/core/doc/user/_images/contact_thunderbird-URL_config.jpg
 #srv/web/owncloud/core/doc/user/_images/contact_uploadbutton.png
 #srv/web/owncloud/core/doc/user/_images/contact_vcfpick.jpg
+#srv/web/owncloud/core/doc/user/_images/contacts_empty.png
+#srv/web/owncloud/core/doc/user/_images/contacts_settings.png
+#srv/web/owncloud/core/doc/user/_images/deleted_files.png
+#srv/web/owncloud/core/doc/user/_images/documents_personal_settings.png
 #srv/web/owncloud/core/doc/user/_images/dolphin_webdav.png
+#srv/web/owncloud/core/doc/user/_images/download.png
+#srv/web/owncloud/core/doc/user/_images/email_address_personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/encryption1.png
+#srv/web/owncloud/core/doc/user/_images/encryption2.png
+#srv/web/owncloud/core/doc/user/_images/encryption3.png
+#srv/web/owncloud/core/doc/user/_images/encryption4.png
+#srv/web/owncloud/core/doc/user/_images/event_export.png
 #srv/web/owncloud/core/doc/user/_images/explorer_webdav.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_1_sign_in.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_2_verify.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_3_create_project.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_4_enable_api.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_5_setup_ownCloud.png
-#srv/web/owncloud/core/doc/user/_images/external_google_drive_6_accept.png
 #srv/web/owncloud/core/doc/user/_images/files_versioning.png
+#srv/web/owncloud/core/doc/user/_images/full_name.png
 #srv/web/owncloud/core/doc/user/_images/gnome3_nautilus_webdav.png
 #srv/web/owncloud/core/doc/user/_images/kdes.png
 #srv/web/owncloud/core/doc/user/_images/kdes1.png
@@ -9718,19 +9454,36 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_images/kdes6.png
 #srv/web/owncloud/core/doc/user/_images/kdes7.png
 #srv/web/owncloud/core/doc/user/_images/kdes9.png
+#srv/web/owncloud/core/doc/user/_images/language_personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/notifications_personal_settings.png
 #srv/web/owncloud/core/doc/user/_images/oc_connect.png
 #srv/web/owncloud/core/doc/user/_images/oc_documents.png
 #srv/web/owncloud/core/doc/user/_images/oc_documents_col_edit.png
 #srv/web/owncloud/core/doc/user/_images/oc_documents_edit.png
 #srv/web/owncloud/core/doc/user/_images/oc_documents_share.png
-#srv/web/owncloud/core/doc/user/_images/oc_files_share.png
-#srv/web/owncloud/core/doc/user/_images/oc_filesweb.png
 #srv/web/owncloud/core/doc/user/_images/oc_filesweb_navigate.png
 #srv/web/owncloud/core/doc/user/_images/oc_filesweb_new.png
-#srv/web/owncloud/core/doc/user/_images/oc_ui.png
-#srv/web/owncloud/core/doc/user/_images/oc_user_preferences.png
+#srv/web/owncloud/core/doc/user/_images/oc_main_web.png
+#srv/web/owncloud/core/doc/user/_images/oc_main_web_labelled.png
+#srv/web/owncloud/core/doc/user/_images/oc_personal_settings_dropdown.png
 #srv/web/owncloud/core/doc/user/_images/osx_webdav1.png
 #srv/web/owncloud/core/doc/user/_images/osx_webdav2.png
+#srv/web/owncloud/core/doc/user/_images/password_change.png
+#srv/web/owncloud/core/doc/user/_images/personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/profile_picture_personal_settings.png
+#srv/web/owncloud/core/doc/user/_images/quota1.png
+#srv/web/owncloud/core/doc/user/_images/s2s-add-remote-share.png
+#srv/web/owncloud/core/doc/user/_images/s2s-connect-to-remote-share.png
+#srv/web/owncloud/core/doc/user/_images/s2s-create_public_share.png
+#srv/web/owncloud/core/doc/user/_images/s2s-remote-share-labeled.png
+#srv/web/owncloud/core/doc/user/_images/usage_indicator.png
+#srv/web/owncloud/core/doc/user/_images/users-files.png
+#srv/web/owncloud/core/doc/user/_images/users-overlays-sharepoint.png
+#srv/web/owncloud/core/doc/user/_images/users-overlays-win-net-drive.png
+#srv/web/owncloud/core/doc/user/_images/users-overlays.png
+#srv/web/owncloud/core/doc/user/_images/users-share-local.png
+#srv/web/owncloud/core/doc/user/_images/users-share-local2.png
+#srv/web/owncloud/core/doc/user/_images/users-share-public.png
 #srv/web/owncloud/core/doc/user/_sources
 #srv/web/owncloud/core/doc/user/_sources/bookmarks.txt
 #srv/web/owncloud/core/doc/user/_sources/contents.txt
@@ -9745,10 +9498,11 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_sources/files/filesweb.txt
 #srv/web/owncloud/core/doc/user/_sources/files/index.txt
 #srv/web/owncloud/core/doc/user/_sources/files/quota.txt
+#srv/web/owncloud/core/doc/user/_sources/files/server_to_server_using.txt
 #srv/web/owncloud/core/doc/user/_sources/files/sync.txt
 #srv/web/owncloud/core/doc/user/_sources/files/versioncontrol.txt
 #srv/web/owncloud/core/doc/user/_sources/index.txt
-#srv/web/owncloud/core/doc/user/_sources/migration.txt
+#srv/web/owncloud/core/doc/user/_sources/installing_apps.txt
 #srv/web/owncloud/core/doc/user/_sources/pim
 #srv/web/owncloud/core/doc/user/_sources/pim/calendar.txt
 #srv/web/owncloud/core/doc/user/_sources/pim/contacts.txt
@@ -9759,9 +9513,8 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/_sources/pim/sync_thunderbird.txt
 #srv/web/owncloud/core/doc/user/_sources/pim/troubleshooting.txt
 #srv/web/owncloud/core/doc/user/_sources/userpreferences.txt
-#srv/web/owncloud/core/doc/user/_sources/web_guide
-#srv/web/owncloud/core/doc/user/_sources/web_guide/index.txt
 #srv/web/owncloud/core/doc/user/_sources/webinterface.txt
+#srv/web/owncloud/core/doc/user/_sources/whats_new.txt
 #srv/web/owncloud/core/doc/user/_static
 #srv/web/owncloud/core/doc/user/_static/ajax-loader.gif
 #srv/web/owncloud/core/doc/user/_static/basic.css
@@ -9806,11 +9559,12 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/files/filesweb.html
 #srv/web/owncloud/core/doc/user/files/index.html
 #srv/web/owncloud/core/doc/user/files/quota.html
+#srv/web/owncloud/core/doc/user/files/server_to_server_using.html
 #srv/web/owncloud/core/doc/user/files/sync.html
 #srv/web/owncloud/core/doc/user/files/versioncontrol.html
 #srv/web/owncloud/core/doc/user/genindex.html
 #srv/web/owncloud/core/doc/user/index.html
-#srv/web/owncloud/core/doc/user/migration.html
+#srv/web/owncloud/core/doc/user/installing_apps.html
 #srv/web/owncloud/core/doc/user/objects.inv
 #srv/web/owncloud/core/doc/user/pim
 #srv/web/owncloud/core/doc/user/pim/calendar.html
@@ -9824,9 +9578,8 @@ srv/web/owncloud
 #srv/web/owncloud/core/doc/user/search.html
 #srv/web/owncloud/core/doc/user/searchindex.js
 #srv/web/owncloud/core/doc/user/userpreferences.html
-#srv/web/owncloud/core/doc/user/web_guide
-#srv/web/owncloud/core/doc/user/web_guide/index.html
 #srv/web/owncloud/core/doc/user/webinterface.html
+#srv/web/owncloud/core/doc/user/whats_new.html
 #srv/web/owncloud/core/fonts
 #srv/web/owncloud/core/fonts/LICENSE.txt
 #srv/web/owncloud/core/fonts/OpenSans-Bold.woff
@@ -9890,6 +9643,8 @@ srv/web/owncloud
 #srv/web/owncloud/core/img/actions/public.svg
 #srv/web/owncloud/core/img/actions/rename.png
 #srv/web/owncloud/core/img/actions/rename.svg
+#srv/web/owncloud/core/img/actions/search-white.png
+#srv/web/owncloud/core/img/actions/search-white.svg
 #srv/web/owncloud/core/img/actions/search.png
 #srv/web/owncloud/core/img/actions/search.svg
 #srv/web/owncloud/core/img/actions/settings.png
@@ -10083,7 +9838,63 @@ srv/web/owncloud
 #srv/web/owncloud/core/js/octemplate.js
 #srv/web/owncloud/core/js/placeholder.js
 #srv/web/owncloud/core/js/placeholders.js
+#srv/web/owncloud/core/js/select2
+#srv/web/owncloud/core/js/select2/LICENSE
+#srv/web/owncloud/core/js/select2/README.md
+#srv/web/owncloud/core/js/select2/bower.json
+#srv/web/owncloud/core/js/select2/component.json
+#srv/web/owncloud/core/js/select2/composer.json
+#srv/web/owncloud/core/js/select2/package.json
+#srv/web/owncloud/core/js/select2/release.sh
+#srv/web/owncloud/core/js/select2/select2-bootstrap.css
+#srv/web/owncloud/core/js/select2/select2.jquery.json
+#srv/web/owncloud/core/js/select2/select2.js
+#srv/web/owncloud/core/js/select2/select2_locale_ar.js
+#srv/web/owncloud/core/js/select2/select2_locale_bg.js
+#srv/web/owncloud/core/js/select2/select2_locale_ca.js
+#srv/web/owncloud/core/js/select2/select2_locale_cs.js
+#srv/web/owncloud/core/js/select2/select2_locale_da.js
+#srv/web/owncloud/core/js/select2/select2_locale_de.js
+#srv/web/owncloud/core/js/select2/select2_locale_el.js
+#srv/web/owncloud/core/js/select2/select2_locale_en.js.template
+#srv/web/owncloud/core/js/select2/select2_locale_es.js
+#srv/web/owncloud/core/js/select2/select2_locale_et.js
+#srv/web/owncloud/core/js/select2/select2_locale_eu.js
+#srv/web/owncloud/core/js/select2/select2_locale_fa.js
+#srv/web/owncloud/core/js/select2/select2_locale_fi.js
+#srv/web/owncloud/core/js/select2/select2_locale_fr.js
+#srv/web/owncloud/core/js/select2/select2_locale_gl.js
+#srv/web/owncloud/core/js/select2/select2_locale_he.js
+#srv/web/owncloud/core/js/select2/select2_locale_hr.js
+#srv/web/owncloud/core/js/select2/select2_locale_hu.js
+#srv/web/owncloud/core/js/select2/select2_locale_id.js
+#srv/web/owncloud/core/js/select2/select2_locale_is.js
+#srv/web/owncloud/core/js/select2/select2_locale_it.js
+#srv/web/owncloud/core/js/select2/select2_locale_ja.js
+#srv/web/owncloud/core/js/select2/select2_locale_ka.js
+#srv/web/owncloud/core/js/select2/select2_locale_ko.js
+#srv/web/owncloud/core/js/select2/select2_locale_lt.js
+#srv/web/owncloud/core/js/select2/select2_locale_lv.js
+#srv/web/owncloud/core/js/select2/select2_locale_mk.js
+#srv/web/owncloud/core/js/select2/select2_locale_ms.js
+#srv/web/owncloud/core/js/select2/select2_locale_nl.js
+#srv/web/owncloud/core/js/select2/select2_locale_no.js
+#srv/web/owncloud/core/js/select2/select2_locale_pl.js
+#srv/web/owncloud/core/js/select2/select2_locale_pt-BR.js
+#srv/web/owncloud/core/js/select2/select2_locale_pt-PT.js
+#srv/web/owncloud/core/js/select2/select2_locale_ro.js
+#srv/web/owncloud/core/js/select2/select2_locale_rs.js
+#srv/web/owncloud/core/js/select2/select2_locale_ru.js
+#srv/web/owncloud/core/js/select2/select2_locale_sk.js
+#srv/web/owncloud/core/js/select2/select2_locale_sv.js
+#srv/web/owncloud/core/js/select2/select2_locale_th.js
+#srv/web/owncloud/core/js/select2/select2_locale_tr.js
+#srv/web/owncloud/core/js/select2/select2_locale_uk.js
+#srv/web/owncloud/core/js/select2/select2_locale_vi.js
+#srv/web/owncloud/core/js/select2/select2_locale_zh-CN.js
+#srv/web/owncloud/core/js/select2/select2_locale_zh-TW.js
 #srv/web/owncloud/core/js/setup.js
+#srv/web/owncloud/core/js/setupchecks.js
 #srv/web/owncloud/core/js/share.js
 #srv/web/owncloud/core/js/singleselect.js
 #srv/web/owncloud/core/js/snap.js
@@ -10269,6 +10080,7 @@ srv/web/owncloud
 #srv/web/owncloud/core/templates/message.html
 #srv/web/owncloud/core/templates/singleuser.user.php
 #srv/web/owncloud/core/templates/tags.html
+#srv/web/owncloud/core/templates/untrustedDomain.php
 #srv/web/owncloud/core/templates/update.admin.php
 #srv/web/owncloud/core/templates/update.user.php
 #srv/web/owncloud/cron.php
@@ -11920,11 +11732,14 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/connector/sabre/quotaplugin.php
 #srv/web/owncloud/lib/private/connector/sabre/request.php
 #srv/web/owncloud/lib/private/connector/sabre/server.php
+#srv/web/owncloud/lib/private/contacts
+#srv/web/owncloud/lib/private/contacts/localaddressbook.php
 #srv/web/owncloud/lib/private/contactsmanager.php
 #srv/web/owncloud/lib/private/davclient.php
 #srv/web/owncloud/lib/private/db
 #srv/web/owncloud/lib/private/db.php
 #srv/web/owncloud/lib/private/db/adapter.php
+#srv/web/owncloud/lib/private/db/adaptermysql.php
 #srv/web/owncloud/lib/private/db/adapteroci8.php
 #srv/web/owncloud/lib/private/db/adapterpgsql.php
 #srv/web/owncloud/lib/private/db/adaptersqlite.php
@@ -11937,12 +11752,14 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/db/mdb2schemawriter.php
 #srv/web/owncloud/lib/private/db/migrationexception.php
 #srv/web/owncloud/lib/private/db/migrator.php
+#srv/web/owncloud/lib/private/db/mssqlmigrator.php
 #srv/web/owncloud/lib/private/db/mysqlmigrator.php
 #srv/web/owncloud/lib/private/db/nocheckmigrator.php
 #srv/web/owncloud/lib/private/db/oracleconnection.php
 #srv/web/owncloud/lib/private/db/oraclemigrator.php
 #srv/web/owncloud/lib/private/db/pgsqltools.php
 #srv/web/owncloud/lib/private/db/sqlitemigrator.php
+#srv/web/owncloud/lib/private/db/sqlitesessioninit.php
 #srv/web/owncloud/lib/private/db/statementwrapper.php
 #srv/web/owncloud/lib/private/defaults.php
 #srv/web/owncloud/lib/private/eventsource.php
@@ -12025,6 +11842,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/hooks/forwardingemitter.php
 #srv/web/owncloud/lib/private/hooks/legacyemitter.php
 #srv/web/owncloud/lib/private/hooks/publicemitter.php
+#srv/web/owncloud/lib/private/httphelper.php
 #srv/web/owncloud/lib/private/image.php
 #srv/web/owncloud/lib/private/installer.php
 #srv/web/owncloud/lib/private/json.php
@@ -12065,6 +11883,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/migration/provider.php
 #srv/web/owncloud/lib/private/mimetypes.list.php
 #srv/web/owncloud/lib/private/navigationmanager.php
+#srv/web/owncloud/lib/private/needsupdateexception.php
 #srv/web/owncloud/lib/private/notsquareexception.php
 #srv/web/owncloud/lib/private/ocs
 #srv/web/owncloud/lib/private/ocs.php
@@ -12086,7 +11905,6 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/preview/provider.php
 #srv/web/owncloud/lib/private/preview/svg.php
 #srv/web/owncloud/lib/private/preview/txt.php
-#srv/web/owncloud/lib/private/preview/unknown.php
 #srv/web/owncloud/lib/private/previewmanager.php
 #srv/web/owncloud/lib/private/repair.php
 #srv/web/owncloud/lib/private/repairstep.php
@@ -12106,6 +11924,7 @@ srv/web/owncloud
 #srv/web/owncloud/lib/private/search/result/folder.php
 #srv/web/owncloud/lib/private/search/result/image.php
 #srv/web/owncloud/lib/private/server.php
+#srv/web/owncloud/lib/private/serviceunavailableexception.php
 #srv/web/owncloud/lib/private/session
 #srv/web/owncloud/lib/private/session/internal.php
 #srv/web/owncloud/lib/private/session/memory.php
@@ -12224,6 +12043,8 @@ srv/web/owncloud
 #srv/web/owncloud/lib/public/icontainer.php
 #srv/web/owncloud/lib/public/idb.php
 #srv/web/owncloud/lib/public/idbconnection.php
+#srv/web/owncloud/lib/public/igroup.php
+#srv/web/owncloud/lib/public/igroupmanager.php
 #srv/web/owncloud/lib/public/ihelper.php
 #srv/web/owncloud/lib/public/il10n.php
 #srv/web/owncloud/lib/public/ilogger.php
@@ -12256,7 +12077,9 @@ srv/web/owncloud
 #srv/web/owncloud/lib/repair
 #srv/web/owncloud/lib/repair/collation.php
 #srv/web/owncloud/lib/repair/innodb.php
+#srv/web/owncloud/lib/repair/preview.php
 #srv/web/owncloud/lib/repair/repairmimetypes.php
+#srv/web/owncloud/lib/repair/searchlucenetables.php
 #srv/web/owncloud/occ
 #srv/web/owncloud/ocs
 #srv/web/owncloud/ocs/providers.php
@@ -12275,20 +12098,19 @@ srv/web/owncloud
 #srv/web/owncloud/search/templates
 #srv/web/owncloud/search/templates/part.results.php
 #srv/web/owncloud/settings
-#srv/web/owncloud/settings/admin
 #srv/web/owncloud/settings/admin.php
-#srv/web/owncloud/settings/admin/controller.php
 #srv/web/owncloud/settings/ajax
 #srv/web/owncloud/settings/ajax/apps
 #srv/web/owncloud/settings/ajax/apps/ocs.php
 #srv/web/owncloud/settings/ajax/changedisplayname.php
+#srv/web/owncloud/settings/ajax/checksetup.php
 #srv/web/owncloud/settings/ajax/creategroup.php
 #srv/web/owncloud/settings/ajax/createuser.php
 #srv/web/owncloud/settings/ajax/decryptall.php
 #srv/web/owncloud/settings/ajax/deletekeys.php
 #srv/web/owncloud/settings/ajax/disableapp.php
 #srv/web/owncloud/settings/ajax/enableapp.php
-#srv/web/owncloud/settings/ajax/excludegroups.php
+#srv/web/owncloud/settings/ajax/geteveryonecount.php
 #srv/web/owncloud/settings/ajax/getlog.php
 #srv/web/owncloud/settings/ajax/grouplist.php
 #srv/web/owncloud/settings/ajax/installapp.php
@@ -12306,9 +12128,12 @@ srv/web/owncloud
 #srv/web/owncloud/settings/ajax/uninstallapp.php
 #srv/web/owncloud/settings/ajax/updateapp.php
 #srv/web/owncloud/settings/ajax/userlist.php
+#srv/web/owncloud/settings/application.php
 #srv/web/owncloud/settings/apps.php
 #srv/web/owncloud/settings/changepassword
 #srv/web/owncloud/settings/changepassword/controller.php
+#srv/web/owncloud/settings/controller
+#srv/web/owncloud/settings/controller/mailsettingscontroller.php
 #srv/web/owncloud/settings/css
 #srv/web/owncloud/settings/css/settings.css
 #srv/web/owncloud/settings/help.php
@@ -12330,6 +12155,7 @@ srv/web/owncloud
 #srv/web/owncloud/settings/js/apps.js
 #srv/web/owncloud/settings/js/log.js
 #srv/web/owncloud/settings/js/personal.js
+#srv/web/owncloud/settings/js/settings.js
 #srv/web/owncloud/settings/js/users
 #srv/web/owncloud/settings/js/users/deleteHandler.js
 #srv/web/owncloud/settings/js/users/filter.js
@@ -12434,6 +12260,10 @@ srv/web/owncloud
 #srv/web/owncloud/settings/templates/users/part.grouplist.php
 #srv/web/owncloud/settings/templates/users/part.setquota.php
 #srv/web/owncloud/settings/templates/users/part.userlist.php
+#srv/web/owncloud/settings/tests
+#srv/web/owncloud/settings/tests/js
+#srv/web/owncloud/settings/tests/js/users
+#srv/web/owncloud/settings/tests/js/users/deleteHandlerSpec.js
 #srv/web/owncloud/settings/users.php
 #srv/web/owncloud/status.php
 #srv/web/owncloud/themes
diff --git a/config/rootfiles/packages/teamspeak b/config/rootfiles/packages/teamspeak
deleted file mode 100644 (file)
index b7c2358..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-etc/rc.d/init.d/teamspeak
-opt/teamspeak
-var/ipfire/backup/addons/includes/teamspeak
index bc3faccaf86c17c69d1f499e55cec251f9548289..66ab24fd55a15dc0b1fc41fe0e30be87efe6cb59 100755 (executable)
@@ -1,4 +1,5 @@
-uenvcmd=if test "$board" = "panda" ;then run bootpanda; else run bootbananapi; fi;
 KVER=xxxKVERxxx
-bootpanda=setenv initrd_high 90000000; fatload mmc 0:1 0x82000000 zImage-ipfire-multi; fatload mmc 0:1 ${fdtaddr} dtb-${KVER}-ipfire-multi/${fdtfile};              setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro;           bootz 0x82000000 - ${fdtaddr};
-bootbananapi=setenv fdt_high ffffffff; fatload mmc 0:1 0x46000000 zImage-ipfire-multi; fatload mmc 0:1 0x49000000 dtb-${KVER}-ipfire-multi/sun7i-a20-bananapi.dtb;  setenv bootargs console=ttyS0,115200n8 rootwait root=/dev/mmcblk0p3 rootwait;                                      bootz 0x46000000 - 0x49000000;
+DTBSUNXI=sun7i-a20-bananapi.dtb
+uenvcmd=if test "$board" = "panda" ;then run bootpanda; else run bootsunxi; fi;
+bootpanda=setenv initrd_high 90000000; fatload mmc 0:1 0x82000000 zImage-ipfire-multi; fatload mmc 0:1 ${fdtaddr} dtb-${KVER}-ipfire-multi/${fdtfile};                                                 setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3; bootz 0x82000000 - ${fdtaddr};
+bootsunxi=setenv fdt_high ffffffff;    fatload mmc 0:1 0x46000000 zImage-ipfire-multi; fatload mmc 0:1 0x49000000 dtb-${KVER}-ipfire-multi/${DTBSUNXI}; fatload mmc 0:1 0x49100000 uInit-ipfire-multi; setenv bootargs console=ttyS0,115200n8 rootwait root=/dev/mmcblk0p3 rootwait;                         bootz 0x46000000 0x49100000 0x49000000;
diff --git a/config/udev/60-net.rules b/config/udev/60-net.rules
new file mode 100644 (file)
index 0000000..4f22a1e
--- /dev/null
@@ -0,0 +1,3 @@
+# Call a script that checks for the right name of the new device.
+# If it matches the configuration it will be renamed accordingly.
+ACTION=="add", SUBSYSTEM=="net", PROGRAM="/lib/udev/network-hotplug-rename", RESULT=="?*", NAME="$result"
diff --git a/config/udev/network-hotplug-rename b/config/udev/network-hotplug-rename
new file mode 100644 (file)
index 0000000..331b788
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/bash
+###############################################################################
+#                                                                             #
+# IPFire.org - A linux based firewall                                         #
+# Copyright (C) 2015  IPFire Team  <info@ipfire.org>                          #
+#                                                                             #
+# This program is free software: you can redistribute it and/or modify        #
+# it under the terms of the GNU General Public License as published by        #
+# the Free Software Foundation, either version 3 of the License, or           #
+# (at your option) any later version.                                         #
+#                                                                             #
+# This program is distributed in the hope that it will be useful,             #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
+# GNU General Public License for more details.                                #
+#                                                                             #
+# You should have received a copy of the GNU General Public License           #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
+#                                                                             #
+###############################################################################
+
+# Check if all appropriate variables are set
+[ -n "${INTERFACE}" ] || exit 2
+
+# Ignore virtual interfaces, etc.
+case "${INTERFACE}" in
+       lo)
+               exit 0
+               ;;
+       tun*)
+               exit 0
+               ;;
+       ppp*)
+               exit 0
+               ;;
+esac
+
+# Check if INTERFACE actually exists
+[ -d "/sys/class/net/${INTERFACE}" ] || exit 1
+
+# If the network configuration is not readable,
+# we cannot go on.
+if [ ! -r "/var/ipfire/ethernet/settings" ]; then
+       exit 1
+fi
+
+# Read network settings
+eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
+
+# Standard zones
+ZONES="RED GREEN ORANGE BLUE"
+
+# Determine the address of INTERFACE
+ADDRESS="$(</sys/class/net/${INTERFACE}/address)"
+
+# Walk through all zones and find the matching interface
+for zone in ${ZONES}; do
+       address="${zone}_MACADDR"
+       device="${zone}_DEV"
+
+       # Skip if address or device is unset
+       [ -n "${!address}" -a -n "${!device}" ] || continue
+
+       # If a matching interface has been found we will
+       # print the name to which udev will rename it.
+       if [ "${ADDRESS}" = "${!address}" ]; then
+               echo "${!device}"
+               exit 0
+       fi
+done
+
+# If we get here we have not found a matching device,
+# but we won't return an error any way. The new device
+# will remain with the previous name.
+exit 0
index a23491fc9ea94b45253069f3e6154dd24656820d..159b036ceb5e50a53c3d4b22fd8eea39c9eade6d 100644 (file)
@@ -20,6 +20,6 @@ other usefull commands from the Dom0:
 - look what is going on: "xm top" or "xm list"
 
 This script can also build a Citrix XenCenter xva image. (Need xz-aware
-xen version. Tested with Citrix Xen Server 6.2.5 beta)
+xen version. Tested with Citrix Xen Server 6.5)
 - run "XEN_IMG_TYPE=xva bash xen-image-maker.sh" to build an xva image.
-- import the vm with "xe vm-import file=ipfire.xva"
+- import the vm with "xe vm-import filename=ipfire.xva"
index 4f632805e130a72379f7e0857ef263bfb04f1911..28f005d5d9c874b34f516b02c3de4fe3c98911c9 100644 (file)
@@ -116,7 +116,7 @@ mount -o loop $IMGboot $MNThdd/boot
 mount -o loop $IMGvar $MNThdd/var
 
 # Install IPFire without kernel modules
-xz -d < $ISODIR/$SNAME-$VERSION.tlz > $TMPDIR/$SNAME-$VERSION.tar
+xz -d < $ISODIR/distro.img > $TMPDIR/$SNAME-$VERSION.tar
 tar -C $MNThdd/ -xvf $TMPDIR/$SNAME-$VERSION.tar \
        --exclude=lib/modules* --exclude=boot* --numeric-owner
 
@@ -130,9 +130,9 @@ mkdir $MNThdd/boot/grub
 echo "timeout 10"                          > $MNThdd/boot/grub/grub.conf
 echo "default 0"                          >> $MNThdd/boot/grub/grub.conf
 echo "title IPFire ($KERN_TYPE-kernel)"   >> $MNThdd/boot/grub/grub.conf
-echo "  kernel /vmlinuz-$KVER-ipfire-$KERN_TYPE root=/dev/$P3 rootdelay=10 panic=10 console=$CONSOLE ro" \
+echo "  kernel /vmlinuz-$KVER-ipfire-$KERN_TYPE root=/dev/$P3 rootdelay=10 panic=10 console=$CONSOLE" \
                                          >> $MNThdd/boot/grub/grub.conf
-echo "  initrd /ipfirerd-$KVER-$KERN_TYPE.img" >> $MNThdd/boot/grub/grub.conf
+echo "  initrd /initramfs-$KVER-ipfire-$KERN_TYPE.img" >> $MNThdd/boot/grub/grub.conf
 echo "# savedefault 0" >> $MNThdd/boot/grub/grub.conf
 
 ln -s grub.conf $MNThdd/boot/grub/menu.lst
@@ -159,12 +159,13 @@ mount --bind /proc $MNThdd/proc
 mount --bind /dev  $MNThdd/dev
 mount --bind /sys  $MNThdd/sys
 chroot $MNThdd /usr/bin/perl -e "require '/var/ipfire/lang.pl'; &Lang::BuildCacheLang"
-sed -i -e "s|DEVICE1|/dev/$P1|g" $MNThdd/etc/fstab
-sed -i -e "s|DEVICE2|/dev/$P2|g" $MNThdd/etc/fstab
-sed -i -e "s|DEVICE3|/dev/$P3|g" $MNThdd/etc/fstab
-sed -i -e "s|DEVICE4|/dev/$P4|g" $MNThdd/etc/fstab
 
-sed -i -e "s|FSTYPE|$FSTYPE|g" $MNThdd/etc/fstab
+# create fstab
+echo "/dev/$P1 /boot auto defaults 1 3" > $MNThdd/etc/fstab
+echo "/dev/$P2 swap swap defaults 0 0" >> $MNThdd/etc/fstab
+echo "/dev/$P3 / auto defaults 1 1"    >> $MNThdd/etc/fstab
+echo "/dev/$P4 /var auto defaults 1 2" >> $MNThdd/etc/fstab
+
 
 #Remove root / fstab check
 rm -rf $MNThdd/etc/rc.d/rcsysinit.d/S19checkfstab
index f1ed2125a2cb9e253ca332f7de01c1b09985e601..5c17d33e276a51c4a90bda383e2c616af012c818 100644 (file)
@@ -520,7 +520,8 @@ foreach my $line (@conntrack) {
        }
 
        my $sip_colour = ipcolour($sip);
-       my $dip_colour = ipcolour($dip);
+       # use colour of destination network for DNAT
+       my $dip_colour = $dip ne $dip_ret ? ipcolour($dip_ret) : ipcolour($dip);
 
        my $sserv = '';
        if ($sport < 1024) {
index d2227a421ec795fff7e6506d12b0a0d3b6efda60..39b732ce36b77d073d064758cbefbc9d77e314b3 100644 (file)
@@ -66,6 +66,7 @@ my %ipsecsettings=();
 my %aliases=();
 my %optionsfw=();
 my %ifaces=();
+my %rulehash=();
 
 my @PROTOCOLS = ("TCP", "UDP", "ICMP", "IGMP", "AH", "ESP", "GRE","IPv6","IPIP");
 
@@ -194,6 +195,7 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule')
        &General::readhasharray("$configfwdfw", \%configfwdfw);
        &General::readhasharray("$configinput", \%configinputfw);
        &General::readhasharray("$configoutgoing", \%configoutgoingfw);
+       my $maxkey;
        #Set Variables according to the JQuery code in protocol section
        if ($fwdfwsettings{'PROT'} eq 'TCP' || $fwdfwsettings{'PROT'} eq 'UDP')
        {
@@ -230,157 +232,80 @@ if ($fwdfwsettings{'ACTION'} eq 'saverule')
        if(     $fwdfwsettings{'grp1'} eq 'ipfire_src' && $fwdfwsettings{'grp2'} eq 'ipfire'){
                $errormessage=$Lang::tr{'fwdfw err same'};
        }
-       #INPUT part
-       if($fwdfwsettings{'grp2'} eq 'ipfire' && $fwdfwsettings{$fwdfwsettings{'grp1'}} ne 'ORANGE'){
+       # INPUT part
+       if ($fwdfwsettings{'grp2'} eq 'ipfire' && $fwdfwsettings{$fwdfwsettings{'grp1'}} ne 'ORANGE'){
                $fwdfwsettings{'config'}=$configinput;
                $fwdfwsettings{'chain'} = 'INPUTFW';
-               my $maxkey=&General::findhasharraykey(\%configinputfw);
-               #check if we have an identical rule already
-               if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
-                       foreach my $key (sort keys %configinputfw){
-                               if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
-                                       eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){
-                                               $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
-                                               if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
-                                                       $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
-                                               }
-                                               if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
-                                                       $errormessage='';
-                                               }
-                                               if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
-                                                       $fwdfwsettings{'nosave'} = 'on';
-                                               }
-                               }
-                       }
-               }
-               #check Rulepos on new Rule
-               if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
-                       $fwdfwsettings{'oldrulenumber'}=$maxkey;
-                       foreach my $key (sort keys %configinputfw){
-                               if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
-                                       eq "$configinputfw{$key}[0],$configinputfw{$key}[2],$configinputfw{$key}[3],$configinputfw{$key}[4],$configinputfw{$key}[5],$configinputfw{$key}[6],$configinputfw{$key}[7],$configinputfw{$key}[8],$configinputfw{$key}[9],$configinputfw{$key}[10],$configinputfw{$key}[11],$configinputfw{$key}[12],$configinputfw{$key}[13],$configinputfw{$key}[14],$configinputfw{$key}[15],$configinputfw{$key}[17],$configinputfw{$key}[18],$configinputfw{$key}[19],$configinputfw{$key}[20],$configinputfw{$key}[21],$configinputfw{$key}[22],$configinputfw{$key}[23],$configinputfw{$key}[24],$configinputfw{$key}[25],$configinputfw{$key}[26],$configinputfw{$key}[27],$configinputfw{$key}[28],$configinputfw{$key}[29],$configinputfw{$key}[30],$configinputfw{$key}[31],$configinputfw{$key}[32],$configinputfw{$key}[33],$configinputfw{$key}[34],$configinputfw{$key}[35],$configinputfw{$key}[36]"){
-                                               $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
-                               }
-                       }
-               }
-               #check if we just close a rule
-               if( $fwdfwsettings{'oldgrp1a'} eq  $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq  $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} &&  $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq  $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'} ) {
-                       if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
-                               $errormessage='';
-                               $fwdfwsettings{'nosave2'} = 'on';
-                       }
-               }
-               if (!$errormessage){
-                       if($fwdfwsettings{'nosave2'} ne 'on'){
-                               &saverule(\%configinputfw,$configinput);
-                       }
-               }
-       }elsif($fwdfwsettings{'grp1'} eq 'ipfire_src' ){
+               $maxkey=&General::findhasharraykey(\%configinputfw);
+               %rulehash=%configinputfw;
+       }elsif ($fwdfwsettings{'grp1'} eq 'ipfire_src' ){
        # OUTGOING PART
                $fwdfwsettings{'config'}=$configoutgoing;
                $fwdfwsettings{'chain'} = 'OUTGOINGFW';
-               my $maxkey=&General::findhasharraykey(\%configoutgoingfw);
-               if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
-                       foreach my $key (sort keys %configoutgoingfw){
-                               if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
-                                       eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31],$configoutgoingfw{$key}[32],$configoutgoingfw{$key}[33],$configoutgoingfw{$key}[34],$configoutgoingfw{$key}[35],$configoutgoingfw{$key}[36]"){
-                                               $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
-                                               if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
-                                                       $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
-                                               }
-                                               if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
-                                                       $errormessage='';
-                                               }
-                                               if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
-                                                       $fwdfwsettings{'nosave'} = 'on';
-                                               }
-                               }
-                       }
-               }
-               #check Rulepos on new Rule
-               if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
-                       $fwdfwsettings{'oldrulenumber'}=$maxkey;
-                       foreach my $key (sort keys %configoutgoingfw){
-                               if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
-                                       eq "$configoutgoingfw{$key}[0],$configoutgoingfw{$key}[2],$configoutgoingfw{$key}[3],$configoutgoingfw{$key}[4],$configoutgoingfw{$key}[5],$configoutgoingfw{$key}[6],$configoutgoingfw{$key}[7],$configoutgoingfw{$key}[8],$configoutgoingfw{$key}[9],$configoutgoingfw{$key}[10],$configoutgoingfw{$key}[11],$configoutgoingfw{$key}[12],$configoutgoingfw{$key}[13],$configoutgoingfw{$key}[14],$configoutgoingfw{$key}[15],$configoutgoingfw{$key}[17],$configoutgoingfw{$key}[18],$configoutgoingfw{$key}[19],$configoutgoingfw{$key}[20],$configoutgoingfw{$key}[21],$configoutgoingfw{$key}[22],$configoutgoingfw{$key}[23],$configoutgoingfw{$key}[24],$configoutgoingfw{$key}[25],$configoutgoingfw{$key}[26],$configoutgoingfw{$key}[27],$configoutgoingfw{$key}[28],$configoutgoingfw{$key}[29],$configoutgoingfw{$key}[30],$configoutgoingfw{$key}[31],$configoutgoingfw{$key}[32],$configoutgoingfw{$key}[33],$configoutgoingfw{$key}[34],$configoutgoingfw{$key}[35],$configoutgoingfw{$key}[36]"){
-                                               $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
-                               }
-                       }
-               }
-               #check if we just close a rule
-               if( $fwdfwsettings{'oldgrp1a'} eq  $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq  $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} &&  $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq  $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'} ) {
-                       if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
-                               $fwdfwsettings{'nosave2'} = 'on';
-                               $errormessage='';
-                       }
-               }
-               #increase counters
-               if (!$errormessage){
-                       if ($fwdfwsettings{'nosave2'} ne 'on'){
-                               &saverule(\%configoutgoingfw,$configoutgoing);
-                       }
-               }
-       }else{
-               #FORWARD PART
+               $maxkey=&General::findhasharraykey(\%configoutgoingfw);
+               %rulehash=%configoutgoingfw;
+       }else {
+       # FORWARD PART
                $fwdfwsettings{'config'}=$configfwdfw;
                $fwdfwsettings{'chain'} = 'FORWARDFW';
-               my $maxkey=&General::findhasharraykey(\%configfwdfw);
-               if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
-                       #check if we have an identical rule already
-                       foreach my $key (sort keys %configfwdfw){
-                               if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
-                                       eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31],$configfwdfw{$key}[32],$configfwdfw{$key}[33],$configfwdfw{$key}[34],$configfwdfw{$key}[35],$configfwdfw{$key}[36]"){
-                                               $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
-                                               if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
-                                                       $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
-                                               }
-                                               if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
-                                                       $errormessage='';
-                                               }
-                                               if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
-                                                       $fwdfwsettings{'nosave'} = 'on';
-                                               }
-                               }
+               $maxkey=&General::findhasharraykey(\%configfwdfw);
+               %rulehash=%configfwdfw;
+       }
+       #check if we have an identical rule already
+       if($fwdfwsettings{'oldrulenumber'} eq $fwdfwsettings{'rulepos'}){
+               foreach my $key (sort keys %rulehash){
+                       if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'ruleremark'},$fwdfwsettings{'LOG'},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
+                               eq "$rulehash{$key}[0],$rulehash{$key}[2],$rulehash{$key}[3],$rulehash{$key}[4],$rulehash{$key}[5],$rulehash{$key}[6],$rulehash{$key}[7],$rulehash{$key}[8],$rulehash{$key}[9],$rulehash{$key}[10],$rulehash{$key}[11],$rulehash{$key}[12],$rulehash{$key}[13],$rulehash{$key}[14],$rulehash{$key}[15],$rulehash{$key}[16],$rulehash{$key}[17],$rulehash{$key}[18],$rulehash{$key}[19],$rulehash{$key}[20],$rulehash{$key}[21],$rulehash{$key}[22],$rulehash{$key}[23],$rulehash{$key}[24],$rulehash{$key}[25],$rulehash{$key}[26],$rulehash{$key}[27],$rulehash{$key}[28],$rulehash{$key}[29],$rulehash{$key}[30],$rulehash{$key}[31],$rulehash{$key}[32],$rulehash{$key}[33],$rulehash{$key}[34],$rulehash{$key}[35],$rulehash{$key}[36]"){
+                                       $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
+                                       if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && !&validremark($fwdfwsettings{'ruleremark'})){
+                                               $errormessage=$Lang::tr{'fwdfw err remark'}."<br>";
+                                       }
+                                       if($fwdfwsettings{'oldruleremark'} ne $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'updatefwrule'} eq 'on' && $fwdfwsettings{'ruleremark'} ne '' && &validremark($fwdfwsettings{'ruleremark'})){
+                                               $errormessage='';
+                                       }
+                                       if ($fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'}){
+                                               $fwdfwsettings{'nosave'} = 'on';
+                                       }
                        }
                }
-               #check Rulepos on new Rule
-               if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
-                       $fwdfwsettings{'oldrulenumber'}=$maxkey;
-                       foreach my $key (sort keys %configfwdfw){
-                               if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
-                                       eq "$configfwdfw{$key}[0],$configfwdfw{$key}[2],$configfwdfw{$key}[3],$configfwdfw{$key}[4],$configfwdfw{$key}[5],$configfwdfw{$key}[6],$configfwdfw{$key}[7],$configfwdfw{$key}[8],$configfwdfw{$key}[9],$configfwdfw{$key}[10],$configfwdfw{$key}[11],$configfwdfw{$key}[12],$configfwdfw{$key}[13],$configfwdfw{$key}[14],$configfwdfw{$key}[15],$configfwdfw{$key}[18],$configfwdfw{$key}[19],$configfwdfw{$key}[20],$configfwdfw{$key}[21],$configfwdfw{$key}[22],$configfwdfw{$key}[23],$configfwdfw{$key}[24],$configfwdfw{$key}[25],$configfwdfw{$key}[26],$configfwdfw{$key}[27],$configfwdfw{$key}[28],$configfwdfw{$key}[29],$configfwdfw{$key}[30],$configfwdfw{$key}[31],$configfwdfw{$key}[32],$configfwdfw{$key}[33],$configfwdfw{$key}[34],$configfwdfw{$key}[35],$configfwdfw{$key}[36]"){
-                                               $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
-                               }
+       }
+       #check Rulepos on new Rule
+       if($fwdfwsettings{'rulepos'} > 0 && !$fwdfwsettings{'oldrulenumber'}){
+               $fwdfwsettings{'oldrulenumber'}=$maxkey;
+               foreach my $key (sort keys %rulehash){
+                       if (   "$fwdfwsettings{'RULE_ACTION'},$fwdfwsettings{'ACTIVE'},$fwdfwsettings{'grp1'},$fwdfwsettings{$fwdfwsettings{'grp1'}},$fwdfwsettings{'grp2'},$fwdfwsettings{$fwdfwsettings{'grp2'}},$fwdfwsettings{'USE_SRC_PORT'},$fwdfwsettings{'PROT'},$fwdfwsettings{'ICMP_TYPES'},$fwdfwsettings{'SRC_PORT'},$fwdfwsettings{'USESRV'},$fwdfwsettings{'TGT_PROT'},$fwdfwsettings{'ICMP_TGT'},$fwdfwsettings{'grp3'},$fwdfwsettings{$fwdfwsettings{'grp3'}},$fwdfwsettings{'TIME'},$fwdfwsettings{'TIME_MON'},$fwdfwsettings{'TIME_TUE'},$fwdfwsettings{'TIME_WED'},$fwdfwsettings{'TIME_THU'},$fwdfwsettings{'TIME_FRI'},$fwdfwsettings{'TIME_SAT'},$fwdfwsettings{'TIME_SUN'},$fwdfwsettings{'TIME_FROM'},$fwdfwsettings{'TIME_TO'},$fwdfwsettings{'USE_NAT'},$fwdfwsettings{$fwdfwsettings{'nat'}},$fwdfwsettings{'dnatport'},$fwdfwsettings{'nat'},$fwdfwsettings{'LIMIT_CON_CON'},$fwdfwsettings{'concon'},$fwdfwsettings{'RATE_LIMIT'},$fwdfwsettings{'ratecon'},$fwdfwsettings{'RATETIME'}"
+                               eq "$rulehash{$key}[0],$rulehash{$key}[2],$rulehash{$key}[3],$rulehash{$key}[4],$rulehash{$key}[5],$rulehash{$key}[6],$rulehash{$key}[7],$rulehash{$key}[8],$rulehash{$key}[9],$rulehash{$key}[10],$rulehash{$key}[11],$rulehash{$key}[12],$rulehash{$key}[13],$rulehash{$key}[14],$rulehash{$key}[15],$rulehash{$key}[18],$rulehash{$key}[19],$rulehash{$key}[20],$rulehash{$key}[21],$rulehash{$key}[22],$rulehash{$key}[23],$rulehash{$key}[24],$rulehash{$key}[25],$rulehash{$key}[26],$rulehash{$key}[27],$rulehash{$key}[28],$rulehash{$key}[29],$rulehash{$key}[30],$rulehash{$key}[31],$rulehash{$key}[32],$rulehash{$key}[33],$rulehash{$key}[34],$rulehash{$key}[35],$rulehash{$key}[36]"){
+                                       $errormessage.=$Lang::tr{'fwdfw err ruleexists'};
                        }
                }
-               #check if we just close a rule
-               if( $fwdfwsettings{'oldgrp1a'} eq  $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq  $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} &&  $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq  $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}){
-                       if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
-                               $fwdfwsettings{'nosave2'} = 'on';
-                               $errormessage='';
-                       }
+       }
+       #check if we just close a rule
+       if( $fwdfwsettings{'oldgrp1a'} eq  $fwdfwsettings{'grp1'} && $fwdfwsettings{'oldgrp1b'} eq $fwdfwsettings{$fwdfwsettings{'grp1'}} && $fwdfwsettings{'oldgrp2a'} eq  $fwdfwsettings{'grp2'} && $fwdfwsettings{'oldgrp2b'} eq $fwdfwsettings{$fwdfwsettings{'grp2'}} &&  $fwdfwsettings{'oldgrp3a'} eq $fwdfwsettings{'grp3'} && $fwdfwsettings{'oldgrp3b'} eq  $fwdfwsettings{$fwdfwsettings{'grp3'}} && $fwdfwsettings{'oldusesrv'} eq $fwdfwsettings{'USESRV'} && $fwdfwsettings{'oldruleremark'} eq $fwdfwsettings{'ruleremark'} && $fwdfwsettings{'oldruletype'} eq $fwdfwsettings{'chain'}){
+               if($fwdfwsettings{'nosave'} eq 'on' && $fwdfwsettings{'updatefwrule'} eq 'on'){
+                       $fwdfwsettings{'nosave2'} = 'on';
+                       $errormessage='';
                }
-               #check max concurrent connections per ip address
-               if ($fwdfwsettings{'LIMIT_CON_CON'} eq 'ON'){
-                       if (!($fwdfwsettings{'concon'} =~ /^(\d+)$/)) {
-                               $errormessage.=$Lang::tr{'fwdfw err concon'};
-                       }
-               }else{
-                       $fwdfwsettings{'concon'}='';
+       }
+       #check max concurrent connections per ip address
+       if ($fwdfwsettings{'LIMIT_CON_CON'} eq 'ON'){
+               if (!($fwdfwsettings{'concon'} =~ /^(\d+)$/)) {
+                       $errormessage.=$Lang::tr{'fwdfw err concon'};
                }
-               #check ratelimit value
-               if ($fwdfwsettings{'RATE_LIMIT'} eq 'ON'){
-                       if (!($fwdfwsettings{'ratecon'} =~ /^(\d+)$/)) {
-                               $errormessage.=$Lang::tr{'fwdfw err ratecon'};
-                       }
-               }else{
-                       $fwdfwsettings{'ratecon'}='';
+       }else{
+               $fwdfwsettings{'concon'}='';
+       }
+       #check ratelimit value
+       if ($fwdfwsettings{'RATE_LIMIT'} eq 'ON'){
+               if (!($fwdfwsettings{'ratecon'} =~ /^(\d+)$/)) {
+                       $errormessage.=$Lang::tr{'fwdfw err ratecon'};
                }
-               #increase counters
-               if (!$errormessage){
-                       if ($fwdfwsettings{'nosave2'} ne 'on'){
-                               &saverule(\%configfwdfw,$configfwdfw);
-                       }
+       }else{
+               $fwdfwsettings{'ratecon'}='';
+       }
+       #increase counters
+       if (!$errormessage){
+               if ($fwdfwsettings{'nosave2'} ne 'on'){
+                       &saverule(\%rulehash,$fwdfwsettings{'config'});
                }
        }
        if ($errormessage){
index c3642f0f0e9ca7838d9b8b766df55e3c3197b1c1..f42947e8c7e99d056375fbd8165801ea9c68db44 100644 (file)
@@ -728,10 +728,10 @@ if ($fwhostsettings{'ACTION'} eq 'saveservicegrp')
                        }
                }
        }
-       if ($tcpcounter > 15){
+       if ($tcpcounter > 14){
                $errormessage=$Lang::tr{'fwhost err maxservicetcp'};
        }
-       if ($udpcounter > 15){
+       if ($udpcounter > 14){
                $errormessage=$Lang::tr{'fwhost err maxserviceudp'};
        }
        $tcpcounter=0;
index 8bb4900638b7b1ce431c99c18d568c65f159aa84..7525626668b6aa595b1a6dca0221a385032210b4 100644 (file)
@@ -334,13 +334,14 @@ foreach $_ (@log)
         my $comment = $3; 
         my $packet = $4;
 
-        $packet =~ /IN=(\w+)/;       my $iface=$1; if ( $1 =~ /2./ ){ $iface="";}
-        $packet =~ /SRC=([\d\.]+)/;  my $srcaddr=$1;
-        $packet =~ /DST=([\d\.]+)/;  my $dstaddr=$1;
-        $packet =~ /MAC=([\w+\:]+)/; my $macaddr=$1;
-        $packet =~ /PROTO=(\w+)/;    my $proto=$1;
-        $packet =~ /SPT=(\d+)/;      my $srcport=$1;
-        $packet =~ /DPT=(\d+)/;      my $dstport=$1;
+               my ($iface, $srcaddr, $dstaddr, $macaddr, $proto, $srcport, $dstport);
+               $iface=$1   if $packet =~ /IN=(\w+)/;
+               $srcaddr=$1 if $packet =~ /SRC=([\d\.]+)/;
+               $dstaddr=$1 if $packet =~ /DST=([\d\.]+)/;
+               $macaddr=$1 if $packet =~ /MAC=([\w+\:]+)/;
+               $proto=$1   if $packet =~ /PROTO=(\w+)/;
+               $srcport=$1 if $packet =~ /SPT=(\d+)/;
+               $dstport=$1 if $packet =~ /DPT=(\d+)/;
 
         my $gi = Geo::IP::PurePerl->new();
         my $ccode = $gi->country_code_by_name($srcaddr);
index 380ae2686df12c6d94b42327abb9e9048ad196e9..26f6f5311dbf96346f454e7f873c0c9e9cbc4d49 100644 (file)
@@ -1878,12 +1878,12 @@ END
        $cgiparams{'REMOTE_ID'} = '';
 
        #use default advanced value
-       $cgiparams{'IKE_ENCRYPTION'} = 'aes256|aes192|aes128|3des';     #[18];
-       $cgiparams{'IKE_INTEGRITY'}  = 'sha2_256|sha|md5';      #[19];
+       $cgiparams{'IKE_ENCRYPTION'} = 'aes256|aes192|aes128|aes256gcm128|aes192gcm128|aes128gcm128|aes256gcm96|aes192gcm96|aes128gcm96|aes256gcm64|aes192gcm64|aes128gcm64';   #[18];
+       $cgiparams{'IKE_INTEGRITY'}  = 'sha2_512|sha2_256|sha'; #[19];
        $cgiparams{'IKE_GROUPTYPE'}  = '4096|3072|2048|1536|1024';              #[20];
        $cgiparams{'IKE_LIFETIME'}   = '3';             #[16];
-       $cgiparams{'ESP_ENCRYPTION'} = 'aes256|aes192|aes128|3des';     #[21];
-       $cgiparams{'ESP_INTEGRITY'}  = 'sha2_256|sha1|md5';     #[22];
+       $cgiparams{'ESP_ENCRYPTION'} = 'aes256|aes192|aes128|aes256gcm128|aes192gcm128|aes128gcm128|aes256gcm96|aes192gcm96|aes128gcm96|aes256gcm64|aes192gcm64|aes128gcm64';   #[21];
+       $cgiparams{'ESP_INTEGRITY'}  = 'sha2_512|sha2_256|sha1';        #[22];
        $cgiparams{'ESP_GROUPTYPE'}  = '';              #[23];
        $cgiparams{'ESP_KEYLIFE'}    = '1';             #[17];
        $cgiparams{'COMPRESSION'}    = 'on';            #[13];
@@ -2137,7 +2137,7 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) ||
            goto ADVANCED_ERROR;
        }
        foreach my $val (@temp) {
-           if ($val !~ /^(aes256|aes192|aes128|3des|camellia256|camellia192|camellia128)$/) {
+           if ($val !~ /^(aes(256|192|128)(gcm(128|96|64))?|3des|camellia(256|192|128))$/) {
                $errormessage = $Lang::tr{'invalid input'};
                goto ADVANCED_ERROR;
            }
@@ -2168,8 +2168,8 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) ||
            $errormessage = $Lang::tr{'invalid input for ike lifetime'};
            goto ADVANCED_ERROR;
        }
-       if ($cgiparams{'IKE_LIFETIME'} < 1 || $cgiparams{'IKE_LIFETIME'} > 24) {
-           $errormessage = $Lang::tr{'ike lifetime should be between 1 and 24 hours'};
+       if ($cgiparams{'IKE_LIFETIME'} < 1 || $cgiparams{'IKE_LIFETIME'} > 8) {
+           $errormessage = $Lang::tr{'ike lifetime should be between 1 and 8 hours'};
            goto ADVANCED_ERROR;
        }
        @temp = split('\|', $cgiparams{'ESP_ENCRYPTION'});
@@ -2178,7 +2178,7 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) ||
            goto ADVANCED_ERROR;
        }
        foreach my $val (@temp) {
-           if ($val !~ /^(aes256|aes192|aes128|3des|camellia256|camellia192|camellia128)$/) {
+           if ($val !~ /^(aes(256|192|128)(gcm(128|96|64))?|3des|camellia(256|192|128))$/) {
                $errormessage = $Lang::tr{'invalid input'};
                goto ADVANCED_ERROR;
            }
@@ -2289,6 +2289,15 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) ||
     $checked{'IKE_ENCRYPTION'}{'aes256'} = '';
     $checked{'IKE_ENCRYPTION'}{'aes192'} = '';
     $checked{'IKE_ENCRYPTION'}{'aes128'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes256gcm128'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes192gcm128'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes128gcm128'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes256gcm96'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes192gcm96'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes128gcm96'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes256gcm64'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes192gcm64'} = '';
+    $checked{'IKE_ENCRYPTION'}{'aes128gcm64'} = '';
     $checked{'IKE_ENCRYPTION'}{'3des'} = '';
     $checked{'IKE_ENCRYPTION'}{'camellia256'} = '';
     $checked{'IKE_ENCRYPTION'}{'camellia192'} = '';
@@ -2320,6 +2329,15 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) ||
     $checked{'ESP_ENCRYPTION'}{'aes256'} = '';
     $checked{'ESP_ENCRYPTION'}{'aes192'} = '';
     $checked{'ESP_ENCRYPTION'}{'aes128'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes256gcm128'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes192gcm128'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes128gcm128'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes256gcm96'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes192gcm96'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes128gcm96'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes256gcm64'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes192gcm64'} = '';
+    $checked{'ESP_ENCRYPTION'}{'aes128gcm64'} = '';
     $checked{'ESP_ENCRYPTION'}{'3des'} = '';
     $checked{'ESP_ENCRYPTION'}{'camellia256'} = '';
     $checked{'ESP_ENCRYPTION'}{'camellia192'} = '';
@@ -2398,24 +2416,42 @@ if(($cgiparams{'ACTION'} eq $Lang::tr{'advanced'}) ||
                        <td class='boldbase' width="15%">$Lang::tr{'encryption'}</td>
                        <td class='boldbase'>
                                <select name='IKE_ENCRYPTION' multiple='multiple' size='6' style='width: 100%'>
-                                       <option value='aes256' $checked{'IKE_ENCRYPTION'}{'aes256'}>AES (256 bit)</option>
-                                       <option value='aes192' $checked{'IKE_ENCRYPTION'}{'aes192'}>AES (192 bit)</option>
-                                       <option value='aes128' $checked{'IKE_ENCRYPTION'}{'aes128'}>AES (128 bit)</option>
-                                       <option value='3des' $checked{'IKE_ENCRYPTION'}{'3des'}>3DES</option>
-                                       <option value='camellia256' $checked{'IKE_ENCRYPTION'}{'camellia256'}>Camellia (256 bit)</option>
-                                       <option value='camellia192' $checked{'IKE_ENCRYPTION'}{'camellia192'}>Camellia (192 bit)</option>
-                                       <option value='camellia128' $checked{'IKE_ENCRYPTION'}{'camellia128'}>Camellia (128 bit)</option>
+                                       <option value='aes256' $checked{'IKE_ENCRYPTION'}{'aes256'}>256 bit AES-CBC</option>
+                                       <option value='aes192' $checked{'IKE_ENCRYPTION'}{'aes192'}>192 bit AES-CBC</option>
+                                       <option value='aes128' $checked{'IKE_ENCRYPTION'}{'aes128'}>128 bit AES-CBC</option>
+                                       <option value='aes256gcm128' $checked{'IKE_ENCRYPTION'}{'aes256gcm128'}>256 bit AES-GCM/128 bit ICV</option>
+                                       <option value='aes192gcm128' $checked{'IKE_ENCRYPTION'}{'aes192gcm128'}>192 bit AES-GCM/128 bit ICV</option>
+                                       <option value='aes128gcm128' $checked{'IKE_ENCRYPTION'}{'aes128gcm128'}>128 bit AES-GCM/128 bit ICV</option>
+                                       <option value='aes256gcm96' $checked{'IKE_ENCRYPTION'}{'aes256gcm96'}>256 bit AES-GCM/96 bit ICV</option>
+                                       <option value='aes192gcm96' $checked{'IKE_ENCRYPTION'}{'aes192gcm96'}>192 bit AES-GCM/96 bit ICV</option>
+                                       <option value='aes128gcm96' $checked{'IKE_ENCRYPTION'}{'aes128gcm96'}>128 bit AES-GCM/96 bit ICV</option>
+                                       <option value='aes256gcm64' $checked{'IKE_ENCRYPTION'}{'aes256gcm64'}>256 bit AES-GCM/64 bit ICV</option>
+                                       <option value='aes192gcm64' $checked{'IKE_ENCRYPTION'}{'aes192gcm64'}>192 bit AES-GCM/64 bit ICV</option>
+                                       <option value='aes128gcm64' $checked{'IKE_ENCRYPTION'}{'aes128gcm64'}>128 bit AES-GCM/64 bit ICV</option>
+                                       <option value='3des' $checked{'IKE_ENCRYPTION'}{'3des'}>168 bit 3DES-EDE-CBC</option>
+                                       <option value='camellia256' $checked{'IKE_ENCRYPTION'}{'camellia256'}>256 bit Camellia-CBC</option>
+                                       <option value='camellia192' $checked{'IKE_ENCRYPTION'}{'camellia192'}>192 bit Camellia-CBC</option>
+                                       <option value='camellia128' $checked{'IKE_ENCRYPTION'}{'camellia128'}>128 bit Camellia-CBC</option>
                                </select>
                        </td>
                        <td class='boldbase'>
                                <select name='ESP_ENCRYPTION' multiple='multiple' size='6' style='width: 100%'>
-                                       <option value='aes256' $checked{'ESP_ENCRYPTION'}{'aes256'}>AES (256 bit)</option>
-                                       <option value='aes192' $checked{'ESP_ENCRYPTION'}{'aes192'}>AES (192 bit)</option>
-                                       <option value='aes128' $checked{'ESP_ENCRYPTION'}{'aes128'}>AES (128 bit)</option>
-                                       <option value='3des' $checked{'ESP_ENCRYPTION'}{'3des'}>3DES</option>
-                                       <option value='camellia256' $checked{'ESP_ENCRYPTION'}{'camellia256'}>Camellia (256 bit)</option>
-                                       <option value='camellia192' $checked{'ESP_ENCRYPTION'}{'camellia192'}>Camellia (192 bit)</option>
-                                       <option value='camellia128' $checked{'ESP_ENCRYPTION'}{'camellia128'}>Camellia (128 bit)</option>
+                                       <option value='aes256' $checked{'ESP_ENCRYPTION'}{'aes256'}>256 bit AES-CBC</option>
+                                       <option value='aes192' $checked{'ESP_ENCRYPTION'}{'aes192'}>192 bit AES-CBC</option>
+                                       <option value='aes128' $checked{'ESP_ENCRYPTION'}{'aes128'}>128 bit AES-CBC</option>
+                                       <option value='aes256gcm128' $checked{'ESP_ENCRYPTION'}{'aes256gcm128'}>256 bit AES-GCM/128 bit ICV</option>
+                                       <option value='aes192gcm128' $checked{'ESP_ENCRYPTION'}{'aes192gcm128'}>192 bit AES-GCM/128 bit ICV</option>
+                                       <option value='aes128gcm128' $checked{'ESP_ENCRYPTION'}{'aes128gcm128'}>128 bit AES-GCM/128 bit ICV</option>
+                                       <option value='aes256gcm96' $checked{'ESP_ENCRYPTION'}{'aes256gcm96'}>256 bit AES-GCM/96 bit ICV</option>
+                                       <option value='aes192gcm96' $checked{'ESP_ENCRYPTION'}{'aes192gcm96'}>192 bit AES-GCM/96 bit ICV</option>
+                                       <option value='aes128gcm96' $checked{'ESP_ENCRYPTION'}{'aes128gcm96'}>128 bit AES-GCM/96 bit ICV</option>
+                                       <option value='aes256gcm64' $checked{'ESP_ENCRYPTION'}{'aes256gcm64'}>256 bit AES-GCM/64 bit ICV</option>
+                                       <option value='aes192gcm64' $checked{'ESP_ENCRYPTION'}{'aes192gcm64'}>192 bit AES-GCM/64 bit ICV</option>
+                                       <option value='aes128gcm64' $checked{'ESP_ENCRYPTION'}{'aes128gcm64'}>128 bit AES-GCM/64 bit ICV</option>
+                                       <option value='3des' $checked{'ESP_ENCRYPTION'}{'3des'}>168 bit 3DES-EDE-CBC</option>
+                                       <option value='camellia256' $checked{'ESP_ENCRYPTION'}{'camellia256'}>256 bit Camellia-CBC</option>
+                                       <option value='camellia192' $checked{'ESP_ENCRYPTION'}{'camellia192'}>192 bit Camellia-CBC</option>
+                                       <option value='camellia128' $checked{'ESP_ENCRYPTION'}{'camellia128'}>128 bit Camellia-CBC</option>
                                </select>
                        </td>
                </tr>
index ff85e1cb5d36a2371e19bd082c703cdaf64baf38..686fadad1ca80039c131d5cf4a84025cd67229ba 100644 (file)
--- a/lfs/acpid
+++ b/lfs/acpid
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2015  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.0.16
+VER        = 2.0.23
 
 THISAPP    = acpid-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -41,7 +41,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d59fc02c9c34f0d5c137495302e2c074
+$(DL_FILE)_MD5 = d7bcdcdefcd53b03730e50ba842554ea
 
 install : $(TARGET)
 
index cd9821c9d165f5c8bd45a13464289965710e81a4..f886225257c6d21e903d7ccb7859e7a4031fd5e9 100755 (executable)
@@ -28,9 +28,9 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = asterisk
-PAK_VER    = 13
+PAK_VER    = 14
 
-DEPS       = "libsrtp sqlite"
+DEPS       = "libsrtp"
 
 ###############################################################################
 # Top-level Rules
index 2c996b26a5353f9242676329d710b29a3b2d97f7..2e07ed03449dbe4a5d6df207f1cc6ffd6ec9c85e 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2015  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 0.98.5
+VER        = 0.98.6
 
 THISAPP    = clamav-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = clamav
-PAK_VER    = 27
+PAK_VER    = 28
 
 DEPS       = ""
 
@@ -48,7 +48,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = abb5c7efaff3394c0a49ff970841a2ac
+$(DL_FILE)_MD5 = 7f4f7e82a09e42c4ebf153d6d452d9d8
 
 install : $(TARGET)
 
@@ -81,6 +81,7 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/clamav/llvm-glibc.patch
        cd $(DIR_APP) && ./configure \
                --prefix=/usr \
                --sysconfdir=/var/ipfire/clamav \
index 715d79d07c305e1f80153fbd159ce37d346a8a53..0fd92c1848a32b4814cba48b2e369ab6330cb21b 100644 (file)
--- a/lfs/curl
+++ b/lfs/curl
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2015  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 7.31.0
+VER        = 7.40.0
 
 THISAPP    = curl-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 6f26843f7e3a2fb06e02f68a55efe8c7
+$(DL_FILE)_MD5 = 58943642ea0ed050ab0431ea1caf3a6f
 
 install : $(TARGET)
 
index 6efc418c54bb8fc787e1d5c99344b44a9ffaf9f6..e736e101ce3ce4f4d7a1e1a83a63c130db399528 100644 (file)
--- a/lfs/ddns
+++ b/lfs/ddns
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 005
+VER        = 007
 
 THISAPP    = ddns-$(VER)
 DL_FILE    = $(THISAPP).tar.xz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 5fb0e7c8a775ae03074ad90d5a251a4c
+$(DL_FILE)_MD5 = 44f63cecc36db0d9ffddfa4bca7983ae
 
 install : $(TARGET)
 
@@ -71,11 +71,12 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ddns/ddns-005-Add-changeip-com.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ddns/ddns-005-SPDNS-fix-auth.patch
-
        cd $(DIR_APP) && [ -x "configure" ] || sh ./autogen.sh
-       cd $(DIR_APP) && ./configure --prefix=/usr --sysconfdir=/var/ipfire
+       cd $(DIR_APP) && ./configure \
+               --prefix=/usr \
+               --sysconfdir=/var/ipfire \
+               --disable-manpages
+
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
 
index 083c31fa1107bc70daf28789d5d386f4893b8891..9a89d40bf0aa34d60e67be124e2b016292c53516 100644 (file)
--- a/lfs/dhcp
+++ b/lfs/dhcp
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2012  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2015  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 4.2.2
+VER        = 4.3.1
 
 THISAPP    = dhcp-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = bb0f0434cd796f76aa7cead391d71f31
+$(DL_FILE)_MD5 = b3a42ece3c7f2cd2e74a3e12ca881d20
 
 install : $(TARGET)
 
@@ -71,38 +71,33 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
 
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-remove-bind.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-errwarn-message.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-options.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-release-by-ifup.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-dhclient-decline-backoff.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-unicast-bootp.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-dhclient-usage.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-default-requested-options.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-xen-checksum.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-manpages.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-paths.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-CLOEXEC.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-inherit-leases.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-garbage-chars.patch
-       # ???
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-missing-ipv6-not-fatal.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-add_timeout_when_NULL.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-64_bit_lease_parse.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-capability.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-logpid.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-UseMulticast.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-sendDecline.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-retransmission.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-rfc3442-classless-static-routes.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-honor-expired.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-noprefixavail.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-sharedlib.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.0-PPP.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-lpf-ib.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-improved-xid.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.2-gpxe-cid.patch
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp-4.2.1-invalid-dhclient-conf.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-remove-bind.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-errwarn-message.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-dhclient-options.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-release-by-ifup.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-dhclient-decline-backoff.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-unicast-bootp.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-default-requested-options.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-xen-checksum.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-manpages.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-paths.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-CLOEXEC.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-garbage-chars.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-add_timeout_when_NULL.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-64_bit_lease_parse.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-capability.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-logpid.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-UseMulticast.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-sendDecline.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-rfc3442-classless-static-routes.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-honor-expired.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-sharedlib.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-PPP.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-paranoia.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-lpf-ib.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-improved-xid.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-gpxe-cid.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/dhcp/dhcp-stateless-DUID-LLT.patch
 
        # Remove bundled BIND stuff.
        # (requires newer autoconf)
index d4eb9d4ce6f40c12655a5885c348baa5b3136daf..4bb7f9f0d116d8dfad9e58e37c4919f90c2565f6 100644 (file)
 
 include Config
 
-VER        = 1062667
+VER        = 2.72
 
 THISAPP    = dnsmasq-$(VER)
-DL_FILE    = $(THISAPP)-20150201.tar.gz
+DL_FILE    = $(THISAPP).tar.xz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
@@ -43,7 +43,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = ee58d033a892faa69b099ed598f500c2
+$(DL_FILE)_MD5 = 0256e0a71e27c8d8a5c89a0d18f3cfe2
 
 install : $(TARGET)
 
@@ -73,6 +73,63 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0001-Add-newline-at-the-end-of-example-config-file.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0002-crash-at-startup-when-an-empty-suffix-is-supplied-to.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0003-Debian-build-fixes-for-kFreeBSD.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0004-Set-conntrack-mark-before-connect-call.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0005-Fix-typo-in-new-Dbus-code.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0006-Fit-example-conf-file-typo.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0007-Improve-RFC-compliance-when-unable-to-supply-address.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0008-Fix-conntrack-with-bind-interfaces.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0009-Use-inotify-instead-of-polling-on-Linux.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0010-Teach-the-new-inotify-code-about-symlinks.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0011-Remove-floor-on-EDNS0-packet-size-with-DNSSEC.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0012-CHANGELOG-re.-inotify.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0013-Fix-breakage-of-domain-domain-subnet-local.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0014-Remove-redundant-IN6_IS_ADDR_ULA-a-macro-defn.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0015-Eliminate-IPv6-privacy-addresses-from-interface-name.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0016-Tweak-field-width-in-cache-dump-to-avoid-truncating-.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0017-Fix-crash-in-DNSSEC-code-when-attempting-to-verify-l.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0018-Make-caching-work-for-CNAMEs-pointing-to-A-AAAA-reco.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0019-Fix-problems-validating-NSEC3-and-wildcards.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0020-Initialise-return-value.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0021-Add-ignore-address-option.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0022-Bad-packet-protection.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0023-Fix-build-failure-in-new-inotify-code-on-BSD.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0024-Implement-makefile-dependencies-on-COPTS-variable.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0025-Fix-race-condition-issue-in-makefile.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0026-DNSSEC-do-top-down-search-for-limit-of-secure-delega.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0027-Add-log-queries-extra-option-for-more-complete-loggi.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0028-Add-min-cache-ttl-option.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0029-Log-port-of-requestor-when-doing-extra-logging.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0030-Don-t-answer-from-cache-RRsets-from-wildcards-as-we-.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0031-Logs-for-DS-records-consistent.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0032-Cope-with-multiple-interfaces-with-the-same-LL-addre.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0033-Don-t-treat-SERVFAIL-as-a-recoverable-error.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0034-Add-dhcp-hostsdir-config-option.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0035-Update-German-translation.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0036-Don-t-reply-to-DHCPv6-SOLICIT-messages-when-not-conf.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0037-Allow-inotify-to-be-disabled-at-compile-time-on-Linu.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0038-Expand-inotify-code-to-dhcp-hostsdir-dhcp-optsdir-an.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0039-Update-copyrights-for-dawn-of-2015.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0040-inotify-documentation-updates.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0041-Fix-broken-ECDSA-DNSSEC-signatures.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0042-BSD-make-support.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0043-Fix-build-failure-on-openBSD.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0044-Manpage-typo-fix.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0045-Fixup-dhcp-configs-after-reading-extra-hostfiles-wit.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0046-Extra-logging-for-inotify-code.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0047-man-page-typo.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0048-Fix-get-version-script-which-returned-wrong-tag-in-s.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0049-Typos.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0050-Make-dynamic-hosts-files-work-when-no-hosts-set.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0051-Fix-trivial-memory-leaks-to-quieten-valgrind.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0052-Fix-uninitialized-value-used-in-get_client_mac.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0053-Log-parsing-utils-in-contrib-reverse-dns.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0054-Add-dnssec-timestamp-option-and-facility.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0055-Fix-last-commit-to-not-crash-if-uid-changing-not-con.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0056-New-version-of-contrib-reverse-dns.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq/0057-Tweak-DNSSEC-timestamp-code-to-create-file-later-rem.patch
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/dnsmasq-Add-support-to-read-ISC-DHCP-lease-file.patch
        cd $(DIR_APP) && sed -i src/config.h \
                -e 's|/\* #define HAVE_IDN \*/|#define HAVE_IDN|g' \
index 69e8f0103692390cd44896a84ac3856614c06277..a875fb3cd1c6156f79c849d9193f7055fdf80748 100644 (file)
--- a/lfs/fuse
+++ b/lfs/fuse
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2015  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 2.8.3
+VER        = 2.9.3
 
 THISAPP    = fuse-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 517c8384f915e40647bda9f71579fd97
+$(DL_FILE)_MD5 = 33cae22ca50311446400daf8a6255c6a
 
 install : $(TARGET)
 
similarity index 57%
rename from lfs/teamspeak
rename to lfs/haproxy
index 06fbb0f384d49cd8ecd2686c49bd52c139839878..febb65a5d3718b164f2409a0c5596bfe96b09510 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2013  IPFire Team  <info@ipfire.org>                          #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
 
 include Config
 
-VER        = 2.0.24.1
+VER        = 1.5.11
 
-THISAPP    = teamspeak-$(VER)
+THISAPP    = haproxy-$(VER)
+DL_FILE    = $(THISAPP).tar.gz
+DL_FROM    = $(URL_IPFIRE)
+DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
-PROG       = teamspeak
-PAK_VER    = 2
+PROG       = haproxy
+PAK_VER    = 1
 
 DEPS       = ""
 
@@ -37,26 +40,60 @@ DEPS       = ""
 # Top-level Rules
 ###############################################################################
 
-objects = 
+objects = $(DL_FILE)
+
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+
+$(DL_FILE)_MD5 = 5500a79d0d2b238d4a1e9749bd0c2cb2
 
 install : $(TARGET)
 
-check :
+check : $(patsubst %,$(DIR_CHK)/%,$(objects))
 
-download :
+download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
-md5 :
+md5 : $(subst %,%_MD5,$(objects))
 
-dist: 
+dist:
        @$(PAK)
 
+###############################################################################
+# Downloading, checking, md5sum
+###############################################################################
+
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
+       @$(CHECK)
+
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
+       @$(LOAD)
+
+$(subst %,%_MD5,$(objects)) :
+       @$(MD5)
+
 ###############################################################################
 # Installation Details
 ###############################################################################
 
-$(TARGET) :
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
-       -mkdir -p /opt/teamspeak
-       install -v -m 644 $(DIR_SRC)/config/backup/includes/teamspeak \
-                       /var/ipfire/backup/addons/includes/teamspeak
+       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+
+       cd $(DIR_APP) && make $(MAKETUNING) CPU="generic" TARGET="linux2628" \
+               USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 USE_REGPARM=1 \
+               ADDINC="$(CFLAGS)" USE_LINUX_TPROXY=1 ADDLIB="$(LDFLAGS)"
+
+       cd $(DIR_APP) && make install-bin install-man PREFIX=/usr
+
+       -mkdir -pv /etc/haproxy /var/lib/haproxy
+       install -v -m 644 $(DIR_SRC)/config/haproxy/haproxy.cfg \
+               /etc/haproxy/haproxy.cfg
+
+       install -v -m 644 $(DIR_SRC)/config/backup/includes/haproxy \
+               /var/ipfire/backup/addons/includes/haproxy
+
+       # Restore initscript
+       install -v -m 754 $(DIR_SRC)/src/initscripts/init.d/haproxy \
+               /etc/rc.d/init.d/haproxy
+
+       @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index f656c72a7458025459f1481a568a1721f4059804..400594136230363a5ea32c29bab06658cffbe7bb 100755 (executable)
@@ -176,6 +176,7 @@ $(TARGET) :
        ln -sf ../init.d/firstsetup  /etc/rc.d/rcsysinit.d/S75firstsetup
        ln -sf ../init.d/localnet    /etc/rc.d/rcsysinit.d/S80localnet
        ln -sf ../init.d/firewall    /etc/rc.d/rcsysinit.d/S85firewall
+       ln -sf ../init.d/network-trigger /etc/rc.d/rcsysinit.d/S90network-trigger
        ln -sf ../init.d/network-vlans /etc/rc.d/rcsysinit.d/S91network-vlans
        ln -sf ../init.d/rngd        /etc/rc.d/rcsysinit.d/S92rngd
        ln -sf ../init.d/wlanclient  /etc/rc.d/rc0.d/K82wlanclient
index 7e2d1446757710257e8401f4b39965682bf35fc3..6dfef3b1977c3ac8d45d75ad5447837ea1be9af3 100644 (file)
@@ -53,6 +53,9 @@ download :$(patsubst %,$(DIR_DL)/%,$(objects))
 
 md5 : $(subst %,%_MD5,$(objects))
 
+dist: 
+       @$(PAK)
+
 ###############################################################################
 # Downloading, checking, md5sum
 ###############################################################################
index d92bdfee301be269b2a6ac49af3ad877dd868363..ef30fa673cf5ee6d980f89dbecb299d9aaad3efd 100644 (file)
--- a/lfs/linux
+++ b/lfs/linux
 
 include Config
 
-VER        = 3.14.32
+VER        = 3.14.33
 
-RPI_PATCHES = 3.14.32-grsec-ipfire1
-A7M_PATCHES = 3.14.32-grsec-ipfire1
-GRS_PATCHES = grsecurity-3.0-3.14.32-201502062101.patch.xz
+RPI_PATCHES = 3.14.33-grsec-ipfire1
+A7M_PATCHES = 3.14.33-grsec-ipfire1
+GRS_PATCHES = grsecurity-3.0-3.14.33-201502180832.patch.xz
 
 THISAPP    = linux-$(VER)
 DL_FILE    = linux-$(VER).tar.xz
@@ -77,10 +77,10 @@ rpi-patches-$(RPI_PATCHES).patch.xz         = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).
 arm7-multi-patches-$(A7M_PATCHES).patch.xz     = $(URL_IPFIRE)/arm7-multi-patches-$(A7M_PATCHES).patch.xz
 $(GRS_PATCHES)                                 = $(URL_IPFIRE)/$(GRS_PATCHES)
 
-$(DL_FILE)_MD5                                 = 3178fb8f6f1eafcffdd730fec68754f8
-rpi-patches-$(RPI_PATCHES).patch.xz_MD5                = 375dc501711ff3ffeffdfc9848675d26
-arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = efcfe5889f120d879387dd4ebe881587
-$(GRS_PATCHES)_MD5                             = c1565eb2a630a673f3ace31a6901e251
+$(DL_FILE)_MD5                                 = c19feb0646fde7e96602ac313fb7e5d6
+rpi-patches-$(RPI_PATCHES).patch.xz_MD5                = e423c8b3a408f23b9a26f8f0f4384c50
+arm7-multi-patches-$(A7M_PATCHES).patch.xz_MD5 = f147ce7c81889d2c5134304f3a6e60e3
+$(GRS_PATCHES)_MD5                             = 119943451628ff5a62437637d60a585d
 
 install : $(TARGET)
 
@@ -175,11 +175,11 @@ ifeq "$(KCFG)" "-multi"
        # Apply Arm7-multiarch kernel patches.
        cd $(DIR_APP) && xzcat $(DIR_DL)/arm7-multi-patches-$(A7M_PATCHES).patch.xz | patch -Np1
 
-       # Update Banana Pi, Lamobo-R1 and add Banana Pro dtb
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.x-update_banana_dts.patch
-
        # Install switch api userspace header
        cd $(DIR_APP) && install -v -m644 include/uapi/linux/switch.h /usr/include/linux/
+
+       # Fix Lamobo-R1 SATA Power
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.14.x-lamobo-r1-fix-sata-pwr.patch
 endif
 
 ifeq "$(KCFG)" "-rpi"
index 54afba1d3d5b66ccc64c8d647a3dda73ff50c2c7..8f81b2df546cac234a664b0e89c61000a75487dc 100644 (file)
@@ -72,6 +72,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
-       touch /var/lib/logrotate.status
+       mkdir -pv /etc/logrotate.d
+       touch /etc/logrotate.d/.empty /var/lib/logrotate.status
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
index 4d65137baf8c0f1c3d165aaaec00346b38beeb2f..0ed890f8b108f233d7c6b31517be068b7a9591d7 100644 (file)
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2009  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2015  Michael Tremer & Christian Schmidt                      #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,9 +24,9 @@
 
 include Config
 
-VER        = 2011.1.15
+VER        = 2014.2.15
 
-THISAPP    = ntfs-3g-$(VER)
+THISAPP    = ntfs-3g_ntfsprogs-$(VER)
 DL_FILE    = $(THISAPP).tgz
 DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
@@ -40,7 +40,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 15a5cf5752012269fa168c24191f00e2
+$(DL_FILE)_MD5 = f11d563816249d730a00498983485f3a
 
 install : $(TARGET)
 
index 3cf8e3c45d8c913d413e3cba4a3190488957f01d..88c5f4590fd41bbcd86ddace3e2e18191625b698 100644 (file)
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 7.0.0
+VER        = 7.0.3
 
 THISAPP    = owncloud-$(VER)
 DL_FILE    = $(THISAPP).tar.bz2
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = owncloud
-PAK_VER           = 2
+PAK_VER           = 4
 
 DEPS       = ""
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = 28cfdc99e8ee9350fe88430b4c7d62f2
+$(DL_FILE)_MD5 = d5d2ad068046e6ddb322cf001a9bb3d5
 
 install : $(TARGET)
 
index 213f8eb62d0fa9460ba152b4a0d72b27e2cc2434..f0dcf8359e6e9086119cf7f63eb9cd59a7e25162 100644 (file)
--- a/lfs/samba
+++ b/lfs/samba
@@ -1,7 +1,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007-2014  IPFire Team  <info@ipfire.org>                     #
+# Copyright (C) 2007-2015  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -24,7 +24,7 @@
 
 include Config
 
-VER        = 3.6.24
+VER        = 3.6.25
 
 THISAPP    = samba-$(VER)
 DL_FILE    = $(THISAPP).tar.gz
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG       = samba
-PAK_VER    = 59
+PAK_VER    = 60
 
 DEPS       = "cups krb5"
 
@@ -44,7 +44,7 @@ objects = $(DL_FILE)
 
 $(DL_FILE) = $(DL_FROM)/$(DL_FILE)
 
-$(DL_FILE)_MD5 = d98425c0c2b73e08f048d31ffc727fb0
+$(DL_FILE)_MD5 = 76da2fa64edd94a0188531e7ecb27c4e
 
 install : $(TARGET)
 
index ff97ab88574427d34d8adf6dd90590a49f2ca907..77c287a09a3cc6d158e788afbb8bbc17549b21da 100644 (file)
@@ -79,8 +79,9 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-5.0.2_ipfire.patch
-       cd $(DIR_APP) && patch -Np1 --ignore-whitespace \
-               -i $(DIR_SRC)/src/patches/strongswan-5.2.2-issue-816.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-5.2.2-issue-816-eb25190.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-5.2.2-issue-816-650a3ad.patch
+       cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-5.2.2-issue-816-dd0ebb.patch
        cd $(DIR_APP) && patch -Np1 -i $(DIR_SRC)/src/patches/strongswan-5.2.2-issue-819-cd2c30a.patch
 
        cd $(DIR_APP) && [ -x "configure" ] || ./autogen.sh
@@ -92,6 +93,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
                --enable-farp \
                --enable-openssl \
                --enable-gcrypt \
+               --enable-gcm \
                --enable-xauth-eap \
                --enable-xauth-noauth \
                --enable-eap-radius \
index 15dae817b2b35dd6d02f7ccbfb80be7dbdb487b1..e58839c405e93a214b37774d3cb06cf83fe1a996 100644 (file)
--- a/lfs/udev
+++ b/lfs/udev
@@ -93,9 +93,6 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        rm -f /lib/udev/rules.d/75-persistent-net-generator.rules
        rm -f /lib/udev/rules.d/80-net-name-slot.rules
 
-       # Create rule file for the setup
-       touch /etc/udev/rules.d/30-persistent-network.rules
-
        # Blacklist some modules
        cp -vf $(DIR_SRC)/config/udev/blacklist.conf /etc/modprobe.d/blacklist.conf
 
@@ -107,6 +104,12 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        install -v -m 644 $(DIR_SRC)/config/udev/25-alsa.rules \
                /lib/udev/rules.d
 
+       # Install network rules.
+       install -v -m 755 $(DIR_SRC)/config/udev/network-hotplug-rename \
+               /lib/udev/network-hotplug-rename
+       install -v -m 644 $(DIR_SRC)/config/udev/60-net.rules \
+               /lib/udev/rules.d
+
        # Install hwrng rules.
        install -v -m 644 $(DIR_SRC)/config/udev/90-hwrng.rules \
                /lib/udev/rules.d
diff --git a/make.sh b/make.sh
index 42655ab29ada5e284ef6a8f1193a83feab8f61fa..7d41b591c27ed551fbbd9ccd5dcea31345014005 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -25,8 +25,8 @@
 NAME="IPFire"                                                  # Software name
 SNAME="ipfire"                                                 # Short name
 VERSION="2.17"                                                 # Version number
-CORE="87-rc1"                                                  # Core Level (Filename)
-PAKFIRE_CORE="86"                                              # Core Level (PAKFIRE)
+CORE="87"                                                      # Core Level (Filename)
+PAKFIRE_CORE="87"                                              # Core Level (PAKFIRE)
 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`                   # Git Branch
 SLOGAN="www.ipfire.org"                                                # Software slogan
 CONFIG_ROOT=/var/ipfire                                                # Configuration rootdir
@@ -664,7 +664,6 @@ buildipfire() {
   ipfiremake lm_sensors
   ipfiremake liboping
   ipfiremake collectd
-  ipfiremake teamspeak
   ipfiremake elinks
   ipfiremake igmpproxy
   ipfiremake fbset
@@ -812,6 +811,7 @@ buildipfire() {
   ipfiremake pigz
   ipfiremake tmux
   ipfiremake swconfig
+  ipfiremake haproxy
 }
 
 buildinstaller() {
index 48b9d19d02627f9d8c829f958a5febfc5ebe5c28..4e37925171a4687d056f4f93ef3ec7b317ed8e3d 100644 (file)
@@ -26,7 +26,7 @@ SHOW_SRV=1
 TRUST_ANCHOR=".,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5"
 
 function dnssec_args() {
-       local cmdline="--dnssec"
+       local cmdline="--dnssec --dnssec-timestamp"
 
        if [ -n "${TRUST_ANCHOR}" ]; then
                cmdline="${cmdline} --trust-anchor=${TRUST_ANCHOR}"
diff --git a/src/initscripts/init.d/haproxy b/src/initscripts/init.d/haproxy
new file mode 100644 (file)
index 0000000..78d64ce
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/haproxy
+#
+# Description : HAProxy init script
+#
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+       start)
+               boot_mesg "Starting HAProxy..."
+               loadproc /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg \
+                       -p /var/run/haproxy.pid
+               ;;
+
+       stop)
+               boot_mesg "Stopping HAProxy..."
+               killproc /usr/sbin/haproxy
+               ;;
+
+       reload)
+               boot_mesg "Reloading HAProxy..."
+               /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg \
+                       -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
+               evaluate_retval
+               ;;
+
+       restart)
+               ${0} stop
+               sleep 1
+               ${0} start
+               ;;
+
+       status)
+               statusproc /usr/sbin/haproxy
+               ;;
+
+       *)
+               echo "Usage: ${0} {start|stop|reload|restart|status}"
+               exit 1
+               ;;
+esac
+
+# End $rc_base/init.d/haproxy
diff --git a/src/initscripts/init.d/network-trigger b/src/initscripts/init.d/network-trigger
new file mode 100644 (file)
index 0000000..0d9de45
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+########################################################################
+# Begin $rc_base/init.d/network-trigger
+########################################################################
+
+. /etc/sysconfig/rc
+. ${rc_functions}
+
+case "${1}" in
+       start)
+               boot_mesg "Triggering network devices..."
+               udevadm trigger --action="add" --subsystem-match="net"
+               evaluate_retval
+               ;;
+
+       *)
+               echo "Usage: ${0} {start}"
+               exit 1
+               ;;
+esac
+
+# End $rc_base/init.d/network-trigger
diff --git a/src/initscripts/init.d/teamspeak b/src/initscripts/init.d/teamspeak
deleted file mode 100644 (file)
index 227b6d2..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-########################################################################
-# Begin $rc_base/init.d/teamspeak
-#
-# Description :        Start/Stops the teamspeak server
-#
-# Authors     : Michael Tremer
-#
-# Version     : 01.00
-#
-# Notes       :
-#
-########################################################################
-
-. /etc/sysconfig/rc
-. $rc_functions
-
-case "$1" in
-       status)
-           statusproc /opt/teamspeak/server_linux
-       ;;      
-       *)
-           export LANG=en_US.utf8
-           cd /opt/teamspeak && sudo -u teamspeak ./teamspeak2-server_startscript $*
-           exit 0
-       ;;
-esac
-# End $rc_base/init.d/teamspeak
index ce9777500d5cbd28ecabdb10082f7fbd04760841..92d0ae5c10c51798538c907b05d9e33ced84a0c1 100644 (file)
@@ -322,6 +322,9 @@ struct hw_disk** hw_find_disks(struct hw* hw, const char* sourcedrive) {
                                "%s - %s", size_str, p);
                }
 
+               // Cut off the description string after 40 characters
+               disk->description[41] = '\0';
+
                *disks++ = disk;
 
                if (--i == 0)
index 358b2c46ffdf892a17a894ec7f6fbb6c2d367259..75c8c5ae0b4914e3fe1013aa9f4bfff3603bfd84 100644 (file)
@@ -833,8 +833,11 @@ int main(int argc, char *argv[]) {
 
        newtPopWindow();
 
-       /* Set marker that the user has already accepted the gpl */
-       mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
+       /* Set marker that the user has already accepted the GPL if the license has been shown
+        * in the installation process. In unatteded mode, the user will be presented the
+        * license when he or she logs on to the web user interface for the first time. */
+       if (!config.unattended)
+               mysystem(logfile, "/usr/bin/touch /harddisk/var/ipfire/main/gpl_accepted");
 
        /* Copy restore file from cdrom */
        char* backup_file = hw_find_backup_file(logfile, SOURCE_MOUNT_PATH);
index 6fbf14ca7e7fc989771535a0ca98ba1a48baa641..86788507567c694a15ee0fd2b0d3f1077b643d86 100644 (file)
@@ -12,7 +12,6 @@ hu
 id
 it
 ja
-ja_JP
 jv
 km_KH
 nl
@@ -21,7 +20,6 @@ pt_BR
 pt_PT
 ro_RO
 ru
-ru_RU
 rw
 sk
 sq
index 75918db3cc30b77037e1524ca76b06b3b1dcc6e6..459a8dcfb04ee44cbb39c4590f9396408af85c33 100644 (file)
@@ -3,14 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# Henrik Simonsen <cybermaze@gmail.com>, 2014
+# Henrik Simonsen <cybermaze@gmail.com>, 2014-2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-01-13 21:22+0000\n"
+"Last-Translator: Henrik Simonsen <cybermaze@gmail.com>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/ipfire/language/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -33,7 +33,7 @@ msgstr "Jeg accepterer brugerlicensen"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Advarsel: Installation uden opsyn starter om 10 sekunder..."
 
 #: main.c:403
 msgid "Language selection"
@@ -45,7 +45,7 @@ msgstr "Vælg det sprog du ønsker at anvende under installationen."
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Uden opsyn"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
@@ -66,7 +66,7 @@ msgstr "Start installationen"
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Installationen vil nu forsøge at hente installationsbilledet."
 
 #: main.c:452
 #, c-format
@@ -74,41 +74,41 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "Kunne ikke finde et kildedrev.\n\nDu kan prøve at hente det påkrævede installationsbillede."
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Sørg venligst for at din computer er forbundet til et netværk, så vil installationen forsøge at skaffe en IP adresse."
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Hent installationsbillede"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Prøver at starte netværk (DHCP)..."
 
 #: main.c:484
 msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "Kunne ikke oprette forbindelse til et netværk hvilket er nødvendigt for installationen.\n\nForbind venligst din computer til et netværk med en DHCP server og prøv igen."
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Prøv igen"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Henter installationsbillede..."
 
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 checksum mismatch"
 
 #: main.c:513
 #, c-format
@@ -117,14 +117,14 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Installationsbilledet kunne ikke hentes.\n  Årsag: %s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Kunne ikke montere %s til %s:\n  %s\n"
 
 #: main.c:543
 msgid "License Agreement"
@@ -191,16 +191,16 @@ msgstr "RAID opsætning"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Din drev konfiguration er ikke understøttet pt."
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr "Din harddisk er for lille."
+msgstr "Din harddisk har for lille kapacitet."
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr "Din harddisk er meget lille, men du kan fortsætte uden en swap partition."
+msgstr "Din harddisk har meget lille kapacitet, men du kan fortsætte uden en swap partition."
 
 #: main.c:684
 msgid "ext4 Filesystem"
@@ -287,27 +287,27 @@ msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "En backup fil er fundet på installationsbilledet.\n\nØnsker du at genskabe denne backup?"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Ja"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Nej"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Der opstod en fejl under forsøget på at genskabe backup filen."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Kører efter-installation script..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "Efter-installation script fejlede."
 
 #: main.c:877
 #, c-format
index 231adf4651cc7d23970f8aa8dddcddcd2c3360ca..4760c50677645832630d8ec9bae3a06d25564d22 100644 (file)
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2015-01-26 07:48+0000\n"
+"PO-Revision-Date: 2015-02-17 23:49+0000\n"
 "Last-Translator: Khalil Delavaran <khalil.delavaran@gmail.com>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/ipfire/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -66,7 +66,7 @@ msgstr "آغاز برپا سازی"
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "برنامه نصب تلاش خواهد کرد که ایمیج نصب را دانلود کند."
 
 #: main.c:452
 #, c-format
@@ -80,7 +80,7 @@ msgstr "درایو منبع پیدا نشد.\n\nشما می توانید ایم
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "لطفا مطمئن شوید که دستگاه شما به شبکه متصل است و برنامه نصب برای بدست آوردن IP تلاش خواهد کرد."
 
 #: main.c:460
 msgid "Download installation image"
index 93ba21031fa332df214a1087abdf373520d6caeb..68a5ad09c7e9d562c5454f9bf0da4248d8b430ce 100644 (file)
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# nonux <nonux@free.fr>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-02-17 23:23+0000\n"
+"Last-Translator: nonux <nonux@free.fr>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -24,11 +25,11 @@ msgstr ""
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Annuler"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "J'accepte la licence"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
@@ -36,11 +37,11 @@ msgstr ""
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "Sélection de la langue"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Sélectionnez la langue que vous souhaitez utiliser pour l'installation."
 
 #: main.c:418
 msgid "Unattended mode"
@@ -60,12 +61,12 @@ msgstr ""
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "Démarrer l'installation"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Le programme d'installation va maintenant essayer de télécharger l'image d'installation."
 
 #: main.c:452
 #, c-format
@@ -83,11 +84,11 @@ msgstr ""
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Télécharger l'image d'installation"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Tente de démarrer le réseau (DHCP)..."
 
 #: main.c:484
 msgid ""
@@ -98,11 +99,11 @@ msgstr ""
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Ré-essayer"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Téléchargement de l'image d'installation ..."
 
 #: main.c:510
 #, c-format
@@ -127,19 +128,19 @@ msgstr ""
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "Contrat de licence"
 
 #: main.c:544
 msgid "License not accepted!"
-msgstr ""
+msgstr "Contrat de licence non accepté!"
 
 #: main.c:566
 msgid "No hard disk found."
-msgstr ""
+msgstr "Aucun disque dur trouvé."
 
 #: main.c:587
 msgid "Disk Selection"
-msgstr ""
+msgstr "Sélection du disque"
 
 #: main.c:588
 msgid ""
@@ -167,11 +168,11 @@ msgstr ""
 
 #: main.c:619
 msgid "Disk Setup"
-msgstr ""
+msgstr "Configuration du disque"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr ""
+msgstr "Supprime toutes les données"
 
 #: main.c:627
 #, c-format
@@ -190,76 +191,76 @@ msgstr ""
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "La configuration du disque n'est pas actuellement supportée."
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Votre disque dur est trop petit."
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Votre disque dur est très petit, mais vous pouvez continuer sans la partition d'échange."
 
 #: main.c:684
 msgid "ext4 Filesystem"
-msgstr ""
+msgstr "Système de fichier ext4"
 
 #: main.c:685
 msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "Système de fichier ext4 sans journalisation"
 
 #: main.c:686
 msgid "XFS Filesystem"
-msgstr ""
+msgstr "Système de fichier XFS"
 
 #: main.c:687
 msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "Système de fichier ReiserFS"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr ""
+msgstr "Choix du système de fichier"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Merci de choisir votre système de fichier : "
 
 #: main.c:712
 msgid "Building RAID..."
-msgstr ""
+msgstr "Contruction du RAID..."
 
 #: main.c:716
 msgid "Unable to build the RAID."
-msgstr ""
+msgstr "Impossible de construire le RAID."
 
 #: main.c:728
 msgid "Partitioning disk..."
-msgstr ""
+msgstr "Partitionnement du disque..."
 
 #: main.c:732
 msgid "Unable to partition the disk."
-msgstr ""
+msgstr "Impossible de partitionner le disque."
 
 #: main.c:739
 msgid "Creating filesystems..."
-msgstr ""
+msgstr "Création des systèmes de fichiers"
 
 #: main.c:743
 msgid "Unable to create filesystems."
-msgstr ""
+msgstr "Impossible de créer les systèmes de fichiers."
 
 #: main.c:749
 msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "Impossible de monter les systèmes de fichiers."
 
 #: main.c:760
 msgid "Installing the system..."
-msgstr ""
+msgstr "Installation du système..."
 
 #: main.c:761
 msgid "Unable to install the system."
-msgstr ""
+msgstr "Impossible d'installer le système."
 
 #: main.c:777
 msgid "Installing the language cache..."
@@ -290,11 +291,11 @@ msgstr ""
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Oui"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Non"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
@@ -322,8 +323,8 @@ msgstr ""
 
 #: main.c:882
 msgid "Reboot"
-msgstr ""
+msgstr "Re-démarrer"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "La configuration a échoué. Appuyez sur OK pour re-démarrer."
diff --git a/src/installer/po/ja_JP.po b/src/installer/po/ja_JP.po
deleted file mode 100644 (file)
index 1243121..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
-# This file is distributed under the same license as the PACKAGE package.
-# 
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: IPFire Project\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-07-31 09:39+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/ipfire/language/ja_JP/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ja_JP\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
-msgid "OK"
-msgstr ""
-
-#: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
-#: main.c:702
-msgid "Cancel"
-msgstr ""
-
-#: main.c:176
-msgid "I accept this license"
-msgstr ""
-
-#: main.c:384
-msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
-
-#: main.c:403
-msgid "Language selection"
-msgstr ""
-
-#: main.c:403
-msgid "Select the language you wish to use for the installation."
-msgstr ""
-
-#: main.c:418
-msgid "Unattended mode"
-msgstr ""
-
-#: main.c:420
-msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
-
-#: main.c:426
-#, c-format
-msgid ""
-"Welcome to the %s installation program.\n"
-"\n"
-"Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
-
-#: main.c:428
-msgid "Start installation"
-msgstr ""
-
-#: main.c:449
-#, c-format
-msgid "The installer will now try downloading the installation image."
-msgstr ""
-
-#: main.c:452
-#, c-format
-msgid ""
-"No source drive could be found.\n"
-"\n"
-"You can try downloading the required installation image."
-msgstr ""
-
-#: main.c:456
-msgid ""
-"Please make sure to connect your machine to a network and the installer will"
-" try connect to acquire an IP address."
-msgstr ""
-
-#: main.c:460
-msgid "Download installation image"
-msgstr ""
-
-#: main.c:473
-msgid "Trying to start networking (DHCP)..."
-msgstr ""
-
-#: main.c:484
-msgid ""
-"Networking could not be started but is required to go on with the installation.\n"
-"\n"
-"Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
-
-#: main.c:487 main.c:516
-msgid "Retry"
-msgstr ""
-
-#: main.c:501
-msgid "Downloading installation image..."
-msgstr ""
-
-#: main.c:510
-#, c-format
-msgid "MD5 checksum mismatch"
-msgstr ""
-
-#: main.c:513
-#, c-format
-msgid ""
-"The installation image could not be downloaded.\n"
-"  Reason: %s\n"
-"\n"
-"%s"
-msgstr ""
-
-#: main.c:528
-#, c-format
-msgid ""
-"Could not mount %s to %s:\n"
-"  %s\n"
-msgstr ""
-
-#: main.c:543
-msgid "License Agreement"
-msgstr ""
-
-#: main.c:544
-msgid "License not accepted!"
-msgstr ""
-
-#: main.c:566
-msgid "No hard disk found."
-msgstr ""
-
-#: main.c:587
-msgid "Disk Selection"
-msgstr ""
-
-#: main.c:588
-msgid ""
-"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
-"\n"
-"ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
-
-#: main.c:599
-msgid ""
-"No disk has been selected.\n"
-"\n"
-"Please select one or more disks you want to install IPFire on."
-msgstr ""
-
-#: main.c:617
-#, c-format
-msgid ""
-"The installation program will now prepare the chosen harddisk:\n"
-"\n"
-"  %s\n"
-"\n"
-"Do you agree to continue?"
-msgstr ""
-
-#: main.c:619
-msgid "Disk Setup"
-msgstr ""
-
-#: main.c:620 main.c:630
-msgid "Delete all data"
-msgstr ""
-
-#: main.c:627
-#, c-format
-msgid ""
-"The installation program will now set up a RAID configuration on the selected harddisks:\n"
-"\n"
-"  %s\n"
-"  %s\n"
-"\n"
-"Do you agree to continue?"
-msgstr ""
-
-#: main.c:629
-msgid "RAID Setup"
-msgstr ""
-
-#: main.c:640
-msgid "Your disk configuration is currently not supported."
-msgstr ""
-
-#: main.c:655
-msgid "Your harddisk is too small."
-msgstr ""
-
-#: main.c:671
-msgid ""
-"Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
-
-#: main.c:684
-msgid "ext4 Filesystem"
-msgstr ""
-
-#: main.c:685
-msgid "ext4 Filesystem without journal"
-msgstr ""
-
-#: main.c:686
-msgid "XFS Filesystem"
-msgstr ""
-
-#: main.c:687
-msgid "ReiserFS Filesystem"
-msgstr ""
-
-#: main.c:701
-msgid "Filesystem Selection"
-msgstr ""
-
-#: main.c:701
-msgid "Please choose your filesystem:"
-msgstr ""
-
-#: main.c:712
-msgid "Building RAID..."
-msgstr ""
-
-#: main.c:716
-msgid "Unable to build the RAID."
-msgstr ""
-
-#: main.c:728
-msgid "Partitioning disk..."
-msgstr ""
-
-#: main.c:732
-msgid "Unable to partition the disk."
-msgstr ""
-
-#: main.c:739
-msgid "Creating filesystems..."
-msgstr ""
-
-#: main.c:743
-msgid "Unable to create filesystems."
-msgstr ""
-
-#: main.c:749
-msgid "Unable to mount filesystems."
-msgstr ""
-
-#: main.c:760
-msgid "Installing the system..."
-msgstr ""
-
-#: main.c:761
-msgid "Unable to install the system."
-msgstr ""
-
-#: main.c:777
-msgid "Installing the language cache..."
-msgstr ""
-
-#: main.c:778
-msgid "Unable to install the language cache."
-msgstr ""
-
-#: main.c:783
-msgid "Installing the bootloader..."
-msgstr ""
-
-#: main.c:790
-msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
-
-#: main.c:812
-msgid "Unable to install the bootloader."
-msgstr ""
-
-#: main.c:826
-msgid ""
-"A backup file has been found on the installation image.\n"
-"\n"
-"Do you want to restore the backup?"
-msgstr ""
-
-#: main.c:827
-msgid "Yes"
-msgstr ""
-
-#: main.c:827
-msgid "No"
-msgstr ""
-
-#: main.c:834
-msgid "An error occured when the backup file was restored."
-msgstr ""
-
-#: main.c:869
-msgid "Running post-install script..."
-msgstr ""
-
-#: main.c:870
-msgid "Post-install script failed."
-msgstr ""
-
-#: main.c:877
-#, c-format
-msgid ""
-"%s was successfully installed!\n"
-"\n"
-"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
-
-#: main.c:882
-msgid "Congratulations!"
-msgstr ""
-
-#: main.c:882
-msgid "Reboot"
-msgstr ""
-
-#: main.c:893
-msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
index dba4b65ceee61601758dfad780d3b3282c35ed1c..4a5d137a6eee9d5e2d5364d756d9cd055d4f1319 100644 (file)
@@ -4,14 +4,15 @@
 # 
 # Translators:
 # André Felipe Morro <andre@andremorro.com>, 2014
+# Evertton de Lima <e.everttonlima@gmail.com>, 2015
 # Leandro Luquetti Basilio da Silva <leandroluquetti@gmail.com>, 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-02-16 23:04+0000\n"
+"Last-Translator: Evertton de Lima <e.everttonlima@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -34,19 +35,19 @@ msgstr "Eu aceito esta licença"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Cuidado: A instalação irá iniciar em 10 segundos..."
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "Seleção de idioma"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Selecione o idioma que você deseja usar para a instalação."
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Modo automático"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
@@ -58,7 +59,7 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Bem-vindo para o programa de instalação %s.\n\nSelecionando Cancelar em qualquer uma das telas seguintes irá reiniciar o computador."
 
 #: main.c:428
 msgid "Start installation"
@@ -67,7 +68,7 @@ msgstr "Iniciar a instalação"
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "O instalador irá tentar baixar a imagem de instalação agora."
 
 #: main.c:452
 #, c-format
@@ -85,26 +86,26 @@ msgstr ""
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Baixar imagem de instalação"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Tentando iniciar a rede (DHCP)..."
 
 #: main.c:484
 msgid ""
 "Networking could not be started but is required to go on with the installation.\n"
 "\n"
 "Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
+msgstr "Rede não pode ser iniciado, mas é necessária para continuar a instalação.\n\nPor favor, conecte sua máquina a uma rede com servidor DHCP e reinicie."
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Tentar novamente"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Baixando imagem de instalação..."
 
 #: main.c:510
 #, c-format
@@ -118,18 +119,18 @@ msgid ""
 "  Reason: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "A imagem de instalação não pode ser baixada.\nMotivo: %s\n\n%s"
 
 #: main.c:528
 #, c-format
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Não pode montar %s para %s:\n%s\n"
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "Contrato de Licença"
 
 #: main.c:544
 msgid "License not accepted!"
@@ -192,7 +193,7 @@ msgstr "Configuração de RAID"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Sua configuração de disco não é suportada atualmente."
 
 #: main.c:655
 msgid "Your harddisk is too small."
@@ -201,7 +202,7 @@ msgstr "Seu disco rígido é muito pequeno."
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Seu disco rígido é muito pequeno, mas você pode continuar sem uma partição swap."
 
 #: main.c:684
 msgid "ext4 Filesystem"
@@ -277,7 +278,7 @@ msgstr "Instalando o gerenciador de inicialização..."
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Não possível abrir /etc/default/grub para escrita."
 
 #: main.c:812
 msgid "Unable to install the bootloader."
@@ -288,27 +289,27 @@ msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "Uma cópia de segurança foi encontrada na imagem de instalação.\n\nVocê quer restaurar a cópia de segurança?"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Sim"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Não"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Um erro ocorreu enquanto a cópia de segurança foi restaurada."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Executando post-install script..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "Post-install script falhou."
 
 #: main.c:877
 #, c-format
@@ -328,4 +329,4 @@ msgstr "Reiniciar"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "Instalação falhou. Pressione Ok para reiniciar."
index 7905236dbc3ac803f595a4b2347dd1f26832e382..1a6408c32c2fa1886ca12db2bc2153fed416951c 100644 (file)
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# ellviss <kpe1501@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-11-05 01:33+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-02-24 12:56+0000\n"
+"Last-Translator: ellviss <kpe1501@gmail.com>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,36 +20,36 @@ msgstr ""
 
 #: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
 msgid "OK"
-msgstr ""
+msgstr "ОК"
 
 #: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
 #: main.c:702
 msgid "Cancel"
-msgstr ""
+msgstr "Отмена"
 
 #: main.c:176
 msgid "I accept this license"
-msgstr ""
+msgstr "Я Согласен с этой лицензией"
 
 #: main.c:384
 msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
+msgstr "Внимание : запуск автоматической установки начнётся через 10 секунд ..."
 
 #: main.c:403
 msgid "Language selection"
-msgstr ""
+msgstr "Выберите язык"
 
 #: main.c:403
 msgid "Select the language you wish to use for the installation."
-msgstr ""
+msgstr "Выберете язык для инсталяции"
 
 #: main.c:418
 msgid "Unattended mode"
-msgstr ""
+msgstr "Автоматический режим"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> переход между элементами   |  <Space> выбор <F12> следующий  экран"
 
 #: main.c:426
 #, c-format
@@ -56,16 +57,16 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
+msgstr "Добро пожаловать в установку  %s .\n\nНажатие Отмены на любом из следующих экранах приведёт к перезагрузке."
 
 #: main.c:428
 msgid "Start installation"
-msgstr ""
+msgstr "Начать установку"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr ""
+msgstr "Установщик пробует скачать установочный образ"
 
 #: main.c:452
 #, c-format
@@ -73,21 +74,21 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr ""
+msgstr "Не найден источник\n\nВы можете скачать необходимый загрузочный образ"
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Убедитесь что компьютер подсоединён к сети и установщик может подключиться к запращиваемому ip адресу"
 
 #: main.c:460
 msgid "Download installation image"
-msgstr ""
+msgstr "Скачать образ установки"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
-msgstr ""
+msgstr "Проверка запуска (DHCP)..."
 
 #: main.c:484
 msgid ""
@@ -98,16 +99,16 @@ msgstr ""
 
 #: main.c:487 main.c:516
 msgid "Retry"
-msgstr ""
+msgstr "Повтор"
 
 #: main.c:501
 msgid "Downloading installation image..."
-msgstr ""
+msgstr "Скачивание образа установки..."
 
 #: main.c:510
 #, c-format
 msgid "MD5 checksum mismatch"
-msgstr ""
+msgstr "MD5 хеш не совпал"
 
 #: main.c:513
 #, c-format
@@ -123,23 +124,23 @@ msgstr ""
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Не удалось подключить %s к %s:\n\n%s\n"
 
 #: main.c:543
 msgid "License Agreement"
-msgstr ""
+msgstr "Лицензионное соглашение"
 
 #: main.c:544
 msgid "License not accepted!"
-msgstr ""
+msgstr "Лицензия не принята"
 
 #: main.c:566
 msgid "No hard disk found."
-msgstr ""
+msgstr "Не найдены жесткие диски"
 
 #: main.c:587
 msgid "Disk Selection"
-msgstr ""
+msgstr "Выберете диск"
 
 #: main.c:588
 msgid ""
@@ -163,15 +164,15 @@ msgid ""
 "  %s\n"
 "\n"
 "Do you agree to continue?"
-msgstr ""
+msgstr "Установочная программа настроит выбранный диск :\n\n%s\n\nВы согласны продолжить?"
 
 #: main.c:619
 msgid "Disk Setup"
-msgstr ""
+msgstr "Настройка диска"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr ""
+msgstr "Удалить все данные"
 
 #: main.c:627
 #, c-format
@@ -186,127 +187,127 @@ msgstr ""
 
 #: main.c:629
 msgid "RAID Setup"
-msgstr ""
+msgstr "Настройка RAID"
 
 #: main.c:640
 msgid "Your disk configuration is currently not supported."
-msgstr ""
+msgstr "Конфигурация ваших дисков не поддерживается"
 
 #: main.c:655
 msgid "Your harddisk is too small."
-msgstr ""
+msgstr "Ваш диск слишком мал"
 
 #: main.c:671
 msgid ""
 "Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
+msgstr "Ваш диск слишком мал, но вы можете продолжить без файла подкачки"
 
 #: main.c:684
 msgid "ext4 Filesystem"
-msgstr ""
+msgstr "раздел ext4"
 
 #: main.c:685
 msgid "ext4 Filesystem without journal"
-msgstr ""
+msgstr "журналируемый раздел ext4"
 
 #: main.c:686
 msgid "XFS Filesystem"
-msgstr ""
+msgstr "раздел XFS"
 
 #: main.c:687
 msgid "ReiserFS Filesystem"
-msgstr ""
+msgstr "раздел ReiserFS"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr ""
+msgstr "Выбор файловой системы"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
-msgstr ""
+msgstr "Пожалуйста, выберете тип файловой системы:"
 
 #: main.c:712
 msgid "Building RAID..."
-msgstr ""
+msgstr "Создание RAID...."
 
 #: main.c:716
 msgid "Unable to build the RAID."
-msgstr ""
+msgstr "Не возмозжно создать RAID"
 
 #: main.c:728
 msgid "Partitioning disk..."
-msgstr ""
+msgstr "Разбивка диска..."
 
 #: main.c:732
 msgid "Unable to partition the disk."
-msgstr ""
+msgstr "Невозможно разбить диск"
 
 #: main.c:739
 msgid "Creating filesystems..."
-msgstr ""
+msgstr "Создание файловой системы..."
 
 #: main.c:743
 msgid "Unable to create filesystems."
-msgstr ""
+msgstr "Не возможно создать раздел"
 
 #: main.c:749
 msgid "Unable to mount filesystems."
-msgstr ""
+msgstr "Невозможно присоединить  раздел"
 
 #: main.c:760
 msgid "Installing the system..."
-msgstr ""
+msgstr "Установка системы ...."
 
 #: main.c:761
 msgid "Unable to install the system."
-msgstr ""
+msgstr "Невозможно установить систему"
 
 #: main.c:777
 msgid "Installing the language cache..."
-msgstr ""
+msgstr "Установка кеша языка...."
 
 #: main.c:778
 msgid "Unable to install the language cache."
-msgstr ""
+msgstr "Невозможно установить  кеш языка"
 
 #: main.c:783
 msgid "Installing the bootloader..."
-msgstr ""
+msgstr "Установка загрузчика....."
 
 #: main.c:790
 msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
+msgstr "Невозможно открыть /etc/default/grub на запись"
 
 #: main.c:812
 msgid "Unable to install the bootloader."
-msgstr ""
+msgstr "Невозможно установить загрузчик"
 
 #: main.c:826
 msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr ""
+msgstr "Файл восстановления был найдет на установочном носителе\n\nвы хотите восстановить ?"
 
 #: main.c:827
 msgid "Yes"
-msgstr ""
+msgstr "Да"
 
 #: main.c:827
 msgid "No"
-msgstr ""
+msgstr "Нет"
 
 #: main.c:834
 msgid "An error occured when the backup file was restored."
-msgstr ""
+msgstr "Произошла ошибка при восстановлении из файла."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr ""
+msgstr "Выполняются пост-установочные скрипты..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr ""
+msgstr "Пост-установочный скрипт не сработал"
 
 #: main.c:877
 #, c-format
@@ -314,16 +315,16 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
+msgstr "%s успешно установлено!\n\nПожалуйста извлеките все установочные носители из системы и нажмите кнопку перезагрузки. После перезапуска система попросит установить системный и сетевой пароли. После этого  вы можете зайти через браузер на https://%s:444 ( где  %s - ваш адрес ) для конфигурирования системы через web"
 
 #: main.c:882
 msgid "Congratulations!"
-msgstr ""
+msgstr "Поздравляем!"
 
 #: main.c:882
 msgid "Reboot"
-msgstr ""
+msgstr "Перезагрузка"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
+msgstr "Установка не удалась. Нажмите ОК для перезапуска"
diff --git a/src/installer/po/ru_RU.po b/src/installer/po/ru_RU.po
deleted file mode 100644 (file)
index 83ee576..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
-# This file is distributed under the same license as the PACKAGE package.
-# 
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: IPFire Project\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-07-31 09:39+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/ipfire/language/ru_RU/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ru_RU\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: main.c:78 main.c:179 main.c:404 main.c:670 main.c:702 main.c:893
-msgid "OK"
-msgstr ""
-
-#: main.c:79 main.c:460 main.c:487 main.c:516 main.c:620 main.c:630 main.c:670
-#: main.c:702
-msgid "Cancel"
-msgstr ""
-
-#: main.c:176
-msgid "I accept this license"
-msgstr ""
-
-#: main.c:384
-msgid "Warning: Unattended installation will start in 10 seconds..."
-msgstr ""
-
-#: main.c:403
-msgid "Language selection"
-msgstr ""
-
-#: main.c:403
-msgid "Select the language you wish to use for the installation."
-msgstr ""
-
-#: main.c:418
-msgid "Unattended mode"
-msgstr ""
-
-#: main.c:420
-msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr ""
-
-#: main.c:426
-#, c-format
-msgid ""
-"Welcome to the %s installation program.\n"
-"\n"
-"Selecting Cancel on any of the following screens will reboot the computer."
-msgstr ""
-
-#: main.c:428
-msgid "Start installation"
-msgstr ""
-
-#: main.c:449
-#, c-format
-msgid "The installer will now try downloading the installation image."
-msgstr ""
-
-#: main.c:452
-#, c-format
-msgid ""
-"No source drive could be found.\n"
-"\n"
-"You can try downloading the required installation image."
-msgstr ""
-
-#: main.c:456
-msgid ""
-"Please make sure to connect your machine to a network and the installer will"
-" try connect to acquire an IP address."
-msgstr ""
-
-#: main.c:460
-msgid "Download installation image"
-msgstr ""
-
-#: main.c:473
-msgid "Trying to start networking (DHCP)..."
-msgstr ""
-
-#: main.c:484
-msgid ""
-"Networking could not be started but is required to go on with the installation.\n"
-"\n"
-"Please connect your machine to a network with a DHCP server and retry."
-msgstr ""
-
-#: main.c:487 main.c:516
-msgid "Retry"
-msgstr ""
-
-#: main.c:501
-msgid "Downloading installation image..."
-msgstr ""
-
-#: main.c:510
-#, c-format
-msgid "MD5 checksum mismatch"
-msgstr ""
-
-#: main.c:513
-#, c-format
-msgid ""
-"The installation image could not be downloaded.\n"
-"  Reason: %s\n"
-"\n"
-"%s"
-msgstr ""
-
-#: main.c:528
-#, c-format
-msgid ""
-"Could not mount %s to %s:\n"
-"  %s\n"
-msgstr ""
-
-#: main.c:543
-msgid "License Agreement"
-msgstr ""
-
-#: main.c:544
-msgid "License not accepted!"
-msgstr ""
-
-#: main.c:566
-msgid "No hard disk found."
-msgstr ""
-
-#: main.c:587
-msgid "Disk Selection"
-msgstr ""
-
-#: main.c:588
-msgid ""
-"Select the disk(s) you want to install IPFire on. First those will be partitioned, and then the partitions will have a filesystem put on them.\n"
-"\n"
-"ALL DATA ON THE DISK WILL BE DESTROYED."
-msgstr ""
-
-#: main.c:599
-msgid ""
-"No disk has been selected.\n"
-"\n"
-"Please select one or more disks you want to install IPFire on."
-msgstr ""
-
-#: main.c:617
-#, c-format
-msgid ""
-"The installation program will now prepare the chosen harddisk:\n"
-"\n"
-"  %s\n"
-"\n"
-"Do you agree to continue?"
-msgstr ""
-
-#: main.c:619
-msgid "Disk Setup"
-msgstr ""
-
-#: main.c:620 main.c:630
-msgid "Delete all data"
-msgstr ""
-
-#: main.c:627
-#, c-format
-msgid ""
-"The installation program will now set up a RAID configuration on the selected harddisks:\n"
-"\n"
-"  %s\n"
-"  %s\n"
-"\n"
-"Do you agree to continue?"
-msgstr ""
-
-#: main.c:629
-msgid "RAID Setup"
-msgstr ""
-
-#: main.c:640
-msgid "Your disk configuration is currently not supported."
-msgstr ""
-
-#: main.c:655
-msgid "Your harddisk is too small."
-msgstr ""
-
-#: main.c:671
-msgid ""
-"Your harddisk is very small, but you can continue without a swap partition."
-msgstr ""
-
-#: main.c:684
-msgid "ext4 Filesystem"
-msgstr ""
-
-#: main.c:685
-msgid "ext4 Filesystem without journal"
-msgstr ""
-
-#: main.c:686
-msgid "XFS Filesystem"
-msgstr ""
-
-#: main.c:687
-msgid "ReiserFS Filesystem"
-msgstr ""
-
-#: main.c:701
-msgid "Filesystem Selection"
-msgstr ""
-
-#: main.c:701
-msgid "Please choose your filesystem:"
-msgstr ""
-
-#: main.c:712
-msgid "Building RAID..."
-msgstr ""
-
-#: main.c:716
-msgid "Unable to build the RAID."
-msgstr ""
-
-#: main.c:728
-msgid "Partitioning disk..."
-msgstr ""
-
-#: main.c:732
-msgid "Unable to partition the disk."
-msgstr ""
-
-#: main.c:739
-msgid "Creating filesystems..."
-msgstr ""
-
-#: main.c:743
-msgid "Unable to create filesystems."
-msgstr ""
-
-#: main.c:749
-msgid "Unable to mount filesystems."
-msgstr ""
-
-#: main.c:760
-msgid "Installing the system..."
-msgstr ""
-
-#: main.c:761
-msgid "Unable to install the system."
-msgstr ""
-
-#: main.c:777
-msgid "Installing the language cache..."
-msgstr ""
-
-#: main.c:778
-msgid "Unable to install the language cache."
-msgstr ""
-
-#: main.c:783
-msgid "Installing the bootloader..."
-msgstr ""
-
-#: main.c:790
-msgid "Unable to open /etc/default/grub for writing."
-msgstr ""
-
-#: main.c:812
-msgid "Unable to install the bootloader."
-msgstr ""
-
-#: main.c:826
-msgid ""
-"A backup file has been found on the installation image.\n"
-"\n"
-"Do you want to restore the backup?"
-msgstr ""
-
-#: main.c:827
-msgid "Yes"
-msgstr ""
-
-#: main.c:827
-msgid "No"
-msgstr ""
-
-#: main.c:834
-msgid "An error occured when the backup file was restored."
-msgstr ""
-
-#: main.c:869
-msgid "Running post-install script..."
-msgstr ""
-
-#: main.c:870
-msgid "Post-install script failed."
-msgstr ""
-
-#: main.c:877
-#, c-format
-msgid ""
-"%s was successfully installed!\n"
-"\n"
-"Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr ""
-
-#: main.c:882
-msgid "Congratulations!"
-msgstr ""
-
-#: main.c:882
-msgid "Reboot"
-msgstr ""
-
-#: main.c:893
-msgid "Setup has failed. Press Ok to reboot."
-msgstr ""
index 01984452b4d9dcc3aa50edcbae2da9a66236eef1..e990bc361946a1a2b7f85bf799f0b1856dd0a2da 100644 (file)
@@ -3,6 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Ersan YILDIRIM <ersan73@gmail.com>, 2015
 # Kudret Emre <kudretemre@hotmail.com.tr>, 2014
 # Kudret Emre <kudretemre@hotmail.com.tr>, 2014
 msgid ""
@@ -10,8 +11,8 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-11-05 01:29+0000\n"
-"PO-Revision-Date: 2014-12-08 17:24+0000\n"
-"Last-Translator: Kudret Emre <kudretemre@hotmail.com.tr>\n"
+"PO-Revision-Date: 2015-02-28 22:11+0000\n"
+"Last-Translator: Ersan YILDIRIM <ersan73@gmail.com>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -50,7 +51,7 @@ msgstr "Katılımsız kurulum modu"
 
 #: main.c:420
 msgid "<Tab>/<Alt-Tab> between elements | <Space> selects | <F12> next screen"
-msgstr "<Tab>/<Alt-Tab> elementler arası geçiş | <Space> seç | <F12> sonraki ekran"
+msgstr "<Tab>/<Alt-Tab> düğmeler arası geçiş | <Space> seç | <F12> sonraki ekran"
 
 #: main.c:426
 #, c-format
@@ -58,16 +59,16 @@ msgid ""
 "Welcome to the %s installation program.\n"
 "\n"
 "Selecting Cancel on any of the following screens will reboot the computer."
-msgstr "%s yükleme programına hoşgeldiniz.\n\nİlerleyen ekranların herhangi birinde İptal'e tıklamanız bilgisayarınızı yeniden başlatır."
+msgstr "%s kurulum programına hoş geldiniz.\n\nSonraki ekranların herhangi birinde İptal seçeneğini seçtiğinizde bilgisayar yeniden başlatılac."
 
 #: main.c:428
 msgid "Start installation"
-msgstr "Yüklemeyi başlat"
+msgstr "Kurulumu Başlat"
 
 #: main.c:449
 #, c-format
 msgid "The installer will now try downloading the installation image."
-msgstr "Yükleyici şimdi yükleme dosyasını indirmeyi deneyecek."
+msgstr "Yükleyici şimdi kurulum dosyasını indirmeyi deneyecek."
 
 #: main.c:452
 #, c-format
@@ -75,17 +76,17 @@ msgid ""
 "No source drive could be found.\n"
 "\n"
 "You can try downloading the required installation image."
-msgstr "Hiçbir kaynak sürücüsü bulunamadı.\n\nGerekli yükleme dosyasını indirmeyi deneyebilirsiniz."
+msgstr "Hiçbir kaynak sürücüsü bulunamadı.\n\nGerekli kurulum dosyasını indirmeyi deneyebilirsiniz."
 
 #: main.c:456
 msgid ""
 "Please make sure to connect your machine to a network and the installer will"
 " try connect to acquire an IP address."
-msgstr ""
+msgstr "Makinenizi bir ağa bağladığınıza emin olun ve yükleyiciye IP adresini elle girerek bağlanmayı tekrar deneyin."
 
 #: main.c:460
 msgid "Download installation image"
-msgstr "Yükleme dosyasını indir"
+msgstr "Kurulum dosyasını indir"
 
 #: main.c:473
 msgid "Trying to start networking (DHCP)..."
@@ -125,7 +126,7 @@ msgstr "Yükleme dosyası indirilemedi.\nSebep: %s\n\n%s"
 msgid ""
 "Could not mount %s to %s:\n"
 "  %s\n"
-msgstr ""
+msgstr "Bağlanamadı: %s - %s:\n%s\n\n"
 
 #: main.c:543
 msgid "License Agreement"
@@ -173,7 +174,7 @@ msgstr "Disk Kurulumu"
 
 #: main.c:620 main.c:630
 msgid "Delete all data"
-msgstr "Tüm veriyi sil"
+msgstr "Tüm Veriyi Sil"
 
 #: main.c:627
 #, c-format
@@ -221,7 +222,7 @@ msgstr "ReiserFS Dosya sistemi"
 
 #: main.c:701
 msgid "Filesystem Selection"
-msgstr "Dosya sistemi Seçimi"
+msgstr "Dosya Sistemi Seçimi"
 
 #: main.c:701
 msgid "Please choose your filesystem:"
@@ -288,7 +289,7 @@ msgid ""
 "A backup file has been found on the installation image.\n"
 "\n"
 "Do you want to restore the backup?"
-msgstr "Yükleme dosyasında bir yedekleme dosyası bulundu.\n\nYedeği geri yüklemek ister misiniz?"
+msgstr "Kurulum dosyasında bir yedek dosyası bulundu.\n\nYedeği geri yüklemek ister misiniz?"
 
 #: main.c:827
 msgid "Yes"
@@ -304,11 +305,11 @@ msgstr "Yedek dosyası geri yüklenirken bir hata oluştu."
 
 #: main.c:869
 msgid "Running post-install script..."
-msgstr "post-install betiği çalıştırılıyor..."
+msgstr "Post-install betiği çalıştırılıyor..."
 
 #: main.c:870
 msgid "Post-install script failed."
-msgstr "post-install betiği başarısız oldu."
+msgstr "Post-install betiği başarısız oldu."
 
 #: main.c:877
 #, c-format
@@ -316,7 +317,7 @@ msgid ""
 "%s was successfully installed!\n"
 "\n"
 "Please remove any installation mediums from this system and hit the reboot button. Once the system has restarted you will be asked to setup networking and system passwords. After that, you should point your web browser at https://%s:444 (or what ever you name your %s) for the web configuration console."
-msgstr "%s başarıyla yüklendi!\n\nLütfen yükleme ortamlarını bu sistemden çıkarın ve yeniden başlatma butonuna tıklayın. Sistem yeniden başlatıldığında ağ ve sistem şifrenizi ayarlamanız istenecek. Daha sonra web yapılandırma konsoluna gitmek için yarayıcınızdan https://%s:444 (veya %s yerine ne isim verdiyseniz) adresine gidin."
+msgstr "%s başarıyla yüklendi!\n\nLütfen yükleme ortamını sistemden çıkarın ve Yeniden Başlat düğmesine tıklayın. Sistem yeniden başlatıldığında ağ kartları, ağ ve sistem parolalarını yapılandırabileceğiniz programı çalıştıracaktır. Kurulum tamamlandıktan sonra bir internet tarayıcısı açıp yapılandırma sayfasına gitmek için adres satırına https://%s:444 (veya %s yerine ne ad verdiyseniz) adresini girin."
 
 #: main.c:882
 msgid "Congratulations!"
@@ -324,8 +325,8 @@ msgstr "Tebrikler!"
 
 #: main.c:882
 msgid "Reboot"
-msgstr "Yeniden başlat."
+msgstr "Yeniden Başlat"
 
 #: main.c:893
 msgid "Setup has failed. Press Ok to reboot."
-msgstr "Kurulum başarısız oldu. Yeniden başlatmak için Tamam'a basın."
+msgstr "Kurulum başarısız oldu. Yeniden başlatmak için Tamam düğmesine basın."
index 3d59d70c00c3aacdd4042f7736e8007ef966704a..c980a0136bfd81732965bfda823522846531895d 100644 (file)
 ############################################################################
 #
 . /opt/pakfire/lib/functions.sh
-extract_files
-#
-KVER=xxxKVERxxx
-ROOT=`mount | grep " / " | cut -d" " -f1`
-ROOTUUID=`blkid -c /dev/null -sUUID $ROOT | cut -d'"' -f2`
-if [ ! -z $ROOTUUID ]; then
-       ROOT="UUID=$ROOTUUID"
-fi
 
-if [ -f /boot/grub/grub.conf ]; then
-MOUNT=`grep "kernel" /boot/grub/grub.conf | tail -n 1`
-# Nur den letzten Parameter verwenden
-echo $MOUNT > /dev/null
-MOUNT=$_
-if [ ! $MOUNT == "rw" ]; then
-       MOUNT="ro"
-fi
 
-ENTRY=`grep "savedefault" /boot/grub/grub.conf | tail -n 1`
-# Nur den letzten Parameter verwenden
-echo $ENTRY > /dev/null
-let ENTRY=$_+1
+function find_partition() {
+       local mountpoint="${1}"
 
-#Check if the system use serial console...
-if [ "$(grep "^serial" /boot/grub/grub.conf)" == "" ]; then
-       console=""
-else
-       console=" console=ttyS0,115200n8"
-fi
+       local root
+       local dev mp fs flags rest
+       while read -r dev mp fs flags rest; do
+               # Skip unwanted entries
+               [ "${dev}" = "rootfs" ] && continue
 
+               if [ "${mp}" = "${mountpoint}" ] && [ -b "${dev}" ]; then
+                       root="$(basename "${dev}")"
+                       break
+               fi
+       done < /proc/mounts
+       echo ${root}
+       return 0
+}
+
+extract_files
 #
-# backup grub.conf
-#
-cp /boot/grub/grub.conf /boot/grub/grub-backup-$KVER-pae_install.conf
-#
-# Add new Entry to grub.conf
-#
-echo "" >> /boot/grub/grub.conf
-echo "title IPFire (PAE-Kernel)" >> /boot/grub/grub.conf
-echo "  kernel /vmlinuz-$KVER-ipfire-pae root=$ROOT panic=10$console $MOUNT" >> /boot/grub/grub.conf
-echo "  initrd /ipfirerd-$KVER-pae.img" >> /boot/grub/grub.conf
-echo "  savedefault $ENTRY" >> /boot/grub/grub.conf
-fi
+KVER=xxxKVERxxx
 
 #
 # Create new module depency
@@ -75,10 +55,29 @@ depmod -a $KVER-ipfire-pae
 #
 /usr/bin/dracut --force --xz /boot/initramfs-$KVER-ipfire-pae.img $KVER-ipfire-pae  
 
-#
-# Update grub2 config
-#
-grub-mkconfig > /boot/grub/grub.cfg
+
+ROOT="$(find_partition "/")"
+case $ROOT in
+       xvd* )
+               #
+               # We are on XEN so create new grub.conf / menu.lst for pygrub
+               #
+               echo "timeout 10"                          > /boot/grub/grub.conf
+               echo "default 0"                          >> /boot/grub/grub.conf
+               echo "title IPFire (pae-kernel)"          >> /boot/grub/grub.conf
+               echo "  kernel /vmlinuz-$KVER-ipfire-pae root=/dev/$ROOT rootdelay=10 panic=10 console=hvc0" \
+                                                         >> /boot/grub/grub.conf
+               echo "  initrd /initramfs-$KVER-ipfire-pae.img" >> /boot/grub/grub.conf
+               echo "# savedefault 0"                    >> /boot/grub/grub.conf
+               ln -s grub.conf $MNThdd/boot/grub/menu.lst
+               ;;
+       * )
+               #
+               # Update grub2 config
+               #
+               grub-mkconfig > /boot/grub/grub.cfg
+               ;;
+esac
 
 # request a reboot if pae is supported
 if [ ! "$(grep "^flags.* pae " /proc/cpuinfo)" == "" ]; then
index 443328b24d98a438fb2c834402e53ae19dd71be5..03a4b6112040d4652f1a36b7f67dafb88f91a61c 100644 (file)
 ############################################################################
 #
 . /opt/pakfire/lib/functions.sh
+if [ -f /boot/grub/grub.conf ]; then
+       echo "Error! Connot remove linux-pae because we are on XEN."
+       exit 1
+fi
 remove_files
 rm -rf /boot/initramfs-*-pae.img
 rm -rf /boot/vmlinuz-*-pae
 rm -rf /lib/modules/*-ipfire-pae
-if [ -f /boot/grub/grub.conf ]; then
-       cp /boot/grub/grub.conf /boot/grub/grub-backup-pae_uninstall.conf
-       sed -i "/title IPFire (PAE-Kernel)/,+3d" /boot/grub/grub.conf
-fi
 grub-mkconfig > /boot/grub/grub.cfg
 sync && sync
index 00a3c78720ba2d5257e4ca6b4435dd797a23baba..7df354de3cf8b0bf8fbfc08ead57e9d1e775c333 100644 (file)
 ############################################################################
 #
 . /opt/pakfire/lib/functions.sh
-./uninstall.sh
+remove_files
+rm -rf /boot/initramfs-*-pae.img
+rm -rf /boot/vmlinuz-*-pae
+rm -rf /lib/modules/*-ipfire-pae
+if [ ! -f /boot/grub/grub.conf ]; then
+       grub-mkconfig > /boot/grub/grub.cfg
+fi
 ./install.sh
diff --git a/src/paks/teamspeak/install.sh b/src/paks/teamspeak/install.sh
deleted file mode 100644 (file)
index 7e8a5c1..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-############################################################################
-#                                                                          #
-# This file is part of the IPFire Firewall.                                #
-#                                                                          #
-# IPFire is free software; you can redistribute it and/or modify           #
-# it under the terms of the GNU General Public License as published by     #
-# the Free Software Foundation; either version 2 of the License, or        #
-# (at your option) any later version.                                      #
-#                                                                          #
-# IPFire is distributed in the hope that it will be useful,                #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of           #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
-# GNU General Public License for more details.                             #
-#                                                                          #
-# You should have received a copy of the GNU General Public License        #
-# along with IPFire; if not, write to the Free Software                    #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
-#                                                                          #
-# Copyright (C) 2008 IPFire-Team <info@ipfire.org>.                        #
-#                                                                          #
-############################################################################
-#
-. /opt/pakfire/lib/functions.sh
-
-extract_files
-
-[ -d /opt/teamspeak ] || mkdir -p /opt/teamspeak
-
-cd /tmp
-wget -c ftp://ftp.freenet.de/pub/4players/teamspeak.org/releases/ts2_server_rc2_202319.tar.bz2 \
-       ftp://ftp.freenet.de/pub/4players/teamspeak.org/developer/server/202401/server_linux
-
-tar xvfj ts2_server_rc2_202319.tar.bz2 -C /tmp
-
-cp -av /tmp/tss2_rc2/* /opt/teamspeak
-mv /tmp/server_linux /opt/teamspeak/server_linux
-chmod 755 -v /opt/teamspeak/server_linux
-
-rm -rf /tmp/tss2_rc2 ts2_server_rc2_202319.tar.bz2
-
-groupadd teamspeak
-useradd -g teamspeak teamspeak
-
-chown teamspeak.teamspeak /opt/teamspeak -Rv
-
-restore_backup ${NAME}
-start_service --background ${NAME}
-
-ln -sf  ../init.d/teamspeak /etc/rc.d/rc0.d/K00teamspeak
-ln -sf  ../init.d/teamspeak /etc/rc.d/rc3.d/S99teamspeak
-ln -sf  ../init.d/teamspeak /etc/rc.d/rc6.d/K00teamspeak
-
-
diff --git a/src/paks/teamspeak/uninstall.sh b/src/paks/teamspeak/uninstall.sh
deleted file mode 100644 (file)
index f1cd3bb..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-############################################################################
-#                                                                          #
-# This file is part of the IPFire Firewall.                                #
-#                                                                          #
-# IPFire is free software; you can redistribute it and/or modify           #
-# it under the terms of the GNU General Public License as published by     #
-# the Free Software Foundation; either version 2 of the License, or        #
-# (at your option) any later version.                                      #
-#                                                                          #
-# IPFire is distributed in the hope that it will be useful,                #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of           #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
-# GNU General Public License for more details.                             #
-#                                                                          #
-# You should have received a copy of the GNU General Public License        #
-# along with IPFire; if not, write to the Free Software                    #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
-#                                                                          #
-# Copyright (C) 2007 IPFire-Team <info@ipfire.org>.                        #
-#                                                                          #
-############################################################################
-#
-. /opt/pakfire/lib/functions.sh
-stop_service ${NAME}
-
-if [ ! -e "/var/ipfire/backup/addons/includes/teamspeak" ]; then
-    echo /opt/teamspeak/bad_names.txt > /var/ipfire/backup/addons/includes/teamspeak
-    echo /opt/teamspeak/server.dbs >> /var/ipfire/backup/addons/includes/teamspeak
-    echo /opt/teamspeak/server.ini >> /var/ipfire/backup/addons/includes/teamspeak
-    echo /opt/teamspeak/server.log >> /var/ipfire/backup/addons/includes/teamspeak
-    echo /opt/teamspeak/whitelist.txt >> /var/ipfire/backup/addons/includes/teamspeak
-fi
-make_backup ${NAME}
-rm -rf /opt/teamspeak
-userdel teamspeak
-rm -rf /etc/rc.d/rc*.d/*teamspeak
-
-
diff --git a/src/paks/teamspeak/update.sh b/src/paks/teamspeak/update.sh
deleted file mode 100644 (file)
index 89c40d0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-############################################################################
-#                                                                          #
-# This file is part of the IPFire Firewall.                                #
-#                                                                          #
-# IPFire is free software; you can redistribute it and/or modify           #
-# it under the terms of the GNU General Public License as published by     #
-# the Free Software Foundation; either version 2 of the License, or        #
-# (at your option) any later version.                                      #
-#                                                                          #
-# IPFire is distributed in the hope that it will be useful,                #
-# but WITHOUT ANY WARRANTY; without even the implied warranty of           #
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            #
-# GNU General Public License for more details.                             #
-#                                                                          #
-# You should have received a copy of the GNU General Public License        #
-# along with IPFire; if not, write to the Free Software                    #
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
-#                                                                          #
-# Copyright (C) 2007 IPFire-Team <info@ipfire.org>.                        #
-#                                                                          #
-############################################################################
-#
-. /opt/pakfire/lib/functions.sh
-./uninstall.sh
-./install.sh
diff --git a/src/patches/clamav/llvm-glibc.patch b/src/patches/clamav/llvm-glibc.patch
new file mode 100644 (file)
index 0000000..67dbdd7
--- /dev/null
@@ -0,0 +1,12 @@
+Index: clamav-0.97.3/libclamav/c++/llvm/lib/ExecutionEngine/JIT/Intercept.cpp
+===================================================================
+--- clamav-0.97.3.orig/libclamav/c++/llvm/lib/ExecutionEngine/JIT/Intercept.cpp
++++ clamav-0.97.3/libclamav/c++/llvm/lib/ExecutionEngine/JIT/Intercept.cpp
+@@ -52,6 +52,7 @@ static void runAtExitHandlers() {
+ #include <sys/stat.h>
+ #endif
+ #include <fcntl.h>
++#include <unistd.h>
+ /* stat functions are redirecting to __xstat with a version number.  On x86-64 
+  * linking with libc_nonshared.a and -Wl,--export-dynamic doesn't make 'stat' 
+  * available as an exported symbol, so we have to add it explicitly.
diff --git a/src/patches/dhcp-4.2.0-add_timeout_when_NULL.patch b/src/patches/dhcp-4.2.0-add_timeout_when_NULL.patch
deleted file mode 100644 (file)
index 4784d5a..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up dhcp-4.2.0/common/dispatch.c.dracut dhcp-4.2.0/common/dispatch.c
---- dhcp-4.2.0/common/dispatch.c.dracut        2010-06-01 19:29:59.000000000 +0200
-+++ dhcp-4.2.0/common/dispatch.c       2010-07-21 16:10:09.000000000 +0200
-@@ -189,6 +189,10 @@ void add_timeout (when, where, what, ref
-       isc_interval_t interval;
-       isc_time_t expires;
-+      if (when == NULL) {
-+              return;
-+      }
-+
-       /* See if this timeout supersedes an existing timeout. */
-       t = (struct timeout *)0;
-       for (q = timeouts; q; q = q->next) {
diff --git a/src/patches/dhcp-4.2.0-errwarn-message.patch b/src/patches/dhcp-4.2.0-errwarn-message.patch
deleted file mode 100644 (file)
index a0f70cd..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -up dhcp-4.2.0/omapip/errwarn.c.errwarn dhcp-4.2.0/omapip/errwarn.c
---- dhcp-4.2.0/omapip/errwarn.c.errwarn        2009-07-23 20:52:21.000000000 +0200
-+++ dhcp-4.2.0/omapip/errwarn.c        2010-07-21 13:23:47.000000000 +0200
-@@ -76,20 +76,13 @@ void log_fatal (const char * fmt, ... )
- #if !defined (NOMINUM)
-   log_error ("%s", "");
--  log_error ("If you did not get this software from ftp.isc.org, please");
--  log_error ("get the latest from ftp.isc.org and install that before");
--  log_error ("requesting help.");
-+  log_error ("This version of ISC DHCP is based on the release available");
-+  log_error ("on ftp.isc.org.  Features have been added and other changes");
-+  log_error ("have been made to the base software release in order to make");
-+  log_error ("it work better with this distribution.");
-   log_error ("%s", "");
--  log_error ("If you did get this software from ftp.isc.org and have not");
--  log_error ("yet read the README, please read it before requesting help.");
--  log_error ("If you intend to request help from the dhcp-server@isc.org");
--  log_error ("mailing list, please read the section on the README about");
--  log_error ("submitting bug reports and requests for help.");
--  log_error ("%s", "");
--  log_error ("Please do not under any circumstances send requests for");
--  log_error ("help directly to the authors of this software - please");
--  log_error ("send them to the appropriate mailing list as described in");
--  log_error ("the README file.");
-+  log_error ("Please report for this software via the Red Hat Bugzilla site:");
-+  log_error ("    http://bugzilla.redhat.com");
-   log_error ("%s", "");
-   log_error ("exiting.");
- #endif
diff --git a/src/patches/dhcp-4.2.0-garbage-chars.patch b/src/patches/dhcp-4.2.0-garbage-chars.patch
deleted file mode 100644 (file)
index 118ff3f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up dhcp-4.2.0/common/tables.c.garbage dhcp-4.2.0/common/tables.c
---- dhcp-4.2.0/common/tables.c.garbage 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.0/common/tables.c 2010-07-21 14:40:56.000000000 +0200
-@@ -207,7 +207,7 @@ static struct option dhcp_options[] = {
-       { "netinfo-server-tag", "t",            &dhcp_universe, 113, 1 },
-       { "default-url", "t",                   &dhcp_universe, 114, 1 },
-       { "subnet-selection", "I",              &dhcp_universe, 118, 1 },
--      { "domain-search", "Dc",                &dhcp_universe, 119, 1 },
-+      { "domain-search", "D",         &dhcp_universe, 119, 1 },
-       { "vivco", "Evendor-class.",            &dhcp_universe, 124, 1 },
-       { "vivso", "Evendor.",                  &dhcp_universe, 125, 1 },
- #if 0
diff --git a/src/patches/dhcp-4.2.0-inherit-leases.patch b/src/patches/dhcp-4.2.0-inherit-leases.patch
deleted file mode 100644 (file)
index 052f642..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-diff -up dhcp-4.2.0/client/dhclient.c.inherit dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.inherit       2010-07-21 14:33:44.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c       2010-07-21 14:40:05.000000000 +0200
-@@ -2322,6 +2322,7 @@ void send_request (cpp)
- {
-       struct client_state *client = cpp;
-+      int i;
-       int result;
-       int interval;
-       struct sockaddr_in destination;
-@@ -2381,6 +2382,22 @@ void send_request (cpp)
-               /* Now do a preinit on the interface so that we can
-                  discover a new address. */
-               script_init (client, "PREINIT", (struct string_list *)0);
-+
-+              /* Has an active lease */
-+              if (client -> interface -> addresses != NULL) {
-+                      for (i = 0; i < client -> interface -> address_count; i++) {
-+                              if (client -> active &&
-+                                  client -> active -> is_bootp &&
-+                                  client -> active -> expiry > cur_time &&
-+                                  client -> interface -> addresses[i].s_addr != 0 &&
-+                                  client -> active -> address.len == 4 &&
-+                                  memcpy (client -> active -> address.iabuf, &(client -> interface -> addresses[i]), 4) == 0) {
-+                                      client_envadd (client, "", "keep_old_ip", "%s", "yes");
-+                                      break;
-+                              }
-+                      }
-+              }
-+
-               if (client -> alias)
-                       script_write_params (client, "alias_",
-                                            client -> alias);
diff --git a/src/patches/dhcp-4.2.0-logpid.patch b/src/patches/dhcp-4.2.0-logpid.patch
deleted file mode 100644 (file)
index c24adb1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up dhcp-4.2.0/client/dhclient.c.logpid dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.logpid        2010-07-21 16:13:52.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c       2010-07-21 16:16:51.000000000 +0200
-@@ -154,7 +154,7 @@ main(int argc, char **argv) {
-       else if (fd != -1)
-               close(fd);
--      openlog("dhclient", LOG_NDELAY, LOG_DAEMON);
-+      openlog("dhclient", LOG_NDELAY | LOG_PID, LOG_DAEMON);
- #if !(defined(DEBUG) || defined(__CYGWIN32__))
-       setlogmask(LOG_UPTO(LOG_INFO));
diff --git a/src/patches/dhcp-4.2.0-missing-ipv6-not-fatal.patch b/src/patches/dhcp-4.2.0-missing-ipv6-not-fatal.patch
deleted file mode 100644 (file)
index b604115..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-diff -up dhcp-4.2.0/common/discover.c.noipv6 dhcp-4.2.0/common/discover.c
---- dhcp-4.2.0/common/discover.c.noipv6        2010-07-21 14:31:13.000000000 +0200
-+++ dhcp-4.2.0/common/discover.c       2010-07-21 16:04:57.000000000 +0200
-@@ -443,7 +443,7 @@ begin_iface_scan(struct iface_conf_list 
-       }
- #ifdef DHCPv6
--      if (local_family == AF_INET6) {
-+      if ((local_family == AF_INET6) && !access("/proc/net/if_inet6", R_OK)) {
-               ifaces->fp6 = fopen("/proc/net/if_inet6", "re");
-               if (ifaces->fp6 == NULL) {
-                       log_error("Error opening '/proc/net/if_inet6' to "
-@@ -454,6 +454,8 @@ begin_iface_scan(struct iface_conf_list 
-                       ifaces->fp = NULL;
-                       return 0;
-               }
-+      } else {
-+              ifaces->fp6 = NULL;
-       }
- #endif
-@@ -721,7 +723,7 @@ next_iface(struct iface_info *info, int 
-               return 1;
-       }
- #ifdef DHCPv6
--      if (!(*err)) {
-+      if (!(*err) && ifaces->fp6) {
-               if (local_family == AF_INET6)
-                       return next_iface6(info, err, ifaces);
-       }
-@@ -740,7 +742,8 @@ end_iface_scan(struct iface_conf_list *i
-       ifaces->sock = -1;
- #ifdef DHCPv6
-       if (local_family == AF_INET6) {
--              fclose(ifaces->fp6);
-+              if (ifaces->fp6)
-+                      fclose(ifaces->fp6);
-               ifaces->fp6 = NULL;
-       }
- #endif
diff --git a/src/patches/dhcp-4.2.0-noprefixavail.patch b/src/patches/dhcp-4.2.0-noprefixavail.patch
deleted file mode 100644 (file)
index 729a172..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-diff -up dhcp-4.2.0/server/dhcpv6.c.noprefixavail dhcp-4.2.0/server/dhcpv6.c
---- dhcp-4.2.0/server/dhcpv6.c.noprefixavail   2010-10-07 13:48:45.000000000 +0200
-+++ dhcp-4.2.0/server/dhcpv6.c 2010-10-13 11:00:25.000000000 +0200
-@@ -1134,7 +1134,7 @@ try_client_v6_prefix(struct iasubopt **p
-               return DHCP_R_INVALIDARG;
-       }
-       tmp_plen = (int) requested_pref->data[0];
--      if ((tmp_plen < 3) || (tmp_plen > 128)) {
-+      if ((tmp_plen < 3) || (tmp_plen > 128) ||((int)tmp_plen != pool->units)) {
-               return ISC_R_FAILURE;
-       }
-       memcpy(&tmp_pref, requested_pref->data + 1, sizeof(tmp_pref));
-@@ -1147,9 +1147,8 @@ try_client_v6_prefix(struct iasubopt **p
-               return ISC_R_FAILURE;
-       }
--      if (((int)tmp_plen != pool->units) ||
--          !ipv6_in_pool(&tmp_pref, pool)) {
--              return ISC_R_FAILURE;
-+      if (!ipv6_in_pool(&tmp_pref, pool)) {
-+              return ISC_R_ADDRNOTAVAIL;
-       }
-       if (prefix6_exists(pool, &tmp_pref, tmp_plen)) {
-@@ -1409,13 +1408,6 @@ lease_to_client(struct data_string *repl
-               if ((status != ISC_R_SUCCESS) &&
-                   (status != ISC_R_NORESOURCES))
-                       goto exit;
--
--              /*
--               * If any prefix cannot be given to any IA_PD, then
--               * set the NoPrefixAvail status code.
--               */
--              if (reply.client_resources == 0)
--                      no_resources_avail = ISC_TRUE;
-       }
-       /*
-@@ -1549,36 +1541,6 @@ lease_to_client(struct data_string *repl
-                                              reply.opt_state, reply.packet,
-                                              required_opts_NAA,
-                                              NULL);
--      } else if (no_resources_avail && (reply.ia_count == 0) &&
--                 (reply.packet->dhcpv6_msg_type == DHCPV6_SOLICIT))
--      {
--              /* Set the NoPrefixAvail status code. */
--              if (!set_status_code(STATUS_NoPrefixAvail,
--                                   "No prefixes available for this "
--                                   "interface.", reply.opt_state)) {
--                      log_error("lease_to_client: Unable to set "
--                                "NoPrefixAvail status code.");
--                      goto exit;
--              }
--
--              /* Rewind the cursor to the start. */
--              reply.cursor = REPLY_OPTIONS_INDEX;
--
--              /*
--               * Produce an advertise that includes only:
--               *
--               * Status code.
--               * Server DUID.
--               * Client DUID.
--               */
--              reply.buf.reply.msg_type = DHCPV6_ADVERTISE;
--              reply.cursor += store_options6((char *)reply.buf.data +
--                                                      reply.cursor,
--                                             sizeof(reply.buf) -
--                                                      reply.cursor,
--                                             reply.opt_state, reply.packet,
--                                             required_opts_NAA,
--                                             NULL);
-       } else {
-               /*
-                * Having stored the client's IA's, store any options that
-@@ -2793,16 +2755,18 @@ find_client_temporaries(struct reply_sta
-  */
- static isc_result_t
- reply_process_try_addr(struct reply_state *reply, struct iaddr *addr) {
--      isc_result_t status = ISC_R_NORESOURCES;
-+      isc_result_t status = ISC_R_ADDRNOTAVAIL;
-       struct ipv6_pool *pool;
-       int i;
-       struct data_string data_addr;
-       if ((reply == NULL) || (reply->shared == NULL) ||
--          (reply->shared->ipv6_pools == NULL) || (addr == NULL) ||
--          (reply->lease != NULL))
-+          (addr == NULL) || (reply->lease != NULL))
-               return DHCP_R_INVALIDARG;
-+      if (reply->shared->ipv6_pools == NULL)
-+              return ISC_R_ADDRNOTAVAIL;
-+
-       memset(&data_addr, 0, sizeof(data_addr));
-       data_addr.len = addr->len;
-       data_addr.data = addr->iabuf;
-@@ -3314,7 +3278,9 @@ reply_process_ia_pd(struct reply_state *
-               if (status == ISC_R_CANCELED)
-                       break;
--              if ((status != ISC_R_SUCCESS) && (status != ISC_R_ADDRINUSE))
-+              if ((status != ISC_R_SUCCESS) &&
-+                  (status != ISC_R_ADDRINUSE) &&
-+                  (status != ISC_R_ADDRNOTAVAIL))
-                       goto cleanup;
-       }
-@@ -3594,7 +3560,8 @@ reply_process_prefix(struct reply_state 
-                       /* Either error out or skip this prefix. */
-                       if ((status != ISC_R_SUCCESS) && 
--                          (status != ISC_R_ADDRINUSE)) 
-+                          (status != ISC_R_ADDRINUSE) &&
-+                          (status != ISC_R_ADDRNOTAVAIL))
-                               goto cleanup;
-                       if (reply->lease == NULL) {
-@@ -3773,16 +3740,18 @@ prefix_is_owned(struct reply_state *repl
- static isc_result_t
- reply_process_try_prefix(struct reply_state *reply,
-                        struct iaddrcidrnet *pref) {
--      isc_result_t status = ISC_R_NORESOURCES;
-+      isc_result_t status = ISC_R_ADDRNOTAVAIL;
-       struct ipv6_pool *pool;
-       int i;
-       struct data_string data_pref;
-       if ((reply == NULL) || (reply->shared == NULL) ||
--          (reply->shared->ipv6_pools == NULL) || (pref == NULL) ||
--          (reply->lease != NULL))
-+          (pref == NULL) || (reply->lease != NULL))
-               return DHCP_R_INVALIDARG;
-+      if (reply->shared->ipv6_pools == NULL)
-+              return ISC_R_ADDRNOTAVAIL;
-+
-       memset(&data_pref, 0, sizeof(data_pref));
-       data_pref.len = 17;
-       if (!buffer_allocate(&data_pref.buffer, data_pref.len, MDL)) {
diff --git a/src/patches/dhcp-4.2.1-64_bit_lease_parse.patch b/src/patches/dhcp-4.2.1-64_bit_lease_parse.patch
deleted file mode 100644 (file)
index a540bc1..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-diff -up dhcp-4.2.1b1/common/dispatch.c.64-bit_lease_parse dhcp-4.2.1b1/common/dispatch.c
-diff -up dhcp-4.2.1b1/common/parse.c.64-bit_lease_parse dhcp-4.2.1b1/common/parse.c
---- dhcp-4.2.1b1/common/parse.c.64-bit_lease_parse     2010-12-30 00:01:42.000000000 +0100
-+++ dhcp-4.2.1b1/common/parse.c        2011-01-28 08:01:10.000000000 +0100
-@@ -909,8 +909,8 @@ TIME 
- parse_date_core(cfile)
-       struct parse *cfile;
- {
--      int guess;
--      int tzoff, wday, year, mon, mday, hour, min, sec;
-+      TIME guess;
-+      long int tzoff, wday, year, mon, mday, hour, min, sec;
-       const char *val;
-       enum dhcp_token token;
-       static int months[11] = { 31, 59, 90, 120, 151, 181,
-@@ -936,7 +936,7 @@ parse_date_core(cfile)
-               }
-               token = next_token(&val, NULL, cfile); /* consume number */
--              guess = atoi(val);
-+              guess = atol(val);
-               return((TIME)guess);
-       }
-@@ -948,7 +948,7 @@ parse_date_core(cfile)
-               return((TIME)0);
-       }
-       token = next_token(&val, NULL, cfile); /* consume day of week */
--      wday = atoi(val);
-+      wday = atol(val);
-       /* Year... */
-       token = peek_token(&val, NULL, cfile);
-@@ -964,7 +964,7 @@ parse_date_core(cfile)
-          somebody invents a time machine, I think we can safely disregard
-          it.   This actually works around a stupid Y2K bug that was present
-          in a very early beta release of dhcpd. */
--      year = atoi(val);
-+      year = atol(val);
-       if (year > 1900)
-               year -= 1900;
-@@ -988,7 +988,7 @@ parse_date_core(cfile)
-               return((TIME)0);
-       }
-       token = next_token(&val, NULL, cfile); /* consume month */      
--      mon = atoi(val) - 1;
-+      mon = atol(val) - 1;
-       /* Slash separating month from day... */
-       token = peek_token(&val, NULL, cfile);
-@@ -1010,7 +1010,7 @@ parse_date_core(cfile)
-               return((TIME)0);
-       }
-       token = next_token(&val, NULL, cfile); /* consume day of month */
--      mday = atoi(val);
-+      mday = atol(val);
-       /* Hour... */
-       token = peek_token(&val, NULL, cfile);
-@@ -1021,7 +1021,7 @@ parse_date_core(cfile)
-               return((TIME)0);
-       }
-       token = next_token(&val, NULL, cfile); /* consume hour */
--      hour = atoi(val);
-+      hour = atol(val);
-       /* Colon separating hour from minute... */
-       token = peek_token(&val, NULL, cfile);
-@@ -1043,7 +1043,7 @@ parse_date_core(cfile)
-               return((TIME)0);
-       }
-       token = next_token(&val, NULL, cfile); /* consume minute */
--      min = atoi(val);
-+      min = atol(val);
-       /* Colon separating minute from second... */
-       token = peek_token(&val, NULL, cfile);
-@@ -1065,13 +1065,13 @@ parse_date_core(cfile)
-               return((TIME)0);
-       }
-       token = next_token(&val, NULL, cfile); /* consume second */
--      sec = atoi(val);
-+      sec = atol(val);
-       tzoff = 0;
-       token = peek_token(&val, NULL, cfile);
-       if (token == NUMBER) {
-               token = next_token(&val, NULL, cfile); /* consume tzoff */
--              tzoff = atoi(val);
-+              tzoff = atol(val);
-       } else if (token != SEMI) {
-               token = next_token(&val, NULL, cfile);
-               parse_warn(cfile,
diff --git a/src/patches/dhcp-4.2.1-invalid-dhclient-conf.patch b/src/patches/dhcp-4.2.1-invalid-dhclient-conf.patch
deleted file mode 100644 (file)
index eeeea84..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up dhcp-4.2.1b1/client/dhclient.conf.supersede dhcp-4.2.1b1/client/dhclient.conf
---- dhcp-4.2.1b1/client/dhclient.conf.supersede        2010-09-15 01:03:56.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient.conf  2011-01-27 18:38:28.000000000 +0100
-@@ -4,7 +4,7 @@ send dhcp-lease-time 3600;
- supersede domain-search "fugue.com", "home.vix.com";
- prepend domain-name-servers 127.0.0.1;
- request subnet-mask, broadcast-address, time-offset, routers,
--      domain-name, domain-name-servers, host-name;
-+      domain-search, domain-name-servers, host-name;
- require subnet-mask, domain-name-servers;
- timeout 60;
- retry 60;
diff --git a/src/patches/dhcp-4.2.1-retransmission.patch b/src/patches/dhcp-4.2.1-retransmission.patch
deleted file mode 100644 (file)
index 18e447f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-diff -up dhcp-4.2.1b1/client/dhc6.c.retransmission dhcp-4.2.1b1/client/dhc6.c
---- dhcp-4.2.1b1/client/dhc6.c.retransmission  2011-01-28 08:40:56.000000000 +0100
-+++ dhcp-4.2.1b1/client/dhc6.c 2011-01-28 08:39:22.000000000 +0100
-@@ -361,7 +361,7 @@ dhc6_retrans_init(struct client_state *c
- static void
- dhc6_retrans_advance(struct client_state *client)
- {
--      struct timeval elapsed;
-+      struct timeval elapsed, elapsed_after_RT;
-       /* elapsed = cur - start */
-       elapsed.tv_sec = cur_tv.tv_sec - client->start_time.tv_sec;
-@@ -378,6 +378,8 @@ dhc6_retrans_advance(struct client_state
-               elapsed.tv_sec += 1;
-               elapsed.tv_usec -= 1000000;
-       }
-+      elapsed_after_RT.tv_sec = elapsed.tv_sec;
-+      elapsed_after_RT.tv_usec = elapsed.tv_usec;
-       /*
-        * RT for each subsequent message transmission is based on the previous
-@@ -415,13 +417,10 @@ dhc6_retrans_advance(struct client_state
-               elapsed.tv_usec -= 1000000;
-       }
-       if (elapsed.tv_sec >= client->MRD) {
--              /*
--               * wake at RT + cur = start + MRD
--               */
--              client->RT = client->MRD +
--                      (client->start_time.tv_sec - cur_tv.tv_sec);
--              client->RT = client->RT * 100 +
--                      (client->start_time.tv_usec - cur_tv.tv_usec) / 10000;
-+              client->RT = client->MRD - elapsed_after_RT.tv_sec;
-+              client->RT = client->RT * 100 - elapsed_after_RT.tv_usec / 10000;
-+              if (client->RT < 0)
-+                      client->RT = 0;
-       }
-       client->txcount++;
- }
-@@ -1497,7 +1496,7 @@ check_timing6 (struct client_state *clie
-       }
-       /* Check if finished (-1 argument). */
--      if ((client->MRD != 0) && (elapsed.tv_sec > client->MRD)) {
-+      if ((client->MRD != 0) && (elapsed.tv_sec >= client->MRD)) {
-               log_info("Max retransmission duration exceeded.");
-               return(CHK_TIM_MRD_EXCEEDED);
-       }
diff --git a/src/patches/dhcp-4.2.2-dhclient-usage.patch b/src/patches/dhcp-4.2.2-dhclient-usage.patch
deleted file mode 100644 (file)
index 0d41943..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up dhcp-4.2.2b1/client/dhclient.c.usage dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.usage       2011-07-01 13:55:16.000000000 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c     2011-07-01 13:58:55.243800602 +0200
-@@ -1047,6 +1047,10 @@ static void usage()
-                 "                [-s server-addr] [-cf config-file] "
-                 "[-lf lease-file]\n"
-                 "                [-pf pid-file] [--no-pid] [-e VAR=val]\n"
-+                "                [-I <dhcp-client-identifier>] [-B]\n"
-+                "                [-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]\n"
-+                "                [-V <vendor-class-identifier>]\n"
-+                "                [-R <request option list>]\n"
-                 "                [-sf script-file] [interface]");
- }
diff --git a/src/patches/dhcp-4.2.2-remove-bind.patch b/src/patches/dhcp-4.2.2-remove-bind.patch
deleted file mode 100644 (file)
index 6297772..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-diff -up dhcp-4.2.2/client/Makefile.am.rh637017 dhcp-4.2.2/client/Makefile.am
---- dhcp-4.2.2/client/Makefile.am.rh637017     2010-09-15 00:32:36.000000000 +0200
-+++ dhcp-4.2.2/client/Makefile.am      2011-08-11 17:28:58.923897561 +0200
-@@ -5,7 +5,7 @@ dhclient_SOURCES = clparse.c dhclient.c 
-                  scripts/netbsd scripts/nextstep scripts/openbsd \
-                  scripts/solaris scripts/openwrt
- dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--               ../bind/lib/libdns.a ../bind/lib/libisc.a
-+               $(BIND9_LIBDIR) -ldns-export -lisc-export
- man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2/common/tests/Makefile.am.rh637017 dhcp-4.2.2/common/tests/Makefile.am
---- dhcp-4.2.2/common/tests/Makefile.am.rh637017       2009-10-28 05:12:30.000000000 +0100
-+++ dhcp-4.2.2/common/tests/Makefile.am        2011-08-11 17:33:45.258637236 +0200
-@@ -6,6 +6,5 @@ TESTS = test_alloc
- test_alloc_SOURCES = test_alloc.c
- test_alloc_LDADD = ../libdhcp.a ../../tests/libt_api.a \
--      ../../omapip/libomapi.a ../../bind/lib/libdns.a \
--        ../../bind/lib/libisc.a
--
-+      ../../omapip/libomapi.a \
-+       $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/configure.ac.rh637017 dhcp-4.2.2/configure.ac
---- dhcp-4.2.2/configure.ac.rh637017   2011-07-20 02:32:18.000000000 +0200
-+++ dhcp-4.2.2/configure.ac    2011-08-11 17:28:58.924897535 +0200
-@@ -512,20 +512,37 @@ AC_CHECK_MEMBER(struct msghdr.msg_contro
- libbind=
- AC_ARG_WITH(libbind,
-       AC_HELP_STRING([--with-libbind=PATH],
--                     [bind includes and libraries are in PATH 
--                      (default is ./bind)]),
-+                     [bind includes are in PATH 
-+                      (default is ./bind/includes)]),
-       use_libbind="$withval", use_libbind="no")
- case "$use_libbind" in 
-+yes|no)
-+      libbind="\${top_srcdir}/bind/include"
-+      ;;
-+*)
-+      libbind="$use_libbind"
-+      ;;
-+esac
-+
-+BIND9_LIBDIR='-L$(top_builddir)/bind/lib'
-+AC_ARG_WITH(libbind-libs,
-+      AC_HELP_STRING([--with-libbind-libs=PATH],
-+                     [bind9 export libraries are in PATH]),
-+                     [libbind_libs="$withval"], [libbind_libs='no'])
-+case "$libbind_libs" in
- yes)
--      libbind="\${top_srcdir}/bind"
-+      AC_MSG_ERROR([Specify path to bind9 libraries])
-       ;;
- no)
--      libbind="\${top_srcdir}/bind"
-+      BUNDLED_BIND=yes
-       ;;
- *)
--      libbind="$use_libbind"
-+      BIND9_LIBDIR="-L$libbind_libs"
-+      BUNDLED_BIND=no
-       ;;
- esac
-+AM_CONDITIONAL([BUNDLED_BIND], [test "$BUNDLED_BIND" = yes])
-+AC_SUBST([BIND9_LIBDIR])
- # OpenLDAP support.
- AC_ARG_WITH(ldap,
-@@ -562,7 +579,7 @@ fi
- CFLAGS="$CFLAGS $STD_CWARNINGS"
- # Try to add the bind include directory
--CFLAGS="$CFLAGS -I$libbind/include"
-+CFLAGS="$CFLAGS -I$libbind"
- AC_C_FLEXIBLE_ARRAY_MEMBER
-diff -up dhcp-4.2.2/dhcpctl/Makefile.am.rh637017 dhcp-4.2.2/dhcpctl/Makefile.am
---- dhcp-4.2.2/dhcpctl/Makefile.am.rh637017    2009-10-28 05:12:30.000000000 +0100
-+++ dhcp-4.2.2/dhcpctl/Makefile.am     2011-08-11 17:28:58.924897535 +0200
-@@ -6,10 +6,10 @@ EXTRA_DIST = $(man_MANS)
- omshell_SOURCES = omshell.c
- omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
--              ../bind/lib/libdns.a ../bind/lib/libisc.a
-+              $(BIND9_LIBDIR) -ldns-export -lisc-export
- libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
- cltest_SOURCES = cltest.c
- cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
--             ../bind/lib/libdns.a ../bind/lib/libisc.a
-\ No newline at end of file
-+             $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/Makefile.am.rh637017 dhcp-4.2.2/Makefile.am
---- dhcp-4.2.2/Makefile.am.rh637017    2010-03-25 00:30:38.000000000 +0100
-+++ dhcp-4.2.2/Makefile.am     2011-08-11 17:28:58.925897509 +0200
-@@ -21,7 +21,13 @@ EXTRA_DIST = RELNOTES LICENSE \
-            util/bindvar.sh \
-            bind/Makefile bind/bind.tar.gz bind/version.tmp 
--SUBDIRS = bind includes tests common dst omapip client dhcpctl relay server
-+if BUNDLED_BIND
-+SUBDIRS = bind
-+else
-+SUBDIRS = 
-+endif
-+
-+SUBDIRS += includes tests common dst omapip client dhcpctl relay server
- nobase_include_HEADERS = dhcpctl/dhcpctl.h
-diff -up dhcp-4.2.2/omapip/Makefile.am.rh637017 dhcp-4.2.2/omapip/Makefile.am
---- dhcp-4.2.2/omapip/Makefile.am.rh637017     2010-02-12 01:13:54.000000000 +0100
-+++ dhcp-4.2.2/omapip/Makefile.am      2011-08-11 17:28:58.939897149 +0200
-@@ -10,5 +10,5 @@ man_MANS = omapi.3
- EXTRA_DIST = $(man_MANS)
- svtest_SOURCES = test.c
--svtest_LDADD = libomapi.a ../bind/lib/libdns.a ../bind/lib/libisc.a
-+svtest_LDADD = libomapi.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/relay/Makefile.am.rh637017 dhcp-4.2.2/relay/Makefile.am
---- dhcp-4.2.2/relay/Makefile.am.rh637017      2009-10-28 05:12:30.000000000 +0100
-+++ dhcp-4.2.2/relay/Makefile.am       2011-08-11 17:28:58.940897123 +0200
-@@ -3,7 +3,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
- sbin_PROGRAMS = dhcrelay
- dhcrelay_SOURCES = dhcrelay.c
- dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--               ../bind/lib/libdns.a ../bind/lib/libisc.a
-+               $(BIND9_LIBDIR) -ldns-export -lisc-export
- man_MANS = dhcrelay.8
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2/server/Makefile.am.rh637017 dhcp-4.2.2/server/Makefile.am
---- dhcp-4.2.2/server/Makefile.am.rh637017     2010-03-24 22:49:47.000000000 +0100
-+++ dhcp-4.2.2/server/Makefile.am      2011-08-11 17:28:58.944897021 +0200
-@@ -8,8 +8,7 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
- dhcpd_CFLAGS = $(LDAP_CFLAGS)
- dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--            ../dhcpctl/libdhcpctl.a ../bind/lib/libdns.a \
--            ../bind/lib/libisc.a
-+            ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export
- man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
- EXTRA_DIST = $(man_MANS)
diff --git a/src/patches/dhcp-4.2.2-sharedlib.patch b/src/patches/dhcp-4.2.2-sharedlib.patch
deleted file mode 100644 (file)
index 74fe9f1..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-diff -up dhcp-4.2.2/client/Makefile.am.sharedlib dhcp-4.2.2/client/Makefile.am
---- dhcp-4.2.2/client/Makefile.am.sharedlib    2011-09-09 16:35:56.000000000 +0200
-+++ dhcp-4.2.2/client/Makefile.am      2011-09-09 16:36:29.849007951 +0200
-@@ -4,7 +4,7 @@ dhclient_SOURCES = clparse.c dhclient.c
-                  scripts/bsdos scripts/freebsd scripts/linux scripts/macos \
-                  scripts/netbsd scripts/nextstep scripts/openbsd \
-                  scripts/solaris scripts/openwrt
--dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-+dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
-                $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
- man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2/configure.ac.sharedlib dhcp-4.2.2/configure.ac
---- dhcp-4.2.2/configure.ac.sharedlib  2011-09-09 16:35:56.097000001 +0200
-+++ dhcp-4.2.2/configure.ac    2011-09-09 16:35:56.383000000 +0200
-@@ -30,7 +30,8 @@ fi
- # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
- AC_USE_SYSTEM_EXTENSIONS
--AC_PROG_RANLIB
-+# Use libtool to simplify building of shared libraries
-+AC_PROG_LIBTOOL
- AC_CONFIG_HEADERS([includes/config.h])
- # we sometimes need to know byte order for building packets
-diff -up dhcp-4.2.2/dhcpctl/Makefile.am.sharedlib dhcp-4.2.2/dhcpctl/Makefile.am
---- dhcp-4.2.2/dhcpctl/Makefile.am.sharedlib   2011-09-09 16:35:55.459000001 +0200
-+++ dhcp-4.2.2/dhcpctl/Makefile.am     2011-09-09 16:35:56.384000000 +0200
-@@ -1,15 +1,15 @@
- bin_PROGRAMS = omshell
--lib_LIBRARIES = libdhcpctl.a
-+lib_LTLIBRARIES = libdhcpctl.la
- noinst_PROGRAMS = cltest
- man_MANS = omshell.1 dhcpctl.3
- EXTRA_DIST = $(man_MANS)
- omshell_SOURCES = omshell.c
--omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
-+omshell_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
-               $(BIND9_LIBDIR) -ldns-export -lisc-export
--libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
-+libdhcpctl_la_SOURCES = dhcpctl.c callback.c remote.c
- cltest_SOURCES = cltest.c
--cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
-+cltest_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
-              $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/dst/base64.c.sharedlib dhcp-4.2.2/dst/base64.c
---- dhcp-4.2.2/dst/base64.c.sharedlib  2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2/dst/base64.c    2011-09-09 16:35:56.385000000 +0200
-@@ -64,6 +64,7 @@ static const char rcsid[] = "$Id: base64
- #include <sys/socket.h>
-+#include "dst_internal.h"
- #include "cdefs.h"
- #include "osdep.h"
- #include "arpa/nameser.h"
-diff -up dhcp-4.2.2/dst/Makefile.am.sharedlib dhcp-4.2.2/dst/Makefile.am
---- dhcp-4.2.2/dst/Makefile.am.sharedlib       2007-05-29 18:32:10.000000000 +0200
-+++ dhcp-4.2.2/dst/Makefile.am 2011-09-09 16:35:56.386000000 +0200
-@@ -1,8 +1,8 @@
- AM_CPPFLAGS = -DMINIRES_LIB -DHMAC_MD5
--lib_LIBRARIES = libdst.a
-+lib_LTLIBRARIES = libdst.la
--libdst_a_SOURCES = dst_support.c dst_api.c hmac_link.c md5_dgst.c \
-+libdst_la_SOURCES = dst_support.c dst_api.c hmac_link.c md5_dgst.c \
-                  base64.c prandom.c
- EXTRA_DIST = dst_internal.h md5.h md5_locl.h
-diff -up dhcp-4.2.2/omapip/Makefile.am.sharedlib dhcp-4.2.2/omapip/Makefile.am
---- dhcp-4.2.2/omapip/Makefile.am.sharedlib    2011-09-09 16:35:55.000000000 +0200
-+++ dhcp-4.2.2/omapip/Makefile.am      2011-09-09 16:37:36.734000324 +0200
-@@ -1,7 +1,7 @@
--lib_LIBRARIES = libomapi.a
-+lib_LTLIBRARIES = libomapi.la
- noinst_PROGRAMS = svtest
--libomapi_a_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
-+libomapi_la_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
-                    errwarn.c listener.c dispatch.c generic.c support.c \
-                    handle.c message.c convert.c hash.c auth.c inet_addr.c \
-                    array.c trace.c toisc.c iscprint.c isclib.c
-@@ -10,5 +10,5 @@ man_MANS = omapi.3
- EXTRA_DIST = $(man_MANS)
- svtest_SOURCES = test.c
--svtest_LDADD = libomapi.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-+svtest_LDADD = libomapi.la $(BIND9_LIBDIR) -ldns-export -lisc-export
-diff -up dhcp-4.2.2/relay/Makefile.am.sharedlib dhcp-4.2.2/relay/Makefile.am
---- dhcp-4.2.2/relay/Makefile.am.sharedlib     2011-09-09 16:35:56.000000000 +0200
-+++ dhcp-4.2.2/relay/Makefile.am       2011-09-09 16:37:57.058019749 +0200
-@@ -2,7 +2,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
- sbin_PROGRAMS = dhcrelay
- dhcrelay_SOURCES = dhcrelay.c
--dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
-+dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
-                $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
- man_MANS = dhcrelay.8
- EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2/server/Makefile.am.sharedlib dhcp-4.2.2/server/Makefile.am
---- dhcp-4.2.2/server/Makefile.am.sharedlib    2011-09-09 16:35:56.000000000 +0200
-+++ dhcp-4.2.2/server/Makefile.am      2011-09-09 16:38:56.291004599 +0200
-@@ -7,8 +7,8 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
-               dhcpv6.c mdb6.c ldap.c ldap_casa.c
- dhcpd_CFLAGS = $(LDAP_CFLAGS)
--dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--            ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export \
-+dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
-+            ../dhcpctl/libdhcpctl.la $(BIND9_LIBDIR) -ldns-export -lisc-export \
-             $(CAPNG_LDADD)
- man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
diff --git a/src/patches/dhcp/dhcp-64_bit_lease_parse.patch b/src/patches/dhcp/dhcp-64_bit_lease_parse.patch
new file mode 100644 (file)
index 0000000..a07b5b0
--- /dev/null
@@ -0,0 +1,75 @@
+diff -up dhcp-4.3.0a1/common/parse.c.64-bit_lease_parse dhcp-4.3.0a1/common/parse.c
+--- dhcp-4.3.0a1/common/parse.c.64-bit_lease_parse     2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/parse.c        2013-12-19 15:45:25.990771814 +0100
+@@ -938,8 +938,8 @@ TIME
+ parse_date_core(cfile)
+       struct parse *cfile;
+ {
+-      int guess;
+-      int tzoff, year, mon, mday, hour, min, sec;
++      TIME guess;
++      long int tzoff, year, mon, mday, hour, min, sec;
+       const char *val;
+       enum dhcp_token token;
+       static int months[11] = { 31, 59, 90, 120, 151, 181,
+@@ -965,7 +965,7 @@ parse_date_core(cfile)
+               }
+               skip_token(&val, NULL, cfile); /* consume number */
+-              guess = atoi(val);
++              guess = atol(val);
+               return((TIME)guess);
+       }
+@@ -993,7 +993,7 @@ parse_date_core(cfile)
+          somebody invents a time machine, I think we can safely disregard
+          it.   This actually works around a stupid Y2K bug that was present
+          in a very early beta release of dhcpd. */
+-      year = atoi(val);
++      year = atol(val);
+       if (year > 1900)
+               year -= 1900;
+@@ -1039,7 +1039,7 @@ parse_date_core(cfile)
+               return((TIME)0);
+       }
+       skip_token(&val, NULL, cfile); /* consume day of month */
+-      mday = atoi(val);
++      mday = atol(val);
+       /* Hour... */
+       token = peek_token(&val, NULL, cfile);
+@@ -1050,7 +1050,7 @@ parse_date_core(cfile)
+               return((TIME)0);
+       }
+       skip_token(&val, NULL, cfile); /* consume hour */
+-      hour = atoi(val);
++      hour = atol(val);
+       /* Colon separating hour from minute... */
+       token = peek_token(&val, NULL, cfile);
+@@ -1072,7 +1072,7 @@ parse_date_core(cfile)
+               return((TIME)0);
+       }
+       skip_token(&val, NULL, cfile); /* consume minute */
+-      min = atoi(val);
++      min = atol(val);
+       /* Colon separating minute from second... */
+       token = peek_token(&val, NULL, cfile);
+@@ -1094,13 +1094,13 @@ parse_date_core(cfile)
+               return((TIME)0);
+       }
+       skip_token(&val, NULL, cfile); /* consume second */
+-      sec = atoi(val);
++      sec = atol(val);
+       tzoff = 0;
+       token = peek_token(&val, NULL, cfile);
+       if (token == NUMBER) {
+               skip_token(&val, NULL, cfile); /* consume tzoff */
+-              tzoff = atoi(val);
++              tzoff = atol(val);
+       } else if (token != SEMI) {
+               skip_token(&val, NULL, cfile);
+               parse_warn(cfile,
similarity index 52%
rename from src/patches/dhcp-4.2.2-CLOEXEC.patch
rename to src/patches/dhcp/dhcp-CLOEXEC.patch
index b07e2ff06155c3ce211571fafcce0cc5b6916347..722865e4f6890ff0e9b0332d333f7d84686573df 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.2b1/client/clparse.c.cloexec dhcp-4.2.2b1/client/clparse.c
---- dhcp-4.2.2b1/client/clparse.c.cloexec      2011-07-01 14:13:30.973887714 +0200
-+++ dhcp-4.2.2b1/client/clparse.c      2011-07-01 14:15:15.021580693 +0200
-@@ -246,7 +246,7 @@ int read_client_conf_file (const char *n
+diff -up dhcp-4.3.0a1/client/clparse.c.cloexec dhcp-4.3.0a1/client/clparse.c
+--- dhcp-4.3.0a1/client/clparse.c.cloexec      2013-12-19 15:34:41.638886256 +0100
++++ dhcp-4.3.0a1/client/clparse.c      2013-12-19 15:34:41.657885985 +0100
+@@ -253,7 +253,7 @@ int read_client_conf_file (const char *n
        int token;
        isc_result_t status;
  
@@ -10,7 +10,7 @@ diff -up dhcp-4.2.2b1/client/clparse.c.cloexec dhcp-4.2.2b1/client/clparse.c
                return uerr2isc (errno);
  
        cfile = NULL;
-@@ -283,7 +283,7 @@ void read_client_leases ()
+@@ -290,7 +290,7 @@ void read_client_leases ()
  
        /* Open the lease file.   If we can't open it, just return -
           we can safely trust the server to remember our state. */
@@ -19,9 +19,9 @@ diff -up dhcp-4.2.2b1/client/clparse.c.cloexec dhcp-4.2.2b1/client/clparse.c
                return;
  
        cfile = NULL;
-diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.cloexec     2011-07-01 14:13:30.970887717 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c     2011-07-01 14:16:51.485930388 +0200
+diff -up dhcp-4.3.0a1/client/dhclient.c.cloexec dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.cloexec     2013-12-19 15:34:41.629886384 +0100
++++ dhcp-4.3.0a1/client/dhclient.c     2013-12-19 15:36:41.608180467 +0100
 @@ -148,11 +148,11 @@ main(int argc, char **argv) {
        /* Make sure that file descriptors 0 (stdin), 1, (stdout), and
           2 (stderr) are open. To do this, we assume that when we
@@ -37,16 +37,16 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
        if (fd == 2)
                log_perror = 0; /* No sense logging to /dev/null. */
        else if (fd != -1)
-@@ -506,7 +506,7 @@ main(int argc, char **argv) {
+@@ -504,7 +504,7 @@ main(int argc, char **argv) {
+               long temp;
                int e;
  
-               oldpid = 0;
 -              if ((pidfd = fopen(path_dhclient_pid, "r")) != NULL) {
 +              if ((pidfd = fopen(path_dhclient_pid, "re")) != NULL) {
                        e = fscanf(pidfd, "%ld\n", &temp);
                        oldpid = (pid_t)temp;
  
-@@ -548,7 +548,7 @@ main(int argc, char **argv) {
+@@ -554,7 +554,7 @@ main(int argc, char **argv) {
                                        strncpy(new_path_dhclient_pid, path_dhclient_pid, pfx);
                                        sprintf(new_path_dhclient_pid + pfx, "-%s.pid", ip->name);
  
@@ -55,7 +55,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
                                                e = fscanf(pidfd, "%ld\n", &temp);
                                                oldpid = (pid_t)temp;
  
-@@ -573,7 +573,7 @@ main(int argc, char **argv) {
+@@ -579,7 +579,7 @@ main(int argc, char **argv) {
                int dhc_running = 0;
                char procfn[256] = "";
  
@@ -64,7 +64,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
                        if ((fscanf(pidfp, "%ld", &temp)==1) && ((dhcpid=(pid_t)temp) > 0)) {
                                snprintf(procfn,256,"/proc/%u",dhcpid);
                                dhc_running = (access(procfn, F_OK) == 0);
-@@ -2995,7 +2995,7 @@ void rewrite_client_leases ()
+@@ -3077,7 +3077,7 @@ void rewrite_client_leases ()
  
        if (leaseFile != NULL)
                fclose (leaseFile);
@@ -73,7 +73,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
        if (leaseFile == NULL) {
                log_error ("can't create %s: %m", path_dhclient_db);
                return;
-@@ -3105,7 +3105,7 @@ write_duid(struct data_string *duid)
+@@ -3261,7 +3261,7 @@ write_duid(struct data_string *duid)
                return DHCP_R_INVALIDARG;
  
        if (leaseFile == NULL) {        /* XXX? */
@@ -82,7 +82,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
                if (leaseFile == NULL) {
                        log_error("can't create %s: %m", path_dhclient_db);
                        return ISC_R_IOERROR;
-@@ -3285,7 +3285,7 @@ int write_client_lease (client, lease, r
+@@ -3441,7 +3441,7 @@ int write_client_lease (client, lease, r
                return 1;
  
        if (leaseFile == NULL) {        /* XXX */
@@ -91,20 +91,20 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
                if (leaseFile == NULL) {
                        log_error ("can't create %s: %m", path_dhclient_db);
                        return 0;
-@@ -3772,9 +3772,9 @@ void go_daemon ()
-       close(2);
+@@ -3952,9 +3952,9 @@ void go_daemon ()
+       (void) close(2);
  
        /* Reopen them on /dev/null. */
--      open("/dev/null", O_RDWR);
--      open("/dev/null", O_RDWR);
--      open("/dev/null", O_RDWR);
-+      open("/dev/null", O_RDWR | O_CLOEXEC);
-+      open("/dev/null", O_RDWR | O_CLOEXEC);
-+      open("/dev/null", O_RDWR | O_CLOEXEC);
+-      (void) open("/dev/null", O_RDWR);
+-      (void) open("/dev/null", O_RDWR);
+-      (void) open("/dev/null", O_RDWR);
++      (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++      (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++      (void) open("/dev/null", O_RDWR | O_CLOEXEC);
  
        write_client_pid_file ();
  
-@@ -3791,14 +3791,14 @@ void write_client_pid_file ()
+@@ -3971,14 +3971,14 @@ void write_client_pid_file ()
                return;
        }
  
@@ -121,10 +121,10 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.cloexec dhcp-4.2.2b1/client/dhclient.c
        if (!pf) {
                close(pfdesc);
                log_error ("Can't fdopen %s: %m", path_dhclient_pid);
-diff -up dhcp-4.2.2b1/common/bpf.c.cloexec dhcp-4.2.2b1/common/bpf.c
---- dhcp-4.2.2b1/common/bpf.c.cloexec  2011-07-01 14:13:30.976887712 +0200
-+++ dhcp-4.2.2b1/common/bpf.c  2011-07-01 14:13:31.030887673 +0200
-@@ -94,7 +94,7 @@ int if_register_bpf (info)
+diff -up dhcp-4.3.0a1/common/bpf.c.cloexec dhcp-4.3.0a1/common/bpf.c
+--- dhcp-4.3.0a1/common/bpf.c.cloexec  2013-12-19 15:34:41.640886227 +0100
++++ dhcp-4.3.0a1/common/bpf.c  2013-12-19 15:34:41.661885928 +0100
+@@ -95,7 +95,7 @@ int if_register_bpf (info)
        for (b = 0; 1; b++) {
                /* %Audit% 31 bytes max. %2004.06.17,Safe% */
                sprintf(filename, BPF_FORMAT, b);
@@ -133,31 +133,10 @@ diff -up dhcp-4.2.2b1/common/bpf.c.cloexec dhcp-4.2.2b1/common/bpf.c
                if (sock < 0) {
                        if (errno == EBUSY) {
                                continue;
-diff -up dhcp-4.2.2b1/common/discover.c.cloexec dhcp-4.2.2b1/common/discover.c
---- dhcp-4.2.2b1/common/discover.c.cloexec     2011-06-27 18:18:20.000000000 +0200
-+++ dhcp-4.2.2b1/common/discover.c     2011-07-01 14:13:31.031887673 +0200
-@@ -421,7 +421,7 @@ begin_iface_scan(struct iface_conf_list 
-       int len;
-       int i;
--      ifaces->fp = fopen("/proc/net/dev", "r");
-+      ifaces->fp = fopen("/proc/net/dev", "re");
-       if (ifaces->fp == NULL) {
-               log_error("Error opening '/proc/net/dev' to list interfaces");
-               return 0;
-@@ -456,7 +456,7 @@ begin_iface_scan(struct iface_conf_list 
- #ifdef DHCPv6
-       if (local_family == AF_INET6) {
--              ifaces->fp6 = fopen("/proc/net/if_inet6", "r");
-+              ifaces->fp6 = fopen("/proc/net/if_inet6", "re");
-               if (ifaces->fp6 == NULL) {
-                       log_error("Error opening '/proc/net/if_inet6' to "
-                                 "list IPv6 interfaces; %m");
-diff -up dhcp-4.2.2b1/common/dlpi.c.cloexec dhcp-4.2.2b1/common/dlpi.c
---- dhcp-4.2.2b1/common/dlpi.c.cloexec 2011-07-01 14:13:30.977887712 +0200
-+++ dhcp-4.2.2b1/common/dlpi.c 2011-07-01 14:13:31.032887673 +0200
-@@ -806,7 +806,7 @@ dlpiopen(const char *ifname) {
+diff -up dhcp-4.3.0a1/common/dlpi.c.cloexec dhcp-4.3.0a1/common/dlpi.c
+--- dhcp-4.3.0a1/common/dlpi.c.cloexec 2013-12-19 15:34:41.641886213 +0100
++++ dhcp-4.3.0a1/common/dlpi.c 2013-12-19 15:34:41.662885914 +0100
+@@ -804,7 +804,7 @@ dlpiopen(const char *ifname) {
        }
        *dp = '\0';
        
@@ -166,9 +145,9 @@ diff -up dhcp-4.2.2b1/common/dlpi.c.cloexec dhcp-4.2.2b1/common/dlpi.c
  }
  
  /*
-diff -up dhcp-4.2.2b1/common/nit.c.cloexec dhcp-4.2.2b1/common/nit.c
---- dhcp-4.2.2b1/common/nit.c.cloexec  2011-07-01 14:13:30.978887712 +0200
-+++ dhcp-4.2.2b1/common/nit.c  2011-07-01 14:13:31.033887672 +0200
+diff -up dhcp-4.3.0a1/common/nit.c.cloexec dhcp-4.3.0a1/common/nit.c
+--- dhcp-4.3.0a1/common/nit.c.cloexec  2013-12-19 15:34:41.642886199 +0100
++++ dhcp-4.3.0a1/common/nit.c  2013-12-19 15:34:41.662885914 +0100
 @@ -81,7 +81,7 @@ int if_register_nit (info)
        struct strioctl sio;
  
@@ -178,10 +157,10 @@ diff -up dhcp-4.2.2b1/common/nit.c.cloexec dhcp-4.2.2b1/common/nit.c
        if (sock < 0)
                log_fatal ("Can't open NIT device for %s: %m", info -> name);
  
-diff -up dhcp-4.2.2b1/common/resolv.c.cloexec dhcp-4.2.2b1/common/resolv.c
---- dhcp-4.2.2b1/common/resolv.c.cloexec       2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/common/resolv.c       2011-07-01 14:13:31.033887672 +0200
-@@ -49,7 +49,7 @@ void read_resolv_conf (parse_time)
+diff -up dhcp-4.3.0a1/common/resolv.c.cloexec dhcp-4.3.0a1/common/resolv.c
+--- dhcp-4.3.0a1/common/resolv.c.cloexec       2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/resolv.c       2013-12-19 15:34:41.663885900 +0100
+@@ -50,7 +50,7 @@ void read_resolv_conf (parse_time)
        struct domain_search_list *dp, *dl, *nd;
        isc_result_t status;
  
@@ -190,9 +169,9 @@ diff -up dhcp-4.2.2b1/common/resolv.c.cloexec dhcp-4.2.2b1/common/resolv.c
                log_error ("Can't open %s: %m", path_resolv_conf);
                return;
        }
-diff -up dhcp-4.2.2b1/common/upf.c.cloexec dhcp-4.2.2b1/common/upf.c
---- dhcp-4.2.2b1/common/upf.c.cloexec  2011-07-01 14:13:30.979887712 +0200
-+++ dhcp-4.2.2b1/common/upf.c  2011-07-01 14:13:31.034887671 +0200
+diff -up dhcp-4.3.0a1/common/upf.c.cloexec dhcp-4.3.0a1/common/upf.c
+--- dhcp-4.3.0a1/common/upf.c.cloexec  2013-12-19 15:34:41.642886199 +0100
++++ dhcp-4.3.0a1/common/upf.c  2013-12-19 15:34:41.663885900 +0100
 @@ -77,7 +77,7 @@ int if_register_upf (info)
                /* %Audit% Cannot exceed 36 bytes. %2004.06.17,Safe% */
                sprintf(filename, "/dev/pf/pfilt%d", b);
@@ -202,70 +181,10 @@ diff -up dhcp-4.2.2b1/common/upf.c.cloexec dhcp-4.2.2b1/common/upf.c
                if (sock < 0) {
                        if (errno == EBUSY) {
                                continue;
-diff -up dhcp-4.2.2b1/dst/dst_api.c.cloexec dhcp-4.2.2b1/dst/dst_api.c
---- dhcp-4.2.2b1/dst/dst_api.c.cloexec 2009-10-29 01:46:48.000000000 +0100
-+++ dhcp-4.2.2b1/dst/dst_api.c 2011-07-01 14:13:31.035887670 +0200
-@@ -437,7 +437,7 @@ dst_s_write_private_key(const DST_KEY *k
-                            PRIVATE_KEY, PATH_MAX);
-       /* Do not overwrite an existing file */
--      if ((fp = dst_s_fopen(file, "w", 0600)) != NULL) {
-+      if ((fp = dst_s_fopen(file, "we", 0600)) != NULL) {
-               int nn;
-               if ((nn = fwrite(encoded_block, 1, len, fp)) != len) {
-                       EREPORT(("dst_write_private_key(): Write failure on %s %d != %d errno=%d\n",
-@@ -494,7 +494,7 @@ dst_s_read_public_key(const char *in_nam
-        * flags, proto, alg stored as decimal (or hex numbers FIXME).
-        * (FIXME: handle parentheses for line continuation.)
-        */
--      if ((fp = dst_s_fopen(name, "r", 0)) == NULL) {
-+      if ((fp = dst_s_fopen(name, "re", 0)) == NULL) {
-               EREPORT(("dst_read_public_key(): Public Key not found %s\n",
-                        name));
-               return (NULL);
-@@ -620,7 +620,7 @@ dst_s_write_public_key(const DST_KEY *ke
-               return (0);
-       }
-       /* create public key file */
--      if ((fp = dst_s_fopen(filename, "w+", 0644)) == NULL) {
-+      if ((fp = dst_s_fopen(filename, "w+e", 0644)) == NULL) {
-               EREPORT(("DST_write_public_key: open of file:%s failed (errno=%d)\n",
-                        filename, errno));
-               return (0);
-@@ -854,7 +854,7 @@ dst_s_read_private_key_file(char *name, 
-               return (0);
-       }
-       /* first check if we can find the key file */
--      if ((fp = dst_s_fopen(filename, "r", 0)) == NULL) {
-+      if ((fp = dst_s_fopen(filename, "re", 0)) == NULL) {
-               EREPORT(("dst_s_read_private_key_file: Could not open file %s in directory %s\n",
-                        filename, dst_path[0] ? dst_path :
-                        (char *) getcwd(NULL, PATH_MAX - 1)));
-diff -up dhcp-4.2.2b1/dst/prandom.c.cloexec dhcp-4.2.2b1/dst/prandom.c
---- dhcp-4.2.2b1/dst/prandom.c.cloexec 2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/dst/prandom.c 2011-07-01 14:13:31.035887670 +0200
-@@ -269,7 +269,7 @@ get_dev_random(u_char *output, unsigned 
-       s = stat("/dev/random", &st);
-       if (s == 0 && S_ISCHR(st.st_mode)) {
--              if ((fd = open("/dev/random", O_RDONLY | O_NONBLOCK)) != -1) {
-+              if ((fd = open("/dev/random", O_RDONLY | O_NONBLOCK | O_CLOEXEC)) != -1) {
-                       if ((n = read(fd, output, size)) < 0)
-                               n = 0;
-                       close(fd);
-@@ -480,7 +480,7 @@ digest_file(dst_work *work) 
-               work->file_digest = dst_free_key(work->file_digest);
-               return (0);
-       }
--      if ((fp = fopen(name, "r")) == NULL) 
-+      if ((fp = fopen(name, "re")) == NULL) 
-               return (0);
-       for (no = 0; (i = fread(buf, sizeof(*buf), sizeof(buf), fp)) > 0; 
-            no += i) 
-diff -up dhcp-4.2.2b1/omapip/trace.c.cloexec dhcp-4.2.2b1/omapip/trace.c
---- dhcp-4.2.2b1/omapip/trace.c.cloexec        2010-05-27 02:34:57.000000000 +0200
-+++ dhcp-4.2.2b1/omapip/trace.c        2011-07-01 14:13:31.036887669 +0200
-@@ -141,10 +141,10 @@ isc_result_t trace_begin (const char *fi
+diff -up dhcp-4.3.0a1/omapip/trace.c.cloexec dhcp-4.3.0a1/omapip/trace.c
+--- dhcp-4.3.0a1/omapip/trace.c.cloexec        2013-12-11 01:01:03.000000000 +0100
++++ dhcp-4.3.0a1/omapip/trace.c        2013-12-19 15:34:41.663885900 +0100
+@@ -142,10 +142,10 @@ isc_result_t trace_begin (const char *fi
                return DHCP_R_INVALIDARG;
        }
  
@@ -278,7 +197,7 @@ diff -up dhcp-4.2.2b1/omapip/trace.c.cloexec dhcp-4.2.2b1/omapip/trace.c
                                     0600);
        }
  
-@@ -431,7 +431,7 @@ void trace_file_replay (const char *file
+@@ -433,7 +433,7 @@ void trace_file_replay (const char *file
        isc_result_t result;
        int len;
  
@@ -287,10 +206,10 @@ diff -up dhcp-4.2.2b1/omapip/trace.c.cloexec dhcp-4.2.2b1/omapip/trace.c
        if (!traceinfile) {
                log_error("Can't open tracefile %s: %m", filename);
                return;
-diff -up dhcp-4.2.2b1/relay/dhcrelay.c.cloexec dhcp-4.2.2b1/relay/dhcrelay.c
---- dhcp-4.2.2b1/relay/dhcrelay.c.cloexec      2011-05-10 15:07:37.000000000 +0200
-+++ dhcp-4.2.2b1/relay/dhcrelay.c      2011-07-01 14:18:07.630209767 +0200
-@@ -183,11 +183,11 @@ main(int argc, char **argv) {
+diff -up dhcp-4.3.0a1/relay/dhcrelay.c.cloexec dhcp-4.3.0a1/relay/dhcrelay.c
+--- dhcp-4.3.0a1/relay/dhcrelay.c.cloexec      2013-12-13 22:26:21.000000000 +0100
++++ dhcp-4.3.0a1/relay/dhcrelay.c      2013-12-19 15:34:41.664885886 +0100
+@@ -193,11 +193,11 @@ main(int argc, char **argv) {
        /* Make sure that file descriptors 0(stdin), 1,(stdout), and
           2(stderr) are open. To do this, we assume that when we
           open a file the lowest available file descriptor is used. */
@@ -305,7 +224,7 @@ diff -up dhcp-4.2.2b1/relay/dhcrelay.c.cloexec dhcp-4.2.2b1/relay/dhcrelay.c
        if (fd == 2)
                log_perror = 0; /* No sense logging to /dev/null. */
        else if (fd != -1)
-@@ -540,13 +540,13 @@ main(int argc, char **argv) {
+@@ -564,13 +564,13 @@ main(int argc, char **argv) {
  
                if (no_pid_file == ISC_FALSE) {
                        pfdesc = open(path_dhcrelay_pid,
@@ -321,10 +240,10 @@ diff -up dhcp-4.2.2b1/relay/dhcrelay.c.cloexec dhcp-4.2.2b1/relay/dhcrelay.c
                                if (!pf)
                                        log_error("Can't fdopen %s: %m",
                                                  path_dhcrelay_pid);
-diff -up dhcp-4.2.2b1/server/confpars.c.cloexec dhcp-4.2.2b1/server/confpars.c
---- dhcp-4.2.2b1/server/confpars.c.cloexec     2010-10-14 00:34:45.000000000 +0200
-+++ dhcp-4.2.2b1/server/confpars.c     2011-07-01 14:13:31.039887666 +0200
-@@ -116,7 +116,7 @@ isc_result_t read_conf_file (const char 
+diff -up dhcp-4.3.0a1/server/confpars.c.cloexec dhcp-4.3.0a1/server/confpars.c
+--- dhcp-4.3.0a1/server/confpars.c.cloexec     2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/confpars.c     2013-12-19 15:34:41.665885871 +0100
+@@ -117,7 +117,7 @@ isc_result_t read_conf_file (const char
        }
  #endif
  
@@ -333,10 +252,10 @@ diff -up dhcp-4.2.2b1/server/confpars.c.cloexec dhcp-4.2.2b1/server/confpars.c
                if (leasep) {
                        log_error ("Can't open lease database %s: %m --",
                                   path_dhcpd_db);
-diff -up dhcp-4.2.2b1/server/db.c.cloexec dhcp-4.2.2b1/server/db.c
---- dhcp-4.2.2b1/server/db.c.cloexec   2010-09-14 00:15:26.000000000 +0200
-+++ dhcp-4.2.2b1/server/db.c   2011-07-01 14:13:31.040887665 +0200
-@@ -1035,7 +1035,7 @@ void db_startup (testp)
+diff -up dhcp-4.3.0a1/server/db.c.cloexec dhcp-4.3.0a1/server/db.c
+--- dhcp-4.3.0a1/server/db.c.cloexec   2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/db.c   2013-12-19 15:34:41.666885857 +0100
+@@ -1081,7 +1081,7 @@ void db_startup (testp)
        }
  #endif
        if (!testp) {
@@ -345,7 +264,7 @@ diff -up dhcp-4.2.2b1/server/db.c.cloexec dhcp-4.2.2b1/server/db.c
                if (!db_file)
                        log_fatal ("Can't open %s for append.", path_dhcpd_db);
                expire_all_pools ();
-@@ -1083,12 +1083,12 @@ int new_lease_file ()
+@@ -1129,12 +1129,12 @@ int new_lease_file ()
                     path_dhcpd_db, (int)t) >= sizeof newfname)
                log_fatal("new_lease_file: lease file path too long");
  
@@ -360,10 +279,10 @@ diff -up dhcp-4.2.2b1/server/db.c.cloexec dhcp-4.2.2b1/server/db.c
                log_error("Can't fdopen new lease file: %m");
                close(db_fd);
                goto fdfail;
-diff -up dhcp-4.2.2b1/server/dhcpd.c.cloexec dhcp-4.2.2b1/server/dhcpd.c
---- dhcp-4.2.2b1/server/dhcpd.c.cloexec        2011-04-21 16:08:15.000000000 +0200
-+++ dhcp-4.2.2b1/server/dhcpd.c        2011-07-01 14:19:40.354124505 +0200
-@@ -270,11 +270,11 @@ main(int argc, char **argv) {
+diff -up dhcp-4.3.0a1/server/dhcpd.c.cloexec dhcp-4.3.0a1/server/dhcpd.c
+--- dhcp-4.3.0a1/server/dhcpd.c.cloexec        2013-12-13 22:26:01.000000000 +0100
++++ dhcp-4.3.0a1/server/dhcpd.c        2013-12-19 15:37:17.258674472 +0100
+@@ -193,11 +193,11 @@ main(int argc, char **argv) {
          /* Make sure that file descriptors 0 (stdin), 1, (stdout), and
             2 (stderr) are open. To do this, we assume that when we
             open a file the lowest available file descriptor is used. */
@@ -378,7 +297,7 @@ diff -up dhcp-4.2.2b1/server/dhcpd.c.cloexec dhcp-4.2.2b1/server/dhcpd.c
          if (fd == 2)
                  log_perror = 0; /* No sense logging to /dev/null. */
          else if (fd != -1)
-@@ -793,7 +793,7 @@ main(int argc, char **argv) {
+@@ -716,7 +716,7 @@ main(int argc, char **argv) {
         */
        if (no_pid_file == ISC_FALSE) {
                /*Read previous pid file. */
@@ -387,7 +306,7 @@ diff -up dhcp-4.2.2b1/server/dhcpd.c.cloexec dhcp-4.2.2b1/server/dhcpd.c
                        status = read(i, pbuf, (sizeof pbuf) - 1);
                        close (i);
                        if (status > 0) {
-@@ -812,7 +812,7 @@ main(int argc, char **argv) {
+@@ -735,7 +735,7 @@ main(int argc, char **argv) {
                }
  
                /* Write new pid file. */
@@ -396,23 +315,23 @@ diff -up dhcp-4.2.2b1/server/dhcpd.c.cloexec dhcp-4.2.2b1/server/dhcpd.c
                if (i >= 0) {
                        sprintf(pbuf, "%d\n", (int) getpid());
                        IGNORE_RET (write(i, pbuf, strlen(pbuf)));
-@@ -840,9 +840,9 @@ main(int argc, char **argv) {
-                 close(2);
+@@ -763,9 +763,9 @@ main(int argc, char **argv) {
+                 (void) close(2);
  
                  /* Reopen them on /dev/null. */
--                open("/dev/null", O_RDWR);
--                open("/dev/null", O_RDWR);
--                open("/dev/null", O_RDWR);
-+                open("/dev/null", O_RDWR | O_CLOEXEC);
-+                open("/dev/null", O_RDWR | O_CLOEXEC);
-+                open("/dev/null", O_RDWR | O_CLOEXEC);
+-                (void) open("/dev/null", O_RDWR);
+-                (void) open("/dev/null", O_RDWR);
+-                (void) open("/dev/null", O_RDWR);
++                (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++                (void) open("/dev/null", O_RDWR | O_CLOEXEC);
++                (void) open("/dev/null", O_RDWR | O_CLOEXEC);
                  log_perror = 0; /* No sense logging to /dev/null. */
  
                        IGNORE_RET (chdir("/"));
-diff -up dhcp-4.2.2b1/server/ldap.c.cloexec dhcp-4.2.2b1/server/ldap.c
---- dhcp-4.2.2b1/server/ldap.c.cloexec 2010-03-25 16:26:58.000000000 +0100
-+++ dhcp-4.2.2b1/server/ldap.c 2011-07-01 14:13:31.043887665 +0200
-@@ -685,7 +685,7 @@ ldap_start (void)
+diff -up dhcp-4.3.0a1/server/ldap.c.cloexec dhcp-4.3.0a1/server/ldap.c
+--- dhcp-4.3.0a1/server/ldap.c.cloexec 2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/ldap.c 2013-12-19 15:34:41.667885843 +0100
+@@ -684,7 +684,7 @@ ldap_start (void)
  
    if (ldap_debug_file != NULL && ldap_debug_fd == -1)
      {
similarity index 59%
rename from src/patches/dhcp-4.2.0-PPP.patch
rename to src/patches/dhcp/dhcp-PPP.patch
index bef2be7f08b059e6819584285f2567e229e9d066..5d022e43209213ab6dd355a14c6d5ef6a369ed1f 100644 (file)
@@ -1,7 +1,31 @@
-diff -up dhcp-4.2.0-P1/client/dhc6.c.PPP dhcp-4.2.0-P1/client/dhc6.c
---- dhcp-4.2.0-P1/client/dhc6.c.PPP    2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/client/dhc6.c        2010-11-09 15:54:12.000000000 +0100
-@@ -129,7 +129,7 @@ extern int stateless;
+diff -up dhcp-4.3.1b1/client/dhc6.c.mRfpsB dhcp-4.3.1b1/client/dhc6.c
+--- dhcp-4.3.1b1/client/dhc6.c.mRfpsB  2014-07-10 17:48:03.779424870 +0200
++++ dhcp-4.3.1b1/client/dhc6.c 2014-07-10 17:48:03.795424644 +0200
+@@ -5088,7 +5088,8 @@ make_client6_options(struct client_state
+        */
+       if ((oc = lookup_option(&dhcpv6_universe, *op,
+                               D6O_CLIENTID)) == NULL) {
+-              if (!option_cache(&oc, &default_duid, NULL, clientid_option,
++              if (default_duid.len == 0 ||
++                  !option_cache(&oc, &default_duid, NULL, clientid_option,
+                                 MDL))
+                       log_fatal("Failure assembling a DUID.");
+diff -up dhcp-4.3.1b1/client/dhclient.c.mRfpsB dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.mRfpsB      2014-07-10 17:39:25.853763858 +0200
++++ dhcp-4.3.1b1/client/dhclient.c     2014-07-10 17:49:49.882925843 +0200
+@@ -948,8 +948,8 @@ main(int argc, char **argv) {
+                       if (default_duid.buffer != NULL)
+                               data_string_forget(&default_duid, MDL);
+-                      form_duid(&default_duid, MDL);
+-                      write_duid(&default_duid);
++                      if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS)
++                              write_duid(&default_duid);
+               }
+       }
+@@ -3267,7 +3267,7 @@ write_options(struct client_state *clien
   * is not how it is intended.  Upcoming rearchitecting the client should
   * address this "one daemon model."
   */
@@ -10,7 +34,7 @@ diff -up dhcp-4.2.0-P1/client/dhc6.c.PPP dhcp-4.2.0-P1/client/dhc6.c
  form_duid(struct data_string *duid, const char *file, int line)
  {
        struct interface_info *ip;
-@@ -141,6 +141,15 @@ form_duid(struct data_string *duid, cons
+@@ -3280,6 +3280,15 @@ form_duid(struct data_string *duid, cons
        if (ip == NULL)
                log_fatal("Impossible condition at %s:%d.", MDL);
  
@@ -26,43 +50,19 @@ diff -up dhcp-4.2.0-P1/client/dhc6.c.PPP dhcp-4.2.0-P1/client/dhc6.c
        if ((ip->hw_address.hlen == 0) ||
            (ip->hw_address.hlen > sizeof(ip->hw_address.hbuf)))
                log_fatal("Impossible hardware address length at %s:%d.", MDL);
-@@ -176,6 +185,8 @@ form_duid(struct data_string *duid, cons
-               memcpy(duid->buffer->data + 4, ip->hw_address.hbuf + 1,
-                      ip->hw_address.hlen - 1);
+@@ -3323,6 +3332,8 @@ form_duid(struct data_string *duid, cons
+               log_info("Created duid %s.", str);
+               dfree(str, MDL);
        }
-+
++      
 +      return ISC_R_SUCCESS;
  }
  
- /*
-@@ -5289,7 +5300,8 @@ make_client6_options(struct client_state
-        */
-       if ((oc = lookup_option(&dhcpv6_universe, *op,
-                               D6O_CLIENTID)) == NULL) {
--              if (!option_cache(&oc, &default_duid, NULL, clientid_option,
-+              if (default_duid.len == 0 ||
-+                  !option_cache(&oc, &default_duid, NULL, clientid_option,
-                                 MDL))
-                       log_fatal("Failure assembling a DUID.");
-diff -up dhcp-4.2.0-P1/client/dhclient.c.PPP dhcp-4.2.0-P1/client/dhclient.c
---- dhcp-4.2.0-P1/client/dhclient.c.PPP        2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/client/dhclient.c    2010-11-09 15:37:26.000000000 +0100
-@@ -911,8 +911,8 @@ main(int argc, char **argv) {
-                       if (default_duid.buffer != NULL)
-                               data_string_forget(&default_duid, MDL);
--                      form_duid(&default_duid, MDL);
--                      write_duid(&default_duid);
-+                      if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS)
-+                              write_duid(&default_duid);
-               }
-               for (ip = interfaces ; ip != NULL ; ip = ip->next) {
-diff -up dhcp-4.2.0-P1/common/bpf.c.PPP dhcp-4.2.0-P1/common/bpf.c
---- dhcp-4.2.0-P1/common/bpf.c.PPP     2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/common/bpf.c 2010-11-09 15:42:42.000000000 +0100
-@@ -599,6 +599,22 @@ get_hw_addr(const char *name, struct har
+ /* Write the default DUID to the lease store. */
+diff -up dhcp-4.3.1b1/common/bpf.c.mRfpsB dhcp-4.3.1b1/common/bpf.c
+--- dhcp-4.3.1b1/common/bpf.c.mRfpsB   2014-07-10 17:39:25.797764653 +0200
++++ dhcp-4.3.1b1/common/bpf.c  2014-07-10 17:48:03.797424616 +0200
+@@ -600,6 +600,22 @@ get_hw_addr(const char *name, struct har
                          memcpy(&hw->hbuf[1], LLADDR(sa), sa->sdl_alen);
                          break;
  #endif /* IFT_FDDI */
@@ -85,12 +85,12 @@ diff -up dhcp-4.2.0-P1/common/bpf.c.PPP dhcp-4.2.0-P1/common/bpf.c
                  default:
                          log_fatal("Unsupported device type %d for \"%s\"",
                                    sa->sdl_type, name);
-diff -up dhcp-4.2.0-P1/common/lpf.c.PPP dhcp-4.2.0-P1/common/lpf.c
---- dhcp-4.2.0-P1/common/lpf.c.PPP     2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/common/lpf.c 2010-11-09 15:45:40.000000000 +0100
-@@ -502,6 +502,22 @@ get_hw_addr(const char *name, struct har
+diff -up dhcp-4.3.1b1/common/lpf.c.mRfpsB dhcp-4.3.1b1/common/lpf.c
+--- dhcp-4.3.1b1/common/lpf.c.mRfpsB   2014-07-10 17:39:25.744765404 +0200
++++ dhcp-4.3.1b1/common/lpf.c  2014-07-10 17:48:03.797424616 +0200
+@@ -511,6 +511,22 @@ get_hw_addr(const char *name, struct har
                        hw->hbuf[0] = HTYPE_FDDI;
-                       memcpy(&hw->hbuf[1], sa->sa_data, 16);
+                       memcpy(&hw->hbuf[1], sa->sa_data, 6);
                        break;
 +#if defined(ARPHRD_PPP)
 +              case ARPHRD_PPP:
@@ -111,34 +111,34 @@ diff -up dhcp-4.2.0-P1/common/lpf.c.PPP dhcp-4.2.0-P1/common/lpf.c
                default:
                        log_fatal("Unsupported device type %ld for \"%s\"",
                                  (long int)sa->sa_family, name);
-diff -up dhcp-4.2.0-P1/includes/dhcpd.h.PPP dhcp-4.2.0-P1/includes/dhcpd.h
---- dhcp-4.2.0-P1/includes/dhcpd.h.PPP 2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/includes/dhcpd.h     2010-11-09 15:46:58.000000000 +0100
-@@ -2733,7 +2733,7 @@ void dhcpv4_client_assignments(void);
- void dhcpv6_client_assignments(void);
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.mRfpsB dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.mRfpsB       2014-07-10 17:48:03.761425124 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h      2014-07-10 17:48:03.798424601 +0200
+@@ -2839,7 +2839,7 @@ void client_dns_remove(struct client_sta
  
- /* dhc6.c */
+ void dhcpv4_client_assignments(void);
+ void dhcpv6_client_assignments(void);
 -void form_duid(struct data_string *duid, const char *file, int line);
 +isc_result_t form_duid(struct data_string *duid, const char *file, int line);
+ /* dhc6.c */
  void dhc6_lease_destroy(struct dhc6_lease **src, const char *file, int line);
- void start_init6(struct client_state *client);
- void start_info_request6(struct client_state *client);
-diff -up dhcp-4.2.0-P1/includes/dhcp.h.PPP dhcp-4.2.0-P1/includes/dhcp.h
---- dhcp-4.2.0-P1/includes/dhcp.h.PPP  2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/includes/dhcp.h      2010-11-09 15:48:53.000000000 +0100
-@@ -80,6 +80,8 @@ struct dhcp_packet {
- #define HTYPE_IEEE802 6               /* IEEE 802.2 Token Ring...     */
- #define HTYPE_FDDI    8               /* FDDI...                      */
+diff -up dhcp-4.3.1b1/includes/dhcp.h.mRfpsB dhcp-4.3.1b1/includes/dhcp.h
+--- dhcp-4.3.1b1/includes/dhcp.h.mRfpsB        2014-07-10 17:48:03.761425124 +0200
++++ dhcp-4.3.1b1/includes/dhcp.h       2014-07-10 17:48:03.798424601 +0200
+@@ -81,6 +81,8 @@ struct dhcp_packet {
+                                        * is no standard for this so we
+                                        * just steal a type            */
  
-+#define HTYPE_RESERVED  0               /* RFC 5494 */
++#define HTYPE_RESERVED        0               /* RFC 5494 */
 +
  /* Magic cookie validating dhcp options field (and bootp vendor
     extensions field). */
  #define DHCP_OPTIONS_COOKIE   "\143\202\123\143"
-diff -up dhcp-4.2.0-P1/server/dhcpv6.c.PPP dhcp-4.2.0-P1/server/dhcpv6.c
---- dhcp-4.2.0-P1/server/dhcpv6.c.PPP  2010-11-05 10:47:37.000000000 +0100
-+++ dhcp-4.2.0-P1/server/dhcpv6.c      2010-11-09 15:50:17.000000000 +0100
-@@ -300,6 +300,9 @@ generate_new_server_duid(void) {
+diff -up dhcp-4.3.1b1/server/dhcpv6.c.mRfpsB dhcp-4.3.1b1/server/dhcpv6.c
+--- dhcp-4.3.1b1/server/dhcpv6.c.mRfpsB        2014-07-10 17:47:31.464881409 +0200
++++ dhcp-4.3.1b1/server/dhcpv6.c       2014-07-10 17:48:03.800424573 +0200
+@@ -330,6 +330,9 @@ generate_new_server_duid(void) {
                if (p->hw_address.hlen > 0) {
                        break;
                }
similarity index 83%
rename from src/patches/dhcp-4.2.0-UseMulticast.patch
rename to src/patches/dhcp/dhcp-UseMulticast.patch
index 319344aa5d489f7d8d8d9b8c8aa0c1dff1d9597b..ee0ea6b9af0c8fe00903f78f6c40299bbb1d63e9 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
---- dhcp-4.2.0/server/dhcpv6.c.UseMulticast    2010-06-01 19:30:00.000000000 +0200
-+++ dhcp-4.2.0/server/dhcpv6.c 2010-07-21 16:17:30.000000000 +0200
-@@ -346,6 +346,48 @@ generate_new_server_duid(void) {
+diff -up dhcp-4.3.1b1/server/dhcpv6.c.UseMulticast dhcp-4.3.1b1/server/dhcpv6.c
+--- dhcp-4.3.1b1/server/dhcpv6.c.UseMulticast  2014-07-02 19:58:40.000000000 +0200
++++ dhcp-4.3.1b1/server/dhcpv6.c       2014-07-10 18:20:03.066256219 +0200
+@@ -376,6 +376,48 @@ generate_new_server_duid(void) {
  }
  
  /*
@@ -35,7 +35,7 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
 +              }
 +
 +              execute_statements_in_scope(NULL, NULL, NULL, NULL, NULL,
-+                              opt_state, &global_scope, root_group, NULL);
++                           opt_state, &global_scope, root_group, NULL, NULL);
 +
 +              oc = lookup_option(&dhcpv6_universe, opt_state, D6O_UNICAST);
 +              unicast_option_defined = (oc != NULL);
@@ -50,8 +50,21 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
   * Get the client identifier from the packet.
   */
  isc_result_t
-@@ -1405,6 +1447,56 @@ lease_to_client(struct data_string *repl
-                                                   reply.shared->group);
+@@ -706,6 +748,12 @@ static const int required_opts[] = {
+       D6O_PREFERENCE,
+       0
+ };
++static const int required_opts_NAA[] = {
++      D6O_CLIENTID,
++      D6O_SERVERID,
++      D6O_STATUS_CODE,
++      0
++};
+ static const int required_opts_solicit[] = {
+       D6O_CLIENTID,
+       D6O_SERVERID,
+@@ -1587,6 +1635,56 @@ lease_to_client(struct data_string *repl
+                                                   reply.shared->group, NULL);
        }
  
 +      /* reject unicast message, unless we set unicast option */
@@ -102,21 +115,20 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
 +                                      reply.opt_state, reply.packet,
 +                                      required_opts_NAA,
 +                                      NULL);
-+      } else if (no_resources_avail && (reply.ia_count != 0) &&
-+          (reply.packet->dhcpv6_msg_type == DHCPV6_SOLICIT))
++      }
++
        /*
         * RFC3315 section 17.2.2 (Solicit):
         *
-@@ -1429,8 +1521,6 @@ lease_to_client(struct data_string *repl
-        * the server.
-        * Sends a Renew/Rebind if the IA is not in the Reply message.
+@@ -1619,6 +1717,7 @@ lease_to_client(struct data_string *repl
+        * Having stored the client's IA's, store any options that
+        * will fit in the remaining space.
         */
--      if (no_resources_avail && (reply.ia_count != 0) &&
--          (reply.packet->dhcpv6_msg_type == DHCPV6_SOLICIT))
-       {
-               /* Set the NoAddrsAvail status code. */
-               if (!set_status_code(STATUS_NoAddrsAvail,
-@@ -4128,7 +4218,6 @@ dhcpv6_solicit(struct data_string *reply
++      else 
+       reply.cursor += store_options6((char *)reply.buf.data + reply.cursor,
+                                      sizeof(reply.buf) - reply.cursor,
+                                      reply.opt_state, reply.packet,
+@@ -4748,7 +4847,6 @@ dhcpv6_solicit(struct data_string *reply
   * Very similar to Solicit handling, except the server DUID is required.
   */
  
@@ -124,7 +136,7 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
  static void
  dhcpv6_request(struct data_string *reply_ret, struct packet *packet) {
        struct data_string client_id;
-@@ -4443,7 +4532,6 @@ exit:
+@@ -5078,7 +5176,6 @@ exit:
   * except for the error code of when addresses don't match.
   */
  
@@ -132,7 +144,7 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
  static void
  dhcpv6_renew(struct data_string *reply, struct packet *packet) {
        struct data_string client_id;
-@@ -4688,18 +4776,60 @@ iterate_over_ia_na(struct data_string *r
+@@ -5322,18 +5419,60 @@ iterate_over_ia_na(struct data_string *r
                goto exit;
        }
  
@@ -203,7 +215,7 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
  
        /*
         * Loop through the IA_NA reported by the client, and deal with
-@@ -4838,6 +4968,7 @@ iterate_over_ia_na(struct data_string *r
+@@ -5471,6 +5610,7 @@ iterate_over_ia_na(struct data_string *r
        /* 
         * Return our reply to the caller.
         */
@@ -211,7 +223,7 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
        reply_ret->len = reply_ofs;
        reply_ret->buffer = NULL;
        if (!buffer_allocate(&reply_ret->buffer, reply_ofs, MDL)) {
-@@ -4883,7 +5014,6 @@ exit:
+@@ -5516,7 +5656,6 @@ exit:
   * we still need to be aware of this possibility.
   */
  
@@ -219,7 +231,7 @@ diff -up dhcp-4.2.0/server/dhcpv6.c.UseMulticast dhcp-4.2.0/server/dhcpv6.c
  /* TODO: IA_TA */
  static void
  dhcpv6_decline(struct data_string *reply, struct packet *packet) {
-@@ -5355,7 +5485,6 @@ exit:
+@@ -5986,7 +6125,6 @@ exit:
   * Release means a client is done with the leases.
   */
  
diff --git a/src/patches/dhcp/dhcp-add_timeout_when_NULL.patch b/src/patches/dhcp/dhcp-add_timeout_when_NULL.patch
new file mode 100644 (file)
index 0000000..103824c
--- /dev/null
@@ -0,0 +1,14 @@
+diff -up dhcp-4.3.0a1/common/dispatch.c.dracut dhcp-4.3.0a1/common/dispatch.c
+--- dhcp-4.3.0a1/common/dispatch.c.dracut      2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/dispatch.c     2013-12-19 15:39:50.350505860 +0100
+@@ -210,6 +210,10 @@ void add_timeout (when, where, what, ref
+       isc_interval_t interval;
+       isc_time_t expires;
++      if (when == NULL) {
++              return;
++      }
++
+       /* See if this timeout supersedes an existing timeout. */
+       t = (struct timeout *)0;
+       for (q = timeouts; q; q = q->next) {
similarity index 51%
rename from src/patches/dhcp-4.2.2-capability.patch
rename to src/patches/dhcp/dhcp-capability.patch
index 79af036f2af6e7cb3c2c4ac013e470952f50c82f..91a1baef525a32edeeb7c6ce43edad8ec2907013 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.2b1/client/dhclient.8.capability dhcp-4.2.2b1/client/dhclient.8
---- dhcp-4.2.2b1/client/dhclient.8.capability  2011-07-01 15:09:06.603784531 +0200
-+++ dhcp-4.2.2b1/client/dhclient.8     2011-07-01 15:09:06.663783913 +0200
-@@ -118,6 +118,9 @@ dhclient - Dynamic Host Configuration Pr
+diff -up dhcp-4.3.1b1/client/dhclient.8.zzftXp dhcp-4.3.1b1/client/dhclient.8
+--- dhcp-4.3.1b1/client/dhclient.8.zzftXp      2014-07-10 17:38:26.938599402 +0200
++++ dhcp-4.3.1b1/client/dhclient.8     2014-07-10 17:39:25.852763873 +0200
+@@ -128,6 +128,9 @@ dhclient - Dynamic Host Configuration Pr
  .B -w
  ]
  [
@@ -11,7 +11,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.8.capability dhcp-4.2.2b1/client/dhclient.
  .B -B
  ]
  [
-@@ -296,6 +299,32 @@ has been added or removed, so that the c
+@@ -304,6 +307,32 @@ has been added or removed, so that the c
  address on that interface.
  
  .TP
@@ -44,9 +44,9 @@ diff -up dhcp-4.2.2b1/client/dhclient.8.capability dhcp-4.2.2b1/client/dhclient.
  .BI \-B
  Set the BOOTP broadcast flag in request packets so servers will always
  broadcast replies.
-diff -up dhcp-4.2.2b1/client/dhclient.c.capability dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.capability  2011-07-01 15:09:06.644784107 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c     2011-07-01 15:09:06.664783903 +0200
+diff -up dhcp-4.3.1b1/client/dhclient.c.zzftXp dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.zzftXp      2014-07-10 17:39:25.797764653 +0200
++++ dhcp-4.3.1b1/client/dhclient.c     2014-07-10 17:39:25.853763858 +0200
 @@ -39,6 +39,10 @@
  #include <limits.h>
  #include <dns/result.h>
@@ -58,7 +58,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.capability dhcp-4.2.2b1/client/dhclient.
  /*
   * Defined in stdio.h when _GNU_SOURCE is set, but we don't want to define
   * that when building ISC code.
-@@ -141,6 +145,9 @@ main(int argc, char **argv) {
+@@ -143,6 +147,9 @@ main(int argc, char **argv) {
        int timeout_arg = 0;
        char *arg_conf = NULL;
        int arg_conf_len = 0;
@@ -68,7 +68,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.capability dhcp-4.2.2b1/client/dhclient.
  
        /* Initialize client globals. */
        memset(&default_duid, 0, sizeof(default_duid));
-@@ -410,6 +417,10 @@ main(int argc, char **argv) {
+@@ -425,6 +432,10 @@ main(int argc, char **argv) {
                        }
  
                        dhclient_request_options = argv[i];
@@ -79,7 +79,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.capability dhcp-4.2.2b1/client/dhclient.
                } else if (argv[i][0] == '-') {
                    usage();
                } else if (interfaces_requested < 0) {
-@@ -458,6 +469,19 @@ main(int argc, char **argv) {
+@@ -473,6 +484,19 @@ main(int argc, char **argv) {
                path_dhclient_script = s;
        }
  
@@ -99,10 +99,10 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.capability dhcp-4.2.2b1/client/dhclient.
        /* Set up the initial dhcp option universe. */
        initialize_common_option_spaces();
  
-diff -up dhcp-4.2.2b1/client/dhclient-script.8.capability dhcp-4.2.2b1/client/dhclient-script.8
---- dhcp-4.2.2b1/client/dhclient-script.8.capability   2011-07-01 15:09:06.604784521 +0200
-+++ dhcp-4.2.2b1/client/dhclient-script.8      2011-07-01 15:09:06.666783883 +0200
-@@ -239,6 +239,16 @@ repeatedly initialized to the values pro
+diff -up dhcp-4.3.1b1/client/dhclient-script.8.zzftXp dhcp-4.3.1b1/client/dhclient-script.8
+--- dhcp-4.3.1b1/client/dhclient-script.8.zzftXp       2014-07-10 17:39:25.761765163 +0200
++++ dhcp-4.3.1b1/client/dhclient-script.8      2014-07-10 17:39:25.851763887 +0200
+@@ -243,6 +243,16 @@ repeatedly initialized to the values pro
  the other.   Assuming the information provided by both servers is
  valid, this shouldn't cause any real problems, but it could be
  confusing.
@@ -119,22 +119,22 @@ diff -up dhcp-4.2.2b1/client/dhclient-script.8.capability dhcp-4.2.2b1/client/dh
  .SH SEE ALSO
  dhclient(8), dhcpd(8), dhcrelay(8), dhclient.conf(5) and
  dhclient.leases(5).
-diff -up dhcp-4.2.2b1/client/Makefile.am.capability dhcp-4.2.2b1/client/Makefile.am
---- dhcp-4.2.2b1/client/Makefile.am.capability 2011-07-01 15:09:06.526785327 +0200
-+++ dhcp-4.2.2b1/client/Makefile.am    2011-07-01 15:09:06.667783873 +0200
-@@ -5,7 +5,7 @@ dhclient_SOURCES = clparse.c dhclient.c 
+diff -up dhcp-4.3.1b1/client/Makefile.am.zzftXp dhcp-4.3.1b1/client/Makefile.am
+--- dhcp-4.3.1b1/client/Makefile.am.zzftXp     2014-07-10 17:38:10.778828583 +0200
++++ dhcp-4.3.1b1/client/Makefile.am    2014-07-10 17:39:25.851763887 +0200
+@@ -10,7 +10,7 @@ dhclient_SOURCES = clparse.c dhclient.c
+                  scripts/bsdos scripts/freebsd scripts/linux scripts/macos \
                   scripts/netbsd scripts/nextstep scripts/openbsd \
                   scripts/solaris scripts/openwrt
- dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--               $(BIND9_LIBDIR) -ldns-export -lisc-export
-+               $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
+-dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
++dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.la $(CAPNG_LDADD) \
+                $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
  man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
  EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2b1/configure.ac.capability dhcp-4.2.2b1/configure.ac
---- dhcp-4.2.2b1/configure.ac.capability       2011-07-01 15:09:06.527785317 +0200
-+++ dhcp-4.2.2b1/configure.ac  2011-07-01 15:09:06.667783873 +0200
-@@ -449,6 +449,41 @@ AC_TRY_LINK(
+diff -up dhcp-4.3.1b1/configure.ac.zzftXp dhcp-4.3.1b1/configure.ac
+--- dhcp-4.3.1b1/configure.ac.zzftXp   2014-07-10 17:38:10.779828569 +0200
++++ dhcp-4.3.1b1/configure.ac  2014-07-10 17:39:25.854763844 +0200
+@@ -499,6 +499,41 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
  # Look for optional headers.
  AC_CHECK_HEADERS(sys/socket.h net/if_dl.h net/if6.h regex.h)
  
@@ -176,11 +176,11 @@ diff -up dhcp-4.2.2b1/configure.ac.capability dhcp-4.2.2b1/configure.ac
  # Solaris needs some libraries for functions
  AC_SEARCH_LIBS(socket, [socket])
  AC_SEARCH_LIBS(inet_ntoa, [nsl])
-diff -up dhcp-4.2.2b1/relay/dhcrelay.c.capability dhcp-4.2.2b1/relay/dhcrelay.c
---- dhcp-4.2.2b1/relay/dhcrelay.c.capability   2011-07-01 15:09:06.626784295 +0200
-+++ dhcp-4.2.2b1/relay/dhcrelay.c      2011-07-01 15:12:05.362223794 +0200
-@@ -36,6 +36,11 @@
- #include <syslog.h>
+diff -up dhcp-4.3.1b1/relay/dhcrelay.c.zzftXp dhcp-4.3.1b1/relay/dhcrelay.c
+--- dhcp-4.3.1b1/relay/dhcrelay.c.zzftXp       2014-07-10 17:39:25.799764624 +0200
++++ dhcp-4.3.1b1/relay/dhcrelay.c      2014-07-10 17:40:19.191007421 +0200
+@@ -31,6 +31,11 @@
+ #include <signal.h>
  #include <sys/time.h>
  
 +#ifdef HAVE_LIBCAP_NG
@@ -191,9 +191,9 @@ diff -up dhcp-4.2.2b1/relay/dhcrelay.c.capability dhcp-4.2.2b1/relay/dhcrelay.c
  TIME default_lease_time = 43200; /* 12 hours... */
  TIME max_lease_time = 86400; /* 24 hours... */
  struct tree_cache *global_options[256];
-@@ -356,6 +361,10 @@ main(int argc, char **argv) {
-                       sl->next = upstreams;
-                       upstreams = sl;
+@@ -376,6 +381,10 @@ main(int argc, char **argv) {
+                               usage();
+                       dhcrelay_sub_id = argv[i];
  #endif
 +              } else if (!strcmp(argv[i], "-nc")) {
 +#ifdef HAVE_LIBCAP_NG
@@ -202,7 +202,7 @@ diff -up dhcp-4.2.2b1/relay/dhcrelay.c.capability dhcp-4.2.2b1/relay/dhcrelay.c
                } else if (!strcmp(argv[i], "-pf")) {
                        if (++i == argc)
                                usage();
-@@ -426,6 +435,17 @@ main(int argc, char **argv) {
+@@ -446,6 +455,17 @@ main(int argc, char **argv) {
  #endif
        }
  
@@ -220,8 +220,8 @@ diff -up dhcp-4.2.2b1/relay/dhcrelay.c.capability dhcp-4.2.2b1/relay/dhcrelay.c
        if (!quiet) {
                log_info("%s %s", message, PACKAGE_VERSION);
                log_info(copyright);
-@@ -573,6 +593,15 @@ main(int argc, char **argv) {
-               dhcpv6_packet_handler = do_packet6;
+@@ -598,6 +618,15 @@ main(int argc, char **argv) {
+       signal(SIGTERM, dhcp_signal_handler);  /* kill */
  #endif
  
 +#ifdef HAVE_LIBCAP_NG
@@ -236,88 +236,15 @@ diff -up dhcp-4.2.2b1/relay/dhcrelay.c.capability dhcp-4.2.2b1/relay/dhcrelay.c
        /* Start dispatching packets and timeouts... */
        dispatch();
  
-diff -up dhcp-4.2.2b1/relay/Makefile.am.capability dhcp-4.2.2b1/relay/Makefile.am
---- dhcp-4.2.2b1/relay/Makefile.am.capability  2011-07-01 15:09:06.546785121 +0200
-+++ dhcp-4.2.2b1/relay/Makefile.am     2011-07-01 15:09:06.670783841 +0200
-@@ -3,7 +3,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
+diff -up dhcp-4.3.1b1/relay/Makefile.am.zzftXp dhcp-4.3.1b1/relay/Makefile.am
+--- dhcp-4.3.1b1/relay/Makefile.am.zzftXp      2014-07-10 17:38:10.780828554 +0200
++++ dhcp-4.3.1b1/relay/Makefile.am     2014-07-10 17:39:25.854763844 +0200
+@@ -2,7 +2,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
  sbin_PROGRAMS = dhcrelay
  dhcrelay_SOURCES = dhcrelay.c
- dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--               $(BIND9_LIBDIR) -ldns-export -lisc-export
-+               $(BIND9_LIBDIR) -ldns-export -lisc-export $(CAPNG_LDADD)
+-dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
++dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.la $(CAPNG_LDADD) \
+                $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
  man_MANS = dhcrelay.8
  EXTRA_DIST = $(man_MANS)
-diff -up dhcp-4.2.2b1/server/dhcpd.c.capability dhcp-4.2.2b1/server/dhcpd.c
---- dhcp-4.2.2b1/server/dhcpd.c.capability     2011-07-01 15:09:06.636784192 +0200
-+++ dhcp-4.2.2b1/server/dhcpd.c        2011-07-01 15:09:06.670783841 +0200
-@@ -58,6 +58,11 @@ static const char url [] =
- #  undef group
- #endif /* PARANOIA */
-+#ifdef HAVE_LIBCAP_NG
-+#  include <cap-ng.h>
-+   int keep_capabilities = 0;
-+#endif
-+
- static void usage(void);
- struct iaddr server_identifier;
-@@ -403,6 +408,10 @@ main(int argc, char **argv) {
-                       traceinfile = argv [i];
-                       trace_replay_init ();
- #endif /* TRACING */
-+              } else if (!strcmp(argv[i], "-nc")) {
-+#ifdef HAVE_LIBCAP_NG
-+                      keep_capabilities = 1;
-+#endif
-               } else if (argv [i][0] == '-') {
-                       usage ();
-               } else {
-@@ -459,6 +468,17 @@ main(int argc, char **argv) {
-         }
- #endif /* DHCPv6 */
-+#ifdef HAVE_LIBCAP_NG
-+      /* Drop capabilities */
-+      if (!keep_capabilities) {
-+              capng_clear(CAPNG_SELECT_BOTH);
-+              capng_updatev(CAPNG_ADD, CAPNG_EFFECTIVE|CAPNG_PERMITTED,
-+                              CAP_NET_RAW, CAP_NET_BIND_SERVICE, CAP_SYS_CHROOT, CAP_SETUID, CAP_SETGID, -1);
-+              capng_apply(CAPNG_SELECT_BOTH);
-+              log_info ("Dropped all unnecessary capabilities.");
-+      }
-+#endif
-+
-         /*
-          * convert relative path names to absolute, for files that need
-          * to be reopened after chdir() has been called
-@@ -859,6 +879,15 @@ main(int argc, char **argv) {
-       omapi_set_int_value ((omapi_object_t *)dhcp_control_object,
-                            (omapi_object_t *)0, "state", server_running);
-+#ifdef HAVE_LIBCAP_NG
-+      /* Drop all capabilities */
-+      if (!keep_capabilities) {
-+              capng_clear(CAPNG_SELECT_BOTH);
-+              capng_apply(CAPNG_SELECT_BOTH);
-+              log_info ("Dropped all capabilities.");
-+      }
-+#endif
-+
-       /* Receive packets and dispatch them... */
-       dispatch ();
-diff -up dhcp-4.2.2b1/server/Makefile.am.capability dhcp-4.2.2b1/server/Makefile.am
---- dhcp-4.2.2b1/server/Makefile.am.capability 2011-07-01 15:09:06.546785121 +0200
-+++ dhcp-4.2.2b1/server/Makefile.am    2011-07-01 15:09:06.671783830 +0200
-@@ -8,7 +8,8 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
- dhcpd_CFLAGS = $(LDAP_CFLAGS)
- dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
--            ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export
-+            ../dhcpctl/libdhcpctl.a $(BIND9_LIBDIR) -ldns-export -lisc-export \
-+            $(CAPNG_LDADD)
- man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
- EXTRA_DIST = $(man_MANS)
similarity index 81%
rename from src/patches/dhcp-4.2.0-default-requested-options.patch
rename to src/patches/dhcp/dhcp-default-requested-options.patch
index fea8a4b99c02e55f64353a1e41f28e491054a2d0..afda222e657bc8fc070c58bfb40be16304ac3751 100644 (file)
@@ -1,6 +1,6 @@
-diff -up dhcp-4.2.0/client/clparse.c.requested dhcp-4.2.0/client/clparse.c
---- dhcp-4.2.0/client/clparse.c.requested      2010-07-21 13:29:05.000000000 +0200
-+++ dhcp-4.2.0/client/clparse.c        2010-07-21 13:50:29.000000000 +0200
+diff -up dhcp-4.3.0a1/client/clparse.c.requested dhcp-4.3.0a1/client/clparse.c
+--- dhcp-4.3.0a1/client/clparse.c.requested    2013-12-19 15:13:27.276631307 +0100
++++ dhcp-4.3.0a1/client/clparse.c      2013-12-19 15:13:27.313630789 +0100
 @@ -37,7 +37,7 @@
  
  struct client_config top_level_config;
@@ -10,7 +10,7 @@ diff -up dhcp-4.2.0/client/clparse.c.requested dhcp-4.2.0/client/clparse.c
  struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
  
  static void parse_client_default_duid(struct parse *cfile);
-@@ -111,6 +111,31 @@ isc_result_t read_client_conf ()
+@@ -119,6 +119,31 @@ isc_result_t read_client_conf ()
        option_code_hash_lookup(&default_requested_options[8],
                                dhcpv6_universe.code_hash, &code, 0, MDL);
  
similarity index 58%
rename from src/patches/dhcp-4.2.0-dhclient-decline-backoff.patch
rename to src/patches/dhcp/dhcp-dhclient-decline-backoff.patch
index 81bec7bd4757506c6e77231c8aef0e9bb6fbd0e0..3e52e6400e3a27dcb0c39fd9c6b8aa5660341390 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.0/client/dhclient.c.backoff dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.backoff       2010-07-21 13:37:03.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c       2010-07-21 13:38:31.000000000 +0200
-@@ -1208,6 +1208,8 @@ void state_init (cpp)
+diff -up dhcp-4.3.1b1/client/dhclient.c.JwFUZj dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.JwFUZj      2014-07-10 17:38:50.511265091 +0200
++++ dhcp-4.3.1b1/client/dhclient.c     2014-07-10 17:39:16.164901267 +0200
+@@ -1281,6 +1281,8 @@ void state_init (cpp)
        void *cpp;
  {
        struct client_state *client = cpp;
@@ -10,7 +10,7 @@ diff -up dhcp-4.2.0/client/dhclient.c.backoff dhcp-4.2.0/client/dhclient.c
  
        ASSERT_STATE(state, S_INIT);
  
-@@ -1220,9 +1222,18 @@ void state_init (cpp)
+@@ -1293,9 +1295,18 @@ void state_init (cpp)
        client -> first_sending = cur_time;
        client -> interval = client -> config -> initial_interval;
  
@@ -32,15 +32,15 @@ diff -up dhcp-4.2.0/client/dhclient.c.backoff dhcp-4.2.0/client/dhclient.c
  }
  
  /*
-@@ -1501,6 +1512,7 @@ void bind_lease (client)
-               send_decline (client);
-               destroy_client_lease (client -> new);
-               client -> new = (struct client_lease *)0;
-+              client -> state = S_DECLINED;
-               state_init (client);
-               return;
-       }
-@@ -3711,6 +3723,7 @@ void client_location_changed ()
+@@ -1592,6 +1603,7 @@ void bind_lease (client)
+                                        "try (declined).  Exiting.");
+                       exit(2);
+               } else {
++                      client -> state = S_DECLINED;
+                       state_init(client);
+                       return;
+               }
+@@ -4059,6 +4071,7 @@ void client_location_changed ()
                              case S_INIT:
                              case S_REBINDING:
                              case S_STOPPED:
@@ -48,10 +48,10 @@ diff -up dhcp-4.2.0/client/dhclient.c.backoff dhcp-4.2.0/client/dhclient.c
                                break;
                        }
                        client -> state = S_INIT;
-diff -up dhcp-4.2.0/includes/dhcpd.h.backoff dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.backoff        2010-07-21 13:29:05.000000000 +0200
-+++ dhcp-4.2.0/includes/dhcpd.h        2010-07-21 13:38:31.000000000 +0200
-@@ -1056,7 +1056,8 @@ enum dhcp_state {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.JwFUZj dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.JwFUZj       2014-07-10 17:38:26.941599360 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h      2014-07-10 17:38:50.526264878 +0200
+@@ -1087,7 +1087,8 @@ enum dhcp_state {
        S_BOUND = 5,
        S_RENEWING = 6,
        S_REBINDING = 7,
similarity index 65%
rename from src/patches/dhcp-4.2.2-options.patch
rename to src/patches/dhcp/dhcp-dhclient-options.patch
index 32e2add7762706ccace98806e5d95acff645b0a4..67f144ecb7c30547949d76a325443fe1308b2ae8 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.2b1/client/clparse.c.options dhcp-4.2.2b1/client/clparse.c
---- dhcp-4.2.2b1/client/clparse.c.options      2011-04-21 16:08:14.000000000 +0200
-+++ dhcp-4.2.2b1/client/clparse.c      2011-07-01 13:51:52.935755570 +0200
-@@ -146,6 +146,7 @@ isc_result_t read_client_conf ()
+diff -up dhcp-4.3.1b1/client/clparse.c.fLPqYB dhcp-4.3.1b1/client/clparse.c
+--- dhcp-4.3.1b1/client/clparse.c.fLPqYB       2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/clparse.c      2014-07-10 17:38:26.938599402 +0200
+@@ -148,6 +148,7 @@ isc_result_t read_client_conf ()
        /* Requested lease time, used by DHCPv6 (DHCPv4 uses the option cache)
         */
        top_level_config.requested_lease = 7200;
@@ -9,7 +9,7 @@ diff -up dhcp-4.2.2b1/client/clparse.c.options dhcp-4.2.2b1/client/clparse.c
  
        group_allocate (&top_level_config.on_receipt, MDL);
        if (!top_level_config.on_receipt)
-@@ -313,7 +314,8 @@ void read_client_leases ()
+@@ -353,7 +354,8 @@ void read_client_leases ()
        interface-declaration |
        LEASE client-lease-statement |
        ALIAS client-lease-statement |
@@ -19,7 +19,7 @@ diff -up dhcp-4.2.2b1/client/clparse.c.options dhcp-4.2.2b1/client/clparse.c
  
  void parse_client_statement (cfile, ip, config)
        struct parse *cfile;
-@@ -732,6 +734,12 @@ void parse_client_statement (cfile, ip, 
+@@ -771,6 +773,12 @@ void parse_client_statement (cfile, ip,
                parse_reject_statement (cfile, config);
                return;
  
@@ -32,9 +32,116 @@ diff -up dhcp-4.2.2b1/client/clparse.c.options dhcp-4.2.2b1/client/clparse.c
              default:
                lose = 0;
                stmt = (struct executable_statement *)0;
-diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
---- dhcp-4.2.2b1/client/dhclient.c.options     2011-05-11 16:20:59.000000000 +0200
-+++ dhcp-4.2.2b1/client/dhclient.c     2011-07-01 13:51:52.936755545 +0200
+diff -up dhcp-4.3.1b1/client/dhclient.8.fLPqYB dhcp-4.3.1b1/client/dhclient.8
+--- dhcp-4.3.1b1/client/dhclient.8.fLPqYB      2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/dhclient.8     2014-07-10 17:38:26.938599402 +0200
+@@ -128,6 +128,33 @@ dhclient - Dynamic Host Configuration Pr
+ .B -w
+ ]
+ [
++.B -B
++]
++[
++.B -C
++.I dhcp-client-identifier
++]
++[
++.B -H
++.I host-name
++]
++[
++.B -F
++.I fqdn.fqdn
++]
++[
++.B -V
++.I vendor-class-identifier
++]
++[
++.B -R
++.I request-option-list
++]
++[
++.B -timeout
++.I timeout
++]
++[
+ .B -v
+ ]
+ [
+@@ -275,6 +302,69 @@ not to exit when it doesn't find any suc
+ program can then be used to notify the client when a network interface
+ has been added or removed, so that the client can attempt to configure an IP
+ address on that interface.
++
++.TP
++.BI \-B
++Set the BOOTP broadcast flag in request packets so servers will always
++broadcast replies.
++
++.TP
++.BI \-C\ <dhcp-client-identifier>
++Specify the dhcp-client-identifier option to send to the DHCP server.
++
++.TP
++.BI \-H\ <host-name>
++Specify the host-name option to send to the DHCP server.  The host-name
++string only contains the client's hostname prefix, to which the server will
++append the ddns-domainname or domain-name options, if any, to derive the
++fully qualified domain name of the client.  The
++.B -H
++option cannot be used with the
++.B -F
++option.
++
++.TP
++.BI \-F\ <fqdn.fqdn>
++Specify the fqdn.fqdn option to send to the DHCP server.  This option cannot
++be used with the
++.B -H
++option.  The fqdn.fqdn option must specify the complete domain name of the
++client host, which the server may use for dynamic DNS updates.
++
++.TP
++.BI \-V\ <vendor-class-identifier>
++Specify the vendor-class-identifier option to send to the DHCP server.
++
++.TP
++.BI \-R\ <option>[,<option>...]
++Specify the list of options the client is to request from the server.  The
++option list must be a single string consisting of option names separated
++by at least one command and optional space characters.  The default option
++list is:
++
++.BR
++    subnet-mask, broadcast-address, time-offset, routers,
++.BR
++    domain-search, domain-name, domain-name-servers, host-name, 
++.BR
++    nis-domain, nis-servers, ntp-servers, interface-mtu
++
++.TP
++.B -R
++option does not append options to the default request, it overrides the
++default request list.  Keep this in mind if you want to request an
++additional option besides the default request list.  You will have to
++specify all option names for the
++.B -R
++parameter.
++
++.TP
++.BI \-timeout\ <timeout>
++Specify the time after which
++.B dhclient
++will decide that no DHCP servers can be contacted when no responses have been
++received.
++
+ .TP
+ .BI \-n
+ Do not configure any interfaces.  This is most likely to be useful in
+diff -up dhcp-4.3.1b1/client/dhclient.c.fLPqYB dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.fLPqYB      2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/dhclient.c     2014-07-10 17:38:44.520350055 +0200
 @@ -39,6 +39,12 @@
  #include <limits.h>
  #include <dns/result.h>
@@ -48,17 +155,17 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
  TIME default_lease_time = 43200; /* 12 hours... */
  TIME max_lease_time = 86400; /* 24 hours... */
  
-@@ -87,6 +93,9 @@ int wanted_ia_na = -1;               /* the absolute 
+@@ -88,6 +94,9 @@ int wanted_ia_na = -1;               /* the absolute
  int wanted_ia_ta = 0;
  int wanted_ia_pd = 0;
  char *mockup_relay = NULL;
 +int bootp_broadcast_always = 0;
 +
-+extern u_int32_t default_requested_options[];
++extern struct option *default_requested_options[];
  
  void run_stateless(int exit_mode);
  
-@@ -123,6 +132,15 @@ main(int argc, char **argv) {
+@@ -125,6 +134,15 @@ main(int argc, char **argv) {
        int local_family_set = 0;
  #endif /* DHCPv6 */
        char *s;
@@ -74,18 +181,18 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
  
        /* Initialize client globals. */
        memset(&default_duid, 0, sizeof(default_duid));
-@@ -310,6 +328,88 @@ main(int argc, char **argv) {
-               } else if (!strcmp(argv[i], "--version")) {
-                       log_info("isc-dhclient-%s", PACKAGE_VERSION);
+@@ -325,6 +343,88 @@ main(int argc, char **argv) {
+                                        strlen(PACKAGE_VERSION)));
+                       IGNORE_RET(write(STDERR_FILENO, "\n", 1));
                        exit(0);
-+              } else if (!strcmp(argv[i], "-I")) {
++              } else if (!strcmp(argv[i], "-C")) {
 +                      if ((++i == argc) || (argv[i] == NULL) || (*(argv[i])=='\0')) {
 +                              usage();
 +                              exit(1);
 +                      }
 +
 +                      if (strlen(argv[i]) >= DHCP_MAX_OPTION_LEN) {
-+                              log_error("-I option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
++                              log_error("-C option dhcp-client-identifier string \"%s\" is too long - maximum length is: %d", argv[i], DHCP_MAX_OPTION_LEN-1);
 +                              exit(1);
 +                      }
 +
@@ -138,7 +245,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
 +                      }
 +
 +                      if ((timeout_arg = atoi(argv[i])) <= 0) {
-+                              log_error("-T timeout option must be > 0 - bad value: %s",argv[i]);
++                              log_error("timeout option must be > 0 - bad value: %s",argv[i]);
 +                              exit(1);
 +                      }
 +              } else if (!strcmp(argv[i], "-V")) {
@@ -163,7 +270,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
                } else if (argv[i][0] == '-') {
                    usage();
                } else if (interfaces_requested < 0) {
-@@ -484,6 +584,166 @@ main(int argc, char **argv) {
+@@ -507,6 +607,156 @@ main(int argc, char **argv) {
        /* Parse the dhclient.conf file. */
        read_client_conf();
  
@@ -172,7 +279,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
 +              arg_conf_len = asprintf(&arg_conf, "send dhcp-client-identifier \"%s\";", dhcp_client_identifier_arg);
 +
 +              if ((arg_conf == 0) || (arg_conf_len <= 0))
-+                      log_fatal("Unable to send -I option dhcp-client-identifier");
++                      log_fatal("Unable to send -C option dhcp-client-identifier");
 +      }
 +
 +      if ((dhcp_host_name_arg != NULL) && (*dhcp_host_name_arg != '\0')) {
@@ -269,7 +376,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
 +              if (arg_conf_len == 0)
 +                      if ((arg_conf_len = strlen(arg_conf)) == 0)
 +                              /* huh ? cannot happen ! */
-+                              log_fatal("Unable to process -I/-H/-F/-timeout/-V/-R configuration arguments");
++                              log_fatal("Unable to process -C/-H/-F/-timeout/-V/-R configuration arguments");
 +
 +              /* parse the extra dhclient.conf configuration arguments
 +               * into top level config: */
@@ -277,10 +384,10 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
 +              const char *val = NULL;
 +              int token;
 +
-+              status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -I/-H/-F/-timeout/-V/-R configuration arguments", 0);
++              status = new_parse(&cfile, -1, arg_conf, arg_conf_len, "extra dhclient -C/-H/-F/-timeout/-V/-R configuration arguments", 0);
 +
 +              if ((status != ISC_R_SUCCESS) || (cfile -> warnings_occurred))
-+                      log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
++                      log_fatal("Cannot parse -C/-H/-F/-timeout/-V/-R configuration arguments !");
 +              /* more detailed parse failures will be logged */
 +
 +              do {
@@ -292,26 +399,16 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
 +              } while (1);
 +
 +              if (cfile -> warnings_occurred)
-+                      log_fatal("Cannot parse -I/-H/-F/-timeout/-V/-R configuration arguments !");
++                      log_fatal("Cannot parse -C/-H/-F/-timeout/-V/-R configuration arguments !");
 +              end_parse(&cfile);
 +
 +              if (timeout_arg) {
 +                      /* we just set the toplevel timeout, but per-client
-+                       * timeouts may still be at defaults. Also, it makes no
-+                       * sense having the reboot_timeout or backoff_cutoff
-+                       * greater than the timeout:
++                       * timeouts may still be at defaults.
 +                       */
-+                      if ((top_level_config.backoff_cutoff == 15) && (top_level_config.backoff_cutoff > (timeout_arg / 2)))
-+                              top_level_config.backoff_cutoff = (((unsigned long)(timeout_arg / 2)) == 0) ? timeout_arg : (unsigned long)(timeout_arg / 2);
-+
 +                      for (ip=interfaces; ip; ip = ip->next) {
 +                              if (ip->client->config->timeout == 60)
 +                                      ip->client->config->timeout = timeout_arg;
-+
-+                              if ((ip->client->config->reboot_timeout == 10) && (ip->client->config->reboot_timeout > ip->client->config->timeout))
-+                                      ip->client->config->reboot_timeout = ip->client->config->timeout;
-+                              if ((ip->client->config->backoff_cutoff == 15) && (ip->client->config->backoff_cutoff > top_level_config.backoff_cutoff))
-+                                      ip->client->config->backoff_cutoff = top_level_config.backoff_cutoff;
 +                      }
 +              }
 +
@@ -330,7 +427,18 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
        /* Parse the lease database. */
        read_client_leases();
  
-@@ -2397,7 +2657,8 @@ void make_discover (client, lease)
+@@ -756,6 +1006,10 @@ static void usage()
+                 "                [-s server-addr] [-cf config-file]\n"
+                 "                [-df duid-file] [-lf lease-file]\n"
+                 "                [-pf pid-file] [--no-pid] [-e VAR=val]\n"
++                "                [-C <dhcp-client-identifier>] [-B]\n"
++                "                [-H <host-name> | -F <fqdn.fqdn>] [-timeout <timeout>]\n"
++                "                [-V <vendor-class-identifier>]\n"
++                "                [-R <request option list>]\n"
+                 "                [-sf script-file] [interface]");
+ }
+@@ -2531,7 +2785,8 @@ void make_discover (client, lease)
        client -> packet.xid = random ();
        client -> packet.secs = 0; /* filled in by send_discover. */
  
@@ -340,7 +448,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
                client -> packet.flags = 0;
        else
                client -> packet.flags = htons (BOOTP_BROADCAST);
-@@ -2481,7 +2742,9 @@ void make_request (client, lease)
+@@ -2615,7 +2870,9 @@ void make_request (client, lease)
        } else {
                memset (&client -> packet.ciaddr, 0,
                        sizeof client -> packet.ciaddr);
@@ -351,7 +459,7 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
                        client -> packet.flags = 0;
                else
                        client -> packet.flags = htons (BOOTP_BROADCAST);
-@@ -2543,7 +2806,8 @@ void make_decline (client, lease)
+@@ -2677,7 +2934,8 @@ void make_decline (client, lease)
        client -> packet.hops = 0;
        client -> packet.xid = client -> xid;
        client -> packet.secs = 0; /* Filled in by send_request. */
@@ -361,10 +469,10 @@ diff -up dhcp-4.2.2b1/client/dhclient.c.options dhcp-4.2.2b1/client/dhclient.c
                client -> packet.flags = 0;
        else
                client -> packet.flags = htons (BOOTP_BROADCAST);
-diff -up dhcp-4.2.2b1/common/conflex.c.options dhcp-4.2.2b1/common/conflex.c
---- dhcp-4.2.2b1/common/conflex.c.options      2011-05-11 16:20:59.000000000 +0200
-+++ dhcp-4.2.2b1/common/conflex.c      2011-07-01 13:51:52.938755494 +0200
-@@ -808,6 +808,8 @@ intern(char *atom, enum dhcp_token dfv) 
+diff -up dhcp-4.3.1b1/common/conflex.c.fLPqYB dhcp-4.3.1b1/common/conflex.c
+--- dhcp-4.3.1b1/common/conflex.c.fLPqYB       2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/common/conflex.c      2014-07-10 17:38:26.940599374 +0200
+@@ -811,6 +811,8 @@ intern(char *atom, enum dhcp_token dfv)
                        return BALANCE;
                if (!strcasecmp (atom + 1, "ound"))
                        return BOUND;
@@ -373,10 +481,10 @@ diff -up dhcp-4.2.2b1/common/conflex.c.options dhcp-4.2.2b1/common/conflex.c
                break;
              case 'c':
                if (!strcasecmp(atom + 1, "ase"))
-diff -up dhcp-4.2.2b1/includes/dhcpd.h.options dhcp-4.2.2b1/includes/dhcpd.h
---- dhcp-4.2.2b1/includes/dhcpd.h.options      2011-05-20 16:21:11.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhcpd.h      2011-07-01 13:51:52.940755442 +0200
-@@ -1147,6 +1147,9 @@ struct client_config {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.fLPqYB dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.fLPqYB       2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h      2014-07-10 17:38:26.941599360 +0200
+@@ -1152,6 +1152,9 @@ struct client_config {
        int do_forward_update;          /* If nonzero, and if we have the
                                           information we need, update the
                                           A record for the address we get. */
@@ -386,16 +494,16 @@ diff -up dhcp-4.2.2b1/includes/dhcpd.h.options dhcp-4.2.2b1/includes/dhcpd.h
  };
  
  /* Per-interface state used in the dhcp client... */
-diff -up dhcp-4.2.2b1/includes/dhctoken.h.options dhcp-4.2.2b1/includes/dhctoken.h
---- dhcp-4.2.2b1/includes/dhctoken.h.options   2011-05-12 14:02:47.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhctoken.h   2011-07-01 13:53:43.316861637 +0200
-@@ -361,7 +361,8 @@ enum dhcp_token {
-       GETHOSTNAME = 662,
-       REWIND = 663,
-       INITIAL_DELAY = 664,
--      GETHOSTBYNAME = 665
-+      GETHOSTBYNAME = 665,
-+      BOOTP_BROADCAST_ALWAYS = 666
+diff -up dhcp-4.3.1b1/includes/dhctoken.h.fLPqYB dhcp-4.3.1b1/includes/dhctoken.h
+--- dhcp-4.3.1b1/includes/dhctoken.h.fLPqYB    2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/includes/dhctoken.h   2014-07-10 17:38:26.942599346 +0200
+@@ -367,7 +367,8 @@ enum dhcp_token {
+       TOKEN_INFINIBAND = 668,
+       POOL6 = 669,
+       V6RELAY = 670,
+-      V6RELOPT = 671
++      V6RELOPT = 671,
++      BOOTP_BROADCAST_ALWAYS = 672
  };
  
  #define is_identifier(x)      ((x) >= FIRST_TOKEN &&  \
diff --git a/src/patches/dhcp/dhcp-errwarn-message.patch b/src/patches/dhcp/dhcp-errwarn-message.patch
new file mode 100644 (file)
index 0000000..a65c2c2
--- /dev/null
@@ -0,0 +1,22 @@
+diff -up dhcp-4.3.0b1/omapip/errwarn.c.errwarn dhcp-4.3.0b1/omapip/errwarn.c
+--- dhcp-4.3.0b1/omapip/errwarn.c.errwarn      2014-01-21 09:31:47.301334249 +0100
++++ dhcp-4.3.0b1/omapip/errwarn.c      2014-01-21 09:33:20.569039072 +0100
+@@ -76,11 +76,13 @@ void log_fatal (const char * fmt, ... )
+   }
+   log_error ("%s", "");
+-  log_error ("If you think you have received this message due to a bug rather");
+-  log_error ("than a configuration issue please read the section on submitting");
+-  log_error ("bugs on either our web page at www.isc.org or in the README file");
+-  log_error ("before submitting a bug.  These pages explain the proper");
+-  log_error ("process and the information we find helpful for debugging..");
++  log_error ("This version of ISC DHCP is based on the release available");
++  log_error ("on ftp.isc.org.  Features have been added and other changes");
++  log_error ("have been made to the base software release in order to make");
++  log_error ("it work better with this distribution.");
++  log_error ("%s", "");
++  log_error ("Please report for this software via the Red Hat Bugzilla site:");
++  log_error ("    http://bugzilla.redhat.com");
+   log_error ("%s", "");
+   log_error ("exiting.");
diff --git a/src/patches/dhcp/dhcp-garbage-chars.patch b/src/patches/dhcp/dhcp-garbage-chars.patch
new file mode 100644 (file)
index 0000000..131360b
--- /dev/null
@@ -0,0 +1,12 @@
+diff -up dhcp-4.3.0rc1/common/tables.c.garbage dhcp-4.3.0rc1/common/tables.c
+--- dhcp-4.3.0rc1/common/tables.c.garbage      2014-01-29 10:03:52.132624677 +0100
++++ dhcp-4.3.0rc1/common/tables.c      2014-01-29 10:04:51.413875343 +0100
+@@ -213,7 +213,7 @@ static struct option dhcp_options[] = {
+       { "name-service-search", "Sa",          &dhcp_universe, 117, 1 },
+ #endif
+       { "subnet-selection", "I",              &dhcp_universe, 118, 1 },
+-      { "domain-search", "Dc",                &dhcp_universe, 119, 1 },
++      { "domain-search", "D",                 &dhcp_universe, 119, 1 },
+       { "vivco", "Evendor-class.",            &dhcp_universe, 124, 1 },
+       { "vivso", "Evendor.",                  &dhcp_universe, 125, 1 },
+ #if 0
similarity index 50%
rename from src/patches/dhcp-4.2.2-gpxe-cid.patch
rename to src/patches/dhcp/dhcp-gpxe-cid.patch
index c0be4c2396acedd815544d296146804b1b08ce7f..c8c2b84f97a80196725ff7a47e1c5d8ab082b238 100644 (file)
@@ -1,10 +1,11 @@
-diff -up dhcp-4.2.2/client/dhclient.c.gpxe-cid dhcp-4.2.2/client/dhclient.c
---- dhcp-4.2.2/client/dhclient.c.gpxe-cid      2011-09-16 18:23:20.190453902 +0200
-+++ dhcp-4.2.2/client/dhclient.c       2011-09-16 18:27:15.568463599 +0200
-@@ -58,6 +58,13 @@ const char *path_dhclient_pid = NULL;
+diff -up dhcp-4.3.0a1/client/dhclient.c.gpxe-cid dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.gpxe-cid    2013-12-20 13:28:45.105048317 +0100
++++ dhcp-4.3.0a1/client/dhclient.c     2013-12-20 13:28:45.109048261 +0100
+@@ -47,6 +47,14 @@
+ const char *path_dhclient_pid = NULL;
  static char path_dhclient_script_array[] = _PATH_DHCLIENT_SCRIPT;
  char *path_dhclient_script = path_dhclient_script_array;
++
 +/* Default Prefix */
 +static unsigned char default_prefix[12] = {
 +      0xff, 0x00, 0x00, 0x00,
@@ -12,10 +13,10 @@ diff -up dhcp-4.2.2/client/dhclient.c.gpxe-cid dhcp-4.2.2/client/dhclient.c
 +      0x00, 0x02, 0xc9, 0x00
 +};
 +
- /* False (default) => we write and use a pid file */
- isc_boolean_t no_pid_file = ISC_FALSE;
+ const char *path_dhclient_duid = NULL;
  
-@@ -1250,6 +1257,12 @@ int find_subnet (struct subnet **sp,
+ /* False (default) => we write and use a pid file */
+@@ -1253,6 +1260,12 @@ int find_subnet (struct subnet **sp,
  static void setup_ib_interface(struct interface_info *ip)
  {
        struct group *g;
@@ -28,7 +29,7 @@ diff -up dhcp-4.2.2/client/dhclient.c.gpxe-cid dhcp-4.2.2/client/dhclient.c
  
        /* Set the broadcast flag */
        ip->client->config->bootp_broadcast_always = 1;
-@@ -1266,8 +1279,39 @@ static void setup_ib_interface(struct in
+@@ -1269,8 +1282,39 @@ static void setup_ib_interface(struct in
                }
        }
  
@@ -70,63 +71,3 @@ diff -up dhcp-4.2.2/client/dhclient.c.gpxe-cid dhcp-4.2.2/client/dhclient.c
  }
  
  /* Individual States:
-diff -up dhcp-4.2.2/common/lpf.c.gpxe-cid dhcp-4.2.2/common/lpf.c
---- dhcp-4.2.2/common/lpf.c.gpxe-cid   2011-09-16 18:23:20.183453996 +0200
-+++ dhcp-4.2.2/common/lpf.c    2011-09-16 18:25:28.235804421 +0200
-@@ -591,6 +591,37 @@ void maybe_setup_fallback ()
-       }
- }
-+static unsigned char * get_ib_hw_addr(char * name)
-+{
-+      struct ifaddrs *ifaddrs;
-+      struct ifaddrs *ifa;
-+      struct sockaddr_ll *sll = NULL;
-+      static unsigned char hw_addr[8];
-+
-+      if (getifaddrs(&ifaddrs) == -1)
-+              return NULL;
-+
-+      for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
-+              if (ifa->ifa_addr == NULL)
-+                      continue;
-+              if (ifa->ifa_addr->sa_family != AF_PACKET)
-+                      continue;
-+              if (ifa->ifa_flags & IFF_LOOPBACK)
-+                      continue;
-+              if (strcmp(ifa->ifa_name, name) == 0) {
-+                      sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr;
-+                      break;
-+              }
-+      }
-+      if (sll == NULL) {
-+              freeifaddrs(ifaddrs);
-+              return NULL;
-+      }
-+      memcpy(hw_addr, &sll->sll_addr[sll->sll_halen - 8], 8);
-+      freeifaddrs(ifaddrs);
-+      return (unsigned char *)&hw_addr;
-+}
-+
- void
- get_hw_addr(struct interface_info *info)
- {
-@@ -599,6 +630,7 @@ get_hw_addr(struct interface_info *info)
-       struct ifaddrs *ifaddrs;
-       struct ifaddrs *ifa;
-       struct sockaddr_ll *sll = NULL;
-+      unsigned char *hw_addr;
-       if (getifaddrs(&ifaddrs) == -1)
-               log_fatal("Failed to get interfaces");
-@@ -660,6 +692,10 @@ get_hw_addr(struct interface_info *info)
-                       hw->hlen = 1;
-                       hw->hbuf[0] = HTYPE_INFINIBAND;
-+                      hw_addr = get_ib_hw_addr(name);
-+                      if (!hw_addr)
-+                              log_fatal("Failed getting %s hw addr", name);
-+                      memcpy (&hw->hbuf [1], hw_addr, 8);
-                       break;
- #if defined(ARPHRD_PPP)
-               case ARPHRD_PPP:
similarity index 77%
rename from src/patches/dhcp-4.2.0-honor-expired.patch
rename to src/patches/dhcp/dhcp-honor-expired.patch
index 0ae9128481f42b9d9e0935f727fe37b16dc1c4a0..bd892975be1baa06e52b16f9293e978e2d4c9f53 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.0/client/dhc6.c.honor-expired dhcp-4.2.0/client/dhc6.c
---- dhcp-4.2.0/client/dhc6.c.honor-expired     2010-10-07 12:55:37.000000000 +0200
-+++ dhcp-4.2.0/client/dhc6.c   2010-10-07 12:56:43.000000000 +0200
-@@ -1405,6 +1405,32 @@ start_info_request6(struct client_state 
+diff -up dhcp-4.3.0a1/client/dhc6.c.honor-expired dhcp-4.3.0a1/client/dhc6.c
+--- dhcp-4.3.0a1/client/dhc6.c.honor-expired   2013-12-19 16:00:28.062183037 +0100
++++ dhcp-4.3.0a1/client/dhc6.c 2013-12-19 16:00:28.076182842 +0100
+@@ -1351,6 +1351,32 @@ start_info_request6(struct client_state
                go_daemon();
  }
  
@@ -34,7 +34,7 @@ diff -up dhcp-4.2.0/client/dhc6.c.honor-expired dhcp-4.2.0/client/dhc6.c
  /*
   * start_confirm6() kicks off an "init-reboot" version of the process, at
   * startup to find out if old bindings are 'fair' and at runtime whenever
-@@ -1417,8 +1446,10 @@ start_confirm6(struct client_state *clie
+@@ -1363,8 +1389,10 @@ start_confirm6(struct client_state *clie
  
        /* If there is no active lease, there is nothing to check. */
        if ((client->active_lease == NULL) ||
similarity index 78%
rename from src/patches/dhcp-4.2.2-improved-xid.patch
rename to src/patches/dhcp/dhcp-improved-xid.patch
index f49fc7845967ebe20a64e6dbc9d4191ddd9e2baf..eccff49875fba59d1514b4ba8236644d37df4bea 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
---- dhcp-4.2.2/client/dhclient.c.improved-xid  2011-09-16 18:18:00.649730661 +0200
-+++ dhcp-4.2.2/client/dhclient.c       2011-09-16 18:22:36.815035513 +0200
-@@ -898,6 +898,26 @@ main(int argc, char **argv) {
+diff -up dhcp-4.3.0a1/client/dhclient.c.improved-xid dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.improved-xid        2013-12-20 13:29:41.836260810 +0100
++++ dhcp-4.3.0a1/client/dhclient.c     2013-12-20 13:29:41.843260713 +0100
+@@ -894,6 +894,26 @@ main(int argc, char **argv) {
                }
        }
  
@@ -28,7 +28,7 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
        /* At this point, all the interfaces that the script thinks
           are relevant should be running, so now we once again call
           discover_interfaces(), and this time ask it to actually set
-@@ -912,14 +932,36 @@ main(int argc, char **argv) {
+@@ -908,14 +928,36 @@ main(int argc, char **argv) {
           Not much entropy, but we're booting, so we're not likely to
           find anything better. */
        seed = 0;
@@ -66,7 +66,7 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
  
        /* Setup specific Infiniband options */
        for (ip = interfaces; ip; ip = ip->next) {
-@@ -1457,7 +1499,7 @@ void dhcpack (packet)
+@@ -1460,7 +1502,7 @@ void dhcpack (packet)
                return;
        }
  
@@ -75,7 +75,7 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
  
        lease = packet_to_lease (packet, client);
        if (!lease) {
-@@ -2174,7 +2216,7 @@ void dhcpnak (packet)
+@@ -2171,7 +2213,7 @@ void dhcpnak (packet)
                return;
        }
  
@@ -84,7 +84,7 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
  
        if (!client -> active) {
  #if defined (DEBUG)
-@@ -2300,10 +2342,10 @@ void send_discover (cpp)
+@@ -2298,10 +2340,10 @@ void send_discover (cpp)
                client -> packet.secs = htons (65535);
        client -> secs = client -> packet.secs;
  
@@ -96,8 +96,8 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
 +            ntohs (sockaddr_broadcast.sin_port), (long)(client -> interval), client -> xid);
  
        /* Send out a packet. */
-       result = send_packet (client -> interface, (struct packet *)0,
-@@ -2584,10 +2626,10 @@ void send_request (cpp)
+       result = send_packet(client->interface, NULL, &client->packet,
+@@ -2570,10 +2612,10 @@ void send_request (cpp)
                        client -> packet.secs = htons (65535);
        }
  
@@ -109,21 +109,21 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
 +            ntohs (destination.sin_port), client -> xid);
  
        if (destination.sin_addr.s_addr != INADDR_BROADCAST &&
-           fallback_interface)
-@@ -2618,10 +2660,10 @@ void send_decline (cpp)
+           fallback_interface) {
+@@ -2613,10 +2655,10 @@ void send_decline (cpp)
  
        int result;
  
 -      log_info ("DHCPDECLINE on %s to %s port %d",
 +      log_info ("DHCPDECLINE on %s to %s port %d (xid=0x%x)",
-             client -> name ? client -> name : client -> interface -> name,
-             inet_ntoa (sockaddr_broadcast.sin_addr),
--            ntohs (sockaddr_broadcast.sin_port));
-+            ntohs (sockaddr_broadcast.sin_port), client -> xid);
+             client->name ? client->name : client->interface->name,
+             inet_ntoa(sockaddr_broadcast.sin_addr),
+-            ntohs(sockaddr_broadcast.sin_port));
++            ntohs(sockaddr_broadcast.sin_port), client -> xid);
  
        /* Send out a packet. */
-       result = send_packet (client -> interface, (struct packet *)0,
-@@ -2661,10 +2703,10 @@ void send_release (cpp)
+       result = send_packet(client->interface, NULL, &client->packet,
+@@ -2659,10 +2701,10 @@ void send_release (cpp)
                return;
        }
  
@@ -134,5 +134,5 @@ diff -up dhcp-4.2.2/client/dhclient.c.improved-xid dhcp-4.2.2/client/dhclient.c
 -            ntohs (destination.sin_port));
 +            ntohs (destination.sin_port), client -> xid);
  
-       if (fallback_interface)
-               result = send_packet (fallback_interface,
+       if (fallback_interface) {
+               result = send_packet(fallback_interface, NULL, &client->packet,
diff --git a/src/patches/dhcp/dhcp-logpid.patch b/src/patches/dhcp/dhcp-logpid.patch
new file mode 100644 (file)
index 0000000..e1a6ebd
--- /dev/null
@@ -0,0 +1,11 @@
+--- expanded_org/client/dhclient.c     Wed Aug 06 23:35:00 2014
++++ expanded_logpid/client/dhclient.c  Mon Feb 16 13:35:31 2015
+@@ -142,7 +142,7 @@
+       else if (fd != -1)
+               close(fd);
+-      openlog("dhclient", DHCP_LOG_OPTIONS, LOG_DAEMON);
++      openlog("dhclient", LOG_NDELAY | LOG_PID, LOG_DAEMON);
+ #if !(defined(DEBUG) || defined(__CYGWIN32__))
+       setlogmask(LOG_UPTO(LOG_INFO));
similarity index 67%
rename from src/patches/dhcp-4.2.2-lpf-ib.patch
rename to src/patches/dhcp/dhcp-lpf-ib.patch
index 4034028b835076d2024e66220d14bc2d8627800f..8e094d64976164c12eb0f0a9733695016ad49d56 100644 (file)
@@ -1,16 +1,16 @@
-diff -up dhcp-4.2.2/client/dhclient.c.lpf-ib dhcp-4.2.2/client/dhclient.c
---- dhcp-4.2.2/client/dhclient.c.lpf-ib        2011-09-19 11:24:08.693775799 +0200
-+++ dhcp-4.2.2/client/dhclient.c       2011-09-19 11:24:08.703775541 +0200
-@@ -113,6 +113,8 @@ static int check_domain_name_list(const 
+diff -up dhcp-4.3.1b1/client/dhclient.c.bmgpWV dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.bmgpWV      2014-07-10 17:50:26.922402550 +0200
++++ dhcp-4.3.1b1/client/dhclient.c     2014-07-10 17:53:43.629623477 +0200
+@@ -114,6 +114,8 @@ static int check_domain_name_list(const
  static int check_option_values(struct universe *universe, unsigned int opt,
                               const char *ptr, size_t len);
  
 +static void setup_ib_interface(struct interface_info *ip);
 +
+ #ifndef UNIT_TEST
  int
  main(int argc, char **argv) {
-       int fd;
-@@ -919,6 +921,14 @@ main(int argc, char **argv) {
+@@ -937,6 +939,13 @@ main(int argc, char **argv) {
        }
        srandom(seed + cur_time + (unsigned)getpid());
  
@@ -21,11 +21,10 @@ diff -up dhcp-4.2.2/client/dhclient.c.lpf-ib dhcp-4.2.2/client/dhclient.c
 +                      setup_ib_interface(ip);
 +              }
 +      }
-+
-       /* Start a configuration state machine for each interface. */
- #ifdef DHCPv6
-       if (local_family == AF_INET6) {
-@@ -1195,6 +1205,29 @@ int find_subnet (struct subnet **sp,
+       /*
+        * Establish a default DUID.  We always do so for v6 and
+@@ -1230,6 +1239,29 @@ int find_subnet (struct subnet **sp,
        return 0;
  }
  
@@ -55,10 +54,10 @@ diff -up dhcp-4.2.2/client/dhclient.c.lpf-ib dhcp-4.2.2/client/dhclient.c
  /* Individual States:
   *
   * Each routine is called from the dhclient_state_machine() in one of
-diff -up dhcp-4.2.2/common/bpf.c.lpf-ib dhcp-4.2.2/common/bpf.c
---- dhcp-4.2.2/common/bpf.c.lpf-ib     2011-09-19 11:24:08.694775773 +0200
-+++ dhcp-4.2.2/common/bpf.c    2011-09-19 11:24:08.704775516 +0200
-@@ -198,11 +198,44 @@ struct bpf_insn dhcp_bpf_filter [] = {
+diff -up dhcp-4.3.1b1/common/bpf.c.bmgpWV dhcp-4.3.1b1/common/bpf.c
+--- dhcp-4.3.1b1/common/bpf.c.bmgpWV   2014-07-10 17:48:03.797424616 +0200
++++ dhcp-4.3.1b1/common/bpf.c  2014-07-10 17:52:57.705272295 +0200
+@@ -199,11 +199,44 @@ struct bpf_insn dhcp_bpf_filter [] = {
        BPF_STMT(BPF_RET+BPF_K, 0),
  };
  
@@ -103,21 +102,15 @@ diff -up dhcp-4.2.2/common/bpf.c.lpf-ib dhcp-4.2.2/common/bpf.c
  #if defined (HAVE_TR_SUPPORT)
  struct bpf_insn dhcp_bpf_tr_filter [] = {
          /* accept all token ring packets due to variable length header */
-diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
---- dhcp-4.2.2/common/lpf.c.lpf-ib     2011-09-19 11:24:08.694775773 +0200
-+++ dhcp-4.2.2/common/lpf.c    2011-09-19 11:26:15.107109935 +0200
-@@ -42,6 +42,7 @@
- #include "includes/netinet/udp.h"
- #include "includes/netinet/if_ether.h"
+diff -up dhcp-4.3.1b1/common/lpf.c.bmgpWV dhcp-4.3.1b1/common/lpf.c
+--- dhcp-4.3.1b1/common/lpf.c.bmgpWV   2014-07-10 17:48:03.797424616 +0200
++++ dhcp-4.3.1b1/common/lpf.c  2014-07-10 17:52:57.706272281 +0200
+@@ -46,6 +46,17 @@
+ #if defined (USE_LPF_RECEIVE) || defined (USE_LPF_HWADDR)
+ #include <sys/ioctl.h>
  #include <net/if.h>
 +#include <ifaddrs.h>
- #ifndef PACKET_AUXDATA
- #define PACKET_AUXDATA 8
-@@ -59,6 +60,15 @@ struct tpacket_auxdata
- /* Reinitializes the specified interface after an address change.   This
-    is not required for packet-filter APIs. */
++
 +/* Default broadcast address for IPoIB */
 +static unsigned char default_ib_bcast_addr[20] = {
 +      0x00, 0xff, 0xff, 0xff,
@@ -127,10 +120,10 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
 +      0xff, 0xff, 0xff, 0xff
 +};
 +
- #ifdef USE_LPF_SEND
- void if_reinitialize_send (info)
-       struct interface_info *info;
-@@ -86,10 +96,21 @@ int if_register_lpf (info)
+ #endif
+ #if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
+@@ -92,10 +103,21 @@ int if_register_lpf (info)
                struct sockaddr common;
        } sa;
        struct ifreq ifr;
@@ -154,7 +147,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
                if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
                    errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
                    errno == EAFNOSUPPORT || errno == EINVAL) {
-@@ -112,6 +133,7 @@ int if_register_lpf (info)
+@@ -118,6 +140,7 @@ int if_register_lpf (info)
        /* Bind to the interface name */
        memset (&sa, 0, sizeof sa);
        sa.ll.sll_family = AF_PACKET;
@@ -162,7 +155,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
        sa.ll.sll_ifindex = ifr.ifr_ifindex;
        if (bind (sock, &sa.common, sizeof sa)) {
                if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
-@@ -127,8 +149,6 @@ int if_register_lpf (info)
+@@ -133,8 +156,6 @@ int if_register_lpf (info)
                log_fatal ("Bind socket to interface: %m");
        }
  
@@ -171,7 +164,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
        return sock;
  }
  #endif /* USE_LPF_SEND || USE_LPF_RECEIVE */
-@@ -183,6 +203,8 @@ void if_deregister_send (info)
+@@ -189,6 +210,8 @@ void if_deregister_send (info)
     in bpf includes... */
  extern struct sock_filter dhcp_bpf_filter [];
  extern int dhcp_bpf_filter_len;
@@ -180,7 +173,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
  
  #if defined (HAVE_TR_SUPPORT)
  extern struct sock_filter dhcp_bpf_tr_filter [];
-@@ -200,11 +222,13 @@ void if_register_receive (info)
+@@ -206,11 +229,13 @@ void if_register_receive (info)
        /* Open a LPF device and hang it on this interface... */
        info -> rfdesc = if_register_lpf (info);
  
@@ -199,7 +192,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
        }
  
  #if defined (HAVE_TR_SUPPORT)
-@@ -250,15 +274,28 @@ static void lpf_gen_filter_setup (info)
+@@ -256,15 +281,28 @@ static void lpf_gen_filter_setup (info)
  
        memset(&p, 0, sizeof(p));
  
@@ -237,7 +230,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
  
        if (setsockopt (info -> rfdesc, SOL_SOCKET, SO_ATTACH_FILTER, &p,
                        sizeof p) < 0) {
-@@ -315,6 +352,54 @@ static void lpf_tr_filter_setup (info)
+@@ -321,6 +359,54 @@ static void lpf_tr_filter_setup (info)
  #endif /* USE_LPF_RECEIVE */
  
  #ifdef USE_LPF_SEND
@@ -292,7 +285,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
  ssize_t send_packet (interface, packet, raw, len, from, to, hto)
        struct interface_info *interface;
        struct packet *packet;
-@@ -335,6 +420,11 @@ ssize_t send_packet (interface, packet, 
+@@ -341,6 +427,11 @@ ssize_t send_packet (interface, packet,
                return send_fallback (interface, packet, raw,
                                      len, from, to, hto);
  
@@ -304,7 +297,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
        if (hto == NULL && interface->anycast_mac_addr.hlen)
                hto = &interface->anycast_mac_addr;
  
-@@ -356,6 +446,42 @@ ssize_t send_packet (interface, packet, 
+@@ -362,6 +453,42 @@ ssize_t send_packet (interface, packet,
  #endif /* USE_LPF_SEND */
  
  #ifdef USE_LPF_RECEIVE
@@ -347,7 +340,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
  ssize_t receive_packet (interface, buf, len, from, hfrom)
        struct interface_info *interface;
        unsigned char *buf;
-@@ -382,6 +508,10 @@ ssize_t receive_packet (interface, buf, 
+@@ -388,6 +515,10 @@ ssize_t receive_packet (interface, buf,
        };
        struct cmsghdr *cmsg;
  
@@ -358,60 +351,100 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
        length = recvmsg (interface -> rfdesc, &msg, 0);
        if (length <= 0)
                return length;
-@@ -462,33 +592,44 @@ void maybe_setup_fallback ()
- }
+@@ -469,11 +600,33 @@ void maybe_setup_fallback ()
+ #endif
  
- void
+ #if defined (USE_LPF_RECEIVE) || defined (USE_LPF_HWADDR)
+-void
 -get_hw_addr(const char *name, struct hardware *hw) {
--      int sock;
--      struct ifreq tmp;
--      struct sockaddr *sa;
-+get_hw_addr(struct interface_info *info)
++struct sockaddr_ll *
++get_ll (struct ifaddrs *ifaddrs, struct ifaddrs **ifa, char *name)
 +{
-+      struct hardware *hw = &info->hw_address;
-+      char *name = info->name;
-+      struct ifaddrs *ifaddrs;
-+      struct ifaddrs *ifa;
-+      struct sockaddr_ll *sll = NULL;
--      if (strlen(name) >= sizeof(tmp.ifr_name)) {
--              log_fatal("Device name too long: \"%s\"", name);
--      }
-+      if (getifaddrs(&ifaddrs) == -1)
-+              log_fatal("Failed to get interfaces");
--      sock = socket(AF_INET, SOCK_DGRAM, 0);
--      if (sock < 0) {
--              log_fatal("Can't create socket for \"%s\": %m", name);
-+      for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
-+
-+              if (ifa->ifa_addr == NULL)
++      for (*ifa = ifaddrs; *ifa != NULL; *ifa = (*ifa)->ifa_next) {
++              if ((*ifa)->ifa_addr == NULL)
 +                      continue;
 +
-+              if (ifa->ifa_addr->sa_family != AF_PACKET)
++              if ((*ifa)->ifa_addr->sa_family != AF_PACKET)
 +                      continue;
 +
-+              if (ifa->ifa_flags & IFF_LOOPBACK)
++              if ((*ifa)->ifa_flags & IFF_LOOPBACK)
 +                      continue;
 +
-+              if (strcmp(ifa->ifa_name, name) == 0) {
-+                      sll = (struct sockaddr_ll *)(void *)ifa->ifa_addr;
-+                      break;
-+              }
-       }
++              if (strcmp((*ifa)->ifa_name, name) == 0)
++                      return (struct sockaddr_ll *)(void *)(*ifa)->ifa_addr;
++      }
++      *ifa = NULL;
++      return NULL;
++}
++
++struct sockaddr_ll *
++ioctl_get_ll(char *name)
++{
+       int sock;
+       struct ifreq tmp;
+-      struct sockaddr *sa;
++      struct sockaddr *sa = NULL;
++      struct sockaddr_ll *sll = NULL;
  
--      memset(&tmp, 0, sizeof(tmp));
--      strcpy(tmp.ifr_name, name);
--      if (ioctl(sock, SIOCGIFHWADDR, &tmp) < 0) {
+       if (strlen(name) >= sizeof(tmp.ifr_name)) {
+               log_fatal("Device name too long: \"%s\"", name);
+@@ -487,16 +640,62 @@ get_hw_addr(const char *name, struct har
+       memset(&tmp, 0, sizeof(tmp));
+       strcpy(tmp.ifr_name, name);
+       if (ioctl(sock, SIOCGIFHWADDR, &tmp) < 0) {
 -              log_fatal("Error getting hardware address for \"%s\": %m", 
--                        name);
-+      if (sll == NULL) {
-+              freeifaddrs(ifaddrs);
-+              log_fatal("Failed to get HW address for %s\n", name);
++              log_fatal("Error getting hardware address for \"%s\": %m",
+                         name);
        }
++      close(sock);
  
--      sa = &tmp.ifr_hwaddr;
+       sa = &tmp.ifr_hwaddr;
 -      switch (sa->sa_family) {
++      // needs to be freed outside this function
++      sll = dmalloc (sizeof (struct sockaddr_ll), MDL);
++      if (!sll)
++              log_fatal("Unable to allocate memory for link layer address");
++      memcpy(&sll->sll_hatype, &sa->sa_family, sizeof (sll->sll_hatype));
++      memcpy(sll->sll_addr, sa->sa_data, sizeof (sll->sll_addr));
++      switch (sll->sll_hatype) {
++              case ARPHRD_INFINIBAND:
++                      /* ioctl limits hardware addresses to 8 bytes */
++                      sll->sll_halen = 8;
++                      break;
++              default:
++                      break;
++      }
++      return sll;
++}
++
++void
++get_hw_addr(struct interface_info *info)
++{
++      struct hardware *hw = &info->hw_address;
++      char *name = info->name;
++      struct ifaddrs *ifaddrs = NULL;
++      struct ifaddrs *ifa = NULL;
++      struct sockaddr_ll *sll = NULL;
++      int sll_allocated = 0;
++      char *dup = NULL;
++      char *colon = NULL;
++
++      if (getifaddrs(&ifaddrs) == -1)
++              log_fatal("Failed to get interfaces");
++
++      if ((sll = get_ll(ifaddrs, &ifa, name)) == NULL) {
++              /*
++               * We were unable to get link-layer address for name.
++               * Fall back to ioctl(SIOCGIFHWADDR).
++               */
++              sll = ioctl_get_ll(name);
++              if (sll != NULL)
++                      sll_allocated = 1;
++              else
++                      // shouldn't happen
++                      log_fatal("Unexpected internal error");
++      }
++
 +      switch (sll->sll_hatype) {
                case ARPHRD_ETHER:
                        hw->hlen = 7;
@@ -421,7 +454,7 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
                        break;
                case ARPHRD_IEEE802:
  #ifdef ARPHRD_IEEE802_TR
-@@ -496,18 +637,35 @@ get_hw_addr(const char *name, struct har
+@@ -504,18 +703,48 @@ get_hw_addr(const char *name, struct har
  #endif /* ARPHRD_IEEE802_TR */
                        hw->hlen = 7;
                        hw->hbuf[0] = HTYPE_IEEE802;
@@ -429,16 +462,28 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
 +                      memcpy(&hw->hbuf[1], sll->sll_addr, 6);
                        break;
                case ARPHRD_FDDI:
-                       hw->hlen = 17;
+                       hw->hlen = 7;
                        hw->hbuf[0] = HTYPE_FDDI;
--                      memcpy(&hw->hbuf[1], sa->sa_data, 16);
-+                      memcpy(&hw->hbuf[1], sll->sll_addr, 16);
+-                      memcpy(&hw->hbuf[1], sa->sa_data, 6);
++                      memcpy(&hw->hbuf[1], sll->sll_addr, 6);
 +                      break;
 +              case ARPHRD_INFINIBAND:
++                      dup = strdup(name);
++                      /* Aliased infiniband interface is special case where
++                       * neither get_ll() nor ioctl_get_ll() get's correct hw
++                       * address, so we have to truncate the :0 and run
++                       * get_ll() again for the rest.
++                      */
++                      if ((colon = strchr(dup, ':')) != NULL) {
++                              *colon = '\0';
++                              if ((sll = get_ll(ifaddrs, &ifa, dup)) == NULL)
++                                      log_fatal("Error getting hardware address for \"%s\": %m", name);
++                      }
++                      free (dup);
 +                      /* For Infiniband, save the broadcast address and store
 +                       * the port GUID into the hardware address.
 +                       */
-+                      if (ifa->ifa_flags & IFF_BROADCAST) {
++                      if (ifa && (ifa->ifa_flags & IFF_BROADCAST)) {
 +                              struct sockaddr_ll *bll;
 +
 +                              bll = (struct sockaddr_ll *)ifa->ifa_broadaddr;
@@ -450,36 +495,40 @@ diff -up dhcp-4.2.2/common/lpf.c.lpf-ib dhcp-4.2.2/common/lpf.c
 +
 +                      hw->hlen = 1;
 +                      hw->hbuf[0] = HTYPE_INFINIBAND;
++                      memcpy(&hw->hbuf[1], &sll->sll_addr[sll->sll_halen - 8], 8);
                        break;
  #if defined(ARPHRD_PPP)
                case ARPHRD_PPP:
                        if (local_family != AF_INET6)
 -                              log_fatal("Unsupported device type %d for \"%s\"",
 -                                         sa->sa_family, name);
-+                              log_fatal("Unsupported device type %ld for \"%s\"",
-+                                        (long int)sll->sll_family, name);
++                              log_fatal("local_family != AF_INET6 for \"%s\"",
++                                        name);
                        hw->hlen = 0;
                        hw->hbuf[0] = HTYPE_RESERVED;
                        /* 0xdeadbeef should never occur on the wire,
-@@ -520,10 +678,11 @@ get_hw_addr(const char *name, struct har
+@@ -528,10 +757,13 @@ get_hw_addr(const char *name, struct har
                        break;
  #endif
                default:
-+                      freeifaddrs(ifaddrs);
-                       log_fatal("Unsupported device type %ld for \"%s\"",
+-                      log_fatal("Unsupported device type %ld for \"%s\"",
 -                                (long int)sa->sa_family, name);
-+                                (long int)sll->sll_family, name);
++                      freeifaddrs(ifaddrs);
++                      log_fatal("Unsupported device type %hu for \"%s\"",
++                                sll->sll_hatype, name);
        }
  
 -      close(sock);
++      if (sll_allocated)
++              dfree(sll, MDL);
 +      freeifaddrs(ifaddrs);
  }
  #endif
-diff -up dhcp-4.2.2/common/socket.c.lpf-ib dhcp-4.2.2/common/socket.c
---- dhcp-4.2.2/common/socket.c.lpf-ib  2011-06-27 18:18:20.000000000 +0200
-+++ dhcp-4.2.2/common/socket.c 2011-09-19 11:24:08.705775490 +0200
-@@ -324,7 +324,7 @@ void if_register_send (info)
-       info->wfdesc = if_register_socket(info, AF_INET, 0);
+diff -up dhcp-4.3.1b1/common/socket.c.bmgpWV dhcp-4.3.1b1/common/socket.c
+--- dhcp-4.3.1b1/common/socket.c.bmgpWV        2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/common/socket.c       2014-07-10 17:52:57.706272281 +0200
+@@ -322,7 +322,7 @@ void if_register_send (info)
+       info->wfdesc = if_register_socket(info, AF_INET, 0, NULL);
        /* If this is a normal IPv4 address, get the hardware address. */
        if (strcmp(info->name, "fallback") != 0)
 -              get_hw_addr(info->name, &info->hw_address);
@@ -487,7 +536,7 @@ diff -up dhcp-4.2.2/common/socket.c.lpf-ib dhcp-4.2.2/common/socket.c
  #if defined (USE_SOCKET_FALLBACK)
        /* Fallback only registers for send, but may need to receive as
           well. */
-@@ -387,7 +387,7 @@ void if_register_receive (info)
+@@ -385,7 +385,7 @@ void if_register_receive (info)
  #endif /* IP_PKTINFO... */
        /* If this is a normal IPv4 address, get the hardware address. */
        if (strcmp(info->name, "fallback") != 0)
@@ -496,7 +545,7 @@ diff -up dhcp-4.2.2/common/socket.c.lpf-ib dhcp-4.2.2/common/socket.c
  
        if (!quiet_interface_discovery)
                log_info ("Listening on Socket/%s%s%s",
-@@ -497,7 +497,7 @@ if_register6(struct interface_info *info
+@@ -499,7 +499,7 @@ if_register6(struct interface_info *info
        if (req_multi)
                if_register_multicast(info);
  
@@ -505,10 +554,19 @@ diff -up dhcp-4.2.2/common/socket.c.lpf-ib dhcp-4.2.2/common/socket.c
  
        if (!quiet_interface_discovery) {
                if (info->shared_network != NULL) {
-diff -up dhcp-4.2.2/includes/dhcpd.h.lpf-ib dhcp-4.2.2/includes/dhcpd.h
---- dhcp-4.2.2/includes/dhcpd.h.lpf-ib 2011-09-19 11:24:08.696775721 +0200
-+++ dhcp-4.2.2/includes/dhcpd.h        2011-09-19 11:24:08.707775438 +0200
-@@ -1243,6 +1243,7 @@ struct interface_info {
+@@ -555,7 +555,7 @@ if_register_linklocal6(struct interface_
+       info->rfdesc = sock;
+       info->wfdesc = sock;
+-      get_hw_addr(info->name, &info->hw_address);
++      get_hw_addr(info);
+       if (!quiet_interface_discovery) {
+               if (info->shared_network != NULL) {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.bmgpWV dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.bmgpWV       2014-07-10 17:50:26.923402536 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h      2014-07-10 17:52:57.707272266 +0200
+@@ -1248,6 +1248,7 @@ struct interface_info {
        struct shared_network *shared_network;
                                /* Networks connected to this interface. */
        struct hardware hw_address;     /* Its physical address. */
@@ -516,7 +574,7 @@ diff -up dhcp-4.2.2/includes/dhcpd.h.lpf-ib dhcp-4.2.2/includes/dhcpd.h
        struct in_addr *addresses;      /* Addresses associated with this
                                         * interface.
                                         */
-@@ -2356,7 +2357,7 @@ void print_dns_status (int, struct dhcp_
+@@ -2439,7 +2440,7 @@ void print_dns_status (int, struct dhcp_
  #endif
  const char *print_time(TIME);
  
@@ -525,14 +583,3 @@ diff -up dhcp-4.2.2/includes/dhcpd.h.lpf-ib dhcp-4.2.2/includes/dhcpd.h
  
  /* socket.c */
  #if defined (USE_SOCKET_SEND) || defined (USE_SOCKET_RECEIVE) \
-diff -up dhcp-4.2.2/includes/dhcp.h.lpf-ib dhcp-4.2.2/includes/dhcp.h
---- dhcp-4.2.2/includes/dhcp.h.lpf-ib  2011-09-19 11:24:08.696775721 +0200
-+++ dhcp-4.2.2/includes/dhcp.h 2011-09-19 11:24:08.707775438 +0200
-@@ -79,6 +79,7 @@ struct dhcp_packet {
- #define HTYPE_ETHER   1               /* Ethernet 10Mbps              */
- #define HTYPE_IEEE802 6               /* IEEE 802.2 Token Ring...     */
- #define HTYPE_FDDI    8               /* FDDI...                      */
-+#define HTYPE_INFINIBAND 32           /* Infiniband IPoIB             */
- #define HTYPE_RESERVED  0               /* RFC 5494 */
similarity index 53%
rename from src/patches/dhcp-4.2.1-manpages.patch
rename to src/patches/dhcp/dhcp-manpages.patch
index 9a42b7fc72c9a27b028daf7fcb482fe2257adf66..dde16c73525d16b93eff756c4a38a4fcc5576f9b 100644 (file)
@@ -1,154 +1,7 @@
-diff -up dhcp-4.2.1b1/client/dhclient.8.man dhcp-4.2.1b1/client/dhclient.8
---- dhcp-4.2.1b1/client/dhclient.8.man 2010-07-14 22:09:34.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient.8     2011-01-27 18:19:07.000000000 +0100
-@@ -115,6 +115,33 @@ dhclient - Dynamic Host Configuration Pr
- .B -w
- ]
- [
-+.B -B
-+]
-+[
-+.B -I
-+.I dhcp-client-identifier
-+]
-+[
-+.B -H
-+.I host-name
-+]
-+[
-+.B -F
-+.I fqdn.fqdn
-+]
-+[
-+.B -V
-+.I vendor-class-identifier
-+]
-+[
-+.B -R
-+.I request-option-list
-+]
-+[
-+.B -timeout
-+.I timeout
-+]
-+[
- .B -v
- ]
- [
-@@ -264,6 +291,69 @@ not to exit when it doesn't find any suc
- program can then be used to notify the client when a network interface
- has been added or removed, so that the client can attempt to configure an IP
- address on that interface.
-+
-+.TP
-+.BI \-B
-+Set the BOOTP broadcast flag in request packets so servers will always
-+broadcast replies.
-+
-+.TP
-+.BI \-I\ <dhcp-client-identifier>
-+Specify the dhcp-client-identifier option to send to the DHCP server.
-+
-+.TP
-+.BI \-H\ <host-name>
-+Specify the host-name option to send to the DHCP server.  The host-name
-+string only contains the client's hostname prefix, to which the server will
-+append the ddns-domainname or domain-name options, if any, to derive the
-+fully qualified domain name of the client.  The
-+.B -H
-+option cannot be used with the
-+.B -F
-+option.
-+
-+.TP
-+.BI \-F\ <fqdn.fqdn>
-+Specify the fqdn.fqdn option to send to the DHCP server.  This option cannot
-+be used with the
-+.B -H
-+option.  The fqdn.fqdn option must specify the complete domain name of the
-+client host, which the server may use for dynamic DNS updates.
-+
-+.TP
-+.BI \-V\ <vendor-class-identifier>
-+Specify the vendor-class-identifier option to send to the DHCP server.
-+
-+.TP
-+.BI \-R\ <option>[,<option>...]
-+Specify the list of options the client is to request from the server.  The
-+option list must be a single string consisting of option names separated
-+by at least one command and optional space characters.  The default option
-+list is:
-+
-+.BR
-+    subnet-mask, broadcast-address, time-offset, routers,
-+.BR
-+    domain-search, domain-name, domain-name-servers, host-name, 
-+.BR
-+    nis-domain, nis-servers, ntp-servers, interface-mtu
-+
-+.TP
-+.B -R
-+option does not append options to the default request, it overrides the
-+default request list.  Keep this in mind if you want to request an
-+additional option besides the default request list.  You will have to
-+specify all option names for the
-+.B -R
-+parameter.
-+
-+.TP
-+.BI \-timeout\ <timeout>
-+Specify the time after which
-+.B dhclient
-+will decide that no DHCP servers can be contacted when no responses have been
-+received.
-+
- .TP
- .BI \-n
- Do not configure any interfaces.  This is most likely to be useful in
-diff -up dhcp-4.2.1b1/client/dhclient.conf.5.man dhcp-4.2.1b1/client/dhclient.conf.5
---- dhcp-4.2.1b1/client/dhclient.conf.5.man    2010-09-15 01:03:56.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient.conf.5        2011-01-27 18:22:56.000000000 +0100
-@@ -186,7 +186,8 @@ responding to the client send the client
- options.   Only the option names should be specified in the request
- statement - not option parameters.   By default, the DHCPv4 client
- requests the subnet-mask, broadcast-address, time-offset, routers,
--domain-name, domain-name-servers and host-name options while the DHCPv6
-+domain-search, domain-name, domain-name-servers, host-name, nis-domain,
-+nis-servers, ntp-servers and interface-mtu options while the DHCPv6
- client requests the dhcp6 name-servers and domain-search options.  Note
- that if you enter a \'request\' statement, you over-ride these defaults
- and these options will not be requested.
-@@ -672,6 +673,17 @@ know the DHCP service(s) anycast MAC add
- client.  The \fIlink-type\fR and \fImac-address\fR parameters are configured
- in a similar manner to the \fBhardware\fR statement.
- .PP
-+ \fBbootp-broadcast-always;\fR
-+.PP
-+The
-+.B bootp-broadcast-always
-+statement instructs dhclient to always set the bootp broadcast flag in
-+request packets, so that servers will always broadcast replies.
-+This is equivalent to supplying the dhclient -B argument, and has
-+the same effect as specifying 'always-broadcast' in the server's dhcpd.conf.
-+This option is provided as an extension to enable dhclient to work
-+on IBM s390 Linux guests.
-+.PP
- .SH SAMPLE
- The following configuration file is used on a laptop running NetBSD
- 1.3.   The laptop has an IP alias of 192.5.5.213, and has one
-@@ -697,7 +709,7 @@ interface "ep0" {
-     supersede domain-search "fugue.com", "rc.vix.com", "home.vix.com";
-     prepend domain-name-servers 127.0.0.1;
-     request subnet-mask, broadcast-address, time-offset, routers,
--          domain-name, domain-name-servers, host-name;
-+          domain-search, domain-name, domain-name-servers, host-name;
-     require subnet-mask, domain-name-servers;
-     script "CLIENTBINDIR/dhclient-script";
-     media "media 10baseT/UTP", "media 10base2/BNC";
-diff -up dhcp-4.2.1b1/client/dhclient-script.8.man dhcp-4.2.1b1/client/dhclient-script.8
---- dhcp-4.2.1b1/client/dhclient-script.8.man  2010-07-06 21:03:11.000000000 +0200
-+++ dhcp-4.2.1b1/client/dhclient-script.8      2011-01-27 18:24:44.000000000 +0100
-@@ -47,7 +47,7 @@ customizations are needed, they should b
+diff -up dhcp-4.3.0a1/client/dhclient-script.8.man dhcp-4.3.0a1/client/dhclient-script.8
+--- dhcp-4.3.0a1/client/dhclient-script.8.man  2013-12-11 01:01:02.000000000 +0100
++++ dhcp-4.3.0a1/client/dhclient-script.8      2013-12-19 15:27:17.617118805 +0100
+@@ -48,7 +48,7 @@ customizations are needed, they should b
  exit hooks provided (see HOOKS for details).   These hooks will allow the
  user to override the default behaviour of the client in creating a
  .B /etc/resolv.conf
@@ -157,7 +10,7 @@ diff -up dhcp-4.2.1b1/client/dhclient-script.8.man dhcp-4.2.1b1/client/dhclient-
  .PP
  No standard client script exists for some operating systems, even though
  the actual client may work, so a pioneering user may well need to create
-@@ -91,6 +91,26 @@ present.   The
+@@ -92,6 +92,26 @@ present.   The
  .B ETCDIR/dhclient-exit-hooks
  script can modify the valid of exit_status to change the exit status
  of dhclient-script.
@@ -184,10 +37,50 @@ diff -up dhcp-4.2.1b1/client/dhclient-script.8.man dhcp-4.2.1b1/client/dhclient-
  .SH OPERATION
  When dhclient needs to invoke the client configuration script, it
  defines a set of variables in the environment, and then invokes
-diff -up dhcp-4.2.1b1/common/dhcp-options.5.man dhcp-4.2.1b1/common/dhcp-options.5
---- dhcp-4.2.1b1/common/dhcp-options.5.man     2010-07-13 22:56:56.000000000 +0200
-+++ dhcp-4.2.1b1/common/dhcp-options.5 2011-01-27 18:25:57.000000000 +0100
-@@ -913,6 +913,21 @@ classless IP routing - it does not inclu
+diff -up dhcp-4.3.0a1/client/dhclient.conf.5.man dhcp-4.3.0a1/client/dhclient.conf.5
+--- dhcp-4.3.0a1/client/dhclient.conf.5.man    2013-12-11 01:01:02.000000000 +0100
++++ dhcp-4.3.0a1/client/dhclient.conf.5        2013-12-19 15:27:17.617118805 +0100
+@@ -202,7 +202,8 @@ responding to the client send the client
+ options.  Only the option names should be specified in the request
+ statement - not option parameters.  By default, the DHCPv4 client
+ requests the subnet-mask, broadcast-address, time-offset, routers,
+-domain-name, domain-name-servers and host-name options while the DHCPv6
++domain-search, domain-name, domain-name-servers, host-name, nis-domain,
++nis-servers, ntp-servers and interface-mtu options while the DHCPv6
+ client requests the dhcp6 name-servers and domain-search options.  Note
+ that if you enter a \'request\' statement, you over-ride these defaults
+ and these options will not be requested.
+@@ -688,6 +689,17 @@ know the DHCP service(s) anycast MAC add
+ client.  The \fIlink-type\fR and \fImac-address\fR parameters are configured
+ in a similar manner to the \fBhardware\fR statement.
+ .PP
++ \fBbootp-broadcast-always;\fR
++.PP
++The
++.B bootp-broadcast-always
++statement instructs dhclient to always set the bootp broadcast flag in
++request packets, so that servers will always broadcast replies.
++This is equivalent to supplying the dhclient -B argument, and has
++the same effect as specifying 'always-broadcast' in the server's dhcpd.conf.
++This option is provided as an extension to enable dhclient to work
++on IBM s390 Linux guests.
++.PP
+ .SH SAMPLE
+ The following configuration file is used on a laptop running NetBSD
+ 1.3.  The laptop has an IP alias of 192.5.5.213, and has one
+@@ -713,7 +725,7 @@ interface "ep0" {
+     supersede domain-search "fugue.com", "rc.vix.com", "home.vix.com";
+     prepend domain-name-servers 127.0.0.1;
+     request subnet-mask, broadcast-address, time-offset, routers,
+-          domain-name, domain-name-servers, host-name;
++          domain-search, domain-name, domain-name-servers, host-name;
+     require subnet-mask, domain-name-servers;
+     script "CLIENTBINDIR/dhclient-script";
+     media "media 10baseT/UTP", "media 10base2/BNC";
+diff -up dhcp-4.3.0a1/common/dhcp-options.5.man dhcp-4.3.0a1/common/dhcp-options.5
+--- dhcp-4.3.0a1/common/dhcp-options.5.man     2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/common/dhcp-options.5 2013-12-19 15:27:17.618118791 +0100
+@@ -914,6 +914,21 @@ classless IP routing - it does not inclu
  classless IP routing is now the most widely deployed routing standard,
  this option is virtually useless, and is not implemented by any of the
  popular DHCP clients, for example the Microsoft DHCP client.
@@ -209,10 +102,10 @@ diff -up dhcp-4.2.1b1/common/dhcp-options.5.man dhcp-4.2.1b1/common/dhcp-options
  .RE
  .PP
  .nf
-diff -up dhcp-4.2.1b1/server/dhcpd.conf.5.man dhcp-4.2.1b1/server/dhcpd.conf.5
---- dhcp-4.2.1b1/server/dhcpd.conf.5.man       2010-07-06 21:03:12.000000000 +0200
-+++ dhcp-4.2.1b1/server/dhcpd.conf.5   2011-01-27 18:29:12.000000000 +0100
-@@ -519,6 +519,9 @@ pool {
+diff -up dhcp-4.3.0a1/server/dhcpd.conf.5.man dhcp-4.3.0a1/server/dhcpd.conf.5
+--- dhcp-4.3.0a1/server/dhcpd.conf.5.man       2013-12-13 21:49:44.000000000 +0100
++++ dhcp-4.3.0a1/server/dhcpd.conf.5   2013-12-19 15:30:14.266670962 +0100
+@@ -527,6 +527,9 @@ pool {
  };
  .fi
  .PP
@@ -222,7 +115,7 @@ diff -up dhcp-4.2.1b1/server/dhcpd.conf.5.man dhcp-4.2.1b1/server/dhcpd.conf.5
  The  server currently  does very  little  sanity checking,  so if  you
  configure it wrong, it will just  fail in odd ways.  I would recommend
  therefore that you either do  failover or don't do failover, but don't
-@@ -533,9 +536,9 @@ primary server might look like this:
+@@ -541,9 +544,9 @@ primary server might look like this:
  failover peer "foo" {
    primary;
    address anthrax.rc.vix.com;
@@ -234,7 +127,7 @@ diff -up dhcp-4.2.1b1/server/dhcpd.conf.5.man dhcp-4.2.1b1/server/dhcpd.conf.5
    max-response-delay 60;
    max-unacked-updates 10;
    mclt 3600;
-@@ -1305,7 +1308,7 @@ the zone containing PTR records - for IS
+@@ -1241,7 +1244,7 @@ the zone containing PTR records - for IS
  .PP
  .nf
  key DHCP_UPDATER {
@@ -243,7 +136,7 @@ diff -up dhcp-4.2.1b1/server/dhcpd.conf.5.man dhcp-4.2.1b1/server/dhcpd.conf.5
    secret pRP5FapFoJ95JEL06sv4PQ==;
  };
  
-@@ -1328,7 +1331,7 @@ dhcpd.conf file:
+@@ -1264,7 +1267,7 @@ dhcpd.conf file:
  .PP
  .nf
  key DHCP_UPDATER {
@@ -252,10 +145,10 @@ diff -up dhcp-4.2.1b1/server/dhcpd.conf.5.man dhcp-4.2.1b1/server/dhcpd.conf.5
    secret pRP5FapFoJ95JEL06sv4PQ==;
  };
  
-@@ -2540,7 +2543,8 @@ statement
+@@ -2539,7 +2542,8 @@ statement
  The \fInext-server\fR statement is used to specify the host address of
  the server from which the initial boot file (specified in the
- \fIfilename\fR statement) is to be loaded.   \fIServer-name\fR should
+ \fIfilename\fR statement) is to be loaded.  \fIServer-name\fR should
 -be a numeric IP address or a domain name.
 +be a numeric IP address or a domain name.  If no \fInext-server\fR statement
 +applies to a given client, the address 0.0.0.0 is used.
diff --git a/src/patches/dhcp/dhcp-paranoia.patch b/src/patches/dhcp/dhcp-paranoia.patch
new file mode 100644 (file)
index 0000000..0f2db8c
--- /dev/null
@@ -0,0 +1,156 @@
+diff -up dhcp-4.3.1b1/client/dhclient.c.dlTsyN dhcp-4.3.1b1/client/dhclient.c
+--- dhcp-4.3.1b1/client/dhclient.c.dlTsyN      2014-07-10 17:49:49.882925843 +0200
++++ dhcp-4.3.1b1/client/dhclient.c     2014-07-10 17:50:26.922402550 +0200
+@@ -1748,11 +1748,6 @@ int write_host (host)
+       return 0;
+ }
+-void db_startup (testp)
+-      int testp;
+-{
+-}
+-
+ void bootp (packet)
+       struct packet *packet;
+ {
+diff -up dhcp-4.3.1b1/includes/dhcpd.h.dlTsyN dhcp-4.3.1b1/includes/dhcpd.h
+--- dhcp-4.3.1b1/includes/dhcpd.h.dlTsyN       2014-07-10 17:48:03.798424601 +0200
++++ dhcp-4.3.1b1/includes/dhcpd.h      2014-07-10 17:50:26.923402536 +0200
+@@ -2866,7 +2866,11 @@ void commit_leases_timeout (void *);
+ void commit_leases_readerdry(void *);
+ int commit_leases (void);
+ int commit_leases_timed (void);
++#if defined (PARANOIA)
++void db_startup (int, uid_t, gid_t);
++#else
+ void db_startup (int);
++#endif /* PARANOIA */
+ int new_lease_file (void);
+ int group_writer (struct group_object *);
+ int write_ia(const struct ia_xx *);
+diff -up dhcp-4.3.1b1/server/confpars.c.dlTsyN dhcp-4.3.1b1/server/confpars.c
+--- dhcp-4.3.1b1/server/confpars.c.dlTsyN      2014-07-10 17:39:25.801764596 +0200
++++ dhcp-4.3.1b1/server/confpars.c     2014-07-10 17:50:26.924402522 +0200
+@@ -219,7 +219,11 @@ void trace_conf_input (trace_type_t *tty
+       }
+       if (!leaseconf_initialized && ttype == trace_readleases_type) {
++#if defined (PARANOIA)
++              db_startup (0, 0, 0);
++#else
+               db_startup (0);
++#endif /* PARANOIA */
+               leaseconf_initialized = 1;
+               postdb_startup ();
+       }
+diff -up dhcp-4.3.1b1/server/db.c.dlTsyN dhcp-4.3.1b1/server/db.c
+--- dhcp-4.3.1b1/server/db.c.dlTsyN    2014-07-10 17:39:25.801764596 +0200
++++ dhcp-4.3.1b1/server/db.c   2014-07-10 17:50:26.925402508 +0200
+@@ -42,6 +42,10 @@ static int counting = 0;
+ static int count = 0;
+ TIME write_time;
+ int lease_file_is_corrupt = 0;
++#if defined (PARANOIA)
++uid_t global_set_uid = 0;
++gid_t global_set_gid = 0;
++#endif /* PARANOIA */
+ /* Write a single binding scope value in parsable format.
+  */
+@@ -1046,8 +1050,11 @@ int commit_leases_timed()
+       return (1);
+ }
+-void db_startup (testp)
+-      int testp;
++#if defined (PARANOIA)
++void db_startup (int testp, uid_t set_uid, gid_t set_gid)
++#else
++void db_startup (int testp)
++#endif /* PARANOIA */
+ {
+       isc_result_t status;
+@@ -1066,6 +1073,11 @@ void db_startup (testp)
+       }
+ #endif
++#if defined (PARANOIA)
++      global_set_uid = set_uid;
++      global_set_gid = set_gid;
++#endif /* PARANOIA */
++
+ #if defined (TRACING)
+       /* If we're playing back, there is no lease file, so we can't
+          append it, so we create one immediately (maybe this isn't
+@@ -1128,6 +1140,17 @@ int new_lease_file ()
+               log_error ("Can't create new lease file: %m");
+               return 0;
+       }
++
++#if defined (PARANOIA)
++      if (global_set_uid && !geteuid() &&
++          global_set_gid && !getegid())
++              if (fchown(db_fd, global_set_uid, global_set_gid)) {
++                      log_fatal ("Can't chown new lease file: %m");
++                      close(db_fd);
++                      goto fdfail;
++      }
++#endif /* PARANOIA */
++
+       if ((new_db_file = fdopen(db_fd, "we")) == NULL) {
+               log_error("Can't fdopen new lease file: %m");
+               close(db_fd);
+diff -up dhcp-4.3.1b1/server/dhcpd.8.dlTsyN dhcp-4.3.1b1/server/dhcpd.8
+--- dhcp-4.3.1b1/server/dhcpd.8.dlTsyN 2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/server/dhcpd.8        2014-07-10 17:50:26.925402508 +0200
+@@ -82,6 +82,18 @@ dhcpd - Dynamic Host Configuration Proto
+ .I trace-output-file
+ ]
+ [
++.B -user
++.I user
++]
++[
++.B -group
++.I group
++]
++[
++.B -chroot
++.I dir
++]
++[
+ .B -play
+ .I trace-playback-file
+ ]
+@@ -269,6 +281,15 @@ lease file.
+ .TP
+ .BI --version
+ Print version number and exit.
++.TP
++.BI \-user \ user
++Setuid to user after completing privileged operations, such as creating sockets that listen on privileged ports.
++.TP
++.BI \-group \ group
++Setgid to group after completing privileged operations, such as creating sockets that listen on privileged ports.
++.TP
++.BI \-chroot \ dir
++Chroot to directory after processing the command line arguments, but before reading the configuration file.
+ .PP
+ .I Modifying default file locations:
+ The following options can be used to modify the locations 
+diff -up dhcp-4.3.1b1/server/dhcpd.c.dlTsyN dhcp-4.3.1b1/server/dhcpd.c
+--- dhcp-4.3.1b1/server/dhcpd.c.dlTsyN 2014-07-10 17:39:25.802764582 +0200
++++ dhcp-4.3.1b1/server/dhcpd.c        2014-07-10 17:52:35.341588248 +0200
+@@ -628,7 +628,11 @@ main(int argc, char **argv) {
+       group_write_hook = group_writer;
+       /* Start up the database... */
++#if defined (PARANOIA)
++      db_startup (lftest, set_uid, set_gid);
++#else
+       db_startup (lftest);
++#endif /* PARANOIA */
+       if (lftest)
+               exit (0);
similarity index 72%
rename from src/patches/dhcp-4.2.0-paths.patch
rename to src/patches/dhcp/dhcp-paths.patch
index 54c7aba8e62152db5ace5a75f97e67781b51d002..2f43e51fec2240401fdb4a4e5e955fb0963e83f1 100644 (file)
@@ -1,7 +1,6 @@
-diff -up dhcp-4.2.0/includes/dhcpd.h.paths dhcp-4.2.0/includes/dhcpd.h
---- dhcp-4.2.0/includes/dhcpd.h.paths  2010-07-21 13:55:42.000000000 +0200
-+++ dhcp-4.2.0/includes/dhcpd.h        2010-07-21 14:29:57.000000000 +0200
-@@ -1390,15 +1390,15 @@ typedef unsigned char option_mask [16];
+--- expanded_org/includes/dhcpd.h      Wed Aug 06 23:35:02 2014
++++ expanded_patched_51_4_2_0_paths_patch/includes/dhcpd.h     Mon Feb 16 13:22:11 2015
+@@ -1424,15 +1424,15 @@
  #else /* !DEBUG */
  
  #ifndef _PATH_DHCPD_CONF
@@ -20,7 +19,7 @@ diff -up dhcp-4.2.0/includes/dhcpd.h.paths dhcp-4.2.0/includes/dhcpd.h
  #endif
  
  #ifndef _PATH_DHCPD_PID
-@@ -1412,7 +1412,7 @@ typedef unsigned char option_mask [16];
+@@ -1446,7 +1446,7 @@
  #endif /* DEBUG */
  
  #ifndef _PATH_DHCLIENT_CONF
@@ -29,7 +28,7 @@ diff -up dhcp-4.2.0/includes/dhcpd.h.paths dhcp-4.2.0/includes/dhcpd.h
  #endif
  
  #ifndef _PATH_DHCLIENT_SCRIPT
-@@ -1428,11 +1428,11 @@ typedef unsigned char option_mask [16];
+@@ -1462,11 +1462,11 @@
  #endif
  
  #ifndef _PATH_DHCLIENT_DB
similarity index 88%
rename from src/patches/dhcp-4.2.0-release-by-ifup.patch
rename to src/patches/dhcp/dhcp-release-by-ifup.patch
index 300c5f334b7eaa85c23c0fbc23845df6c8bfec7b..677eb5c752f0713bac56e01e83f972d911e5e2a1 100644 (file)
@@ -1,8 +1,8 @@
-diff -up dhcp-4.2.0/client/dhclient.c.ifup dhcp-4.2.0/client/dhclient.c
---- dhcp-4.2.0/client/dhclient.c.ifup  2010-07-21 13:30:10.000000000 +0200
-+++ dhcp-4.2.0/client/dhclient.c       2010-07-21 13:37:03.000000000 +0200
-@@ -497,9 +497,81 @@ main(int argc, char **argv) {
-                                       kill(oldpid, SIGTERM);
+diff -up dhcp-4.3.0a1/client/dhclient.c.ifup dhcp-4.3.0a1/client/dhclient.c
+--- dhcp-4.3.0a1/client/dhclient.c.ifup        2013-12-19 14:53:08.817760677 +0100
++++ dhcp-4.3.0a1/client/dhclient.c     2013-12-19 15:05:16.290518574 +0100
+@@ -521,9 +521,81 @@ main(int argc, char **argv) {
+                               }
                        }
                        fclose(pidfd);
 +              } else {
diff --git a/src/patches/dhcp/dhcp-remove-bind.patch b/src/patches/dhcp/dhcp-remove-bind.patch
new file mode 100644 (file)
index 0000000..5ab0338
--- /dev/null
@@ -0,0 +1,192 @@
+diff -up dhcp-4.3.1b1/client/Makefile.am.brGmwh dhcp-4.3.1b1/client/Makefile.am
+--- dhcp-4.3.1b1/client/Makefile.am.brGmwh     2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/client/Makefile.am    2014-07-10 17:36:30.484250976 +0200
+@@ -10,8 +10,8 @@ dhclient_SOURCES = clparse.c dhclient.c
+                  scripts/bsdos scripts/freebsd scripts/linux scripts/macos \
+                  scripts/netbsd scripts/nextstep scripts/openbsd \
+                  scripts/solaris scripts/openwrt
+-dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../bind/lib/libirs.a \
+-               ../bind/lib/libdns.a ../bind/lib/libisccfg.a ../bind/lib/libisc.a
++dhclient_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
++               $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhclient.8 dhclient-script.8 dhclient.conf.5 dhclient.leases.5
+ EXTRA_DIST = $(man_MANS)
+diff -up dhcp-4.3.1b1/common/tests/Makefile.am.brGmwh dhcp-4.3.1b1/common/tests/Makefile.am
+--- dhcp-4.3.1b1/common/tests/Makefile.am.brGmwh       2014-07-10 17:36:30.485250962 +0200
++++ dhcp-4.3.1b1/common/tests/Makefile.am      2014-07-10 17:38:04.010924566 +0200
+@@ -13,21 +13,20 @@ ATF_TESTS += alloc_unittest dns_unittest
+ alloc_unittest_SOURCES = test_alloc.c $(top_srcdir)/tests/t_api_dhcp.c
+ alloc_unittest_LDADD = $(ATF_LDFLAGS)
+ alloc_unittest_LDADD += ../libdhcp.a  \
+-      ../../omapip/libomapi.a ../../bind/lib/libirs.a \
+-      ../../bind/lib/libdns.a ../../bind/lib/libisccfg.a  ../../bind/lib/libisc.a
++      ../../omapip/libomapi.a \
++      $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ dns_unittest_SOURCES = dns_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ dns_unittest_LDADD = $(ATF_LDFLAGS)
+ dns_unittest_LDADD += ../libdhcp.a  \
+-      ../../omapip/libomapi.a ../../bind/lib/libirs.a \
+-      ../../bind/lib/libdns.a ../../bind/lib/libisccfg.a  ../../bind/lib/libisc.a
++      ../../omapip/libomapi.a \
++      $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ misc_unittest_SOURCES = misc_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ misc_unittest_LDADD = $(ATF_LDFLAGS)
+ misc_unittest_LDADD += ../libdhcp.a  \
+-      ../../omapip/libomapi.a ../../bind/lib/libirs.a \
+-      ../../bind/lib/libdns.a ../../bind/lib/libisccfg.a  ../../bind/lib/libisc.a
+-
++      ../../omapip/libomapi.a \
++      $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ check: $(ATF_TESTS)
+       atf-run | atf-report
+diff -up dhcp-4.3.1b1/configure.ac.brGmwh dhcp-4.3.1b1/configure.ac
+--- dhcp-4.3.1b1/configure.ac.brGmwh   2014-07-02 20:01:26.000000000 +0200
++++ dhcp-4.3.1b1/configure.ac  2014-07-10 17:36:30.485250962 +0200
+@@ -562,20 +562,37 @@ AC_CHECK_MEMBER(struct msghdr.msg_contro
+ libbind=
+ AC_ARG_WITH(libbind,
+-      AS_HELP_STRING([--with-libbind=PATH],[bind includes and libraries are in PATH 
+-                      (default is ./bind)]),
++      AS_HELP_STRING([--with-libbind=PATH],[bind includes are in PATH 
++                      (default is ./bind/includes)]),
+       use_libbind="$withval", use_libbind="no")
+ case "$use_libbind" in 
++yes|no)
++      libbind="\${top_srcdir}/bind/include"
++      ;;
++*)
++      libbind="$use_libbind"
++      ;;
++esac
++
++BIND9_LIBDIR='-L$(top_builddir)/bind/lib'
++AC_ARG_WITH(libbind-libs,
++      AC_HELP_STRING([--with-libbind-libs=PATH],
++                     [bind9 export libraries are in PATH]),
++                     [libbind_libs="$withval"], [libbind_libs='no'])
++case "$libbind_libs" in
+ yes)
+-      libbind="\${top_srcdir}/bind"
++      AC_MSG_ERROR([Specify path to bind9 libraries])
+       ;;
+ no)
+-      libbind="\${top_srcdir}/bind"
++      BUNDLED_BIND=yes
+       ;;
+ *)
+-      libbind="$use_libbind"
++      BIND9_LIBDIR="-L$libbind_libs"
++      BUNDLED_BIND=no
+       ;;
+ esac
++AM_CONDITIONAL([BUNDLED_BIND], [test "$BUNDLED_BIND" = yes])
++AC_SUBST([BIND9_LIBDIR])
+ # OpenLDAP support.
+ AC_ARG_WITH(ldap,
+@@ -610,7 +627,7 @@ fi
+ CFLAGS="$CFLAGS $STD_CWARNINGS"
+ # Try to add the bind include directory
+-CFLAGS="$CFLAGS -I$libbind/include"
++CFLAGS="$CFLAGS -I$libbind"
+ case "$host" in
+ *-darwin*)
+diff -up dhcp-4.3.1b1/dhcpctl/Makefile.am.brGmwh dhcp-4.3.1b1/dhcpctl/Makefile.am
+--- dhcp-4.3.1b1/dhcpctl/Makefile.am.brGmwh    2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/dhcpctl/Makefile.am   2014-07-10 17:36:30.485250962 +0200
+@@ -6,12 +6,9 @@ EXTRA_DIST = $(man_MANS)
+ omshell_SOURCES = omshell.c
+ omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
+-              ../bind/lib/libirs.a ../bind/lib/libdns.a \
+-              ../bind/lib/libisccfg.a ../bind/lib/libisc.a
+-
++              $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
+ cltest_SOURCES = cltest.c
+ cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
+-             ../bind/lib/libirs.a ../bind/lib/libdns.a \
+-               ../bind/lib/libisccfg.a ../bind/lib/libisc.a
++             $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/Makefile.am.brGmwh dhcp-4.3.1b1/Makefile.am
+--- dhcp-4.3.1b1/Makefile.am.brGmwh    2014-07-02 19:58:38.000000000 +0200
++++ dhcp-4.3.1b1/Makefile.am   2014-07-10 17:36:30.484250976 +0200
+@@ -25,7 +25,13 @@ EXTRA_DIST = RELNOTES LICENSE \
+            bind/Makefile bind/bind.tar.gz bind/version.tmp \
+            common/tests/Atffile server/tests/Atffile
+-SUBDIRS = bind includes tests common dst omapip client dhcpctl relay server
++if BUNDLED_BIND
++SUBDIRS = bind
++else
++SUBDIRS = 
++endif
++
++SUBDIRS += includes tests common dst omapip client dhcpctl relay server
+ nobase_include_HEADERS = dhcpctl/dhcpctl.h
+diff -up dhcp-4.3.1b1/omapip/Makefile.am.brGmwh dhcp-4.3.1b1/omapip/Makefile.am
+--- dhcp-4.3.1b1/omapip/Makefile.am.brGmwh     2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/omapip/Makefile.am    2014-07-10 17:36:30.486250948 +0200
+@@ -10,6 +10,5 @@ man_MANS = omapi.3
+ EXTRA_DIST = $(man_MANS)
+ svtest_SOURCES = test.c
+-svtest_LDADD = libomapi.a ../bind/lib/libirs.a ../bind/lib/libdns.a \
+-              ../bind/lib/libisccfg.a ../bind/lib/libisc.a
+-
++svtest_LDADD = libomapi.a \
++             $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/relay/Makefile.am.brGmwh dhcp-4.3.1b1/relay/Makefile.am
+--- dhcp-4.3.1b1/relay/Makefile.am.brGmwh      2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/relay/Makefile.am     2014-07-10 17:36:30.486250948 +0200
+@@ -3,8 +3,7 @@ AM_CPPFLAGS = -DLOCALSTATEDIR='"@localst
+ sbin_PROGRAMS = dhcrelay
+ dhcrelay_SOURCES = dhcrelay.c
+ dhcrelay_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
+-               ../bind/lib/libirs.a ../bind/lib/libdns.a \
+-               ../bind/lib/libisccfg.a ../bind/lib/libisc.a
++               $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhcrelay.8
+ EXTRA_DIST = $(man_MANS)
+diff -up dhcp-4.3.1b1/server/Makefile.am.brGmwh dhcp-4.3.1b1/server/Makefile.am
+--- dhcp-4.3.1b1/server/Makefile.am.brGmwh     2014-07-02 19:58:39.000000000 +0200
++++ dhcp-4.3.1b1/server/Makefile.am    2014-07-10 17:36:30.486250948 +0200
+@@ -13,10 +13,8 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
+               dhcpv6.c mdb6.c ldap.c ldap_casa.c
+ dhcpd_CFLAGS = $(LDAP_CFLAGS)
+-dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a \
+-            ../dhcpctl/libdhcpctl.a ../bind/lib/libirs.a \
+-            ../bind/lib/libdns.a ../bind/lib/libisccfg.a ../bind/lib/libisc.a
+-
++dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../dhcpctl/libdhcpctl.a \
++            $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
+ EXTRA_DIST = $(man_MANS)
+diff -up dhcp-4.3.1b1/server/tests/Makefile.am.brGmwh dhcp-4.3.1b1/server/tests/Makefile.am
+--- dhcp-4.3.1b1/server/tests/Makefile.am.brGmwh       2014-07-02 19:58:40.000000000 +0200
++++ dhcp-4.3.1b1/server/tests/Makefile.am      2014-07-10 17:36:30.486250948 +0200
+@@ -18,9 +18,8 @@ DHCPSRC = ../dhcp.c ../bootp.c ../confpa
+           ../ldap.c ../ldap_casa.c ../dhcpd.c
+ DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.a    \
+-          $(top_builddir)/dhcpctl/libdhcpctl.a $(top_builddir)/bind/lib/libirs.a \
+-        $(top_builddir)/bind/lib/libdns.a $(top_builddir)/bind/lib/libisccfg.a \
+-        $(top_builddir)/bind/lib/libisc.a
++          $(top_builddir)/dhcpctl/libdhcpctl.a \
++          $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ ATF_TESTS =
+ TESTS = 
similarity index 74%
rename from src/patches/dhcp-4.2.2-rfc3442-classless-static-routes.patch
rename to src/patches/dhcp/dhcp-rfc3442-classless-static-routes.patch
index 0a0bfcb66d32d0fb961d853816044bd664c0f1f1..94ed5ba24ebd8c7de38bc349cfe2975b6410109d 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.2b1/client/clparse.c.rfc3442 dhcp-4.2.2b1/client/clparse.c
---- dhcp-4.2.2b1/client/clparse.c.rfc3442      2011-07-01 14:22:38.031534508 +0200
-+++ dhcp-4.2.2b1/client/clparse.c      2011-07-01 14:22:38.128532940 +0200
-@@ -37,7 +37,7 @@
+diff -up dhcp-4.3.0rc1/client/clparse.c.rfc3442 dhcp-4.3.0rc1/client/clparse.c
+--- dhcp-4.3.0rc1/client/clparse.c.rfc3442     2014-01-29 10:05:48.474400352 +0100
++++ dhcp-4.3.0rc1/client/clparse.c     2014-01-29 10:05:48.517399955 +0100
+@@ -31,7 +31,7 @@
  
  struct client_config top_level_config;
  
@@ -10,7 +10,7 @@ diff -up dhcp-4.2.2b1/client/clparse.c.rfc3442 dhcp-4.2.2b1/client/clparse.c
  struct option *default_requested_options[NUM_DEFAULT_REQUESTED_OPTS + 1];
  
  static void parse_client_default_duid(struct parse *cfile);
-@@ -82,7 +82,11 @@ isc_result_t read_client_conf ()
+@@ -84,7 +84,11 @@ isc_result_t read_client_conf ()
                                dhcp_universe.code_hash, &code, 0, MDL);
  
        /* 4 */
@@ -23,7 +23,7 @@ diff -up dhcp-4.2.2b1/client/clparse.c.rfc3442 dhcp-4.2.2b1/client/clparse.c
        option_code_hash_lookup(&default_requested_options[3],
                                dhcp_universe.code_hash, &code, 0, MDL);
  
-@@ -136,6 +140,11 @@ isc_result_t read_client_conf ()
+@@ -138,6 +142,11 @@ isc_result_t read_client_conf ()
        option_code_hash_lookup(&default_requested_options[13],
                                dhcp_universe.code_hash, &code, 0, MDL);
  
@@ -35,10 +35,10 @@ diff -up dhcp-4.2.2b1/client/clparse.c.rfc3442 dhcp-4.2.2b1/client/clparse.c
        for (code = 0 ; code < NUM_DEFAULT_REQUESTED_OPTS ; code++) {
                if (default_requested_options[code] == NULL)
                        log_fatal("Unable to find option definition for "
-diff -up dhcp-4.2.2b1/common/dhcp-options.5.rfc3442 dhcp-4.2.2b1/common/dhcp-options.5
---- dhcp-4.2.2b1/common/dhcp-options.5.rfc3442 2011-07-01 14:22:38.020534686 +0200
-+++ dhcp-4.2.2b1/common/dhcp-options.5 2011-07-01 14:22:38.129532924 +0200
-@@ -115,6 +115,26 @@ hexadecimal, separated by colons.   For 
+diff -up dhcp-4.3.0rc1/common/dhcp-options.5.rfc3442 dhcp-4.3.0rc1/common/dhcp-options.5
+--- dhcp-4.3.0rc1/common/dhcp-options.5.rfc3442        2014-01-29 10:05:48.466400426 +0100
++++ dhcp-4.3.0rc1/common/dhcp-options.5        2014-01-29 10:05:48.518399945 +0100
+@@ -111,6 +111,26 @@ hexadecimal, separated by colons.  For e
  or
    option dhcp-client-identifier 43:4c:49:45:54:2d:46:4f:4f;
  .fi
@@ -64,8 +64,8 @@ diff -up dhcp-4.2.2b1/common/dhcp-options.5.rfc3442 dhcp-4.2.2b1/common/dhcp-opt
 +.fi
  .SH SETTING OPTION VALUES USING EXPRESSIONS
  Sometimes it's helpful to be able to set the value of a DHCP option
- based on some value that the client has sent.   To do this, you can
-@@ -931,6 +951,29 @@ dhclient-script will create routes:
+ based on some value that the client has sent.  To do this, you can
+@@ -972,6 +992,29 @@ dhclient-script will create routes:
  .RE
  .PP
  .nf
@@ -95,10 +95,10 @@ diff -up dhcp-4.2.2b1/common/dhcp-options.5.rfc3442 dhcp-4.2.2b1/common/dhcp-opt
  .B option \fBstreettalk-directory-assistance-server\fR \fIip-address\fR
                                             [\fB,\fR \fIip-address\fR...]\fB;\fR
  .fi
-diff -up dhcp-4.2.2b1/common/inet.c.rfc3442 dhcp-4.2.2b1/common/inet.c
---- dhcp-4.2.2b1/common/inet.c.rfc3442 2011-05-11 02:47:22.000000000 +0200
-+++ dhcp-4.2.2b1/common/inet.c 2011-07-01 14:22:38.130532908 +0200
-@@ -528,6 +528,60 @@ free_iaddrcidrnetlist(struct iaddrcidrne
+diff -up dhcp-4.3.0rc1/common/inet.c.rfc3442 dhcp-4.3.0rc1/common/inet.c
+--- dhcp-4.3.0rc1/common/inet.c.rfc3442        2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/inet.c        2014-01-29 10:05:48.519399936 +0100
+@@ -521,6 +521,60 @@ free_iaddrcidrnetlist(struct iaddrcidrne
        return ISC_R_SUCCESS;
  }
  
@@ -159,10 +159,10 @@ diff -up dhcp-4.2.2b1/common/inet.c.rfc3442 dhcp-4.2.2b1/common/inet.c
  /* piaddr() turns an iaddr structure into a printable address. */
  /* XXX: should use a const pointer rather than passing the structure */
  const char *
-diff -up dhcp-4.2.2b1/common/options.c.rfc3442 dhcp-4.2.2b1/common/options.c
---- dhcp-4.2.2b1/common/options.c.rfc3442      2011-03-24 22:57:13.000000000 +0100
-+++ dhcp-4.2.2b1/common/options.c      2011-07-01 14:22:38.132532876 +0200
-@@ -706,7 +706,11 @@ cons_options(struct packet *inpacket, st
+diff -up dhcp-4.3.0rc1/common/options.c.rfc3442 dhcp-4.3.0rc1/common/options.c
+--- dhcp-4.3.0rc1/common/options.c.rfc3442     2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/options.c     2014-01-29 10:05:48.520399927 +0100
+@@ -707,7 +707,11 @@ cons_options(struct packet *inpacket, st
                 * packet.
                 */
                priority_list[priority_len++] = DHO_SUBNET_MASK;
@@ -175,15 +175,15 @@ diff -up dhcp-4.2.2b1/common/options.c.rfc3442 dhcp-4.2.2b1/common/options.c
                priority_list[priority_len++] = DHO_DOMAIN_NAME_SERVERS;
                priority_list[priority_len++] = DHO_HOST_NAME;
                priority_list[priority_len++] = DHO_FQDN;
-@@ -1683,6 +1687,7 @@ const char *pretty_print_option (option,
-       const unsigned char *dp = data;
-       char comma;
+@@ -1688,6 +1692,7 @@ const char *pretty_print_option (option,
        unsigned long tval;
-+        unsigned int octets = 0;
+       isc_boolean_t a_array = ISC_FALSE;
+       int len_used;
++      unsigned int octets = 0;
  
        if (emit_commas)
                comma = ',';
-@@ -1691,6 +1696,7 @@ const char *pretty_print_option (option,
+@@ -1696,6 +1701,7 @@ const char *pretty_print_option (option,
  
        memset (enumbuf, 0, sizeof enumbuf);
  
@@ -191,7 +191,7 @@ diff -up dhcp-4.2.2b1/common/options.c.rfc3442 dhcp-4.2.2b1/common/options.c
        /* Figure out the size of the data. */
        for (l = i = 0; option -> format [i]; i++, l++) {
                if (l >= sizeof(fmtbuf) - 1)
-@@ -1840,6 +1846,33 @@ const char *pretty_print_option (option,
+@@ -1870,6 +1876,33 @@ const char *pretty_print_option (option,
        if (numhunk < 0)
                numhunk = 1;
  
@@ -224,8 +224,8 @@ diff -up dhcp-4.2.2b1/common/options.c.rfc3442 dhcp-4.2.2b1/common/options.c
 +
        /* Cycle through the array (or hunk) printing the data. */
        for (i = 0; i < numhunk; i++) {
-               for (j = 0; j < numelem; j++) {
-@@ -1978,6 +2011,20 @@ const char *pretty_print_option (option,
+               if ((a_array == ISC_TRUE) && (i != 0) && (numelem > 0)) {
+@@ -2025,6 +2058,20 @@ const char *pretty_print_option (option,
                                strcpy(op, piaddr(iaddr));
                                dp += 4;
                                break;
@@ -246,10 +246,10 @@ diff -up dhcp-4.2.2b1/common/options.c.rfc3442 dhcp-4.2.2b1/common/options.c
                              case '6':
                                iaddr.len = 16;
                                memcpy(iaddr.iabuf, dp, 16);
-diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
---- dhcp-4.2.2b1/common/parse.c.rfc3442        2011-07-01 14:22:38.097533441 +0200
-+++ dhcp-4.2.2b1/common/parse.c        2011-07-01 14:22:38.135532828 +0200
-@@ -341,6 +341,39 @@ int parse_ip_addr (cfile, addr)
+diff -up dhcp-4.3.0rc1/common/parse.c.rfc3442 dhcp-4.3.0rc1/common/parse.c
+--- dhcp-4.3.0rc1/common/parse.c.rfc3442       2014-01-29 10:05:48.491400195 +0100
++++ dhcp-4.3.0rc1/common/parse.c       2014-01-29 10:05:48.522399908 +0100
+@@ -335,6 +335,39 @@ int parse_ip_addr (cfile, addr)
  }     
  
  /*
@@ -289,7 +289,7 @@ diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
   * Return true if every character in the string is hexadecimal.
   */
  static int
-@@ -700,8 +733,10 @@ unsigned char *parse_numeric_aggregate (
+@@ -713,8 +746,10 @@ unsigned char *parse_numeric_aggregate (
                if (count) {
                        token = peek_token (&val, (unsigned *)0, cfile);
                        if (token != separator) {
@@ -301,7 +301,7 @@ diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
                                if (token != RBRACE && token != LBRACE)
                                        token = next_token (&val,
                                                            (unsigned *)0,
-@@ -1624,6 +1659,9 @@ int parse_option_code_definition (cfile,
+@@ -1654,6 +1689,9 @@ int parse_option_code_definition (cfile,
              case IP_ADDRESS:
                type = 'I';
                break;
@@ -311,7 +311,7 @@ diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
              case IP6_ADDRESS:
                type = '6';
                break;
-@@ -5288,6 +5326,15 @@ int parse_option_token (rv, cfile, fmt, 
+@@ -5071,6 +5109,15 @@ int parse_option_token (rv, cfile, fmt,
                }
                break;
  
@@ -327,7 +327,7 @@ diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
              case '6': /* IPv6 address. */
                if (!parse_ip6_addr(cfile, &addr)) {
                        return 0;
-@@ -5548,6 +5595,13 @@ int parse_option_decl (oc, cfile)
+@@ -5348,6 +5395,13 @@ int parse_option_decl (oc, cfile)
                                        goto exit;
                                len = ip_addr.len;
                                dp = ip_addr.iabuf;
@@ -341,10 +341,10 @@ diff -up dhcp-4.2.2b1/common/parse.c.rfc3442 dhcp-4.2.2b1/common/parse.c
  
                              alloc:
                                if (hunkix + len > sizeof hunkbuf) {
-diff -up dhcp-4.2.2b1/common/tables.c.rfc3442 dhcp-4.2.2b1/common/tables.c
---- dhcp-4.2.2b1/common/tables.c.rfc3442       2011-07-01 14:22:38.087533601 +0200
-+++ dhcp-4.2.2b1/common/tables.c       2011-07-01 14:22:38.137532796 +0200
-@@ -51,6 +51,7 @@ HASH_FUNCTIONS (option_code, const unsig
+diff -up dhcp-4.3.0rc1/common/tables.c.rfc3442 dhcp-4.3.0rc1/common/tables.c
+--- dhcp-4.3.0rc1/common/tables.c.rfc3442      2014-01-29 10:05:48.485400250 +0100
++++ dhcp-4.3.0rc1/common/tables.c      2014-01-29 10:06:25.724038563 +0100
+@@ -46,6 +46,7 @@ HASH_FUNCTIONS (option_code, const unsig
     Format codes:
  
     I - IPv4 address
@@ -352,18 +352,18 @@ diff -up dhcp-4.2.2b1/common/tables.c.rfc3442 dhcp-4.2.2b1/common/tables.c
     6 - IPv6 address
     l - 32-bit signed integer
     L - 32-bit unsigned integer
-@@ -208,6 +209,7 @@ static struct option dhcp_options[] = {
-       { "default-url", "t",                   &dhcp_universe, 114, 1 },
+@@ -214,6 +215,7 @@ static struct option dhcp_options[] = {
+ #endif
        { "subnet-selection", "I",              &dhcp_universe, 118, 1 },
-       { "domain-search", "D",         &dhcp_universe, 119, 1 },
+       { "domain-search", "D",                 &dhcp_universe, 119, 1 },
 +      { "classless-static-routes", "RIA",     &dhcp_universe, 121, 1 },
        { "vivco", "Evendor-class.",            &dhcp_universe, 124, 1 },
        { "vivso", "Evendor.",                  &dhcp_universe, 125, 1 },
  #if 0
-diff -up dhcp-4.2.2b1/includes/dhcpd.h.rfc3442 dhcp-4.2.2b1/includes/dhcpd.h
---- dhcp-4.2.2b1/includes/dhcpd.h.rfc3442      2011-07-01 14:22:38.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhcpd.h      2011-07-01 14:24:19.999810333 +0200
-@@ -2662,6 +2662,7 @@ isc_result_t range2cidr(struct iaddrcidr
+diff -up dhcp-4.3.0rc1/includes/dhcpd.h.rfc3442 dhcp-4.3.0rc1/includes/dhcpd.h
+--- dhcp-4.3.0rc1/includes/dhcpd.h.rfc3442     2014-01-29 10:05:48.470400389 +0100
++++ dhcp-4.3.0rc1/includes/dhcpd.h     2014-01-29 10:05:48.525399881 +0100
+@@ -2725,6 +2725,7 @@ isc_result_t range2cidr(struct iaddrcidr
                        const struct iaddr *lo, const struct iaddr *hi);
  isc_result_t free_iaddrcidrnetlist(struct iaddrcidrnetlist **result);
  const char *piaddr (struct iaddr);
@@ -371,7 +371,7 @@ diff -up dhcp-4.2.2b1/includes/dhcpd.h.rfc3442 dhcp-4.2.2b1/includes/dhcpd.h
  char *piaddrmask(struct iaddr *, struct iaddr *);
  char *piaddrcidr(const struct iaddr *, unsigned int);
  u_int16_t validate_port(char *);
-@@ -2869,6 +2870,7 @@ void parse_client_lease_declaration (str
+@@ -2934,6 +2935,7 @@ void parse_client_lease_declaration (str
  int parse_option_decl (struct option_cache **, struct parse *);
  void parse_string_list (struct parse *, struct string_list **, int);
  int parse_ip_addr (struct parse *, struct iaddr *);
@@ -379,10 +379,10 @@ diff -up dhcp-4.2.2b1/includes/dhcpd.h.rfc3442 dhcp-4.2.2b1/includes/dhcpd.h
  int parse_ip_addr_with_subnet(struct parse *, struct iaddrmatch *);
  void parse_reject_statement (struct parse *, struct client_config *);
  
-diff -up dhcp-4.2.2b1/includes/dhcp.h.rfc3442 dhcp-4.2.2b1/includes/dhcp.h
---- dhcp-4.2.2b1/includes/dhcp.h.rfc3442       2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/includes/dhcp.h       2011-07-01 14:22:38.145532665 +0200
-@@ -158,6 +158,7 @@ struct dhcp_packet {
+diff -up dhcp-4.3.0rc1/includes/dhcp.h.rfc3442 dhcp-4.3.0rc1/includes/dhcp.h
+--- dhcp-4.3.0rc1/includes/dhcp.h.rfc3442      2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/includes/dhcp.h      2014-01-29 10:05:48.524399890 +0100
+@@ -159,6 +159,7 @@ struct dhcp_packet {
  #define DHO_ASSOCIATED_IP                     92
  #define DHO_SUBNET_SELECTION                  118 /* RFC3011! */
  #define DHO_DOMAIN_SEARCH                     119 /* RFC3397 */
@@ -390,16 +390,16 @@ diff -up dhcp-4.2.2b1/includes/dhcp.h.rfc3442 dhcp-4.2.2b1/includes/dhcp.h
  #define DHO_VIVCO_SUBOPTIONS                  124
  #define DHO_VIVSO_SUBOPTIONS                  125
  
-diff -up dhcp-4.2.2b1/includes/dhctoken.h.rfc3442 dhcp-4.2.2b1/includes/dhctoken.h
---- dhcp-4.2.2b1/includes/dhctoken.h.rfc3442   2011-07-01 14:22:37.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhctoken.h   2011-07-01 14:25:12.541867623 +0200
-@@ -362,7 +362,8 @@ enum dhcp_token {
-       REWIND = 663,
-       INITIAL_DELAY = 664,
-       GETHOSTBYNAME = 665,
--      BOOTP_BROADCAST_ALWAYS = 666
-+      BOOTP_BROADCAST_ALWAYS = 666,
-+      DESTINATION_DESCRIPTOR = 667
+diff -up dhcp-4.3.0rc1/includes/dhctoken.h.rfc3442 dhcp-4.3.0rc1/includes/dhctoken.h
+--- dhcp-4.3.0rc1/includes/dhctoken.h.rfc3442  2014-01-29 10:05:48.435400713 +0100
++++ dhcp-4.3.0rc1/includes/dhctoken.h  2014-01-29 10:05:48.526399871 +0100
+@@ -368,7 +368,8 @@ enum dhcp_token {
+       POOL6 = 669,
+       V6RELAY = 670,
+       V6RELOPT = 671,
+-      BOOTP_BROADCAST_ALWAYS = 672
++      BOOTP_BROADCAST_ALWAYS = 672,
++      DESTINATION_DESCRIPTOR = 673
  };
  
  #define is_identifier(x)      ((x) >= FIRST_TOKEN &&  \
similarity index 89%
rename from src/patches/dhcp-4.2.1-sendDecline.patch
rename to src/patches/dhcp/dhcp-sendDecline.patch
index b2fa4affbd6a2c82643369fef5b1ae9d4c13a7e2..e68336634593db963c02b74e54af45e443e90b0b 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
---- dhcp-4.2.1-P1/client/dhc6.c.sendDecline    2010-09-10 22:27:11.000000000 +0200
-+++ dhcp-4.2.1-P1/client/dhc6.c        2011-06-17 14:19:48.992099868 +0200
-@@ -95,6 +95,8 @@ void do_select6(void *input);
+diff -up dhcp-4.3.0a1/client/dhc6.c.sendDecline dhcp-4.3.0a1/client/dhc6.c
+--- dhcp-4.3.0a1/client/dhc6.c.sendDecline     2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/client/dhc6.c 2013-12-19 15:56:18.297660118 +0100
+@@ -96,6 +96,8 @@ void do_select6(void *input);
  void do_refresh6(void *input);
  static void do_release6(void *input);
  static void start_bound(struct client_state *client);
@@ -10,7 +10,7 @@ diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
  static void start_informed(struct client_state *client);
  void informed_handler(struct packet *packet, struct client_state *client);
  void bound_handler(struct packet *packet, struct client_state *client);
-@@ -2075,6 +2077,7 @@ start_release6(struct client_state *clie
+@@ -2017,6 +2019,7 @@ start_release6(struct client_state *clie
        cancel_timeout(do_select6, client);
        cancel_timeout(do_refresh6, client);
        cancel_timeout(do_release6, client);
@@ -18,7 +18,7 @@ diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
        client->state = S_STOPPED;
  
        /*
-@@ -2708,6 +2711,7 @@ dhc6_check_reply(struct client_state *cl
+@@ -2650,6 +2653,7 @@ dhc6_check_reply(struct client_state *cl
                break;
  
              case S_STOPPED:
@@ -26,7 +26,7 @@ diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
                action = dhc6_stop_action;
                break;
  
-@@ -2809,6 +2813,7 @@ dhc6_check_reply(struct client_state *cl
+@@ -2751,6 +2755,7 @@ dhc6_check_reply(struct client_state *cl
                break;
  
              case S_STOPPED:
@@ -34,7 +34,7 @@ diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
                /* Nothing critical to do at this stage. */
                break;
  
-@@ -3799,17 +3804,23 @@ reply_handler(struct packet *packet, str
+@@ -3741,17 +3746,23 @@ reply_handler(struct packet *packet, str
        cancel_timeout(do_select6, client);
        cancel_timeout(do_refresh6, client);
        cancel_timeout(do_release6, client);
@@ -66,9 +66,9 @@ diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
                return;
        }
  
-@@ -4336,7 +4347,11 @@ start_bound(struct client_state *client)
-                                                    oldia, oldaddr);
+@@ -4279,7 +4290,11 @@ start_bound(struct client_state *client)
                        dhc6_marshall_values("new_", client, lease, ia, addr);
+                       script_write_requested6(client);
  
 -                      script_go(client);
 +                      // when script returns 3, DAD failed
@@ -79,7 +79,7 @@ diff -up dhcp-4.2.1-P1/client/dhc6.c.sendDecline dhcp-4.2.1-P1/client/dhc6.c
                }
  
                /* XXX: maybe we should loop on the old values instead? */
-@@ -4382,6 +4397,149 @@ start_bound(struct client_state *client)
+@@ -4327,6 +4342,149 @@ start_bound(struct client_state *client)
        dhc6_check_times(client);
  }
  
diff --git a/src/patches/dhcp/dhcp-sharedlib.patch b/src/patches/dhcp/dhcp-sharedlib.patch
new file mode 100644 (file)
index 0000000..abb2acc
--- /dev/null
@@ -0,0 +1,107 @@
+diff -up dhcp-4.3.1b1/common/tests/Makefile.am.uCWMBl dhcp-4.3.1b1/common/tests/Makefile.am
+--- dhcp-4.3.1b1/common/tests/Makefile.am.uCWMBl       2014-07-10 17:38:10.779828569 +0200
++++ dhcp-4.3.1b1/common/tests/Makefile.am      2014-07-10 17:38:21.355678580 +0200
+@@ -13,19 +13,19 @@ ATF_TESTS += alloc_unittest dns_unittest
+ alloc_unittest_SOURCES = test_alloc.c $(top_srcdir)/tests/t_api_dhcp.c
+ alloc_unittest_LDADD = $(ATF_LDFLAGS)
+ alloc_unittest_LDADD += ../libdhcp.a  \
+-      ../../omapip/libomapi.a \
++      ../../omapip/libomapi.la \
+       $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ dns_unittest_SOURCES = dns_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ dns_unittest_LDADD = $(ATF_LDFLAGS)
+-dns_unittest_LDADD += ../libdhcp.a  \
++dns_unittest_LDADD += ../libdhcp.la  \
+       ../../omapip/libomapi.a \
+       $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ misc_unittest_SOURCES = misc_unittest.c $(top_srcdir)/tests/t_api_dhcp.c
+ misc_unittest_LDADD = $(ATF_LDFLAGS)
+ misc_unittest_LDADD += ../libdhcp.a  \
+-      ../../omapip/libomapi.a \
++      ../../omapip/libomapi.la \
+       $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ check: $(ATF_TESTS)
+       atf-run | atf-report
+diff -up dhcp-4.3.1b1/configure.ac.uCWMBl dhcp-4.3.1b1/configure.ac
+--- dhcp-4.3.1b1/configure.ac.uCWMBl   2014-07-10 17:38:10.766828753 +0200
++++ dhcp-4.3.1b1/configure.ac  2014-07-10 17:38:10.779828569 +0200
+@@ -39,7 +39,8 @@ fi
+ # Use this to define _GNU_SOURCE to pull in the IPv6 Advanced Socket API.
+ AC_USE_SYSTEM_EXTENSIONS
+-AC_PROG_RANLIB
++# Use libtool to simplify building of shared libraries
++AC_PROG_LIBTOOL
+ AC_CONFIG_HEADERS([includes/config.h])
+ # we sometimes need to know byte order for building packets
+diff -up dhcp-4.3.1b1/dhcpctl/Makefile.am.uCWMBl dhcp-4.3.1b1/dhcpctl/Makefile.am
+--- dhcp-4.3.1b1/dhcpctl/Makefile.am.uCWMBl    2014-07-10 17:36:30.485250962 +0200
++++ dhcp-4.3.1b1/dhcpctl/Makefile.am   2014-07-10 17:38:10.780828554 +0200
+@@ -1,14 +1,14 @@
+ bin_PROGRAMS = omshell
+-lib_LIBRARIES = libdhcpctl.a
++lib_LTLIBRARIES = libdhcpctl.la
+ noinst_PROGRAMS = cltest
+ man_MANS = omshell.1 dhcpctl.3
+ EXTRA_DIST = $(man_MANS)
+ omshell_SOURCES = omshell.c
+-omshell_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
++omshell_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
+               $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+-libdhcpctl_a_SOURCES = dhcpctl.c callback.c remote.c
++libdhcpctl_la_SOURCES = dhcpctl.c callback.c remote.c
+ cltest_SOURCES = cltest.c
+-cltest_LDADD = libdhcpctl.a ../common/libdhcp.a ../omapip/libomapi.a \
++cltest_LDADD = libdhcpctl.la ../common/libdhcp.a ../omapip/libomapi.la \
+              $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/omapip/Makefile.am.uCWMBl dhcp-4.3.1b1/omapip/Makefile.am
+--- dhcp-4.3.1b1/omapip/Makefile.am.uCWMBl     2014-07-10 17:36:30.486250948 +0200
++++ dhcp-4.3.1b1/omapip/Makefile.am    2014-07-10 17:38:10.780828554 +0200
+@@ -1,7 +1,7 @@
+-lib_LIBRARIES = libomapi.a
++lib_LTLIBRARIES = libomapi.la
+ noinst_PROGRAMS = svtest
+-libomapi_a_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
++libomapi_la_SOURCES = protocol.c buffer.c alloc.c result.c connection.c \
+                    errwarn.c listener.c dispatch.c generic.c support.c \
+                    handle.c message.c convert.c hash.c auth.c inet_addr.c \
+                    array.c trace.c toisc.c iscprint.c isclib.c
+@@ -10,5 +10,5 @@ man_MANS = omapi.3
+ EXTRA_DIST = $(man_MANS)
+ svtest_SOURCES = test.c
+-svtest_LDADD = libomapi.a \
++svtest_LDADD = libomapi.la \
+              $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+diff -up dhcp-4.3.1b1/server/Makefile.am.uCWMBl dhcp-4.3.1b1/server/Makefile.am
+--- dhcp-4.3.1b1/server/Makefile.am.uCWMBl     2014-07-10 17:36:30.486250948 +0200
++++ dhcp-4.3.1b1/server/Makefile.am    2014-07-10 17:38:10.780828554 +0200
+@@ -13,7 +13,7 @@ dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c c
+               dhcpv6.c mdb6.c ldap.c ldap_casa.c
+ dhcpd_CFLAGS = $(LDAP_CFLAGS)
+-dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.a ../dhcpctl/libdhcpctl.a \
++dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.la ../dhcpctl/libdhcpctl.la \
+             $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
+ EXTRA_DIST = $(man_MANS)
+diff -up dhcp-4.3.1b1/server/tests/Makefile.am.uCWMBl dhcp-4.3.1b1/server/tests/Makefile.am
+--- dhcp-4.3.1b1/server/tests/Makefile.am.uCWMBl       2014-07-10 17:36:30.486250948 +0200
++++ dhcp-4.3.1b1/server/tests/Makefile.am      2014-07-10 17:38:10.780828554 +0200
+@@ -17,8 +17,8 @@ DHCPSRC = ../dhcp.c ../bootp.c ../confpa
+           ../ddns.c ../dhcpleasequery.c ../dhcpv6.c ../mdb6.c        \
+           ../ldap.c ../ldap_casa.c ../dhcpd.c
+-DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.a    \
+-          $(top_builddir)/dhcpctl/libdhcpctl.a \
++DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.la \
++          $(top_builddir)/dhcpctl/libdhcpctl.la \
+           $(BIND9_LIBDIR) -lirs -ldns -lisccfg -lisc
+ ATF_TESTS =
diff --git a/src/patches/dhcp/dhcp-stateless-DUID-LLT.patch b/src/patches/dhcp/dhcp-stateless-DUID-LLT.patch
new file mode 100644 (file)
index 0000000..a7f22b5
--- /dev/null
@@ -0,0 +1,48 @@
+From 61fa3dd9e789997f66e848c7e3fb2f554ee374e2 Mon Sep 17 00:00:00 2001
+From: Jiri Popelka <jpopelka@redhat.com>
+Date: Thu, 18 Dec 2014 11:53:26 +0100
+Subject: [PATCH] Write DUID_LLT even in stateless mode.
+
+By default, DHCPv6 dhclient creates DUID-LL
+if it is running in stateless mode (-6 -S) and
+doesn't write it into leases file, most likely
+because the DUID-LL is always generated the same.
+
+It's however possible to specify DUID to be of type LLT instead of LL
+with '-D LLT'. Rfc 3315 says that:
+'Clients and servers using this type of DUID MUST
+store the DUID-LLT in stable storage.'
+That's not fulfiled in this case (-6 -S -D LLT),
+because it's generated each time again.
+
+It's not a big deal because the server doesn't store any
+info about 'stateless' clients, so it doesn't matter
+that the DUID-LLT is different each time.
+But there's a TAHI test which tests this, i.e. that
+DUID-LLT is still the same even in stateless mode.
+It's a test DHCP_CONF.7.1.9, part B.
+https://www.ipv6ready.org/docs/Phase2_DHCPv6_Conformance_Latest.pdf
+
+Signed-off-by: Jiri Popelka <jpopelka@redhat.com>
+---
+ client/dhclient.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/client/dhclient.c b/client/dhclient.c
+index 5ef59cd..026e3fe 100644
+--- a/client/dhclient.c
++++ b/client/dhclient.c
+@@ -788,7 +788,9 @@ void run_stateless(int exit_mode)
+               if (default_duid.buffer != NULL)
+                       data_string_forget(&default_duid, MDL);
+-              form_duid(&default_duid, MDL);
++              if (form_duid(&default_duid, MDL) == ISC_R_SUCCESS &&
++                  duid_type == DUID_LLT)
++                      write_duid(&default_duid);
+       }
+       /* Start a configuration state machine. */
+-- 
+2.1.0
+
similarity index 72%
rename from src/patches/dhcp-4.2.0-unicast-bootp.patch
rename to src/patches/dhcp/dhcp-unicast-bootp.patch
index 78bc078dcff6dbaef8c7b9edd9f45dfd7fabcb4f..a0db9de6929b3c2275e4efa083cb75ea245770e0 100644 (file)
@@ -1,7 +1,7 @@
-diff -up dhcp-4.2.0/server/bootp.c.unicast dhcp-4.2.0/server/bootp.c
---- dhcp-4.2.0/server/bootp.c.unicast  2009-11-20 02:49:03.000000000 +0100
-+++ dhcp-4.2.0/server/bootp.c  2010-07-21 13:40:25.000000000 +0200
-@@ -58,6 +58,7 @@ void bootp (packet)
+diff -up dhcp-4.3.0a1/server/bootp.c.unicast dhcp-4.3.0a1/server/bootp.c
+--- dhcp-4.3.0a1/server/bootp.c.unicast        2013-12-11 01:25:12.000000000 +0100
++++ dhcp-4.3.0a1/server/bootp.c        2013-12-19 15:12:12.974671154 +0100
+@@ -59,6 +59,7 @@ void bootp (packet)
        char msgbuf [1024];
        int ignorep;
        int peer_has_leases = 0;
@@ -9,7 +9,7 @@ diff -up dhcp-4.2.0/server/bootp.c.unicast dhcp-4.2.0/server/bootp.c
  
        if (packet -> raw -> op != BOOTREQUEST)
                return;
-@@ -73,7 +74,7 @@ void bootp (packet)
+@@ -74,7 +75,7 @@ void bootp (packet)
                 ? inet_ntoa (packet -> raw -> giaddr)
                 : packet -> interface -> name);
  
@@ -18,24 +18,26 @@ diff -up dhcp-4.2.0/server/bootp.c.unicast dhcp-4.2.0/server/bootp.c
                log_info ("%s: network unknown", msgbuf);
                return;
        }
-@@ -390,6 +391,13 @@ void bootp (packet)
-                                             from, &to, &hto);
+@@ -396,6 +397,15 @@ void bootp (packet)
                        goto out;
                }
 +      } else if (norelay == 2) {
 +              to.sin_addr = raw.ciaddr;
 +              to.sin_port = remote_port;
 +              if (fallback_interface) {
-+                      result = send_packet (fallback_interface, (struct packet *)0, &raw, outgoing.packet_length, from, &to, &hto);
++                      result = send_packet (fallback_interface, NULL, &raw,
++                                            outgoing.packet_length, from,
++                                            &to, &hto);
 +                      goto out;
 +              }
  
        /* If it comes from a client that already knows its address
           and is not requesting a broadcast response, and we can
-diff -up dhcp-4.2.0/server/dhcp.c.unicast dhcp-4.2.0/server/dhcp.c
---- dhcp-4.2.0/server/dhcp.c.unicast   2010-06-01 19:29:59.000000000 +0200
-+++ dhcp-4.2.0/server/dhcp.c   2010-07-21 13:40:25.000000000 +0200
-@@ -4185,6 +4185,7 @@ int locate_network (packet)
+diff -up dhcp-4.3.0a1/server/dhcp.c.unicast dhcp-4.3.0a1/server/dhcp.c
+--- dhcp-4.3.0a1/server/dhcp.c.unicast 2013-12-13 21:50:38.000000000 +0100
++++ dhcp-4.3.0a1/server/dhcp.c 2013-12-19 15:12:12.975671140 +0100
+@@ -4627,6 +4627,7 @@ int locate_network (packet)
        struct data_string data;
        struct subnet *subnet = (struct subnet *)0;
        struct option_cache *oc;
@@ -43,7 +45,7 @@ diff -up dhcp-4.2.0/server/dhcp.c.unicast dhcp-4.2.0/server/dhcp.c
  
        /* See if there's a Relay Agent Link Selection Option, or a
         * Subnet Selection Option.  The Link-Select and Subnet-Select
-@@ -4200,12 +4201,24 @@ int locate_network (packet)
+@@ -4642,12 +4643,24 @@ int locate_network (packet)
           from the interface, if there is one.   If not, fail. */
        if (!oc && !packet -> raw -> giaddr.s_addr) {
                if (packet -> interface -> shared_network) {
@@ -73,7 +75,7 @@ diff -up dhcp-4.2.0/server/dhcp.c.unicast dhcp-4.2.0/server/dhcp.c
        }
  
        /* If there's an option indicating link connection, and it's valid,
-@@ -4228,7 +4241,10 @@ int locate_network (packet)
+@@ -4670,7 +4683,10 @@ int locate_network (packet)
                data_string_forget (&data, MDL);
        } else {
                ia.len = 4;
@@ -85,7 +87,7 @@ diff -up dhcp-4.2.0/server/dhcp.c.unicast dhcp-4.2.0/server/dhcp.c
        }
  
        /* If we know the subnet on which the IP address lives, use it. */
-@@ -4236,7 +4252,10 @@ int locate_network (packet)
+@@ -4678,7 +4694,10 @@ int locate_network (packet)
                shared_network_reference (&packet -> shared_network,
                                          subnet -> shared_network, MDL);
                subnet_dereference (&subnet, MDL);
similarity index 71%
rename from src/patches/dhcp-4.2.2-xen-checksum.patch
rename to src/patches/dhcp/dhcp-xen-checksum.patch
index 038d346d726e131f1ab2579fe015a72b49733a0d..eabc3c12711130c0f8476bf7d9127d086bc9e814 100644 (file)
@@ -1,19 +1,19 @@
-diff -up dhcp-4.2.2b1/common/bpf.c.xen dhcp-4.2.2b1/common/bpf.c
---- dhcp-4.2.2b1/common/bpf.c.xen      2009-11-20 02:48:59.000000000 +0100
-+++ dhcp-4.2.2b1/common/bpf.c  2011-07-01 14:00:16.936959001 +0200
-@@ -485,7 +485,7 @@ ssize_t receive_packet (interface, buf, 
-               offset = decode_udp_ip_header (interface,
-                                              interface -> rbuf,
-                                              interface -> rbuf_offset,
+diff -up dhcp-4.3.0rc1/common/bpf.c.xen dhcp-4.3.0rc1/common/bpf.c
+--- dhcp-4.3.0rc1/common/bpf.c.xen     2014-01-29 10:03:27.503941664 +0100
++++ dhcp-4.3.0rc1/common/bpf.c 2014-01-29 10:03:37.564812175 +0100
+@@ -481,7 +481,7 @@ ssize_t receive_packet (interface, buf,
+               /* Decode the IP and UDP headers... */
+               offset = decode_udp_ip_header(interface, interface->rbuf,
+                                              interface->rbuf_offset,
 -                                             from, hdr.bh_caplen, &paylen);
 +                                             from, hdr.bh_caplen, &paylen, 0);
  
                /* If the IP or UDP checksum was bad, skip the packet... */
                if (offset < 0) {
-diff -up dhcp-4.2.2b1/common/dlpi.c.xen dhcp-4.2.2b1/common/dlpi.c
---- dhcp-4.2.2b1/common/dlpi.c.xen     2011-05-11 16:20:59.000000000 +0200
-+++ dhcp-4.2.2b1/common/dlpi.c 2011-07-01 14:00:16.937958997 +0200
-@@ -693,7 +693,7 @@ ssize_t receive_packet (interface, buf, 
+diff -up dhcp-4.3.0rc1/common/dlpi.c.xen dhcp-4.3.0rc1/common/dlpi.c
+--- dhcp-4.3.0rc1/common/dlpi.c.xen    2014-01-25 05:18:03.000000000 +0100
++++ dhcp-4.3.0rc1/common/dlpi.c        2014-01-29 10:03:27.503941664 +0100
+@@ -691,7 +691,7 @@ ssize_t receive_packet (interface, buf,
        length -= offset;
  #endif
        offset = decode_udp_ip_header (interface, dbuf, bufix,
@@ -22,13 +22,13 @@ diff -up dhcp-4.2.2b1/common/dlpi.c.xen dhcp-4.2.2b1/common/dlpi.c
  
        /*
         * If the IP or UDP checksum was bad, skip the packet...
-diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
---- dhcp-4.2.2b1/common/lpf.c.xen      2011-05-10 16:38:58.000000000 +0200
-+++ dhcp-4.2.2b1/common/lpf.c  2011-07-01 14:11:24.725748028 +0200
-@@ -29,19 +29,33 @@
+diff -up dhcp-4.3.0rc1/common/lpf.c.xen dhcp-4.3.0rc1/common/lpf.c
+--- dhcp-4.3.0rc1/common/lpf.c.xen     2014-01-25 05:18:03.000000000 +0100
++++ dhcp-4.3.0rc1/common/lpf.c 2014-01-29 10:03:27.504941651 +0100
+@@ -29,14 +29,15 @@
  #include "dhcpd.h"
  #if defined (USE_LPF_SEND) || defined (USE_LPF_RECEIVE)
- #include <sys/ioctl.h>
 +#include <sys/socket.h>
  #include <sys/uio.h>
  #include <errno.h>
@@ -42,7 +42,9 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
  #include "includes/netinet/ip.h"
  #include "includes/netinet/udp.h"
  #include "includes/netinet/if_ether.h"
- #include <net/if.h>
+@@ -51,6 +52,19 @@
+ /* Reinitializes the specified interface after an address change.   This
+    is not required for packet-filter APIs. */
  
 +#ifndef PACKET_AUXDATA
 +#define PACKET_AUXDATA 8
@@ -57,10 +59,10 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
 +};
 +#endif
 +
- /* Reinitializes the specified interface after an address change.   This
-    is not required for packet-filter APIs. */
-@@ -67,10 +81,14 @@ int if_register_lpf (info)
+ #ifdef USE_LPF_SEND
+ void if_reinitialize_send (info)
+       struct interface_info *info;
+@@ -73,10 +87,14 @@ int if_register_lpf (info)
        struct interface_info *info;
  {
        int sock;
@@ -77,7 +79,7 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
                           htons((short)ETH_P_ALL))) < 0) {
                if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
                    errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
-@@ -85,11 +103,17 @@ int if_register_lpf (info)
+@@ -91,11 +109,17 @@ int if_register_lpf (info)
                log_fatal ("Open a socket for LPF: %m");
        }
  
@@ -98,7 +100,7 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
                if (errno == ENOPROTOOPT || errno == EPROTONOSUPPORT ||
                    errno == ESOCKTNOSUPPORT || errno == EPFNOSUPPORT ||
                    errno == EAFNOSUPPORT || errno == EINVAL) {
-@@ -171,9 +195,18 @@ static void lpf_gen_filter_setup (struct
+@@ -177,9 +201,18 @@ static void lpf_gen_filter_setup (struct
  void if_register_receive (info)
        struct interface_info *info;
  {
@@ -117,7 +119,7 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
  #if defined (HAVE_TR_SUPPORT)
        if (info -> hw_address.hbuf [0] == HTYPE_IEEE802)
                lpf_tr_filter_setup (info);
-@@ -295,7 +328,6 @@ ssize_t send_packet (interface, packet, 
+@@ -301,7 +334,6 @@ ssize_t send_packet (interface, packet,
        double hh [16];
        double ih [1536 / sizeof (double)];
        unsigned char *buf = (unsigned char *)ih;
@@ -125,7 +127,7 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
        int result;
        int fudge;
  
-@@ -316,17 +348,7 @@ ssize_t send_packet (interface, packet, 
+@@ -322,17 +354,7 @@ ssize_t send_packet (interface, packet,
                                (unsigned char *)raw, len);
        memcpy (buf + ibufp, raw, len);
  
@@ -144,7 +146,7 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
        if (result < 0)
                log_error ("send_packet: %m");
        return result;
-@@ -343,14 +365,35 @@ ssize_t receive_packet (interface, buf, 
+@@ -349,14 +371,35 @@ ssize_t receive_packet (interface, buf,
  {
        int length = 0;
        int offset = 0;
@@ -181,7 +183,7 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
        bufix = 0;
        /* Decode the physical header... */
        offset = decode_hw_header (interface, ibuf, bufix, hfrom);
-@@ -367,7 +410,7 @@ ssize_t receive_packet (interface, buf, 
+@@ -373,7 +416,7 @@ ssize_t receive_packet (interface, buf,
  
        /* Decode the IP and UDP headers... */
        offset = decode_udp_ip_header (interface, ibuf, bufix, from,
@@ -190,10 +192,10 @@ diff -up dhcp-4.2.2b1/common/lpf.c.xen dhcp-4.2.2b1/common/lpf.c
  
        /* If the IP or UDP checksum was bad, skip the packet... */
        if (offset < 0)
-diff -up dhcp-4.2.2b1/common/nit.c.xen dhcp-4.2.2b1/common/nit.c
---- dhcp-4.2.2b1/common/nit.c.xen      2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/common/nit.c  2011-07-01 14:00:16.939958989 +0200
-@@ -369,7 +369,7 @@ ssize_t receive_packet (interface, buf, 
+diff -up dhcp-4.3.0rc1/common/nit.c.xen dhcp-4.3.0rc1/common/nit.c
+--- dhcp-4.3.0rc1/common/nit.c.xen     2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/nit.c 2014-01-29 10:03:27.504941651 +0100
+@@ -363,7 +363,7 @@ ssize_t receive_packet (interface, buf,
  
        /* Decode the IP and UDP headers... */
        offset = decode_udp_ip_header (interface, ibuf, bufix,
@@ -202,10 +204,10 @@ diff -up dhcp-4.2.2b1/common/nit.c.xen dhcp-4.2.2b1/common/nit.c
  
        /* If the IP or UDP checksum was bad, skip the packet... */
        if (offset < 0)
-diff -up dhcp-4.2.2b1/common/packet.c.xen dhcp-4.2.2b1/common/packet.c
---- dhcp-4.2.2b1/common/packet.c.xen   2009-07-23 20:52:20.000000000 +0200
-+++ dhcp-4.2.2b1/common/packet.c       2011-07-01 14:00:16.939958989 +0200
-@@ -211,7 +211,7 @@ ssize_t
+diff -up dhcp-4.3.0rc1/common/packet.c.xen dhcp-4.3.0rc1/common/packet.c
+--- dhcp-4.3.0rc1/common/packet.c.xen  2013-12-11 01:01:02.000000000 +0100
++++ dhcp-4.3.0rc1/common/packet.c      2014-01-29 10:03:27.504941651 +0100
+@@ -226,7 +226,7 @@ ssize_t
  decode_udp_ip_header(struct interface_info *interface,
                     unsigned char *buf, unsigned bufix,
                     struct sockaddr_in *from, unsigned buflen,
@@ -214,7 +216,7 @@ diff -up dhcp-4.2.2b1/common/packet.c.xen dhcp-4.2.2b1/common/packet.c
  {
    unsigned char *data;
    struct ip ip;
-@@ -322,7 +322,7 @@ decode_udp_ip_header(struct interface_in
+@@ -337,7 +337,7 @@ decode_udp_ip_header(struct interface_in
                                           8, IPPROTO_UDP + ulen))));
  
    udp_packets_seen++;
@@ -223,10 +225,10 @@ diff -up dhcp-4.2.2b1/common/packet.c.xen dhcp-4.2.2b1/common/packet.c
          udp_packets_bad_checksum++;
          if (udp_packets_seen > 4 &&
              (udp_packets_seen / udp_packets_bad_checksum) < 2) {
-diff -up dhcp-4.2.2b1/common/upf.c.xen dhcp-4.2.2b1/common/upf.c
---- dhcp-4.2.2b1/common/upf.c.xen      2009-11-20 02:49:01.000000000 +0100
-+++ dhcp-4.2.2b1/common/upf.c  2011-07-01 14:00:16.940958986 +0200
-@@ -320,7 +320,7 @@ ssize_t receive_packet (interface, buf, 
+diff -up dhcp-4.3.0rc1/common/upf.c.xen dhcp-4.3.0rc1/common/upf.c
+--- dhcp-4.3.0rc1/common/upf.c.xen     2014-01-26 19:40:44.000000000 +0100
++++ dhcp-4.3.0rc1/common/upf.c 2014-01-29 10:03:27.505941638 +0100
+@@ -314,7 +314,7 @@ ssize_t receive_packet (interface, buf,
  
        /* Decode the IP and UDP headers... */
        offset = decode_udp_ip_header (interface, ibuf, bufix,
@@ -235,10 +237,10 @@ diff -up dhcp-4.2.2b1/common/upf.c.xen dhcp-4.2.2b1/common/upf.c
  
        /* If the IP or UDP checksum was bad, skip the packet... */
        if (offset < 0)
-diff -up dhcp-4.2.2b1/includes/dhcpd.h.xen dhcp-4.2.2b1/includes/dhcpd.h
---- dhcp-4.2.2b1/includes/dhcpd.h.xen  2011-07-01 14:00:16.000000000 +0200
-+++ dhcp-4.2.2b1/includes/dhcpd.h      2011-07-01 14:12:18.069642470 +0200
-@@ -2796,7 +2796,7 @@ ssize_t decode_hw_header (struct interfa
+diff -up dhcp-4.3.0rc1/includes/dhcpd.h.xen dhcp-4.3.0rc1/includes/dhcpd.h
+--- dhcp-4.3.0rc1/includes/dhcpd.h.xen 2014-01-29 10:03:27.489941844 +0100
++++ dhcp-4.3.0rc1/includes/dhcpd.h     2014-01-29 10:03:27.506941626 +0100
+@@ -2861,7 +2861,7 @@ ssize_t decode_hw_header (struct interfa
                          unsigned, struct hardware *);
  ssize_t decode_udp_ip_header (struct interface_info *, unsigned char *,
                              unsigned, struct sockaddr_in *,
diff --git a/src/patches/dnsmasq/0001-Add-newline-at-the-end-of-example-config-file.patch b/src/patches/dnsmasq/0001-Add-newline-at-the-end-of-example-config-file.patch
new file mode 100644 (file)
index 0000000..adcb44f
--- /dev/null
@@ -0,0 +1,23 @@
+From f2658275b25ebfe691cdcb9fede85a3088cca168 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 25 Sep 2014 21:51:25 +0100
+Subject: [PATCH 01/55] Add newline at the end of example config file.
+
+---
+ dnsmasq.conf.example | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
+index 83924fc4a9b4..6b00bd34fbb5 100644
+--- a/dnsmasq.conf.example
++++ b/dnsmasq.conf.example
+@@ -645,4 +645,4 @@
+ #conf-dir=/etc/dnsmasq.d,.bak
+ # Include all files in a directory which end in .conf
+-#conf-dir=/etc/dnsmasq.d/*.conf
+\ No newline at end of file
++#conf-dir=/etc/dnsmasq.d/*.conf
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0002-crash-at-startup-when-an-empty-suffix-is-supplied-to.patch b/src/patches/dnsmasq/0002-crash-at-startup-when-an-empty-suffix-is-supplied-to.patch
new file mode 100644 (file)
index 0000000..b84440b
--- /dev/null
@@ -0,0 +1,86 @@
+From 00cd9d551998307225312fd21f761cfa8868bd2c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Thu, 2 Oct 2014 21:44:21 +0100
+Subject: [PATCH 02/55] crash at startup when an empty suffix is supplied to
+ --conf-dir
+
+---
+ CHANGELOG    |  6 ++++++
+ src/option.c | 38 +++++++++++++++++++++++---------------
+ 2 files changed, 29 insertions(+), 15 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 768e2aaca42a..13ab41c05fc3 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -1,3 +1,9 @@
++version 2.73
++            Fix crash at startup when an empty suffix is supplied to
++          --conf-dir, also trivial memory leak. Thanks to 
++          Tomas Hozza for spotting this.
++      
++
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/option.c b/src/option.c
+index 45d8875fb7f9..b08e98e16f84 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -1474,22 +1474,25 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+       for (arg = comma; arg; arg = comma) 
+         {
+           comma = split(arg);
+-          li = opt_malloc(sizeof(struct list));
+-          if (*arg == '*')
++          if (strlen(arg) != 0)
+             {
+-              li->next = match_suffix;
+-              match_suffix = li;
+-              /* Have to copy: buffer is overwritten */
+-              li->suffix = opt_string_alloc(arg+1);
+-            }
+-          else
+-            {
+-              li->next = ignore_suffix;
+-              ignore_suffix = li;
+-              /* Have to copy: buffer is overwritten */
+-              li->suffix = opt_string_alloc(arg);
++              li = opt_malloc(sizeof(struct list));
++              if (*arg == '*')
++                {
++                  li->next = match_suffix;
++                  match_suffix = li;
++                  /* Have to copy: buffer is overwritten */
++                  li->suffix = opt_string_alloc(arg+1);
++                }
++              else
++                {
++                  li->next = ignore_suffix;
++                  ignore_suffix = li;
++                  /* Have to copy: buffer is overwritten */
++                  li->suffix = opt_string_alloc(arg);
++                }
+             }
+-        };
++        }
+       
+       if (!(dir_stream = opendir(directory)))
+         die(_("cannot access directory %s: %s"), directory, EC_FILE);
+@@ -1555,7 +1558,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+           free(ignore_suffix->suffix);
+           free(ignore_suffix);
+         }
+-            
++      for(; match_suffix; match_suffix = li)
++        {
++          li = match_suffix->next;
++          free(match_suffix->suffix);
++          free(match_suffix);
++        }    
+       break;
+       }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0003-Debian-build-fixes-for-kFreeBSD.patch b/src/patches/dnsmasq/0003-Debian-build-fixes-for-kFreeBSD.patch
new file mode 100644 (file)
index 0000000..fe73acd
--- /dev/null
@@ -0,0 +1,36 @@
+From 6ac3bc0452a74e16e3d620a0757b0f8caab182ec Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 3 Oct 2014 08:48:11 +0100
+Subject: [PATCH 03/55] Debian build fixes for kFreeBSD
+
+---
+ src/tables.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/src/tables.c b/src/tables.c
+index 834f11944cd0..dcdef794c4d2 100644
+--- a/src/tables.c
++++ b/src/tables.c
+@@ -20,6 +20,10 @@
+ #if defined(HAVE_IPSET) && defined(HAVE_BSD_NETWORK)
++#ifndef __FreeBSD__
++#include <bsd/string.h>
++#endif
++
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+@@ -136,7 +140,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr,
+       return -1;
+     }
+   
+-  if (rc = pfr_add_tables(&table, 1, &n, 0)) 
++  if ((rc = pfr_add_tables(&table, 1, &n, 0))) 
+     {
+       my_syslog(LOG_WARNING, _("warning: pfr_add_tables: %s(%d)"),
+               pfr_strerror(errno),rc);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0004-Set-conntrack-mark-before-connect-call.patch b/src/patches/dnsmasq/0004-Set-conntrack-mark-before-connect-call.patch
new file mode 100644 (file)
index 0000000..5d7c3c4
--- /dev/null
@@ -0,0 +1,68 @@
+From e9828b6f66b22ce8873f8d30a773137d1aef1b92 Mon Sep 17 00:00:00 2001
+From: Karl Vogel <karl.vogel@gmail.com>
+Date: Fri, 3 Oct 2014 21:45:15 +0100
+Subject: [PATCH 04/55] Set conntrack mark before connect() call.
+
+SO_MARK has to be done before issuing the connect() call on the
+TCP socket.
+---
+ src/forward.c | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 4895efeba89a..2cf29eba6e26 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1796,6 +1796,24 @@ unsigned char *tcp_request(int confd, time_t now,
+                         if ((last_server->tcpfd = socket(last_server->addr.sa.sa_family, SOCK_STREAM, 0)) == -1)
+                           continue;
+                         
++#ifdef HAVE_CONNTRACK
++                        /* Copy connection mark of incoming query to outgoing connection. */
++                        if (option_bool(OPT_CONNTRACK))
++                          {
++                            unsigned int mark;
++                            struct all_addr local;
++#ifdef HAVE_IPV6                    
++                            if (local_addr->sa.sa_family == AF_INET6)
++                              local.addr.addr6 = local_addr->in6.sin6_addr;
++                            else
++#endif
++                              local.addr.addr4 = local_addr->in.sin_addr;
++                            
++                            if (get_incoming_mark(&peer_addr, &local, 1, &mark))
++                              setsockopt(last_server->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
++                          }
++#endif        
++                    
+                         if ((!local_bind(last_server->tcpfd,  &last_server->source_addr, last_server->interface, 1) ||
+                              connect(last_server->tcpfd, &last_server->addr.sa, sa_len(&last_server->addr)) == -1))
+                           {
+@@ -1820,24 +1838,6 @@ unsigned char *tcp_request(int confd, time_t now,
+                             size = new_size;
+                           }
+ #endif
+-                        
+-#ifdef HAVE_CONNTRACK
+-                        /* Copy connection mark of incoming query to outgoing connection. */
+-                        if (option_bool(OPT_CONNTRACK))
+-                          {
+-                            unsigned int mark;
+-                            struct all_addr local;
+-#ifdef HAVE_IPV6                    
+-                            if (local_addr->sa.sa_family == AF_INET6)
+-                              local.addr.addr6 = local_addr->in6.sin6_addr;
+-                            else
+-#endif
+-                              local.addr.addr4 = local_addr->in.sin_addr;
+-                            
+-                            if (get_incoming_mark(&peer_addr, &local, 1, &mark))
+-                              setsockopt(last_server->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(unsigned int));
+-                          }
+-#endif        
+                       }
+                     
+                     *length = htons(size);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0005-Fix-typo-in-new-Dbus-code.patch b/src/patches/dnsmasq/0005-Fix-typo-in-new-Dbus-code.patch
new file mode 100644 (file)
index 0000000..80c55f6
--- /dev/null
@@ -0,0 +1,26 @@
+From 17b475912f6a4e72797a543dad59d4d5dde6bb1b Mon Sep 17 00:00:00 2001
+From: Daniel Collins <daniel.collins@smoothwall.net>
+Date: Fri, 3 Oct 2014 21:58:43 +0100
+Subject: [PATCH 05/55] Fix typo in new Dbus code.
+
+Simon's fault.
+---
+ src/dbus.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/dbus.c b/src/dbus.c
+index 15fed906bd90..a2a94dc85dac 100644
+--- a/src/dbus.c
++++ b/src/dbus.c
+@@ -426,7 +426,7 @@ static DBusMessage *dbus_set_bool(DBusMessage *message, int flag, char *name)
+     }
+   else
+     {
+-      my_syslog(LOG_INFO, "Disabling --$s option from D-Bus", name);
++      my_syslog(LOG_INFO, "Disabling --%s option from D-Bus", name);
+       reset_option_bool(flag);
+     }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0006-Fit-example-conf-file-typo.patch b/src/patches/dnsmasq/0006-Fit-example-conf-file-typo.patch
new file mode 100644 (file)
index 0000000..5f9f572
--- /dev/null
@@ -0,0 +1,22 @@
+From 3d9d2dd0018603a2ae4b9cd65ac6ff959f4fd8c7 Mon Sep 17 00:00:00 2001
+From: Tomas Hozza <thozza@redhat.com>
+Date: Mon, 6 Oct 2014 10:46:48 +0100
+Subject: [PATCH 06/55] Fit example conf file typo.
+
+---
+ dnsmasq.conf.example | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example
+index 6b00bd34fbb5..1bd305dbdbad 100644
+--- a/dnsmasq.conf.example
++++ b/dnsmasq.conf.example
+@@ -645,4 +645,4 @@
+ #conf-dir=/etc/dnsmasq.d,.bak
+ # Include all files in a directory which end in .conf
+-#conf-dir=/etc/dnsmasq.d/*.conf
++#conf-dir=/etc/dnsmasq.d/,*.conf
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0007-Improve-RFC-compliance-when-unable-to-supply-address.patch b/src/patches/dnsmasq/0007-Improve-RFC-compliance-when-unable-to-supply-address.patch
new file mode 100644 (file)
index 0000000..370d106
--- /dev/null
@@ -0,0 +1,107 @@
+From b9ff5c8f435173cfa616e3c398bdc089ef690a07 Mon Sep 17 00:00:00 2001
+From: Vladislav Grishenko <themiron@mail.ru>
+Date: Mon, 6 Oct 2014 14:34:24 +0100
+Subject: [PATCH 07/55] Improve RFC-compliance when unable to supply addresses
+ in DHCPv6
+
+While testing https://github.com/sbyx/odhcp6c client I have noticed it
+permanently crashes after startup.
+
+The reason was it (odhcp6c) doesn't expect empty IA options in ADVERTISE
+message without any suboptions.
+
+Despite this validation bug of odhcp6c, dnsmasq should not generate
+ADVERTISE messages with IA if there's nothing to advert per  RFC 3315
+17.2.2:
+
+   If the server will not assign any addresses to any IAs in a
+
+   subsequent Request from the client, the server MUST send an Advertise
+
+   message to the client that includes only a Status Code option with
+
+   code NoAddrsAvail and a status message for the user, a Server
+
+   Identifier option with the server's DUID, and a Client Identifier
+
+   option with the client's DUID.
+
+Meanwhile it's need to add status code for every IA in REPLY message per
+RFC3315 18.2.1:
+
+   If the server cannot assign any addresses to an IA in the message
+   from the client, the server MUST include the IA in the Reply message
+   with no addresses in the IA and a Status Code option in the IA
+   containing status code NoAddrsAvail.
+
+So, I've changed the logic to skip IA completely from ADVERTISE messages and
+to add NoAddrsAvail subcode into IA of REPLY messages.
+
+As for overhead, yes, I believe it's ok to return NoAddrsAvail twice in IA
+and in global section for compatibility with all old and new clients.
+---
+ src/rfc3315.c | 27 +++++++++++++++++++++++++--
+ 1 file changed, 25 insertions(+), 2 deletions(-)
+
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index 5ebf09d50ac1..ddb390bf1136 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -691,6 +691,8 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+ #endif
+           o = build_ia(state, &t1cntr);
++          if (address_assigned)
++              address_assigned = 2;
+           for (ia_counter = 0; ia_option; ia_counter++, ia_option = opt6_find(opt6_next(ia_option, ia_end), ia_end, OPTION6_IAADDR, 24))
+             {
+@@ -781,6 +783,27 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+               address_assigned = 1;
+             }
+           
++          if (address_assigned != 1)
++            {
++              /* If the server will not assign any addresses to any IAs in a
++                 subsequent Request from the client, the server MUST send an Advertise
++                 message to the client that doesn't include any IA options. */
++              if (!state->lease_allocate)
++                {
++                  save_counter(o);
++                  continue;
++                }
++              
++              /* If the server cannot assign any addresses to an IA in the message
++                 from the client, the server MUST include the IA in the Reply message
++                 with no addresses in the IA and a Status Code option in the IA
++                 containing status code NoAddrsAvail. */
++              o1 = new_opt6(OPTION6_STATUS_CODE);
++              put_opt6_short(DHCP6NOADDRS);
++              put_opt6_string(_("address unavailable"));
++              end_opt6(o1);
++            }
++          
+           end_ia(t1cntr, min_time, 0);
+           end_opt6(o);        
+         }
+@@ -806,7 +829,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+           put_opt6_short(DHCP6NOADDRS);
+           put_opt6_string(_("no addresses available"));
+           end_opt6(o1);
+-          log6_packet(state, "DHCPADVERTISE", NULL, _("no addresses available"));
++          log6_packet(state, state->lease_allocate ? "DHCPREPLY" : "DHCPADVERTISE", NULL, _("no addresses available"));
+         }
+       break;
+@@ -862,7 +885,7 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+                     {
+                       /* Static range, not configured. */
+                       o1 = new_opt6(OPTION6_STATUS_CODE);
+-                      put_opt6_short(DHCP6UNSPEC);
++                      put_opt6_short(DHCP6NOADDRS);
+                       put_opt6_string(_("address unavailable"));
+                       end_opt6(o1);
+                     }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0008-Fix-conntrack-with-bind-interfaces.patch b/src/patches/dnsmasq/0008-Fix-conntrack-with-bind-interfaces.patch
new file mode 100644 (file)
index 0000000..3f8bad3
--- /dev/null
@@ -0,0 +1,39 @@
+From 98906275a02ae260fe3f82133bd79054f8315f06 Mon Sep 17 00:00:00 2001
+From: Hans Dedecker <dedeckeh@gmail.com>
+Date: Tue, 9 Dec 2014 22:22:53 +0000
+Subject: [PATCH 08/55] Fix conntrack with --bind-interfaces
+
+Make sure dst_addr is assigned the correct address in receive_query when OPTNOWILD is
+enabled so the assigned mark can be correctly retrieved and set in forward_query when
+conntrack is enabled.
+
+Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
+---
+ src/forward.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 2cf29eba6e26..408a179a20f4 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1048,7 +1048,7 @@ void receive_query(struct listener *listen, time_t now)
+   /* packet buffer overwritten */
+   daemon->srv_save = NULL;
+   
+-  dst_addr_4.s_addr = 0;
++  dst_addr_4.s_addr = dst_addr.addr.addr4.s_addr = 0;
+   netmask.s_addr = 0;
+   
+   if (option_bool(OPT_NOWILD) && listen->iface)
+@@ -1057,7 +1057,7 @@ void receive_query(struct listener *listen, time_t now)
+      
+       if (listen->family == AF_INET)
+       {
+-        dst_addr_4 = listen->iface->addr.in.sin_addr;
++        dst_addr_4 = dst_addr.addr.addr4 = listen->iface->addr.in.sin_addr;
+         netmask = listen->iface->netmask;
+       }
+     }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0009-Use-inotify-instead-of-polling-on-Linux.patch b/src/patches/dnsmasq/0009-Use-inotify-instead-of-polling-on-Linux.patch
new file mode 100644 (file)
index 0000000..8193920
--- /dev/null
@@ -0,0 +1,257 @@
+From 193de4abf59e49c6b70d54cfe9720fcb95ca2f71 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 10 Dec 2014 17:32:16 +0000
+Subject: [PATCH 09/55] Use inotify instead of polling on Linux.
+
+This should solve problems people are seeing when a file changes
+twice within a second and thus is missed for polling.
+---
+ Makefile       |   2 +-
+ bld/Android.mk |   2 +-
+ src/dnsmasq.c  |  25 ++++++++++++--
+ src/dnsmasq.h  |  11 ++++++-
+ src/inotify.c  | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 5 files changed, 137 insertions(+), 5 deletions(-)
+ create mode 100644 src/inotify.c
+
+diff --git a/Makefile b/Makefile
+index 58a7975f60b5..c340f1c7b59a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -69,7 +69,7 @@ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+        dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
+        helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o \
+        dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o \
+-       domain.o dnssec.o blockdata.o tables.o loop.o
++       domain.o dnssec.o blockdata.o tables.o loop.o inotify.o
+ hdrs = dnsmasq.h config.h dhcp-protocol.h dhcp6-protocol.h \
+        dns-protocol.h radv-protocol.h ip6addr.h
+diff --git a/bld/Android.mk b/bld/Android.mk
+index d855094eb264..d627796e8edc 100644
+--- a/bld/Android.mk
++++ b/bld/Android.mk
+@@ -10,7 +10,7 @@ LOCAL_SRC_FILES :=  bpf.c cache.c dbus.c dhcp.c dnsmasq.c \
+                   dhcp6.c rfc3315.c dhcp-common.c outpacket.c \
+                   radv.c slaac.c auth.c ipset.c domain.c \
+                   dnssec.c dnssec-openssl.c blockdata.c tables.c \
+-                  loop.c
++                  loop.c inotify.c
+ LOCAL_MODULE := dnsmasq
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index f4a89fc38183..bf2e25a55780 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -315,9 +315,15 @@ int main (int argc, char **argv)
+   if (daemon->port != 0)
+     {
+       cache_init();
++
+ #ifdef HAVE_DNSSEC
+       blockdata_init();
+ #endif
++
++#ifdef HAVE_LINUX_NETWORK
++      if (!option_bool(OPT_NO_POLL))
++      inotify_dnsmasq_init();
++#endif
+     }
+     
+   if (option_bool(OPT_DBUS))
+@@ -793,6 +799,11 @@ int main (int argc, char **argv)
+   
+   pid = getpid();
+   
++#ifdef HAVE_LINUX_NETWORK
++  /* Using inotify, have to select a resolv file at startup */
++  poll_resolv(1, 0, now);
++#endif
++  
+   while (1)
+     {
+       int maxfd = -1;
+@@ -862,11 +873,16 @@ int main (int argc, char **argv)
+ #if defined(HAVE_LINUX_NETWORK)
+       FD_SET(daemon->netlinkfd, &rset);
+       bump_maxfd(daemon->netlinkfd, &maxfd);
++      if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
++      {
++        FD_SET(daemon->inotifyfd, &rset);
++        bump_maxfd(daemon->inotifyfd, &maxfd);
++      }
+ #elif defined(HAVE_BSD_NETWORK)
+       FD_SET(daemon->routefd, &rset);
+       bump_maxfd(daemon->routefd, &maxfd);
+ #endif
+-
++      
+       FD_SET(piperead, &rset);
+       bump_maxfd(piperead, &maxfd);
+@@ -929,6 +945,10 @@ int main (int argc, char **argv)
+       route_sock();
+ #endif
++#ifdef HAVE_LINUX_NETWORK
++      if (daemon->port != 0 && !option_bool(OPT_NO_POLL) && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check())
++      poll_resolv(1, 1, now);           
++#else
+       /* Check for changes to resolv files once per second max. */
+       /* Don't go silent for long periods if the clock goes backwards. */
+       if (daemon->last_resolv == 0 || 
+@@ -941,7 +961,8 @@ int main (int argc, char **argv)
+         poll_resolv(0, daemon->last_resolv != 0, now);          
+         daemon->last_resolv = now;
+       }
+-      
++#endif
++
+       if (FD_ISSET(piperead, &rset))
+       async_event(piperead, now);
+       
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index e74b15a5459a..ebb6b957812f 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -541,6 +541,10 @@ struct resolvc {
+   int is_default, logged;
+   time_t mtime;
+   char *name;
++#ifdef HAVE_LINUX_NETWORK
++  int wd; /* inotify watch descriptor */
++  char *file; /* pointer to file part if path */
++#endif
+ };
+ /* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile */
+@@ -998,7 +1002,7 @@ extern struct daemon {
+   /* DHCP state */
+   int dhcpfd, helperfd, pxefd; 
+ #if defined(HAVE_LINUX_NETWORK)
+-  int netlinkfd;
++  int netlinkfd, inotifyfd;
+ #elif defined(HAVE_BSD_NETWORK)
+   int dhcp_raw_fd, dhcp_icmp_fd, routefd;
+ #endif
+@@ -1469,3 +1473,8 @@ void loop_send_probes();
+ int detect_loop(char *query, int type);
+ #endif
++/* inotify.c */
++#ifdef HAVE_LINUX_NETWORK
++void inotify_dnsmasq_init();
++int inotify_check(void);
++#endif
+diff --git a/src/inotify.c b/src/inotify.c
+new file mode 100644
+index 000000000000..a0223443d6b6
+--- /dev/null
++++ b/src/inotify.c
+@@ -0,0 +1,102 @@
++/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++ 
++   This program is free software; you can redistribute it and/or modify
++   it under the terms of the GNU General Public License as published by
++   the Free Software Foundation; version 2 dated June, 1991, or
++   (at your option) version 3 dated 29 June, 2007.
++ 
++   This program is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++   GNU General Public License for more details.
++     
++   You should have received a copy of the GNU General Public License
++   along with this program.  If not, see <http://www.gnu.org/licenses/>.
++*/
++
++#include "dnsmasq.h"
++#include <sys/inotify.h>
++
++#ifdef HAVE_LINUX_NETWORK
++
++/* the strategy is to set a inotify on the directories containing
++   resolv files, for any files in the directory which are close-write 
++   or moved into the directory.
++   
++   When either of those happen, we look to see if the file involved
++   is actually a resolv-file, and if so, call poll-resolv with
++   the "force" argument, to ensure it's read.
++
++   This adds one new error condition: the directories containing
++   all specified resolv-files must exist at start-up, even if the actual
++   files don't. 
++*/
++
++static char *inotify_buffer;
++#define INOTIFY_SZ (sizeof(struct inotify_event) + NAME_MAX + 1)
++
++void inotify_dnsmasq_init()
++{
++  struct resolvc *res;
++
++  inotify_buffer = safe_malloc(INOTIFY_SZ);
++
++  daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
++
++  if (daemon->inotifyfd == -1)
++    die(_("failed to create inotify: %s"), NULL, EC_MISC);
++
++  for (res = daemon->resolv_files; res; res = res->next)
++    {
++      char *d = strrchr(res->name, '/');
++      
++      if (!d)
++      die(_("resolv-file %s not an absolute path"), res->name, EC_MISC);
++       
++      *d = 0; /* make ->name just directory */
++      res->wd = inotify_add_watch(daemon->inotifyfd, res->name, IN_CLOSE_WRITE | IN_MOVED_TO);
++      res->file = d+1; /* pointer to filename */
++      
++      if (res->wd == -1 && errno == ENOENT)
++      die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
++      
++      *d = '/'; /* restore name */
++      
++      if (res->wd == -1)
++      die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
++    }
++}
++
++int inotify_check(void)
++{
++  int hit = 0;
++  
++  while (1)
++    {
++      int rc;
++      char *p;
++      struct resolvc *res;
++      struct inotify_event *in;
++
++      while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
++      
++      if (rc <= 0)
++      break;
++      
++      for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len) 
++      {
++        in = (struct inotify_event*)p;
++        
++        for (res = daemon->resolv_files; res; res = res->next)
++          if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
++            hit = 1;
++      }
++    }
++
++  return hit;
++}
++
++#endif
++
++  
++  
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0010-Teach-the-new-inotify-code-about-symlinks.patch b/src/patches/dnsmasq/0010-Teach-the-new-inotify-code-about-symlinks.patch
new file mode 100644 (file)
index 0000000..70fc5c3
--- /dev/null
@@ -0,0 +1,73 @@
+From 857973e6f7e0a3d03535a9df7f9373fd7a0b65cc Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 15 Dec 2014 15:58:13 +0000
+Subject: [PATCH 10/55] Teach the new inotify code about symlinks.
+
+---
+ src/inotify.c | 43 +++++++++++++++++++++++++++----------------
+ 1 file changed, 27 insertions(+), 16 deletions(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index a0223443d6b6..960bf5efb41f 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -41,29 +41,40 @@ void inotify_dnsmasq_init()
+   inotify_buffer = safe_malloc(INOTIFY_SZ);
+-  daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
++  daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
++  
+   if (daemon->inotifyfd == -1)
+     die(_("failed to create inotify: %s"), NULL, EC_MISC);
+-
++  
+   for (res = daemon->resolv_files; res; res = res->next)
+     {
+-      char *d = strrchr(res->name, '/');
+-      
+-      if (!d)
+-      die(_("resolv-file %s not an absolute path"), res->name, EC_MISC);
+-       
+-      *d = 0; /* make ->name just directory */
+-      res->wd = inotify_add_watch(daemon->inotifyfd, res->name, IN_CLOSE_WRITE | IN_MOVED_TO);
+-      res->file = d+1; /* pointer to filename */
+-      
+-      if (res->wd == -1 && errno == ENOENT)
+-      die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
++      char *d = NULL, *path;
+       
+-      *d = '/'; /* restore name */
++      if (!(path = realpath(res->name, NULL)))
++      {
++        /* realpath will fail if the file doesn't exist, but
++           dnsmasq copes with missing files, so fall back 
++           and assume that symlinks are not in use in that case. */
++        if (errno == ENOENT)
++          path = res->name;
++        else
++          die(_("cannot cannonicalise resolv-file %s: %s"), res->name, EC_MISC); 
++      }
+       
+-      if (res->wd == -1)
+-      die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
++      if ((d = strrchr(path, '/')))
++      {
++        *d = 0; /* make path just directory */
++        res->wd = inotify_add_watch(daemon->inotifyfd, path, IN_CLOSE_WRITE | IN_MOVED_TO);
++        res->file = d+1; /* pointer to filename */
++        *d = '/';
++        
++        if (res->wd == -1 && errno == ENOENT)
++          die(_("directory %s for resolv-file is missing, cannot poll"), res->name, EC_MISC);
++        
++        if (res->wd == -1)
++          die(_("failed to create inotify for %s: %s"), res->name, EC_MISC);
++      }
+     }
+ }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0011-Remove-floor-on-EDNS0-packet-size-with-DNSSEC.patch b/src/patches/dnsmasq/0011-Remove-floor-on-EDNS0-packet-size-with-DNSSEC.patch
new file mode 100644 (file)
index 0000000..095253b
--- /dev/null
@@ -0,0 +1,46 @@
+From 800c5cc1e7438818fd80f08c2d472df249a6942d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 15 Dec 2014 17:50:15 +0000
+Subject: [PATCH 11/55] Remove floor on EDNS0 packet size with DNSSEC.
+
+---
+ CHANGELOG     | 6 +++++-
+ src/dnsmasq.c | 5 -----
+ 2 files changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 13ab41c05fc3..68252924e743 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -2,7 +2,11 @@ version 2.73
+             Fix crash at startup when an empty suffix is supplied to
+           --conf-dir, also trivial memory leak. Thanks to 
+           Tomas Hozza for spotting this.
+-      
++
++          Remove floor of 4096 on advertised EDNS0 packet size when 
++          DNSSEC in use, the original rationale for this has long gone.
++          Thanks to Anders Kaseorg for spotting this.
++
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index bf2e25a55780..5c7750d365fa 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -87,11 +87,6 @@ int main (int argc, char **argv)
+  
+   if (daemon->edns_pktsz < PACKETSZ)
+     daemon->edns_pktsz = PACKETSZ;
+-#ifdef HAVE_DNSSEC
+-  /* Enforce min packet big enough for DNSSEC */
+-  if (option_bool(OPT_DNSSEC_VALID) && daemon->edns_pktsz < EDNS_PKTSZ)
+-    daemon->edns_pktsz = EDNS_PKTSZ;
+-#endif
+   daemon->packet_buff_sz = daemon->edns_pktsz > DNSMASQ_PACKETSZ ? 
+     daemon->edns_pktsz : DNSMASQ_PACKETSZ;
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0012-CHANGELOG-re.-inotify.patch b/src/patches/dnsmasq/0012-CHANGELOG-re.-inotify.patch
new file mode 100644 (file)
index 0000000..b71e58b
--- /dev/null
@@ -0,0 +1,27 @@
+From ad946d555dce44eb690c7699933b6ff40ab85bb6 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 15 Dec 2014 17:52:22 +0000
+Subject: [PATCH 12/55] CHANGELOG re. inotify.
+
+---
+ CHANGELOG | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 68252924e743..9174b0bd75dc 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -7,6 +7,10 @@ version 2.73
+           DNSSEC in use, the original rationale for this has long gone.
+           Thanks to Anders Kaseorg for spotting this.
++          Use inotify for checking on updates to /etc/resolv.conf and
++          friends under Linux. This fixes race conditions when the files are 
++          updated rapidly and saves CPU by noy polling.
++      
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0013-Fix-breakage-of-domain-domain-subnet-local.patch b/src/patches/dnsmasq/0013-Fix-breakage-of-domain-domain-subnet-local.patch
new file mode 100644 (file)
index 0000000..2ff5acd
--- /dev/null
@@ -0,0 +1,70 @@
+From 3ad3f3bbd4ee716a7d2fb1e115cf89bd1b1a5de9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 16 Dec 2014 18:25:17 +0000
+Subject: [PATCH 13/55] Fix breakage of --domain=<domain>,<subnet>,local
+
+---
+ CHANGELOG    |  4 ++++
+ src/option.c | 18 ++++++++++++++++--
+ 2 files changed, 20 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 9174b0bd75dc..9e6c7aa4fd68 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -10,6 +10,10 @@ version 2.73
+           Use inotify for checking on updates to /etc/resolv.conf and
+           friends under Linux. This fixes race conditions when the files are 
+           updated rapidly and saves CPU by noy polling.
++
++          Fix breakage of --domain=<domain>,<subnet>,local - only reverse
++          queries were intercepted. THis appears to have been broken 
++          since 2.69. Thanks to Josh Stone for finding the bug.
+       
+ version 2.72
+diff --git a/src/option.c b/src/option.c
+index b08e98e16f84..209fa6976609 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -1941,10 +1941,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+                             else
+                               {
+                                  /* generate the equivalent of
+-                                    local=/<domain>/
+                                     local=/xxx.yyy.zzz.in-addr.arpa/ */
+                                 struct server *serv = add_rev4(new->start, msize);
+                                 serv->flags |= SERV_NO_ADDR;
++
++                                /* local=/<domain>/ */
++                                serv = opt_malloc(sizeof(struct server));
++                                memset(serv, 0, sizeof(struct server));
++                                serv->domain = d;
++                                serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
++                                serv->next = daemon->servers;
++                                daemon->servers = serv;
+                               }
+                           }
+                       }
+@@ -1978,10 +1985,17 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+                             else 
+                               {
+                                 /* generate the equivalent of
+-                                   local=/<domain>/
+                                    local=/xxx.yyy.zzz.ip6.arpa/ */
+                                 struct server *serv = add_rev6(&new->start6, msize);
+                                 serv->flags |= SERV_NO_ADDR;
++                                
++                                /* local=/<domain>/ */
++                                serv = opt_malloc(sizeof(struct server));
++                                memset(serv, 0, sizeof(struct server));
++                                serv->domain = d;
++                                serv->flags = SERV_HAS_DOMAIN | SERV_NO_ADDR;
++                                serv->next = daemon->servers;
++                                daemon->servers = serv;
+                               }
+                           }
+                       }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0014-Remove-redundant-IN6_IS_ADDR_ULA-a-macro-defn.patch b/src/patches/dnsmasq/0014-Remove-redundant-IN6_IS_ADDR_ULA-a-macro-defn.patch
new file mode 100644 (file)
index 0000000..a0e647f
--- /dev/null
@@ -0,0 +1,27 @@
+From bd9520b7ade7098ee423acc38965376aa57feb07 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 16 Dec 2014 20:41:29 +0000
+Subject: [PATCH 14/55] Remove redundant IN6_IS_ADDR_ULA(a) macro defn.
+
+---
+ src/network.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/network.c b/src/network.c
+index 5067007c5cbc..99419f57951e 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -16,10 +16,6 @@
+ #include "dnsmasq.h"
+-#ifndef IN6_IS_ADDR_ULA
+-#define IN6_IS_ADDR_ULA(a) ((((__const uint32_t *) (a))[0] & htonl (0xfe00000)) == htonl (0xfc000000))
+-#endif
+-
+ #ifdef HAVE_LINUX_NETWORK
+ int indextoname(int fd, int index, char *name)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0015-Eliminate-IPv6-privacy-addresses-from-interface-name.patch b/src/patches/dnsmasq/0015-Eliminate-IPv6-privacy-addresses-from-interface-name.patch
new file mode 100644 (file)
index 0000000..114a4f3
--- /dev/null
@@ -0,0 +1,148 @@
+From 476693678e778886b64d0b56e27eb7695cbcca99 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 17 Dec 2014 12:41:56 +0000
+Subject: [PATCH 15/55] Eliminate IPv6 privacy addresses from --interface-name
+ answers.
+
+---
+ CHANGELOG     |  5 +++++
+ src/auth.c    |  4 ++++
+ src/dnsmasq.h |  1 +
+ src/network.c | 12 ++++++++----
+ src/rfc1035.c | 17 ++++++++++-------
+ 5 files changed, 28 insertions(+), 11 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 9e6c7aa4fd68..01f5208ec006 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -14,6 +14,11 @@ version 2.73
+           Fix breakage of --domain=<domain>,<subnet>,local - only reverse
+           queries were intercepted. THis appears to have been broken 
+           since 2.69. Thanks to Josh Stone for finding the bug.
++
++          Eliminate IPv6 privacy addresses and deprecated addresses from
++          the answers given by --interface-name. Note that reverse queries
++          (ie looking for names, given addresses) are not affected. 
++          Thanks to Michael Gorbach for the suggestion.
+       
+ version 2.72
+diff --git a/src/auth.c b/src/auth.c
+index dd46566ec2cc..a327f16d8c0b 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -363,6 +363,10 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+                if (((addrlist->flags & ADDRLIST_IPV6)  ? T_AAAA : T_A) == qtype &&
+                    (local_query || filter_zone(zone, flag, &addrlist->addr)))
+                  {
++#ifdef HAVE_IPV6
++                   if (addrlist->flags & ADDRLIST_REVONLY)
++                     continue;
++#endif
+                    found = 1;
+                    log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+                    if (add_resource_record(header, limit, &trunc, nameoffset, &ansp, 
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index ebb6b957812f..1dd61c5edba3 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -318,6 +318,7 @@ struct ds_config {
+ #define ADDRLIST_LITERAL 1
+ #define ADDRLIST_IPV6    2
++#define ADDRLIST_REVONLY 4
+ struct addrlist {
+   struct all_addr addr;
+diff --git a/src/network.c b/src/network.c
+index 99419f57951e..14d2af2ce313 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -236,7 +236,7 @@ struct iface_param {
+ };
+ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+-                       union mysockaddr *addr, struct in_addr netmask, int prefixlen, int dad) 
++                       union mysockaddr *addr, struct in_addr netmask, int prefixlen, int iface_flags) 
+ {
+   struct irec *iface;
+   int mtu = 0, loopback;
+@@ -388,6 +388,10 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+                {
+                   al->addr.addr.addr6 = addr->in6.sin6_addr;
+                   al->flags = ADDRLIST_IPV6;
++                  /* Privacy addresses and addresses still undergoing DAD and deprecated addresses
++                     don't appear in forward queries, but will in reverse ones. */
++                  if (!(iface_flags & IFACE_PERMANENT) || (iface_flags & (IFACE_DEPRECATED | IFACE_TENTATIVE)))
++                    al->flags |= ADDRLIST_REVONLY;
+                } 
+ #endif
+             }
+@@ -399,7 +403,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+   for (iface = daemon->interfaces; iface; iface = iface->next) 
+     if (sockaddr_isequal(&iface->addr, addr))
+       {
+-      iface->dad = dad;
++      iface->dad = !!(iface_flags & IFACE_TENTATIVE);
+       iface->found = 1; /* for garbage collection */
+       return 1;
+       }
+@@ -474,7 +478,7 @@ static int iface_allowed(struct iface_param *param, int if_index, char *label,
+       iface->dhcp_ok = dhcp_ok;
+       iface->dns_auth = auth_dns;
+       iface->mtu = mtu;
+-      iface->dad = dad;
++      iface->dad = !!(iface_flags & IFACE_TENTATIVE);
+       iface->found = 1;
+       iface->done = iface->multicast_done = iface->warned = 0;
+       iface->index = if_index;
+@@ -519,7 +523,7 @@ static int iface_allowed_v6(struct in6_addr *local, int prefix,
+   else
+     addr.in6.sin6_scope_id = 0;
+   
+-  return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, !!(flags & IFACE_TENTATIVE));
++  return iface_allowed((struct iface_param *)vparam, if_index, NULL, &addr, netmask, prefix, flags);
+ }
+ #endif
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 8a7d2608dac5..bdeb3fb10e68 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1923,14 +1923,17 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                 for (intr = daemon->int_names; intr; intr = intr->next)
+                   if (hostname_isequal(name, intr->name))
+                     {
+-                      ans = 1;
+-                      if (!dryrun)
+-                        {
+-                          
+-                          for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
++                      for (addrlist = intr->addr; addrlist; addrlist = addrlist->next)
+ #ifdef HAVE_IPV6
+-                            if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
++                        if (((addrlist->flags & ADDRLIST_IPV6) ? T_AAAA : T_A) == type)
+ #endif
++                          {
++#ifdef HAVE_IPV6
++                            if (addrlist->flags & ADDRLIST_REVONLY)
++                              continue;
++#endif        
++                            ans = 1;  
++                            if (!dryrun)
+                               {
+                                 gotit = 1;
+                                 log_query(F_FORWARD | F_CONFIG | flag, name, &addrlist->addr, NULL);
+@@ -1939,7 +1942,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                                                         type == T_A ? "4" : "6", &addrlist->addr))
+                                   anscount++;
+                               }
+-                        }
++                          }
+                     }
+                 
+                 if (!dryrun && !gotit)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0016-Tweak-field-width-in-cache-dump-to-avoid-truncating-.patch b/src/patches/dnsmasq/0016-Tweak-field-width-in-cache-dump-to-avoid-truncating-.patch
new file mode 100644 (file)
index 0000000..d072c03
--- /dev/null
@@ -0,0 +1,35 @@
+From 3267804598047bd1781cab91508d1bc516e5ddbb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 17 Dec 2014 20:38:20 +0000
+Subject: [PATCH 16/55] Tweak field width in cache dump to avoid truncating
+ IPv6 addresses.
+
+---
+ src/cache.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 2c3a49887053..f9e1d31e8c99 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1411,7 +1411,7 @@ void dump_cache(time_t now)
+           *a = 0;
+           if (strlen(n) == 0 && !(cache->flags & F_REVERSE))
+             n = "<Root>";
+-          p += sprintf(p, "%-40.40s ", n);
++          p += sprintf(p, "%-30.30s ", n);
+           if ((cache->flags & F_CNAME) && !is_outdated_cname_pointer(cache))
+             a = cache_get_cname_target(cache);
+ #ifdef HAVE_DNSSEC
+@@ -1454,7 +1454,7 @@ void dump_cache(time_t now)
+           else if (cache->flags & F_DNSKEY)
+             t = "K";
+ #endif
+-          p += sprintf(p, "%-30.30s %s%s%s%s%s%s%s%s%s  ", a, t,
++          p += sprintf(p, "%-40.40s %s%s%s%s%s%s%s%s%s  ", a, t,
+                        cache->flags & F_FORWARD ? "F" : " ",
+                        cache->flags & F_REVERSE ? "R" : " ",
+                        cache->flags & F_IMMORTAL ? "I" : " ",
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0017-Fix-crash-in-DNSSEC-code-when-attempting-to-verify-l.patch b/src/patches/dnsmasq/0017-Fix-crash-in-DNSSEC-code-when-attempting-to-verify-l.patch
new file mode 100644 (file)
index 0000000..944afaf
--- /dev/null
@@ -0,0 +1,100 @@
+From 094b5c3d904bae9aeb3206d9f3b8348926b84975 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 21 Dec 2014 16:11:52 +0000
+Subject: [PATCH 17/55] Fix crash in DNSSEC code when attempting to verify
+ large RRs.
+
+---
+ CHANGELOG    |  3 +++
+ src/dnssec.c | 27 +++++++++++++++++++--------
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 01f5208ec006..956b71a151db 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -19,6 +19,9 @@ version 2.73
+           the answers given by --interface-name. Note that reverse queries
+           (ie looking for names, given addresses) are not affected. 
+           Thanks to Michael Gorbach for the suggestion.
++
++          Fix crash in DNSSEC code with long RRs. Thanks to Marco Davids
++          for the bug report.
+       
+ version 2.72
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 69bfc29e355f..3208ac701149 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -456,16 +456,27 @@ static u16 *get_desc(int type)
+ /* Return bytes of canonicalised rdata, when the return value is zero, the remaining 
+    data, pointed to by *p, should be used raw. */
+-static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end, char *buff, 
++static int get_rdata(struct dns_header *header, size_t plen, unsigned char *end, char *buff, int bufflen,
+                    unsigned char **p, u16 **desc)
+ {
+   int d = **desc;
+   
+-  (*desc)++;
+-  
+   /* No more data needs mangling */
+   if (d == (u16)-1)
+-    return 0;
++    {
++      /* If there's more data than we have space for, just return what fits,
++       we'll get called again for more chunks */
++      if (end - *p > bufflen)
++      {
++        memcpy(buff, *p, bufflen);
++        *p += bufflen;
++        return bufflen;
++      }
++      
++      return 0;
++    }
++ 
++  (*desc)++;
+   
+   if (d == 0 && extract_name(header, plen, p, buff, 1, 0))
+     /* domain-name, canonicalise */
+@@ -560,7 +571,7 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
+             if (left1 != 0)
+               memmove(buff1, buff1 + len1 - left1, left1);
+             
+-            if ((len1 = get_rdata(header, plen, end1, buff1 + left1, &p1, &dp1)) == 0)
++            if ((len1 = get_rdata(header, plen, end1, buff1 + left1, MAXDNAME - left1, &p1, &dp1)) == 0)
+               {
+                 quit = 1;
+                 len1 = end1 - p1;
+@@ -571,7 +582,7 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
+             if (left2 != 0)
+               memmove(buff2, buff2 + len2 - left2, left2);
+             
+-            if ((len2 = get_rdata(header, plen, end2, buff2 + left2, &p2, &dp2)) == 0)
++            if ((len2 = get_rdata(header, plen, end2, buff2 + left2, MAXDNAME - left2, &p2, &dp2)) == 0)
+               {
+                 quit = 1;
+                 len2 = end2 - p2;
+@@ -808,7 +819,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+         /* canonicalise rdata and calculate length of same, use name buffer as workspace */
+         cp = p;
+         dp = rr_desc;
+-        for (len = 0; (seg = get_rdata(header, plen, end, name, &cp, &dp)) != 0; len += seg);
++        for (len = 0; (seg = get_rdata(header, plen, end, name, MAXDNAME, &cp, &dp)) != 0; len += seg);
+         len += end - cp;
+         len = htons(len);
+         hash->update(ctx, 2, (unsigned char *)&len); 
+@@ -816,7 +827,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+         /* Now canonicalise again and digest. */
+         cp = p;
+         dp = rr_desc;
+-        while ((seg = get_rdata(header, plen, end, name, &cp, &dp)))
++        while ((seg = get_rdata(header, plen, end, name, MAXDNAME, &cp, &dp)))
+           hash->update(ctx, seg, (unsigned char *)name);
+         if (cp != end)
+           hash->update(ctx, end - cp, cp);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0018-Make-caching-work-for-CNAMEs-pointing-to-A-AAAA-reco.patch b/src/patches/dnsmasq/0018-Make-caching-work-for-CNAMEs-pointing-to-A-AAAA-reco.patch
new file mode 100644 (file)
index 0000000..de66adb
--- /dev/null
@@ -0,0 +1,99 @@
+From cbc652423403e3cef00e00240f6beef713142246 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 21 Dec 2014 21:21:53 +0000
+Subject: [PATCH 18/55] Make caching work for CNAMEs pointing to A/AAAA records
+ shadowed in /etc/hosts
+
+If the answer to an upstream query is a CNAME which points to an
+A/AAAA record which also exists in /etc/hosts and friends, then
+caching is suppressed, to avoid inconsistent answers. This is
+now modified to allow caching when the upstream and local A/AAAA
+records have the same value.
+---
+ src/cache.c | 34 +++++++++++++++++++++++++---------
+ 1 file changed, 25 insertions(+), 9 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index f9e1d31e8c99..ff1ca6f1c352 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -322,7 +322,7 @@ static int is_expired(time_t now, struct crec *crecp)
+   return 1;
+ }
+-static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsigned short flags)
++static struct crec *cache_scan_free(char *name, struct all_addr *addr, time_t now, unsigned short flags)
+ {
+   /* Scan and remove old entries.
+      If (flags & F_FORWARD) then remove any forward entries for name and any expired
+@@ -331,8 +331,8 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign
+      entries in the whole cache.
+      If (flags == 0) remove any expired entries in the whole cache. 
+-     In the flags & F_FORWARD case, the return code is valid, and returns zero if the
+-     name exists in the cache as a HOSTS or DHCP entry (these are never deleted)
++     In the flags & F_FORWARD case, the return code is valid, and returns a non-NULL pointer
++     to a cache entry if the name exists in the cache as a HOSTS or DHCP entry (these are never deleted)
+      We take advantage of the fact that hash chains have stuff in the order <reverse>,<other>,<immortal>
+      so that when we hit an entry which isn't reverse and is immortal, we're done. */
+@@ -361,7 +361,7 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign
+                 (((crecp->flags | flags) & F_CNAME) && !(crecp->flags & (F_DNSKEY | F_DS))))
+               {
+                 if (crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG))
+-                  return 0;
++                  return crecp;
+                 *up = crecp->hash_next;
+                 cache_unlink(crecp);
+                 cache_free(crecp);
+@@ -378,7 +378,7 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign
+                  crecp->addr.sig.type_covered == addr->addr.dnssec.type))
+               {
+                 if (crecp->flags & F_CONFIG)
+-                  return 0;
++                  return crecp;
+                 *up = crecp->hash_next;
+                 cache_unlink(crecp);
+                 cache_free(crecp);
+@@ -423,7 +423,7 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign
+           up = &crecp->hash_next;
+     }
+   
+-  return 1;
++  return NULL;
+ }
+ /* Note: The normal calling sequence is
+@@ -471,10 +471,26 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
+     return NULL;
+   
+   /* First remove any expired entries and entries for the name/address we
+-     are currently inserting. Fail if we attempt to delete a name from
+-     /etc/hosts or DHCP. */
+-  if (!cache_scan_free(name, addr, now, flags))
++     are currently inserting. */
++  if ((new = cache_scan_free(name, addr, now, flags)))
+     {
++      /* We're trying to insert a record over one from 
++       /etc/hosts or DHCP, or other config. If the 
++       existing record is for an A or AAAA and
++       the record we're trying to insert is the same, 
++       just drop the insert, but don't error the whole process. */
++      if ((flags & (F_IPV4 | F_IPV6)) && (flags & F_FORWARD))
++      {
++        if ((flags & F_IPV4) && (new->flags & F_IPV4) &&
++            new->addr.addr.addr.addr4.s_addr == addr->addr.addr4.s_addr)
++          return new;
++#ifdef HAVE_IPV6
++        else if ((flags & F_IPV6) && (new->flags & F_IPV6) &&
++                 IN6_ARE_ADDR_EQUAL(&new->addr.addr.addr.addr6, &addr->addr.addr6))
++          return new;
++#endif
++      }
++      
+       insert_error = 1;
+       return NULL;
+     }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0019-Fix-problems-validating-NSEC3-and-wildcards.patch b/src/patches/dnsmasq/0019-Fix-problems-validating-NSEC3-and-wildcards.patch
new file mode 100644 (file)
index 0000000..0ee2e65
--- /dev/null
@@ -0,0 +1,365 @@
+From fbc5205702c7f6f431d9f1043c553d7fb62ddfdb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 23 Dec 2014 15:46:08 +0000
+Subject: [PATCH 19/55] Fix problems validating NSEC3 and wildcards.
+
+---
+ src/dnssec.c | 253 ++++++++++++++++++++++++++++++-----------------------------
+ 1 file changed, 128 insertions(+), 125 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 3208ac701149..9350d3e8c963 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -615,6 +615,7 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
+    Return code:
+    STAT_SECURE   if it validates.
+    STAT_SECURE_WILDCARD if it validates and is the result of wildcard expansion.
++   (In this case *wildcard_out points to the "body" of the wildcard within name.) 
+    STAT_NO_SIG no RRsigs found.
+    STAT_INSECURE RRset empty.
+    STAT_BOGUS    signature is wrong, bad packet.
+@@ -625,8 +626,8 @@ static void sort_rrset(struct dns_header *header, size_t plen, u16 *rr_desc, int
+    name is unchanged on exit. keyname is used as workspace and trashed.
+ */
+-static int validate_rrset(time_t now, struct dns_header *header, size_t plen, int class, 
+-                        int type, char *name, char *keyname, struct blockdata *key, int keylen, int algo_in, int keytag_in)
++static int validate_rrset(time_t now, struct dns_header *header, size_t plen, int class, int type, 
++                        char *name, char *keyname, char **wildcard_out, struct blockdata *key, int keylen, int algo_in, int keytag_in)
+ {
+   static unsigned char **rrset = NULL, **sigs = NULL;
+   static int rrset_sz = 0, sig_sz = 0;
+@@ -798,8 +799,16 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+           {
+             int k;
+             for (k = name_labels - labels; k != 0; k--)
+-              while (*name_start != '.' && *name_start != 0)
+-                name_start++;
++              {
++                while (*name_start != '.' && *name_start != 0)
++                  name_start++;
++                if (k != 1)
++                  name_start++;
++              }
++            
++            if (wildcard_out)
++              *wildcard_out = name_start+1;
++
+             name_start--;
+             *name_start = '*';
+           }
+@@ -974,7 +983,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+             if (recp1->addr.ds.keylen == (int)hash->digest_size &&
+                 (ds_digest = blockdata_retrieve(recp1->addr.key.keydata, recp1->addr.ds.keylen, NULL)) &&
+                 memcmp(ds_digest, digest, recp1->addr.ds.keylen) == 0 &&
+-                validate_rrset(now, header, plen, class, T_DNSKEY, name, keyname, key, rdlen - 4, algo, keytag) == STAT_SECURE)
++                validate_rrset(now, header, plen, class, T_DNSKEY, name, keyname, NULL, key, rdlen - 4, algo, keytag) == STAT_SECURE)
+               {
+                 valid = 1;
+                 break;
+@@ -1443,11 +1452,88 @@ static int base32_decode(char *in, unsigned char *out)
+   return p - out;
+ }
++static int check_nsec3_coverage(struct dns_header *header, size_t plen, int digest_len, unsigned char *digest, int type,
++                              char *workspace1, char *workspace2, unsigned char **nsecs, int nsec_count)
++{
++  int i, hash_len, salt_len, base32_len, rdlen;
++  unsigned char *p, *psave;
++
++  for (i = 0; i < nsec_count; i++)
++    if ((p = nsecs[i]))
++      {
++              if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
++          !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
++        return 0;
++      
++      p += 8; /* class, type, TTL */
++      GETSHORT(rdlen, p);
++      psave = p;
++      p += 4; /* algo, flags, iterations */
++      salt_len = *p++; /* salt_len */
++      p += salt_len; /* salt */
++      hash_len = *p++; /* p now points to next hashed name */
++      
++      if (!CHECK_LEN(header, p, plen, hash_len))
++        return 0;
++      
++      if (digest_len == base32_len && hash_len == base32_len)
++        {
++          int rc = memcmp(workspace2, digest, digest_len);
++
++          if (rc == 0)
++            {
++              /* We found an NSEC3 whose hashed name exactly matches the query, so
++                 we just need to check the type map. p points to the RR data for the record. */
++              
++              int offset = (type & 0xff) >> 3;
++              int mask = 0x80 >> (type & 0x07);
++              
++              p += hash_len; /* skip next-domain hash */
++              rdlen -= p - psave;
++
++              if (!CHECK_LEN(header, p, plen, rdlen))
++                return 0;
++              
++              while (rdlen >= 2)
++                {
++                  if (p[0] == type >> 8)
++                    {
++                      /* Does the NSEC3 say our type exists? */
++                      if (offset < p[1] && (p[offset+2] & mask) != 0)
++                        return STAT_BOGUS;
++                      
++                      break; /* finshed checking */
++                    }
++                  
++                  rdlen -= p[1];
++                  p +=  p[1];
++                }
++
++              return 1;
++            }
++          else if (rc <= 0)
++            {
++              /* Normal case, hash falls between NSEC3 name-hash and next domain name-hash,
++                 wrap around case, name-hash falls between NSEC3 name-hash and end */
++              if (memcmp(p, digest, digest_len) > 0 || memcmp(workspace2, p, digest_len) > 0)
++                return 1;
++            }
++          else 
++            {
++              /* wrap around case, name falls between start and next domain name */
++              if (memcmp(workspace2, p, digest_len) > 0 && memcmp(p, digest, digest_len) > 0)
++                return 1;
++            }
++        }
++      }
++  return 0;
++}
++
+ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, unsigned char **nsecs, int nsec_count,
+-                                   char *workspace1, char *workspace2, char *name, int type)
++                                   char *workspace1, char *workspace2, char *name, int type, char *wildname)
+ {
+   unsigned char *salt, *p, *digest;
+-  int digest_len, i, iterations, salt_len, hash_len, base32_len, algo = 0;
++  int digest_len, i, iterations, salt_len, base32_len, algo = 0;
+   struct nettle_hash const *hash;
+   char *closest_encloser, *next_closest, *wildcard;
+  
+@@ -1520,7 +1606,14 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+   if (!(hash = hash_find("sha1")))
+     return STAT_BOGUS;
+-  /* Now, we need the "closest encloser NSEC3" */
++  if ((digest_len = hash_name(name, &digest, hash, salt, salt_len, iterations)) == 0)
++    return STAT_BOGUS;
++  
++  if (check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++    return STAT_SECURE;
++
++  /* Can't find an NSEC3 which covers the name directly, we need the "closest encloser NSEC3" 
++     or an answer inferred from a wildcard record. */
+   closest_encloser = name;
+   next_closest = NULL;
+@@ -1529,6 +1622,9 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+       if (*closest_encloser == '.')
+       closest_encloser++;
++      if (wildname && hostname_isequal(closest_encloser, wildname))
++      break;
++
+       if ((digest_len = hash_name(closest_encloser, &digest, hash, salt, salt_len, iterations)) == 0)
+       return STAT_BOGUS;
+       
+@@ -1551,127 +1647,33 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+     }
+   while ((closest_encloser = strchr(closest_encloser, '.')));
+   
+-  /* No usable NSEC3s */
+-  if (i == nsec_count)
++  if (!closest_encloser)
+     return STAT_BOGUS;
+   
+-  if (!next_closest)
+-    {
+-      /* We found an NSEC3 whose hashed name exactly matches the query, so
+-       Now we just need to check the type map. p points to the RR data for the record. */
+-      int rdlen;
+-      unsigned char *psave;
+-      int offset = (type & 0xff) >> 3;
+-      int mask = 0x80 >> (type & 0x07);
+-      
+-      p += 8; /* class, type, TTL */
+-      GETSHORT(rdlen, p);
+-      psave = p;
+-      p += 5 + salt_len; /* algo, flags, iterations, salt_len, salt */
+-      hash_len = *p++;
+-      if (!CHECK_LEN(header, p, plen, hash_len))
+-      return STAT_BOGUS; /* bad packet */
+-      p += hash_len;
+-      rdlen -= p - psave;
+-      
+-      while (rdlen >= 2)
+-      {
+-        if (!CHECK_LEN(header, p, plen, rdlen))
+-          return STAT_BOGUS;
+-        
+-        if (p[0] == type >> 8)
+-          {
+-            /* Does the NSEC3 say our type exists? */
+-            if (offset < p[1] && (p[offset+2] & mask) != 0)
+-              return STAT_BOGUS;
+-            
+-            break; /* finshed checking */
+-          }
+-        
+-        rdlen -= p[1];
+-        p +=  p[1];
+-      }
+-      
+-      return STAT_SECURE;
+-    }
+-
+   /* Look for NSEC3 that proves the non-existence of the next-closest encloser */
+   if ((digest_len = hash_name(next_closest, &digest, hash, salt, salt_len, iterations)) == 0)
+     return STAT_BOGUS;
+-  for (i = 0; i < nsec_count; i++)
+-    if ((p = nsecs[i]))
+-      {
+-              if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
+-          !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
+-        return STAT_BOGUS;
+-         
+-      p += 15 + salt_len; /* class, type, TTL, rdlen, algo, flags, iterations, salt_len, salt */
+-      hash_len = *p++; /* p now points to next hashed name */
+- 
+-      if (!CHECK_LEN(header, p, plen, hash_len))
+-        return STAT_BOGUS;
+-      
+-      if (digest_len == base32_len && hash_len == base32_len)
+-        {
+-          if (memcmp(workspace2, digest, digest_len) <= 0)
+-            {
+-              /* Normal case, hash falls between NSEC3 name-hash and next domain name-hash,
+-                 wrap around case, name-hash falls between NSEC3 name-hash and end */
+-              if (memcmp(p, digest, digest_len) > 0 || memcmp(workspace2, p, digest_len) > 0)
+-                return STAT_SECURE;
+-            }
+-          else 
+-            {
+-              /* wrap around case, name falls between start and next domain name */
+-              if (memcmp(workspace2, p, digest_len) > 0 && memcmp(p, digest, digest_len) > 0)
+-                return STAT_SECURE;
+-            }
+-        }
+-      }
+-  
+-  /* Finally, check that there's no seat of wildcard synthesis */
+-  if (!(wildcard = strchr(next_closest, '.')) || wildcard == next_closest)
+-    return STAT_BOGUS;
+-  
+-  wildcard--;
+-  *wildcard = '*';
+-  
+-  if ((digest_len = hash_name(wildcard, &digest, hash, salt, salt_len, iterations)) == 0)
++  if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
+     return STAT_BOGUS;
+   
+-  for (i = 0; i < nsec_count; i++)
+-    if ((p = nsecs[i]))
+-      {
+-      if (!extract_name(header, plen, &p, workspace1, 1, 0) ||
+-          !(base32_len = base32_decode(workspace1, (unsigned char *)workspace2)))
+-        return STAT_BOGUS;
+-         
+-      p += 15 + salt_len; /* class, type, TTL, rdlen, algo, flags, iterations, salt_len, salt */
+-      hash_len = *p++; /* p now points to next hashed name */
+- 
+-      if (!CHECK_LEN(header, p, plen, hash_len))
+-        return STAT_BOGUS;
+-      
+-      if (digest_len == base32_len && hash_len == base32_len)
+-        {
+-          if (memcmp(workspace2, digest, digest_len) <= 0)
+-            {
+-              /* Normal case, hash falls between NSEC3 name-hash and next domain name-hash,
+-                 wrap around case, name-hash falls between NSEC3 name-hash and end */
+-              if (memcmp(p, digest, digest_len) > 0 || memcmp(workspace2, p, digest_len) > 0)
+-                return STAT_SECURE;
+-            }
+-          else 
+-            {
+-              /* wrap around case, name falls between start and next domain name */
+-              if (memcmp(workspace2, p, digest_len) > 0 && memcmp(p, digest, digest_len) > 0)
+-                return STAT_SECURE;
+-            }
+-        }
+-      }
++  /* Finally, check that there's no seat of wildcard synthesis */
++  if (!wildname)
++    {
++      if (!(wildcard = strchr(next_closest, '.')) || wildcard == next_closest)
++      return STAT_BOGUS;
++      
++      wildcard--;
++      *wildcard = '*';
++      
++      if ((digest_len = hash_name(wildcard, &digest, hash, salt, salt_len, iterations)) == 0)
++      return STAT_BOGUS;
++      
++      if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++      return STAT_BOGUS;
++    }
+   
+-  return STAT_BOGUS;
++  return STAT_SECURE;
+ }
+     
+ /* Validate all the RRsets in the answer and authority sections of the reply (4035:3.2.3) */
+@@ -1792,8 +1794,9 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+             struct all_addr a;
+             struct blockdata *key;
+             struct crec *crecp;
+-            
+-            rc = validate_rrset(now, header, plen, class1, type1, name, keyname, NULL, 0, 0, 0);
++            char *wildname;
++
++            rc = validate_rrset(now, header, plen, class1, type1, name, keyname, &wildname, NULL, 0, 0, 0);
+             
+             if (rc == STAT_SECURE_WILDCARD)
+               {
+@@ -1807,7 +1810,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+                 if (nsec_type == T_NSEC)
+                   rc = prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1);
+                 else
+-                  rc = prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1);
++                  rc = prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1, wildname);
+                 if (rc != STAT_SECURE)
+                   return rc;
+@@ -1933,7 +1936,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+   if (nsec_type == T_NSEC)
+     return prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype);
+   else
+-    return prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype);
++    return prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, NULL);
+ }
+ /* Chase the CNAME chain in the packet until the first record which _doesn't validate.
+@@ -1980,7 +1983,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+           return STAT_INSECURE;
+         
+         /* validate CNAME chain, return if insecure or need more data */
+-        rc = validate_rrset(now, header, plen, class, type, name, keyname, NULL, 0, 0, 0);
++        rc = validate_rrset(now, header, plen, class, type, name, keyname, NULL, NULL, 0, 0, 0);
+         if (rc != STAT_SECURE)
+           {
+             if (rc == STAT_NO_SIG)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0020-Initialise-return-value.patch b/src/patches/dnsmasq/0020-Initialise-return-value.patch
new file mode 100644 (file)
index 0000000..2f70ee5
--- /dev/null
@@ -0,0 +1,32 @@
+From 83d2ed09fc0216b567d7fb2197e4ff3eae150b0d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 23 Dec 2014 18:42:38 +0000
+Subject: [PATCH 20/55] Initialise return value.
+
+---
+ src/dnssec.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 9350d3e8c963..ed8cf893bad2 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -637,10 +637,13 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+   struct crec *crecp = NULL;
+   int type_covered, algo, labels, orig_ttl, sig_expiration, sig_inception, key_tag;
+   u16 *rr_desc = get_desc(type);
+-
++ 
++  if (wildcard_out)
++    *wildcard_out = NULL;
++  
+   if (!(p = skip_questions(header, plen)))
+     return STAT_BOGUS;
+-
++  
+   name_labels = count_labels(name); /* For 4035 5.3.2 check */
+   /* look for RRSIGs for this RRset and get pointers to each RR in the set. */
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0021-Add-ignore-address-option.patch b/src/patches/dnsmasq/0021-Add-ignore-address-option.patch
new file mode 100644 (file)
index 0000000..6c88f2d
--- /dev/null
@@ -0,0 +1,192 @@
+From 32fc6dbe03569d70dd394420ceb73532cf303c33 Mon Sep 17 00:00:00 2001
+From: Glen Huang <curvedmark@gmail.com>
+Date: Sat, 27 Dec 2014 15:28:12 +0000
+Subject: [PATCH 21/55] Add --ignore-address option.
+
+---
+ CHANGELOG     |  8 ++++++++
+ man/dnsmasq.8 |  6 ++++++
+ src/dnsmasq.h |  3 ++-
+ src/forward.c |  4 ++++
+ src/option.c  | 18 +++++++++++++++---
+ src/rfc1035.c | 37 +++++++++++++++++++++++++++++++++++++
+ 6 files changed, 72 insertions(+), 4 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 956b71a151db..2b6356bcfb02 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -22,6 +22,14 @@ version 2.73
+           Fix crash in DNSSEC code with long RRs. Thanks to Marco Davids
+           for the bug report.
++          
++          Add --ignore-address option. Ignore replies to A-record 
++          queries which include the specified address. No error is
++          generated, dnsmasq simply continues to listen for another 
++          reply. This is useful to defeat blocking strategies which
++          rely on quickly supplying a forged answer to a DNS 
++          request for certain domains, before the correct answer can
++            arrive. Thanks to Glen Huang for the patch.
+       
+ version 2.72
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 0b8e04f0a897..4236ba307df3 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -293,6 +293,12 @@ an advertising web page in response to queries for unregistered names,
+ instead of the correct NXDOMAIN response. This option tells dnsmasq to
+ fake the correct response when it sees this behaviour. As at Sept 2003
+ the IP address being returned by Verisign is 64.94.110.11
++.TP 
++.B \-B, --ignore-address=<ipaddr>
++Ignore replies to A-record queries which include the specified address. 
++No error is generated, dnsmasq simply continues to listen for another reply. 
++This is useful to defeat blocking strategies which rely on quickly supplying a
++forged answer to a DNS request for certain domain, before the correct answer can arrive.
+ .TP
+ .B \-f, --filterwin2k
+ Later versions of windows make periodic DNS requests which don't get sensible answers from
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 1dd61c5edba3..7bc982ddf73c 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -930,7 +930,7 @@ extern struct daemon {
+   char *runfile; 
+   char *lease_change_command;
+   struct iname *if_names, *if_addrs, *if_except, *dhcp_except, *auth_peers, *tftp_interfaces;
+-  struct bogus_addr *bogus_addr;
++  struct bogus_addr *bogus_addr, *ignore_addr;
+   struct server *servers;
+   struct ipsets *ipsets;
+   int log_fac; /* log facility */
+@@ -1093,6 +1093,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                     time_t now, int *ad_reqd, int *do_bit);
+ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name, 
+                            struct bogus_addr *addr, time_t now);
++int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bogus_addr *baddr);
+ unsigned char *find_pseudoheader(struct dns_header *header, size_t plen,
+                                size_t *len, unsigned char **p, int *is_sign);
+ int check_for_local_domain(char *name, time_t now);
+diff --git a/src/forward.c b/src/forward.c
+index 408a179a20f4..f28c7d51f708 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -724,6 +724,10 @@ void reply_query(int fd, int family, time_t now)
+   if (!(forward = lookup_frec(ntohs(header->id), hash)))
+     return;
+   
++  if (daemon->ignore_addr && RCODE(header) == NOERROR &&
++      check_for_ignored_address(header, n, daemon->ignore_addr))
++    return;
++
+   if ((RCODE(header) == SERVFAIL || RCODE(header) == REFUSED) &&
+       !option_bool(OPT_ORDER) &&
+       forward->forwardall == 0)
+diff --git a/src/option.c b/src/option.c
+index 209fa6976609..907d0cf88de9 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -147,6 +147,7 @@ struct myoption {
+ #define LOPT_LOCAL_SERVICE 335
+ #define LOPT_DNSSEC_TIME   336
+ #define LOPT_LOOP_DETECT   337
++#define LOPT_IGNORE_ADDR   338
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =  
+@@ -181,6 +182,7 @@ static const struct myoption opts[] =
+     { "local-service", 0, 0, LOPT_LOCAL_SERVICE },
+     { "bogus-priv", 0, 0, 'b' },
+     { "bogus-nxdomain", 1, 0, 'B' },
++    { "ignore-address", 1, 0, LOPT_IGNORE_ADDR },
+     { "selfmx", 0, 0, 'e' },
+     { "filterwin2k", 0, 0, 'f' },
+     { "pid-file", 2, 0, 'x' },
+@@ -457,6 +459,7 @@ static struct {
+   { LOPT_QUIET_RA, OPT_QUIET_RA, NULL, gettext_noop("Do not log RA."), NULL },
+   { LOPT_LOCAL_SERVICE, OPT_LOCAL_SERVICE, NULL, gettext_noop("Accept queries only from directly-connected networks"), NULL },
+   { LOPT_LOOP_DETECT, OPT_LOOP_DETECT, NULL, gettext_noop("Detect and remove DNS forwarding loops"), NULL },
++  { LOPT_IGNORE_ADDR, ARG_DUP, "<ipaddr>", gettext_noop("Ignore DNS responses containing ipaddr."), NULL }, 
+   { 0, 0, NULL, NULL, NULL }
+ }; 
+@@ -2119,14 +2122,23 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+       break;
+       
+     case 'B':  /* --bogus-nxdomain */
+-      {
++    case LOPT_IGNORE_ADDR: /* --ignore-address */
++     {
+       struct in_addr addr;
+       unhide_metas(arg);
+       if (arg && (inet_pton(AF_INET, arg, &addr) > 0))
+         {
+           struct bogus_addr *baddr = opt_malloc(sizeof(struct bogus_addr));
+-          baddr->next = daemon->bogus_addr;
+-          daemon->bogus_addr = baddr;
++          if (option == 'B')
++            {
++              baddr->next = daemon->bogus_addr;
++              daemon->bogus_addr = baddr;
++            }
++          else
++            {
++              baddr->next = daemon->ignore_addr;
++              daemon->ignore_addr = baddr;
++            }
+           baddr->addr = addr;
+         }
+       else
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index bdeb3fb10e68..75c4266b47dd 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1328,6 +1328,43 @@ int check_for_bogus_wildcard(struct dns_header *header, size_t qlen, char *name,
+   return 0;
+ }
++int check_for_ignored_address(struct dns_header *header, size_t qlen, struct bogus_addr *baddr)
++{
++  unsigned char *p;
++  int i, qtype, qclass, rdlen;
++  struct bogus_addr *baddrp;
++
++  /* skip over questions */
++  if (!(p = skip_questions(header, qlen)))
++    return 0; /* bad packet */
++
++  for (i = ntohs(header->ancount); i != 0; i--)
++    {
++      if (!(p = skip_name(p, header, qlen, 10)))
++      return 0; /* bad packet */
++      
++      GETSHORT(qtype, p); 
++      GETSHORT(qclass, p);
++      p += 4; /* TTL */
++      GETSHORT(rdlen, p);
++      
++      if (qclass == C_IN && qtype == T_A)
++      {
++        if (!CHECK_LEN(header, p, qlen, INADDRSZ))
++          return 0;
++        
++        for (baddrp = baddr; baddrp; baddrp = baddrp->next)
++          if (memcmp(&baddrp->addr, p, INADDRSZ) == 0)
++            return 1;
++      }
++      
++      if (!ADD_RDLEN(header, p, qlen, rdlen))
++      return 0;
++    }
++  
++  return 0;
++}
++
+ int add_resource_record(struct dns_header *header, char *limit, int *truncp, int nameoffset, unsigned char **pp, 
+                       unsigned long ttl, int *offset, unsigned short type, unsigned short class, char *format, ...)
+ {
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0022-Bad-packet-protection.patch b/src/patches/dnsmasq/0022-Bad-packet-protection.patch
new file mode 100644 (file)
index 0000000..1b37202
--- /dev/null
@@ -0,0 +1,25 @@
+From 0b1008d367d44e77352134a4c5178f896f0db3e7 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 27 Dec 2014 15:33:32 +0000
+Subject: [PATCH 22/55] Bad packet protection.
+
+---
+ src/dnssec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index ed8cf893bad2..026794b077e5 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -805,7 +805,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+               {
+                 while (*name_start != '.' && *name_start != 0)
+                   name_start++;
+-                if (k != 1)
++                if (k != 1 && *name_start == '.')
+                   name_start++;
+               }
+             
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0023-Fix-build-failure-in-new-inotify-code-on-BSD.patch b/src/patches/dnsmasq/0023-Fix-build-failure-in-new-inotify-code-on-BSD.patch
new file mode 100644 (file)
index 0000000..3bc3f79
--- /dev/null
@@ -0,0 +1,29 @@
+From d310ab7ecbffce79d3d90debba621e0222f9bced Mon Sep 17 00:00:00 2001
+From: Matthias Andree <matthias.andree@gmx.de>
+Date: Sat, 27 Dec 2014 15:36:38 +0000
+Subject: [PATCH 23/55] Fix build failure in new inotify code on BSD.
+
+---
+ src/inotify.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 960bf5efb41f..83730008c11b 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -15,10 +15,10 @@
+ */
+ #include "dnsmasq.h"
+-#include <sys/inotify.h>
+-
+ #ifdef HAVE_LINUX_NETWORK
++#include <sys/inotify.h>
++
+ /* the strategy is to set a inotify on the directories containing
+    resolv files, for any files in the directory which are close-write 
+    or moved into the directory.
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0024-Implement-makefile-dependencies-on-COPTS-variable.patch b/src/patches/dnsmasq/0024-Implement-makefile-dependencies-on-COPTS-variable.patch
new file mode 100644 (file)
index 0000000..e3074fa
--- /dev/null
@@ -0,0 +1,68 @@
+From 81c538efcebfce2ce4a1d3a420b6c885b8f08df9 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <yszhou4tech@gmail.com>
+Date: Sat, 3 Jan 2015 16:36:14 +0000
+Subject: [PATCH 24/55] Implement makefile dependencies on COPTS variable.
+
+---
+ .gitignore |  2 +-
+ Makefile   | 10 ++++++----
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/.gitignore b/.gitignore
+index fcdbcbd135ae..23f11488ab4c 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -3,7 +3,7 @@ src/*.mo
+ src/dnsmasq.pot
+ src/dnsmasq
+ src/dnsmasq_baseline
+-src/.configured
++src/.copts_*
+ contrib/wrt/dhcp_lease_time
+ contrib/wrt/dhcp_release
+ debian/base/
+diff --git a/Makefile b/Makefile
+index c340f1c7b59a..5675f60c2036 100644
+--- a/Makefile
++++ b/Makefile
+@@ -64,6 +64,8 @@ nettle_libs =   `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG
+ gmp_libs =      `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp`
+ sunos_libs =    `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi`
+ version =     -DVERSION='\"`$(top)/bld/get-version $(top)`\"'
++copts_conf = .copts_$(shell $(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | \
++                      ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' ')
+ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+        dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
+@@ -83,7 +85,7 @@ all : $(BUILDDIR)
+ mostly_clean :
+       rm -f $(BUILDDIR)/*.mo $(BUILDDIR)/*.pot 
+-      rm -f $(BUILDDIR)/.configured $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq 
++      rm -f $(BUILDDIR)/.copts_* $(BUILDDIR)/*.o $(BUILDDIR)/dnsmasq.a $(BUILDDIR)/dnsmasq
+ clean : mostly_clean
+       rm -f $(BUILDDIR)/dnsmasq_baseline
+@@ -139,8 +141,8 @@ bloatcheck : $(BUILDDIR)/dnsmasq_baseline mostly_clean all
+ # rules below are targets in recusive makes with cwd=$(BUILDDIR)
+-.configured: $(hdrs)
+-      @rm -f *.o
++$(copts_conf): $(hdrs)
++      @rm -f *.o .copts_*
+       @touch $@
+ $(objs:.o=.c) $(hdrs):
+@@ -149,7 +151,7 @@ $(objs:.o=.c) $(hdrs):
+ .c.o:
+       $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $< 
+-dnsmasq : .configured $(hdrs) $(objs)
++dnsmasq : $(copts_conf) $(hdrs) $(objs)
+       $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS) 
+ dnsmasq.pot : $(objs:.o=.c) $(hdrs)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0025-Fix-race-condition-issue-in-makefile.patch b/src/patches/dnsmasq/0025-Fix-race-condition-issue-in-makefile.patch
new file mode 100644 (file)
index 0000000..b1c42ae
--- /dev/null
@@ -0,0 +1,30 @@
+From d8dbd903d024f84a149dac2f8a674a68dfed47a3 Mon Sep 17 00:00:00 2001
+From: Yousong Zhou <yszhou4tech@gmail.com>
+Date: Mon, 5 Jan 2015 17:03:35 +0000
+Subject: [PATCH 25/55] Fix race condition issue in makefile.
+
+---
+ Makefile | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 5675f60c2036..bcbd5571671d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -148,10 +148,12 @@ $(copts_conf): $(hdrs)
+ $(objs:.o=.c) $(hdrs):
+       ln -s $(top)/$(SRC)/$@ .
++$(objs): $(copts_conf) $(hdrs)
++
+ .c.o:
+       $(CC) $(CFLAGS) $(COPTS) $(i18n) $(build_cflags) $(RPM_OPT_FLAGS) -c $< 
+-dnsmasq : $(copts_conf) $(hdrs) $(objs)
++dnsmasq : $(objs)
+       $(CC) $(LDFLAGS) -o $@ $(objs) $(build_libs) $(LIBS) 
+ dnsmasq.pot : $(objs:.o=.c) $(hdrs)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0026-DNSSEC-do-top-down-search-for-limit-of-secure-delega.patch b/src/patches/dnsmasq/0026-DNSSEC-do-top-down-search-for-limit-of-secure-delega.patch
new file mode 100644 (file)
index 0000000..7f01ee7
--- /dev/null
@@ -0,0 +1,792 @@
+From 97e618a0e3f29465acc689d87288596b006f197e Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 7 Jan 2015 21:55:43 +0000
+Subject: [PATCH 26/55] DNSSEC: do top-down search for limit of secure
+ delegation.
+
+---
+ CHANGELOG     |   9 ++
+ src/dnsmasq.h |  11 +-
+ src/dnssec.c  |  91 +++++++++-------
+ src/forward.c | 327 +++++++++++++++++++++++++++++++++-------------------------
+ 4 files changed, 260 insertions(+), 178 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 2b6356bcfb02..e8bf80f81baa 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -31,7 +31,16 @@ version 2.73
+           request for certain domains, before the correct answer can
+             arrive. Thanks to Glen Huang for the patch.
+       
++          Revisit the part of DNSSEC validation which determines if an 
++          unsigned answer is legit, or is in some part of the DNS 
++          tree which should be signed. Dnsmasq now works from the 
++          DNS root downward looking for the limit of signed 
++          delegations, rather than working bottom up. This is 
++          both more correct, and less likely to trip over broken 
++          nameservers in the unsigned parts of the DNS tree 
++          which don't respond well to DNSSEC queries.
++      
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 7bc982ddf73c..2f4597294a56 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -569,8 +569,9 @@ struct hostsfile {
+ #define STAT_SECURE_WILDCARD    7
+ #define STAT_NO_SIG             8
+ #define STAT_NO_DS              9
+-#define STAT_NEED_DS_NEG       10
+-#define STAT_CHASE_CNAME       11
++#define STAT_NO_NS             10
++#define STAT_NEED_DS_NEG       11
++#define STAT_CHASE_CNAME       12
+ #define FREC_NOREBIND           1
+ #define FREC_CHECKING_DISABLED  2
+@@ -604,7 +605,9 @@ struct frec {
+ #ifdef HAVE_DNSSEC 
+   int class, work_counter;
+   struct blockdata *stash; /* Saved reply, whilst we validate */
+-  size_t stash_len;
++  struct blockdata *orig_domain; /* domain of original query, whilst
++                                  we're seeing is if in unsigned domain */
++  size_t stash_len, name_start, name_len;
+   struct frec *dependent; /* Query awaiting internally-generated DNSKEY or DS query */
+   struct frec *blocking_query; /* Query which is blocking us. */
+ #endif
+@@ -1126,7 +1129,7 @@ int in_zone(struct auth_zone *zone, char *name, char **cut);
+ size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, int class, int type, union mysockaddr *addr);
+ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t n, char *name, char *keyname, int class);
+ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class);
+-int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer);
++int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer, int *nons);
+ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname);
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 026794b077e5..8f27677628b2 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -875,8 +875,7 @@ static int validate_rrset(time_t now, struct dns_header *header, size_t plen, in
+ /* The DNS packet is expected to contain the answer to a DNSKEY query.
+    Put all DNSKEYs in the answer which are valid into the cache.
+    return codes:
+-         STAT_INSECURE No DNSKEYs in reply.
+-       STAT_SECURE   At least one valid DNSKEY found and in cache.
++         STAT_SECURE   At least one valid DNSKEY found and in cache.
+        STAT_BOGUS    No DNSKEYs found, which  can be validated with DS,
+                      or self-sign for DNSKEY RRset is not valid, bad packet.
+        STAT_NEED_DS  DS records to validate a key not found, name in keyname 
+@@ -896,11 +895,8 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+   GETSHORT(qtype, p);
+   GETSHORT(qclass, p);
+   
+-  if (qtype != T_DNSKEY || qclass != class)
++  if (qtype != T_DNSKEY || qclass != class || ntohs(header->ancount) == 0)
+     return STAT_BOGUS;
+-  
+-  if (ntohs(header->ancount) == 0)
+-    return STAT_INSECURE;
+   /* See if we have cached a DS record which validates this key */
+   if (!(crecp = cache_find_by_name(NULL, name, now, F_DS)))
+@@ -1103,17 +1099,17 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+ /* The DNS packet is expected to contain the answer to a DS query
+    Put all DSs in the answer which are valid into the cache.
+    return codes:
+-   STAT_INSECURE    no DS in reply or not signed.
+    STAT_SECURE      At least one valid DS found and in cache.
+    STAT_NO_DS       It's proved there's no DS here.
+-   STAT_BOGUS       At least one DS found, which fails validation, bad packet.
++   STAT_NO_NS       It's proved there's no DS _or_ NS here.
++   STAT_BOGUS       no DS in reply or not signed, fails validation, bad packet.
+    STAT_NEED_DNSKEY DNSKEY records to validate a DS not found, name in keyname
+ */
+ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class)
+ {
+   unsigned char *p = (unsigned char *)(header+1);
+-  int qtype, qclass, val, i, neganswer;
++  int qtype, qclass, val, i, neganswer, nons;
+   if (ntohs(header->qdcount) != 1 ||
+       !(p = skip_name(p, header, plen, 4)))
+@@ -1125,32 +1121,39 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+   if (qtype != T_DS || qclass != class)
+     val = STAT_BOGUS;
+   else
+-    val = dnssec_validate_reply(now, header, plen, name, keyname, NULL, &neganswer);
+-
+-  if (val == STAT_NO_SIG)
+-    val = STAT_INSECURE;
++    val = dnssec_validate_reply(now, header, plen, name, keyname, NULL, &neganswer, &nons);
++  /* Note dnssec_validate_reply() will have cached positive answers */
++  
++  if (val == STAT_NO_SIG || val == STAT_INSECURE)
++    val = STAT_BOGUS;
+   
+   p = (unsigned char *)(header+1);
+   extract_name(header, plen, &p, name, 1, 4);
+   p += 4; /* qtype, qclass */
+   
+   if (!(p = skip_section(p, ntohs(header->ancount), header, plen)))
+-    return STAT_BOGUS;
++    val = STAT_BOGUS;
+   
+   if (val == STAT_BOGUS)
+-    log_query(F_UPSTREAM, name, NULL, "BOGUS DS");
+-  
+-  if ((val == STAT_SECURE || val == STAT_INSECURE) && neganswer)
+     {
+-      int rdlen, flags = F_FORWARD | F_DS | F_NEG;
++      log_query(F_UPSTREAM, name, NULL, "BOGUS DS");
++      return STAT_BOGUS;
++    }
++
++  /* By here, the answer is proved secure, and a positive answer has been cached. */
++  if (val == STAT_SECURE && neganswer)
++    {
++      int rdlen, flags = F_FORWARD | F_DS | F_NEG | F_DNSSECOK;
+       unsigned long ttl, minttl = ULONG_MAX;
+       struct all_addr a;
+       if (RCODE(header) == NXDOMAIN)
+       flags |= F_NXDOMAIN;
+       
+-      if (val == STAT_SECURE)
+-      flags |= F_DNSSECOK;
++      /* We only cache validated DS records, DNSSECOK flag hijacked 
++       to store presence/absence of NS. */
++      if (nons)
++      flags &= ~F_DNSSECOK;
+       
+       for (i = ntohs(header->nscount); i != 0; i--)
+       {
+@@ -1196,10 +1199,12 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+         a.addr.dnssec.class = class;
+         cache_insert(name, &a, now, ttl, flags);
+         
+-        cache_end_insert(); 
++        cache_end_insert();  
++        
++        log_query(F_UPSTREAM, name, NULL, nons ? "no delegation" : "no DS");
+       }
+-      return (val == STAT_SECURE) ? STAT_NO_DS : STAT_INSECURE; 
++      return nons ? STAT_NO_NS : STAT_NO_DS; 
+     }
+   return val;
+@@ -1323,12 +1328,15 @@ static int find_nsec_records(struct dns_header *header, size_t plen, unsigned ch
+ }
+ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsigned char **nsecs, int nsec_count,
+-                                  char *workspace1, char *workspace2, char *name, int type)
++                                  char *workspace1, char *workspace2, char *name, int type, int *nons)
+ {
+   int i, rc, rdlen;
+   unsigned char *p, *psave;
+   int offset = (type & 0xff) >> 3;
+   int mask = 0x80 >> (type & 0x07);
++
++  if (nons)
++    *nons = 0;
+   
+   /* Find NSEC record that proves name doesn't exist */
+   for (i = 0; i < nsec_count; i++)
+@@ -1355,6 +1363,10 @@ static int prove_non_existence_nsec(struct dns_header *header, size_t plen, unsi
+         rdlen -= p - psave;
+         /* rdlen is now length of type map, and p points to it */
+         
++        /* If we can prove that there's no NS record, return that information. */
++        if (nons && rdlen >= 2 && p[0] == 0 && (p[2] & (0x80 >> T_NS)) == 0)
++          *nons = 1;
++        
+         while (rdlen >= 2)
+           {
+             if (!CHECK_LEN(header, p, plen, rdlen))
+@@ -1456,7 +1468,7 @@ static int base32_decode(char *in, unsigned char *out)
+ }
+ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int digest_len, unsigned char *digest, int type,
+-                              char *workspace1, char *workspace2, unsigned char **nsecs, int nsec_count)
++                              char *workspace1, char *workspace2, unsigned char **nsecs, int nsec_count, int *nons)
+ {
+   int i, hash_len, salt_len, base32_len, rdlen;
+   unsigned char *p, *psave;
+@@ -1497,6 +1509,10 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
+               if (!CHECK_LEN(header, p, plen, rdlen))
+                 return 0;
+               
++              /* If we can prove that there's no NS record, return that information. */
++              if (nons && rdlen >= 2 && p[0] == 0 && (p[2] & (0x80 >> T_NS)) == 0)
++                *nons = 1;
++              
+               while (rdlen >= 2)
+                 {
+                   if (p[0] == type >> 8)
+@@ -1533,13 +1549,16 @@ static int check_nsec3_coverage(struct dns_header *header, size_t plen, int dige
+ }
+ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, unsigned char **nsecs, int nsec_count,
+-                                   char *workspace1, char *workspace2, char *name, int type, char *wildname)
++                                   char *workspace1, char *workspace2, char *name, int type, char *wildname, int *nons)
+ {
+   unsigned char *salt, *p, *digest;
+   int digest_len, i, iterations, salt_len, base32_len, algo = 0;
+   struct nettle_hash const *hash;
+   char *closest_encloser, *next_closest, *wildcard;
+- 
++  
++  if (nons)
++    *nons = 0;
++  
+   /* Look though the NSEC3 records to find the first one with 
+      an algorithm we support (currently only algo == 1).
+@@ -1612,7 +1631,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+   if ((digest_len = hash_name(name, &digest, hash, salt, salt_len, iterations)) == 0)
+     return STAT_BOGUS;
+   
+-  if (check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++  if (check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, nons))
+     return STAT_SECURE;
+   /* Can't find an NSEC3 which covers the name directly, we need the "closest encloser NSEC3" 
+@@ -1657,7 +1676,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+   if ((digest_len = hash_name(next_closest, &digest, hash, salt, salt_len, iterations)) == 0)
+     return STAT_BOGUS;
+-  if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++  if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, NULL))
+     return STAT_BOGUS;
+   
+   /* Finally, check that there's no seat of wildcard synthesis */
+@@ -1672,7 +1691,7 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+       if ((digest_len = hash_name(wildcard, &digest, hash, salt, salt_len, iterations)) == 0)
+       return STAT_BOGUS;
+       
+-      if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count))
++      if (!check_nsec3_coverage(header, plen, digest_len, digest, type, workspace1, workspace2, nsecs, nsec_count, NULL))
+       return STAT_BOGUS;
+     }
+   
+@@ -1681,7 +1700,8 @@ static int prove_non_existence_nsec3(struct dns_header *header, size_t plen, uns
+     
+ /* Validate all the RRsets in the answer and authority sections of the reply (4035:3.2.3) */
+ /* Returns are the same as validate_rrset, plus the class if the missing key is in *class */
+-int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int *class, int *neganswer)
++int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, 
++                        int *class, int *neganswer, int *nons)
+ {
+   unsigned char *ans_start, *qname, *p1, *p2, **nsecs;
+   int type1, class1, rdlen1, type2, class2, rdlen2, qclass, qtype;
+@@ -1811,10 +1831,11 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+                   return STAT_BOGUS; /* No NSECs or bad packet */
+                 
+                 if (nsec_type == T_NSEC)
+-                  rc = prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1);
++                  rc = prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1, NULL);
+                 else
+-                  rc = prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, type1, wildname);
+-
++                  rc = prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, 
++                                                 keyname, name, type1, wildname, NULL);
++                
+                 if (rc != STAT_SECURE)
+                   return rc;
+               } 
+@@ -1937,9 +1958,9 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+     return STAT_BOGUS;
+   
+   if (nsec_type == T_NSEC)
+-    return prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype);
++    return prove_non_existence_nsec(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, nons);
+   else
+-    return prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, NULL);
++    return prove_non_existence_nsec3(header, plen, nsecs, nsec_count, daemon->workspacename, keyname, name, qtype, NULL, nons);
+ }
+ /* Chase the CNAME chain in the packet until the first record which _doesn't validate.
+diff --git a/src/forward.c b/src/forward.c
+index f28c7d51f708..ee8d7b52d5e5 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -26,8 +26,9 @@ static void free_frec(struct frec *f);
+ #ifdef HAVE_DNSSEC
+ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, size_t n, 
+                          int class, char *name, char *keyname, struct server *server, int *keycount);
+-static int do_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class);
+-static int send_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname);
++static int do_check_sign(struct frec *forward, int status, time_t now, char *name, char *keyname);
++static int send_check_sign(struct frec *forward, time_t now, struct dns_header *header, size_t plen, 
++                         char *name, char *keyname);
+ #endif
+@@ -815,18 +816,22 @@ void reply_query(int fd, int family, time_t now)
+         else if (forward->flags & FREC_DS_QUERY)
+           {
+             status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
+-            if (status == STAT_NO_DS)
+-              status = STAT_INSECURE;
++            if (status == STAT_NO_DS || status == STAT_NO_NS)
++              status = STAT_BOGUS;
+           }
+         else if (forward->flags & FREC_CHECK_NOSIGN)
+-          status = do_check_sign(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++          {
++            status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++            if (status != STAT_NEED_KEY)
++              status = do_check_sign(forward, status, now, daemon->namebuff, daemon->keyname);
++          }
+         else
+           {
+-            status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL);
++            status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL, NULL);
+             if (status == STAT_NO_SIG)
+               {
+                 if (option_bool(OPT_DNSSEC_NO_SIGN))
+-                  status = send_check_sign(now, header, n, daemon->namebuff, daemon->keyname);
++                  status = send_check_sign(forward, now, header, n, daemon->namebuff, daemon->keyname);
+                 else
+                   status = STAT_INSECURE;
+               }
+@@ -861,6 +866,7 @@ void reply_query(int fd, int family, time_t now)
+                 new->blocking_query = NULL;
+                 new->sentto = server;
+                 new->rfd4 = NULL;
++                new->orig_domain = NULL;
+ #ifdef HAVE_IPV6
+                 new->rfd6 = NULL;
+ #endif
+@@ -889,7 +895,9 @@ void reply_query(int fd, int family, time_t now)
+                 new->new_id = get_id();
+                 header->id = htons(new->new_id);
+                 /* Save query for retransmission */
+-                new->stash = blockdata_alloc((char *)header, nn);
++                if (!(new->stash = blockdata_alloc((char *)header, nn)))
++                  return;
++                    
+                 new->stash_len = nn;
+                 
+                 /* Don't resend this. */
+@@ -946,18 +954,22 @@ void reply_query(int fd, int family, time_t now)
+                 else if (forward->flags & FREC_DS_QUERY)
+                   {
+                     status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
+-                    if (status == STAT_NO_DS)
+-                      status = STAT_INSECURE;
++                    if (status == STAT_NO_DS || status == STAT_NO_NS)
++                      status = STAT_BOGUS;
+                   }
+                 else if (forward->flags & FREC_CHECK_NOSIGN)
+-                  status = do_check_sign(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++                  {
++                    status = dnssec_validate_ds(now, header, n, daemon->namebuff, daemon->keyname, forward->class);
++                    if (status != STAT_NEED_KEY)
++                      status = do_check_sign(forward, status, now, daemon->namebuff, daemon->keyname);
++                  }
+                 else
+                   {
+-                    status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL); 
++                    status = dnssec_validate_reply(now, header, n, daemon->namebuff, daemon->keyname, &forward->class, NULL, NULL);   
+                     if (status == STAT_NO_SIG)
+                       {
+                         if (option_bool(OPT_DNSSEC_NO_SIGN))
+-                          status = send_check_sign(now, header, n, daemon->namebuff, daemon->keyname);
++                          status = send_check_sign(forward, now, header, n, daemon->namebuff, daemon->keyname);
+                         else
+                           status = STAT_INSECURE;
+                       }
+@@ -1319,70 +1331,80 @@ void receive_query(struct listener *listen, time_t now)
+ /* UDP: we've got an unsigned answer, return STAT_INSECURE if we can prove there's no DS
+    and therefore the answer shouldn't be signed, or STAT_BOGUS if it should be, or 
+    STAT_NEED_DS_NEG and keyname if we need to do the query. */
+-static int send_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname)
++static int send_check_sign(struct frec *forward, time_t now, struct dns_header *header, size_t plen, 
++                         char *name, char *keyname)
+ {
+-  struct crec *crecp;
+-  char *name_start = name;
+   int status = dnssec_chase_cname(now, header, plen, name, keyname);
+   
+   if (status != STAT_INSECURE)
+     return status;
++  /* Store the domain we're trying to check. */
++  forward->name_start = strlen(name);
++  forward->name_len = forward->name_start + 1;
++  if (!(forward->orig_domain = blockdata_alloc(name, forward->name_len)))
++    return STAT_BOGUS;
++  
++  return do_check_sign(forward, 0, now, name, keyname);
++}
++ 
++/* We either have a a reply (header non-NULL, or we need to start by looking in the cache */ 
++static int do_check_sign(struct frec *forward, int status, time_t now, char *name, char *keyname)
++{
++  /* get domain we're checking back from blockdata store, it's stored on the original query. */
++  while (forward->dependent)
++    forward = forward->dependent;
++
++  blockdata_retrieve(forward->orig_domain, forward->name_len, name);
++  
+   while (1)
+     {
+-      crecp = cache_find_by_name(NULL, name_start, now, F_DS);
+-      
+-      if (crecp && (crecp->flags & F_DNSSECOK))
+-      return (crecp->flags & F_NEG) ? STAT_INSECURE : STAT_BOGUS;
+-       
+-      if (crecp && (crecp->flags & F_NEG) && (name_start = strchr(name_start, '.')))
++      char *p; 
++
++      if (status == 0)
+       {
+-        name_start++; /* chop a label off and try again */
+-        continue;
++        struct crec *crecp;
++
++        /* Haven't received answer, see if in cache */
++        if (!(crecp = cache_find_by_name(NULL, &name[forward->name_start], now, F_DS)))
++          {
++            /* put name of DS record we're missing into keyname */
++            strcpy(keyname, &name[forward->name_start]);
++            /* and wait for reply to arrive */
++            return STAT_NEED_DS_NEG;
++          }
++
++        /* F_DNSSECOK misused in DS cache records to non-existance of NS record */ 
++        if (!(crecp->flags & F_NEG))
++          status = STAT_SECURE;
++        else if (crecp->flags & F_DNSSECOK)
++          status = STAT_NO_DS;
++        else
++          status = STAT_NO_NS;
+       }
++      
++      /* Have entered non-signed part of DNS tree. */ 
++      if (status == STAT_NO_DS)
++      return STAT_INSECURE;
+-      /* Reached the root */
+-      if (!name_start)
++      if (status == STAT_BOGUS)
+       return STAT_BOGUS;
+-      strcpy(keyname, name_start);
+-      return STAT_NEED_DS_NEG;
+-    }
+-}
+-
+-/* Got answer to DS query from send_check_sign, check for proven non-existence, or make the next DS query to try. */
+-static int do_check_sign(time_t now, struct dns_header *header, size_t plen, char *name, char *keyname, int class)
+-  
+-{ 
+-  char *name_start;
+-  unsigned char *p;
+-  int status;
++      /* There's a proven DS record, or we're within a zone, where there doesn't need
++       to be a DS record. Add a name and try again. 
++       If we've already tried the whole name, then fail */
+-  /* In this case only, a SERVFAIL reply allows us to continue up the tree, looking for a 
+-     suitable NSEC reply to DS queries. */
+-  if (RCODE(header) != SERVFAIL)
+-    { 
+-      status = dnssec_validate_ds(now, header, plen, name, keyname, class);
++      if (forward->name_start == 0)
++      return STAT_BOGUS;
+       
+-      if (status != STAT_INSECURE)
+-      {
+-        if (status == STAT_NO_DS)
+-          status = STAT_INSECURE;
+-        return status;
+-      }
+-    }
+-  
+-  p = (unsigned char *)(header+1);
+-  
+-  if (extract_name(header, plen, &p, name, 1, 4) &&
+-      (name_start = strchr(name, '.')))
+-    {
+-      name_start++; /* chop a label off and try again */
+-      strcpy(keyname, name_start);
+-      return STAT_NEED_DS_NEG;
++      for (p = &name[forward->name_start-2]; (*p != '.') && (p != name); p--);
++      
++      if (p != name)
++      p++;
++      
++      forward->name_start = p - name;
++      status = 0; /* force to cache when we iterate. */
+     }
+-  
+-  return STAT_BOGUS;
+ }
+ /* Move toward the root, until we find a signed non-existance of a DS, in which case
+@@ -1395,8 +1417,10 @@ static int  tcp_check_for_unsigned_zone(time_t now, struct dns_header *header, s
+   unsigned char *packet, *payload;
+   u16 *length;
+   unsigned char *p = (unsigned char *)(header+1);
+-  int status;
+-  char *name_start = name;
++  int status, name_len;
++  struct blockdata *block;
++
++  char *name_start;
+   /* Get first insecure entry in CNAME chain */
+   status = tcp_key_recurse(now, STAT_CHASE_CNAME, header, plen, class, name, keyname, server, keycount);
+@@ -1409,95 +1433,113 @@ static int  tcp_check_for_unsigned_zone(time_t now, struct dns_header *header, s
+   payload = &packet[2];
+   header = (struct dns_header *)payload;
+   length = (u16 *)packet;
++
++  /* Stash the name away, since the buffer will be trashed when we recurse */
++  name_len = strlen(name) + 1;
++  name_start = name + name_len - 1;
+   
++  if (!(block = blockdata_alloc(name, name_len)))
++    {
++      free(packet);
++      return STAT_BOGUS;
++    }
++
+   while (1)
+     {
+-      unsigned char *newhash, hash[HASH_SIZE];
+       unsigned char c1, c2;
+-      struct crec *crecp = cache_find_by_name(NULL, name_start, now, F_DS);
+- 
++      struct crec *crecp;
++
+       if (--(*keycount) == 0)
+       {
+         free(packet);
++        blockdata_free(block);
+         return STAT_BOGUS;    
+       }
+-
+-      if (crecp && (crecp->flags & F_DNSSECOK))
+-      {
+-        free(packet);
+-        return (crecp->flags & F_NEG) ? STAT_INSECURE : STAT_BOGUS;
+-      }
+       
+-      /* If we have cached insecurely that a DS doesn't exist, 
+-       ise that is a hit for where to start looking for the secure one */
+-      if (crecp && (crecp->flags & F_NEG) && (name_start = strchr(name_start, '.')))
+-      {
+-        name_start++; /* chop a label off and try again */
+-        continue;
+-      }
+-
+-      /* reached the root */
+-      if (!name_start)
+-      {
+-        free(packet);
+-        return STAT_BOGUS;
++      while (crecp = cache_find_by_name(NULL, name_start, now, F_DS))
++      {      
++        if ((crecp->flags & F_NEG) && (crecp->flags & F_DNSSECOK))
++          {
++            /* Found a secure denial of DS - delegation is indeed insecure */
++            free(packet);
++            blockdata_free(block);
++            return STAT_INSECURE;
++          }
++      
++        /* Here, either there's a secure DS, or no NS and no DS, and therefore no delegation.
++           Add another label and continue. */
++ 
++        if (name_start == name)
++          {
++            free(packet);
++            blockdata_free(block);
++            return STAT_BOGUS; /* run out of labels */
++          }
++        
++        name_start -= 2;
++        while (*name_start != '.' && name_start != name) 
++          name_start--;
++        if (name_start != name)
++          name_start++;
+       }
++      
++      /* Can't find it in the cache, have to send a query */
+       m = dnssec_generate_query(header, ((char *) header) + 65536, name_start, class, T_DS, &server->addr);
+       
+-      /* We rely on the question section coming back unchanged, ensure it is with the hash. */
+-      if ((newhash = hash_questions(header, (unsigned int)m, name)))
+-      {
+-        memcpy(hash, newhash, HASH_SIZE);
++      *length = htons(m);
+       
+-        *length = htons(m);
++      if (read_write(server->tcpfd, packet, m + sizeof(u16), 0) &&
++        read_write(server->tcpfd, &c1, 1, 1) &&
++        read_write(server->tcpfd, &c2, 1, 1) &&
++        read_write(server->tcpfd, payload, (c1 << 8) | c2, 1))
++      {
++        m = (c1 << 8) | c2;
++        
++        /* Note this trashes all three name workspaces */
++        status = tcp_key_recurse(now, STAT_NEED_DS_NEG, header, m, class, name, keyname, server, keycount);
+         
+-        if (read_write(server->tcpfd, packet, m + sizeof(u16), 0) &&
+-            read_write(server->tcpfd, &c1, 1, 1) &&
+-            read_write(server->tcpfd, &c2, 1, 1) &&
+-            read_write(server->tcpfd, payload, (c1 << 8) | c2, 1))
++        if (status == STAT_NO_DS)
+           {
+-            m = (c1 << 8) | c2;
+-            
+-            newhash = hash_questions(header, (unsigned int)m, name);
+-            if (newhash && memcmp(hash, newhash, HASH_SIZE) == 0)
+-              {
+-                 /* In this case only, a SERVFAIL reply allows us to continue up the tree, looking for a 
+-                    suitable NSEC reply to DS queries. */
+-                if (RCODE(header) == SERVFAIL)
+-                  status = STAT_INSECURE;
+-                else
+-                  /* Note this trashes all three name workspaces */
+-                  status = tcp_key_recurse(now, STAT_NEED_DS_NEG, header, m, class, name, keyname, server, keycount);
+-                
+-                /* We've found a DS which proves the bit of the DNS where the
+-                   original query is, is unsigned, so the answer is OK, 
+-                   if unvalidated. */
+-                if (status == STAT_NO_DS)
+-                  {
+-                    free(packet);
+-                    return STAT_INSECURE;
+-                  }
+-            
+-                /* No DS, not got to DNSSEC-land yet, go up. */
+-                if (status == STAT_INSECURE)
+-                  {
+-                    p = (unsigned char *)(header+1);
+-                    
+-                    if (extract_name(header, plen, &p, name, 1, 4) &&
+-                        (name_start = strchr(name, '.')))
+-                      {
+-                        name_start++; /* chop a label off and try again */
+-                        continue;
+-                      }
+-                  }
+-              }
++            /* Found a secure denial of DS - delegation is indeed insecure */
++            free(packet);
++            blockdata_free(block);
++            return STAT_INSECURE;
++          }
++        
++        if (status == STAT_BOGUS)
++          {
++            free(packet);
++            blockdata_free(block);
++            return STAT_BOGUS;
++          }
++        
++        /* Here, either there's a secure DS, or no NS and no DS, and therefore no delegation.
++           Add another label and continue. */
++        
++        /* Get name we're checking back. */
++        blockdata_retrieve(block, name_len, name);
++        
++        if (name_start == name)
++          {
++            free(packet);
++            blockdata_free(block);
++            return STAT_BOGUS; /* run out of labels */
+           }
++        
++        name_start -= 2;
++        while (*name_start != '.' && name_start != name) 
++          name_start--;
++        if (name_start != name)
++          name_start++;
++      }
++      else
++      {
++        /* IO failure */
++        free(packet);
++        blockdata_free(block);
++        return STAT_BOGUS; /* run out of labels */
+       }
+-      
+-      free(packet);
+-
+-      return STAT_BOGUS;
+     }
+ }
+@@ -1516,14 +1558,14 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+   else if (status == STAT_NEED_DS || status == STAT_NEED_DS_NEG)
+     {
+       new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
+-      if (status == STAT_NEED_DS  && new_status == STAT_NO_DS)
+-      new_status = STAT_INSECURE;
++      if (status == STAT_NEED_DS && (new_status == STAT_NO_DS || new_status == STAT_NO_NS))
++      new_status = STAT_BOGUS;
+     }
+   else if (status == STAT_CHASE_CNAME)
+     new_status = dnssec_chase_cname(now, header, n, name, keyname);
+   else 
+     {
+-      new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL);
++      new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL, NULL);
+       
+       if (new_status == STAT_NO_SIG)
+       {
+@@ -1576,14 +1618,14 @@ static int tcp_key_recurse(time_t now, int status, struct dns_header *header, si
+             else if (status == STAT_NEED_DS || status == STAT_NEED_DS_NEG)
+               {
+                 new_status = dnssec_validate_ds(now, header, n, name, keyname, class);
+-                if (status == STAT_NEED_DS && new_status == STAT_NO_DS)
+-                  new_status = STAT_INSECURE; /* Validated no DS */
++                if (status == STAT_NEED_DS  && (new_status == STAT_NO_DS || new_status == STAT_NO_NS))
++                  new_status = STAT_BOGUS; /* Validated no DS */
+               }
+             else if (status == STAT_CHASE_CNAME)
+               new_status = dnssec_chase_cname(now, header, n, name, keyname);
+             else 
+               {
+-                new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL);
++                new_status = dnssec_validate_reply(now, header, n, name, keyname, &class, NULL, NULL);
+                 
+                 if (new_status == STAT_NO_SIG)
+                   {
+@@ -1961,6 +2003,7 @@ static struct frec *allocate_frec(time_t now)
+       f->dependent = NULL;
+       f->blocking_query = NULL;
+       f->stash = NULL;
++      f->orig_domain = NULL;
+ #endif
+       daemon->frec_list = f;
+     }
+@@ -2029,6 +2072,12 @@ static void free_frec(struct frec *f)
+       f->stash = NULL;
+     }
++  if (f->orig_domain)
++    {
++      blockdata_free(f->orig_domain);
++      f->orig_domain = NULL;
++    }
++
+   /* Anything we're waiting on is pointless now, too */
+   if (f->blocking_query)
+     free_frec(f->blocking_query);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0027-Add-log-queries-extra-option-for-more-complete-loggi.patch b/src/patches/dnsmasq/0027-Add-log-queries-extra-option-for-more-complete-loggi.patch
new file mode 100644 (file)
index 0000000..e258d56
--- /dev/null
@@ -0,0 +1,346 @@
+From 25cf5e373eb41c088d4ee5e625209c4cf6a5659e Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Fri, 9 Jan 2015 15:53:03 +0000
+Subject: [PATCH 27/55] Add --log-queries=extra option for more complete
+ logging.
+
+---
+ CHANGELOG     |  3 +++
+ man/dnsmasq.8 |  5 ++++-
+ src/cache.c   | 11 ++++++++++-
+ src/config.h  |  1 +
+ src/dnsmasq.c |  5 +++++
+ src/dnsmasq.h |  9 +++++++--
+ src/dnssec.c  | 14 +++++++-------
+ src/forward.c | 30 ++++++++++++++++++++++++++----
+ src/option.c  | 11 +++++++++--
+ 9 files changed, 72 insertions(+), 17 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index e8bf80f81baa..0bbb7835df4f 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -40,6 +40,9 @@ version 2.73
+           nameservers in the unsigned parts of the DNS tree 
+           which don't respond well to DNSSEC queries.
++          Add --log-queries=extra option, which makes logs easier
++          to search automatically.
++
+       
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 4236ba307df3..227d74bd80e7 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -98,7 +98,10 @@ only, to stop dnsmasq daemonising in production, use
+ .B -k.
+ .TP
+ .B \-q, --log-queries
+-Log the results of DNS queries handled by dnsmasq. Enable a full cache dump on receipt of SIGUSR1.
++Log the results of DNS queries handled by dnsmasq. Enable a full cache dump on receipt of SIGUSR1. If the argument "extra" is supplied, ie
++.B --log-queries=extra
++then the log has extra information at the start of each line.
++This consists of a serial number which ties together the log lines associated with an individual query, and the IP address of the requestor.
+ .TP
+ .B \-8, --log-facility=<facility>
+ Set the facility to which dnsmasq will send syslog entries, this
+diff --git a/src/cache.c b/src/cache.c
+index ff1ca6f1c352..960bb7938778 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1638,7 +1638,16 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
+   if (strlen(name) == 0)
+     name = ".";
+-  my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
++  if (option_bool(OPT_EXTRALOG))
++    {
++      prettyprint_addr(daemon->log_source_addr, daemon->addrbuff2);
++      if (flags & F_NOEXTRA)
++      my_syslog(LOG_INFO, "* %s %s %s %s %s", daemon->addrbuff2, source, name, verb, dest);
++      else
++      my_syslog(LOG_INFO, "%u %s %s %s %s %s", daemon->log_display_id, daemon->addrbuff2, source, name, verb, dest);
++    }
++  else
++    my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
+ }
+  
+diff --git a/src/config.h b/src/config.h
+index 145820ad2510..3b88d8193dca 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -17,6 +17,7 @@
+ #define FTABSIZ 150 /* max number of outstanding requests (default) */
+ #define MAX_PROCS 20 /* max no children for TCP requests */
+ #define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
++#define TCP_MAX_QUERIES 100 /* Maximum number of queries per incoming TCP connection */
+ #define EDNS_PKTSZ 4096 /* default max EDNS.0 UDP packet from RFC5625 */
+ #define KEYBLOCK_LEN 40 /* choose to mininise fragmentation when storing DNSSEC keys */
+ #define DNSSEC_WORK 50 /* Max number of queries to validate one question */
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 5c7750d365fa..c0c0589d4ce1 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -93,6 +93,8 @@ int main (int argc, char **argv)
+   daemon->packet = safe_malloc(daemon->packet_buff_sz);
+   
+   daemon->addrbuff = safe_malloc(ADDRSTRLEN);
++  if (option_bool(OPT_EXTRALOG))
++    daemon->addrbuff2 = safe_malloc(ADDRSTRLEN);
+   
+ #ifdef HAVE_DNSSEC
+   if (option_bool(OPT_DNSSEC_VALID))
+@@ -1587,6 +1589,9 @@ static void check_dns_listeners(fd_set *set, time_t now)
+                     }
+               }
+             close(confd);
++
++            /* The child can use up to TCP_MAX_QUERIES ids, so skip that many. */
++            daemon->log_id += TCP_MAX_QUERIES;
+           }
+ #endif
+         else
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 2f4597294a56..4e9aea401b75 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -238,7 +238,8 @@ struct event_desc {
+ #define OPT_DNSSEC_NO_SIGN 48 
+ #define OPT_LOCAL_SERVICE  49
+ #define OPT_LOOP_DETECT    50
+-#define OPT_LAST           51
++#define OPT_EXTRALOG       51
++#define OPT_LAST           52
+ /* extra flags for my_syslog, we use a couple of facilities since they are known 
+    not to occupy the same bits as priorities, no matter how syslog.h is set up. */
+@@ -442,6 +443,7 @@ struct crec {
+ #define F_NO_RR     (1u<<25)
+ #define F_IPSET     (1u<<26)
+ #define F_NSIGMATCH (1u<<27)
++#define F_NOEXTRA   (1u<<28)
+ /* Values of uid in crecs with F_CONFIG bit set. */
+ #define SRC_INTERFACE 0
+@@ -599,7 +601,7 @@ struct frec {
+ #endif
+   unsigned int iface;
+   unsigned short orig_id, new_id;
+-  int fd, forwardall, flags;
++  int log_id, fd, forwardall, flags;
+   time_t time;
+   unsigned char *hash[HASH_SIZE];
+ #ifdef HAVE_DNSSEC 
+@@ -1002,6 +1004,8 @@ extern struct daemon {
+   struct randfd randomsocks[RANDOM_SOCKS];
+   int v6pktinfo; 
+   struct addrlist *interface_addrs; /* list of all addresses/prefix lengths associated with all local interfaces */
++  int log_id, log_display_id; /* ids of transactions for logging */
++  union mysockaddr *log_source_addr;
+   /* DHCP state */
+   int dhcpfd, helperfd, pxefd; 
+@@ -1033,6 +1037,7 @@ extern struct daemon {
+   /* utility string buffer, hold max sized IP address as string */
+   char *addrbuff;
++  char *addrbuff2; /* only allocated when OPT_EXTRALOG */
+ } *daemon;
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 8f27677628b2..afb3dca38cb1 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1038,7 +1038,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+                     else
+                       {
+                         a.addr.keytag = keytag;
+-                        log_query(F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u");
++                        log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DNSKEY keytag %u");
+                         
+                         recp1->addr.key.keylen = rdlen - 4;
+                         recp1->addr.key.keydata = key;
+@@ -1092,7 +1092,7 @@ int dnssec_validate_by_ds(time_t now, struct dns_header *header, size_t plen, ch
+       return STAT_SECURE;
+     }
+-  log_query(F_UPSTREAM, name, NULL, "BOGUS DNSKEY");
++  log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "BOGUS DNSKEY");
+   return STAT_BOGUS;
+ }
+@@ -1136,7 +1136,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+   
+   if (val == STAT_BOGUS)
+     {
+-      log_query(F_UPSTREAM, name, NULL, "BOGUS DS");
++      log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, "BOGUS DS");
+       return STAT_BOGUS;
+     }
+@@ -1201,7 +1201,7 @@ int dnssec_validate_ds(time_t now, struct dns_header *header, size_t plen, char
+         
+         cache_end_insert();  
+         
+-        log_query(F_UPSTREAM, name, NULL, nons ? "no delegation" : "no DS");
++        log_query(F_NOEXTRA | F_UPSTREAM, name, NULL, nons ? "no delegation" : "no DS");
+       }
+       return nons ? STAT_NO_NS : STAT_NO_DS; 
+@@ -1885,7 +1885,7 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+                             else
+                               {
+                                 a.addr.keytag = keytag;
+-                                log_query(F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u");
++                                log_query(F_NOEXTRA | F_KEYTAG | F_UPSTREAM, name, &a, "DS keytag %u");
+                                 crecp->addr.ds.digest = digest;
+                                 crecp->addr.ds.keydata = key;
+                                 crecp->addr.ds.algo = algo;
+@@ -2058,10 +2058,10 @@ size_t dnssec_generate_query(struct dns_header *header, char *end, char *name, i
+   char *types = querystr("dnssec-query", type);
+   if (addr->sa.sa_family == AF_INET) 
+-    log_query(F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
++    log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, name, (struct all_addr *)&addr->in.sin_addr, types);
+ #ifdef HAVE_IPV6
+   else
+-    log_query(F_DNSSEC | F_IPV6, name, (struct all_addr *)&addr->in6.sin6_addr, types);
++    log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, name, (struct all_addr *)&addr->in6.sin6_addr, types);
+ #endif
+   
+   header->qdcount = htons(1);
+diff --git a/src/forward.c b/src/forward.c
+index 55f583383bc6..713a64c0fa58 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -279,10 +279,10 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+         plen = forward->stash_len;
+         
+         if (forward->sentto->addr.sa.sa_family == AF_INET) 
+-          log_query(F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
++          log_query(F_NOEXTRA | F_DNSSEC | F_IPV4, "retry", (struct all_addr *)&forward->sentto->addr.in.sin_addr, "dnssec");
+ #ifdef HAVE_IPV6
+         else
+-          log_query(F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
++          log_query(F_NOEXTRA | F_DNSSEC | F_IPV6, "retry", (struct all_addr *)&forward->sentto->addr.in6.sin6_addr, "dnssec");
+ #endif
+   
+         if (forward->sentto->sfd)
+@@ -389,6 +389,9 @@ static int forward_query(int udpfd, union mysockaddr *udpaddr,
+       struct server *firstsentto = start;
+       int forwarded = 0;
+       
++      /* If a query is retried, use the log_id for the retry when logging the answer. */
++      forward->log_id = daemon->log_id;
++      
+       if (option_bool(OPT_ADD_MAC))
+       plen = add_mac(header, plen, ((char *) header) + daemon->packet_buff_sz, &forward->source);
+       
+@@ -725,6 +728,11 @@ void reply_query(int fd, int family, time_t now)
+   if (!(forward = lookup_frec(ntohs(header->id), hash)))
+     return;
+   
++  /* log_query gets called indirectly all over the place, so 
++     pass these in global variables - sorry. */
++  daemon->log_display_id = forward->log_id;
++  daemon->log_source_addr = &forward->source;
++  
+   if (daemon->ignore_addr && RCODE(header) == NOERROR &&
+       check_for_ignored_address(header, n, daemon->ignore_addr))
+     return;
+@@ -1258,6 +1266,11 @@ void receive_query(struct listener *listen, time_t now)
+           dst_addr_4.s_addr = 0;
+       }
+     }
++   
++  /* log_query gets called indirectly all over the place, so 
++     pass these in global variables - sorry. */
++  daemon->log_display_id = ++daemon->log_id;
++  daemon->log_source_addr = &source_addr;
+   
+   if (extract_request(header, (size_t)n, daemon->namebuff, &type))
+     {
+@@ -1675,7 +1688,8 @@ unsigned char *tcp_request(int confd, time_t now,
+   struct in_addr dst_addr_4;
+   union mysockaddr peer_addr;
+   socklen_t peer_len = sizeof(union mysockaddr);
+-  
++  int query_count = 0;
++
+   if (getpeername(confd, (struct sockaddr *)&peer_addr, &peer_len) == -1)
+     return packet;
+   
+@@ -1712,7 +1726,8 @@ unsigned char *tcp_request(int confd, time_t now,
+   while (1)
+     {
+-      if (!packet ||
++      if (query_count == TCP_MAX_QUERIES ||
++        !packet ||
+         !read_write(confd, &c1, 1, 1) || !read_write(confd, &c2, 1, 1) ||
+         !(size = c1 << 8 | c2) ||
+         !read_write(confd, payload, size, 1))
+@@ -1721,6 +1736,13 @@ unsigned char *tcp_request(int confd, time_t now,
+       if (size < (int)sizeof(struct dns_header))
+       continue;
+       
++      query_count++;
++
++      /* log_query gets called indirectly all over the place, so 
++       pass these in global variables - sorry. */
++      daemon->log_display_id = ++daemon->log_id;
++      daemon->log_source_addr = &peer_addr;
++      
+       check_subnet = 0;
+       /* save state of "cd" flag in query */
+diff --git a/src/option.c b/src/option.c
+index 907d0cf88de9..b7372be0a090 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -149,6 +149,7 @@ struct myoption {
+ #define LOPT_LOOP_DETECT   337
+ #define LOPT_IGNORE_ADDR   338
++
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =  
+ #else
+@@ -160,7 +161,7 @@ static const struct myoption opts[] =
+     { "no-poll", 0, 0, 'n' },
+     { "help", 0, 0, 'w' },
+     { "no-daemon", 0, 0, 'd' },
+-    { "log-queries", 0, 0, 'q' },
++    { "log-queries", 2, 0, 'q' },
+     { "user", 2, 0, 'u' },
+     { "group", 2, 0, 'g' },
+     { "resolv-file", 2, 0, 'r' },
+@@ -357,7 +358,7 @@ static struct {
+   { LOPT_FORCE, ARG_DUP, "<optspec>", gettext_noop("DHCP option sent even if the client does not request it."), NULL},
+   { 'p', ARG_ONE, "<integer>", gettext_noop("Specify port to listen for DNS requests on (defaults to 53)."), NULL },
+   { 'P', ARG_ONE, "<integer>", gettext_noop("Maximum supported UDP packet size for EDNS.0 (defaults to %s)."), "*" },
+-  { 'q', OPT_LOG, NULL, gettext_noop("Log DNS queries."), NULL },
++  { 'q', ARG_DUP, NULL, gettext_noop("Log DNS queries."), NULL },
+   { 'Q', ARG_ONE, "<integer>", gettext_noop("Force the originating port for upstream DNS queries."), NULL },
+   { 'R', OPT_NO_RESOLV, NULL, gettext_noop("Do NOT read resolv.conf."), NULL },
+   { 'r', ARG_DUP, "<path>", gettext_noop("Specify path to resolv.conf (defaults to %s)."), RESOLVFILE }, 
+@@ -2421,6 +2422,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+       ret_err(gen_err);
+       break;  
+     
++    case 'q': /* --log-queries */
++      set_option_bool(OPT_LOG);
++      if (arg && strcmp(arg, "extra") == 0)
++      set_option_bool(OPT_EXTRALOG);
++      break;
++
+     case LOPT_MAX_LOGS:  /* --log-async */
+       daemon->max_logs = LOG_MAX; /* default */
+       if (arg && !atoi_check(arg, &daemon->max_logs))
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0028-Add-min-cache-ttl-option.patch b/src/patches/dnsmasq/0028-Add-min-cache-ttl-option.patch
new file mode 100644 (file)
index 0000000..e8a61b7
--- /dev/null
@@ -0,0 +1,144 @@
+From 28de38768e2c7d763b9aa5b7a4d251d5e56bab0b Mon Sep 17 00:00:00 2001
+From: RinSatsuki <aa65535@live.com>
+Date: Sat, 10 Jan 2015 15:22:21 +0000
+Subject: [PATCH 28/55] Add --min-cache-ttl option.
+
+---
+ CHANGELOG     |  7 +++++++
+ man/dnsmasq.8 |  6 ++++++
+ src/cache.c   |  4 +++-
+ src/config.h  |  1 +
+ src/dnsmasq.h |  2 +-
+ src/option.c  | 11 +++++++++++
+ 6 files changed, 29 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 0bbb7835df4f..23fc6d0530cf 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -43,6 +43,13 @@ version 2.73
+           Add --log-queries=extra option, which makes logs easier
+           to search automatically.
++          Add --min-cache-ttl option. I've resisted this for a long 
++          time, on the grounds that disbelieving TTLs is never a 
++          good idea, but I've been persuaded that there are 
++          sometimes reasons to do it. (Step forward, GFW).
++          To avoid misuse, there's a hard limit on the TTL 
++          floor of one hour. Thansk to RinSatsuki for the patch.
++      
+       
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 227d74bd80e7..5cfa355dea4a 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -81,6 +81,12 @@ the upstream DNS servers.
+ .B --max-cache-ttl=<time>
+ Set a maximum TTL value for entries in the cache.
+ .TP
++.B --min-cache-ttl=<time>
++Extend short TTL values to the time given when caching them. Note that
++artificially extending TTL values is in general a bad idea, do not do it 
++unless you have a good reason, and understand what you are doing. 
++Dnsmasq limits the value of this option to one hour, unless recompiled.
++.TP
+ .B --auth-ttl=<time>
+ Set the TTL value returned in answers from the authoritative server.
+ .TP
+diff --git a/src/cache.c b/src/cache.c
+index 960bb7938778..945be071a0b6 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -461,9 +461,11 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
+   if (flags & (F_IPV4 | F_IPV6 | F_CNAME))
+     {
+       log_query(flags | F_UPSTREAM, name, addr, NULL);
+-      /* Don;t mess with TTL for DNSSEC records. */
++      /* Don't mess with TTL for DNSSEC records. */
+       if (daemon->max_cache_ttl != 0 && daemon->max_cache_ttl < ttl)
+       ttl = daemon->max_cache_ttl;
++      if (daemon->min_cache_ttl != 0 && daemon->min_cache_ttl > ttl)
++      ttl = daemon->min_cache_ttl;
+     }
+   /* if previous insertion failed give up now. */
+diff --git a/src/config.h b/src/config.h
+index 3b88d8193dca..cdca231b4079 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -27,6 +27,7 @@
+ #define RANDOM_SOCKS 64 /* max simultaneous random ports */
+ #define LEASE_RETRY 60 /* on error, retry writing leasefile after LEASE_RETRY seconds */
+ #define CACHESIZ 150 /* default cache size */
++#define TTL_FLOOR_LIMIT 3600 /* don't allow --min-cache-ttl to raise TTL above this under any circumstances */
+ #define MAXLEASES 1000 /* maximum number of DHCP leases */
+ #define PING_WAIT 3 /* wait for ping address-in-use test */
+ #define PING_CACHE_TIME 30 /* Ping test assumed to be valid this long. */
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 4e9aea401b75..f8275e3ac479 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -943,7 +943,7 @@ extern struct daemon {
+   int max_logs;  /* queue limit */
+   int cachesize, ftabsize;
+   int port, query_port, min_port;
+-  unsigned long local_ttl, neg_ttl, max_ttl, max_cache_ttl, auth_ttl;
++  unsigned long local_ttl, neg_ttl, max_ttl, min_cache_ttl, max_cache_ttl, auth_ttl;
+   struct hostsfile *addn_hosts;
+   struct dhcp_context *dhcp, *dhcp6;
+   struct ra_interface *ra_interfaces;
+diff --git a/src/option.c b/src/option.c
+index b7372be0a090..8b994098cc9f 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -148,6 +148,7 @@ struct myoption {
+ #define LOPT_DNSSEC_TIME   336
+ #define LOPT_LOOP_DETECT   337
+ #define LOPT_IGNORE_ADDR   338
++#define LOPT_MINCTTL       339
+ #ifdef HAVE_GETOPT_LONG
+@@ -256,6 +257,7 @@ static const struct myoption opts[] =
+     { "dhcp-broadcast", 2, 0, LOPT_BROADCAST },
+     { "neg-ttl", 1, 0, LOPT_NEGTTL },
+     { "max-ttl", 1, 0, LOPT_MAXTTL },
++    { "min-cache-ttl", 1, 0, LOPT_MINCTTL },
+     { "max-cache-ttl", 1, 0, LOPT_MAXCTTL },
+     { "dhcp-alternate-port", 2, 0, LOPT_ALTPORT },
+     { "dhcp-scriptuser", 1, 0, LOPT_SCRIPTUSR },
+@@ -371,6 +373,8 @@ static struct {
+   { 'T', ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for replies from /etc/hosts."), NULL },
+   { LOPT_NEGTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for negative caching."), NULL },
+   { LOPT_MAXTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live in seconds for maximum TTL to send to clients."), NULL },
++  { LOPT_MAXCTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live ceiling for cache."), NULL },
++  { LOPT_MINCTTL, ARG_ONE, "<integer>", gettext_noop("Specify time-to-live floor for cache."), NULL },
+   { 'u', ARG_ONE, "<username>", gettext_noop("Change to this user after startup. (defaults to %s)."), CHUSER }, 
+   { 'U', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP vendor class to tag."), NULL },
+   { 'v', 0, NULL, gettext_noop("Display dnsmasq version and copyright information."), NULL },
+@@ -2457,6 +2461,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+     case 'T':         /* --local-ttl */
+     case LOPT_NEGTTL: /* --neg-ttl */
+     case LOPT_MAXTTL: /* --max-ttl */
++    case LOPT_MINCTTL: /* --min-cache-ttl */
+     case LOPT_MAXCTTL: /* --max-cache-ttl */
+     case LOPT_AUTHTTL: /* --auth-ttl */
+       {
+@@ -2467,6 +2472,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+         daemon->neg_ttl = (unsigned long)ttl;
+       else if (option == LOPT_MAXTTL)
+         daemon->max_ttl = (unsigned long)ttl;
++      else if (option == LOPT_MINCTTL)
++        {
++          if (ttl > TTL_FLOOR_LIMIT)
++            ttl = TTL_FLOOR_LIMIT;
++          daemon->min_cache_ttl = (unsigned long)ttl;
++        }
+       else if (option == LOPT_MAXCTTL)
+         daemon->max_cache_ttl = (unsigned long)ttl;
+       else if (option == LOPT_AUTHTTL)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0029-Log-port-of-requestor-when-doing-extra-logging.patch b/src/patches/dnsmasq/0029-Log-port-of-requestor-when-doing-extra-logging.patch
new file mode 100644 (file)
index 0000000..d3c4847
--- /dev/null
@@ -0,0 +1,31 @@
+From 9f79ee4ae34886c0319f06d8f162b81ef79d62fb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 12 Jan 2015 20:18:18 +0000
+Subject: [PATCH 29/55] Log port of requestor when doing extra logging.
+
+---
+ src/cache.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 945be071a0b6..09b6dbf8087a 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1642,11 +1642,11 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
+   if (option_bool(OPT_EXTRALOG))
+     {
+-      prettyprint_addr(daemon->log_source_addr, daemon->addrbuff2);
++      int port = prettyprint_addr(daemon->log_source_addr, daemon->addrbuff2);
+       if (flags & F_NOEXTRA)
+-      my_syslog(LOG_INFO, "* %s %s %s %s %s", daemon->addrbuff2, source, name, verb, dest);
++      my_syslog(LOG_INFO, "* %s/%u %s %s %s %s", daemon->addrbuff2, port, source, name, verb, dest);
+       else
+-      my_syslog(LOG_INFO, "%u %s %s %s %s %s", daemon->log_display_id, daemon->addrbuff2, source, name, verb, dest);
++      my_syslog(LOG_INFO, "%u %s/%u %s %s %s %s", daemon->log_display_id, daemon->addrbuff2, port, source, name, verb, dest);
+     }
+   else
+     my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0030-Don-t-answer-from-cache-RRsets-from-wildcards-as-we-.patch b/src/patches/dnsmasq/0030-Don-t-answer-from-cache-RRsets-from-wildcards-as-we-.patch
new file mode 100644 (file)
index 0000000..5f489e2
--- /dev/null
@@ -0,0 +1,45 @@
+From 5e321739db381a1d7b5964d76e9c81471d2564c9 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 12 Jan 2015 23:16:56 +0000
+Subject: [PATCH 30/55] Don't answer from cache RRsets from wildcards, as we
+ don't have NSECs.
+
+---
+ src/dnssec.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+diff --git a/src/dnssec.c b/src/dnssec.c
+index afb3dca38cb1..d39ab85ed966 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1818,11 +1818,14 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+             struct blockdata *key;
+             struct crec *crecp;
+             char *wildname;
++            int have_wildcard = 0;
+             rc = validate_rrset(now, header, plen, class1, type1, name, keyname, &wildname, NULL, 0, 0, 0);
+             
+             if (rc == STAT_SECURE_WILDCARD)
+               {
++                have_wildcard = 1;
++
+                 /* An attacker replay a wildcard answer with a different
+                    answer and overlay a genuine RR. To prove this
+                    hasn't happened, the answer must prove that
+@@ -1913,7 +1916,11 @@ int dnssec_validate_reply(time_t now, struct dns_header *header, size_t plen, ch
+                             p2 += 13; /* labels, orig_ttl, expiration, inception */
+                             GETSHORT(keytag, p2);
+                             
+-                            if ((key = blockdata_alloc((char*)psave, rdlen2)))
++                            /* We don't cache sigs for wildcard answers, because to reproduce the
++                               answer from the cache will require one or more NSEC/NSEC3 records 
++                               which we don't cache. The lack of the RRSIG ensures that a query for
++                               this RRset asking for a secure answer will always be forwarded. */
++                            if (!have_wildcard && (key = blockdata_alloc((char*)psave, rdlen2)))
+                               {
+                                 if (!(crecp = cache_insert(name, &a, now, ttl,  F_FORWARD | F_DNSKEY | F_DS)))
+                                   blockdata_free(key);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0031-Logs-for-DS-records-consistent.patch b/src/patches/dnsmasq/0031-Logs-for-DS-records-consistent.patch
new file mode 100644 (file)
index 0000000..1a2d3e4
--- /dev/null
@@ -0,0 +1,25 @@
+From ae4624bf46b5e37ff1a9a2ba3c927e0dede95adb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 12 Jan 2015 23:22:08 +0000
+Subject: [PATCH 31/55] Logs for DS records consistent.
+
+---
+ src/rfc1035.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 75c4266b47dd..262274fc5b80 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1643,7 +1643,7 @@ size_t answer_request(struct dns_header *header, char *limit, size_t qlen,
+                             {
+                               if (crecp->flags & F_NXDOMAIN)
+                                 nxdomain = 1;
+-                              log_query(F_UPSTREAM, name, NULL, "secure no DS");      
++                              log_query(F_UPSTREAM, name, NULL, "no DS");     
+                             }
+                           else if ((keydata = blockdata_retrieve(crecp->addr.ds.keydata, crecp->addr.ds.keylen, NULL)))
+                             {                                               
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0032-Cope-with-multiple-interfaces-with-the-same-LL-addre.patch b/src/patches/dnsmasq/0032-Cope-with-multiple-interfaces-with-the-same-LL-addre.patch
new file mode 100644 (file)
index 0000000..81b02cc
--- /dev/null
@@ -0,0 +1,57 @@
+From 393415597c8b5b09558b789ab9ac238dbe3db65d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 18 Jan 2015 22:11:10 +0000
+Subject: [PATCH 32/55] Cope with multiple interfaces with the same LL address.
+
+---
+ CHANGELOG  | 4 ++++
+ src/auth.c | 5 ++++-
+ src/util.c | 1 +
+ 3 files changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 23fc6d0530cf..bbd7e6619689 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -49,6 +49,10 @@ version 2.73
+           sometimes reasons to do it. (Step forward, GFW).
+           To avoid misuse, there's a hard limit on the TTL 
+           floor of one hour. Thansk to RinSatsuki for the patch.
++
++          Cope with multiple interfaces with the same link-local 
++          address. (IPv6 addresses are scoped, so this is allowed.)
++          Thanks to Cory Benfield for help with this.
+       
+       
+ version 2.72
+diff --git a/src/auth.c b/src/auth.c
+index a327f16d8c0b..59e05d3da38e 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -413,7 +413,10 @@ size_t answer_auth(struct dns_header *header, char *limit, size_t qlen, time_t n
+               peer_addr->in.sin_port = 0;
+ #ifdef HAVE_IPV6
+             else
+-              peer_addr->in6.sin6_port = 0; 
++              {
++                peer_addr->in6.sin6_port = 0; 
++                peer_addr->in6.sin6_scope_id = 0;
++              }
+ #endif
+             
+             for (peers = daemon->auth_peers; peers; peers = peers->next)
+diff --git a/src/util.c b/src/util.c
+index a729f339e219..d532444da207 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -274,6 +274,7 @@ int sockaddr_isequal(union mysockaddr *s1, union mysockaddr *s2)
+ #ifdef HAVE_IPV6      
+       if (s1->sa.sa_family == AF_INET6 &&
+         s1->in6.sin6_port == s2->in6.sin6_port &&
++        s1->in6.sin6_scope_id == s2->in6.sin6_scope_id &&
+         IN6_ARE_ADDR_EQUAL(&s1->in6.sin6_addr, &s2->in6.sin6_addr))
+       return 1;
+ #endif
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0033-Don-t-treat-SERVFAIL-as-a-recoverable-error.patch b/src/patches/dnsmasq/0033-Don-t-treat-SERVFAIL-as-a-recoverable-error.patch
new file mode 100644 (file)
index 0000000..e88a94b
--- /dev/null
@@ -0,0 +1,25 @@
+From 2ae195f5a71f7c5a75717845de1bd72fc7dd67f3 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 18 Jan 2015 22:20:48 +0000
+Subject: [PATCH 33/55] Don't treat SERVFAIL as a recoverable error.....
+
+---
+ src/forward.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/forward.c b/src/forward.c
+index 713a64c0fa58..b17bc34f865f 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -737,7 +737,7 @@ void reply_query(int fd, int family, time_t now)
+       check_for_ignored_address(header, n, daemon->ignore_addr))
+     return;
+-  if ((RCODE(header) == SERVFAIL || RCODE(header) == REFUSED) &&
++  if (RCODE(header) == REFUSED &&
+       !option_bool(OPT_ORDER) &&
+       forward->forwardall == 0)
+     /* for broken servers, attempt to send to another one. */
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0034-Add-dhcp-hostsdir-config-option.patch b/src/patches/dnsmasq/0034-Add-dhcp-hostsdir-config-option.patch
new file mode 100644 (file)
index 0000000..c6b6703
--- /dev/null
@@ -0,0 +1,419 @@
+From 5f4dc5c6ca50655ab14f572c7e30815ed74cd51a Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 20 Jan 2015 20:51:02 +0000
+Subject: [PATCH 34/55] Add --dhcp-hostsdir config option.
+
+---
+ CHANGELOG     |   5 +++
+ man/dnsmasq.8 |   9 +++++
+ src/dnsmasq.c |  28 ++++++++++----
+ src/dnsmasq.h |  15 ++++++--
+ src/inotify.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ src/option.c  |  22 +++++++++--
+ 6 files changed, 177 insertions(+), 21 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index bbd7e6619689..0076b557e95e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -53,6 +53,11 @@ version 2.73
+           Cope with multiple interfaces with the same link-local 
+           address. (IPv6 addresses are scoped, so this is allowed.)
+           Thanks to Cory Benfield for help with this.
++
++          Add --dhcp-hostsdir. This allows addition of new host
++          configurations to a running dnsmasq instance much more 
++          cheaply than having dnsmasq re-read all its existing
++          configuration each time. 
+       
+       
+ version 2.72
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 5cfa355dea4a..005b5cca8d1f 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -977,6 +977,15 @@ is given, then read all the files contained in that directory. The advantage of
+ using this option is the same as for --dhcp-hostsfile: the
+ dhcp-optsfile will be re-read when dnsmasq receives SIGHUP. Note that
+ it is possible to encode the information in a
++.TP
++.B --dhcp-hostsdir=<path>
++This is exactly equivalent to dhcp-hostfile, except for the following. The path MUST be a
++directory, and not an individual file. Changed or new files within
++the directory are read automatically, without the need to send SIGHUP.
++If a file is deleted for changed after it has been read by dnsmasq, then the
++host record it contained will remain until dnsmasq recieves a SIGHUP, or 
++is restarted; ie host records are only added dynamically.
++.TP
+ .B --dhcp-boot
+ flag as DHCP options, using the options names bootfile-name,
+ server-ip-address and tftp-server. This allows these to be included
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index c0c0589d4ce1..04cc98278f62 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -142,6 +142,9 @@ int main (int argc, char **argv)
+       set_option_bool(OPT_NOWILD);
+       reset_option_bool(OPT_CLEVERBIND);
+     }
++
++  if (daemon->inotify_hosts)
++    die(_("dhcp-hostsdir not supported on this platform"), NULL, EC_BADCONF);
+ #endif
+   
+   if (option_bool(OPT_DNSSEC_VALID))
+@@ -316,13 +319,16 @@ int main (int argc, char **argv)
+ #ifdef HAVE_DNSSEC
+       blockdata_init();
+ #endif
++    }
+ #ifdef HAVE_LINUX_NETWORK
+-      if (!option_bool(OPT_NO_POLL))
+-      inotify_dnsmasq_init();
++  if ((!option_bool(OPT_NO_POLL) && daemon->port != 0) ||
++      daemon->dhcp || daemon->doing_dhcp6)
++    inotify_dnsmasq_init();
++  else
++    daemon->inotifyfd = -1;
+ #endif
+-    }
+-    
++       
+   if (option_bool(OPT_DBUS))
+ #ifdef HAVE_DBUS
+     {
+@@ -745,7 +751,7 @@ int main (int argc, char **argv)
+ #endif
+ #ifdef HAVE_TFTP
+-      if (option_bool(OPT_TFTP))
++  if (option_bool(OPT_TFTP))
+     {
+ #ifdef FD_SETSIZE
+       if (FD_SETSIZE < (unsigned)max_fd)
+@@ -870,7 +876,7 @@ int main (int argc, char **argv)
+ #if defined(HAVE_LINUX_NETWORK)
+       FD_SET(daemon->netlinkfd, &rset);
+       bump_maxfd(daemon->netlinkfd, &maxfd);
+-      if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
++      if (daemon->inotifyfd != -1)
+       {
+         FD_SET(daemon->inotifyfd, &rset);
+         bump_maxfd(daemon->inotifyfd, &maxfd);
+@@ -943,8 +949,11 @@ int main (int argc, char **argv)
+ #endif
+ #ifdef HAVE_LINUX_NETWORK
+-      if (daemon->port != 0 && !option_bool(OPT_NO_POLL) && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check())
+-      poll_resolv(1, 1, now);           
++      if  (daemon->inotifyfd != -1 && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check(now))
++      {
++        if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
++          poll_resolv(1, 1, now);
++      }         
+ #else
+       /* Check for changes to resolv files once per second max. */
+       /* Don't go silent for long periods if the clock goes backwards. */
+@@ -1385,6 +1394,9 @@ void clear_cache_and_reload(time_t now)
+       if (option_bool(OPT_ETHERS))
+       dhcp_read_ethers();
+       reread_dhcp();
++#ifdef HAVE_LINUX_NETWORK
++      set_dhcp_inotify();
++#endif
+       dhcp_update_configs(daemon->dhcp_conf);
+       lease_update_from_configs(); 
+       lease_update_file(now); 
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index f8275e3ac479..d841fdc064ad 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -550,13 +550,17 @@ struct resolvc {
+ #endif
+ };
+-/* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile */
++/* adn-hosts parms from command-line (also dhcp-hostsfile and dhcp-optsfile and dhcp-hostsdir*/
+ #define AH_DIR      1
+ #define AH_INACTIVE 2
++#define AH_WD_DONE  4
+ struct hostsfile {
+   struct hostsfile *next;
+   int flags;
+   char *fname;
++#ifdef HAVE_LINUX_NETWORK
++  int wd; /* inotify watch descriptor */
++#endif
+   unsigned int index; /* matches to cache entries for logging */
+ };
+@@ -961,7 +965,7 @@ extern struct daemon {
+   int doing_ra, doing_dhcp6;
+   struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names; 
+   struct dhcp_netid_list *force_broadcast, *bootp_dynamic;
+-  struct hostsfile *dhcp_hosts_file, *dhcp_opts_file;
++  struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *inotify_hosts;
+   int dhcp_max, tftp_max;
+   int dhcp_server_port, dhcp_client_port;
+   int start_tftp_port, end_tftp_port; 
+@@ -1197,7 +1201,7 @@ void reset_option_bool(unsigned int opt);
+ struct hostsfile *expand_filelist(struct hostsfile *list);
+ char *parse_server(char *arg, union mysockaddr *addr, 
+                  union mysockaddr *source_addr, char *interface, int *flags);
+-
++int option_read_hostsfile(char *file);
+ /* forward.c */
+ void reply_query(int fd, int family, time_t now);
+ void receive_query(struct listener *listen, time_t now);
+@@ -1486,5 +1490,8 @@ int detect_loop(char *query, int type);
+ /* inotify.c */
+ #ifdef HAVE_LINUX_NETWORK
+ void inotify_dnsmasq_init();
+-int inotify_check(void);
++int inotify_check(time_t now);
++#  ifdef HAVE_DHCP
++void set_dhcp_inotify(void);
++#  endif
+ #endif
+diff --git a/src/inotify.c b/src/inotify.c
+index 83730008c11b..52a30d7f44db 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -19,6 +19,11 @@
+ #include <sys/inotify.h>
++#ifdef HAVE_DHCP
++static void check_for_dhcp_inotify(struct inotify_event *in, time_t now);
++#endif
++
++
+ /* the strategy is to set a inotify on the directories containing
+    resolv files, for any files in the directory which are close-write 
+    or moved into the directory.
+@@ -40,8 +45,6 @@ void inotify_dnsmasq_init()
+   struct resolvc *res;
+   inotify_buffer = safe_malloc(INOTIFY_SZ);
+-
+-
+   daemon->inotifyfd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC);
+   
+   if (daemon->inotifyfd == -1)
+@@ -66,6 +69,7 @@ void inotify_dnsmasq_init()
+       {
+         *d = 0; /* make path just directory */
+         res->wd = inotify_add_watch(daemon->inotifyfd, path, IN_CLOSE_WRITE | IN_MOVED_TO);
++
+         res->file = d+1; /* pointer to filename */
+         *d = '/';
+         
+@@ -78,7 +82,7 @@ void inotify_dnsmasq_init()
+     }
+ }
+-int inotify_check(void)
++int inotify_check(time_t now)
+ {
+   int hit = 0;
+   
+@@ -101,13 +105,116 @@ int inotify_check(void)
+         for (res = daemon->resolv_files; res; res = res->next)
+           if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
+             hit = 1;
++
++#ifdef HAVE_DHCP
++        if (daemon->dhcp || daemon->doing_dhcp6)
++          check_for_dhcp_inotify(in, now);
++#endif
+       }
+     }
+-
+   return hit;
+ }
+-#endif
++#ifdef HAVE_DHCP 
++/* initialisation for dhcp-hostdir. Set inotify watch for each directory, and read pre-existing files */
++void set_dhcp_inotify(void)
++{
++  struct hostsfile *ah;
+-  
++  for (ah = daemon->inotify_hosts; ah; ah = ah->next)
++    {
++       DIR *dir_stream = NULL;
++       struct dirent *ent;
++       struct stat buf;
++
++       if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
++       {
++         my_syslog(LOG_ERR, _("bad directory in dhcp-hostsdir %s"), ah->fname);
++         continue;
++       }
++
++       if (!(ah->flags & AH_WD_DONE))
++       {
++         ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
++         ah->flags |= AH_WD_DONE;
++       }
++       /* Read contents of dir _after_ calling add_watch, in the ho[e of avoiding
++        a race which misses files being added as we start */
++       if (ah->wd == -1 || !(dir_stream = opendir(ah->fname)))
++       {
++         my_syslog(LOG_ERR, _("failed to create inotify for %s"), ah->fname);
++         continue;
++       }
++
++       while ((ent = readdir(dir_stream)))
++       {
++         size_t lendir = strlen(ah->fname);
++         size_t lenfile = strlen(ent->d_name);
++         char *path;
++         
++         /* ignore emacs backups and dotfiles */
++         if (lenfile == 0 || 
++             ent->d_name[lenfile - 1] == '~' ||
++             (ent->d_name[0] == '#' && ent->d_name[lenfile - 1] == '#') ||
++             ent->d_name[0] == '.')
++           continue;
++         
++         if ((path = whine_malloc(lendir + lenfile + 2)))
++           {
++             strcpy(path, ah->fname);
++             strcat(path, "/");
++             strcat(path, ent->d_name);
++             
++             /* ignore non-regular files */
++             if (stat(path, &buf) != -1 && S_ISREG(buf.st_mode))
++               option_read_hostsfile(path);
++             
++             free(path);
++           }
++       }
++    }
++}
++
++static void check_for_dhcp_inotify(struct inotify_event *in, time_t now)
++{
++  struct hostsfile *ah;
++
++  /* ignore emacs backups and dotfiles */
++  if (in->len == 0 || 
++      in->name[in->len - 1] == '~' ||
++      (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
++      in->name[0] == '.')
++    return;
++
++  for (ah = daemon->inotify_hosts; ah; ah = ah->next)
++    if (ah->wd == in->wd)
++      {
++      size_t lendir = strlen(ah->fname);
++      char *path;
++         
++      if ((path = whine_malloc(lendir + in->len + 2)))
++        {
++          strcpy(path, ah->fname);
++          strcat(path, "/");
++          strcat(path, in->name);
++          
++          if (option_read_hostsfile(path))
++            {
++              /* Propogate the consequences of loading a new dhcp-host */
++              dhcp_update_configs(daemon->dhcp_conf);
++              lease_update_from_configs(); 
++              lease_update_file(now); 
++              lease_update_dns(1);
++            }
++          
++          free(path);
++        }
++      
++      return;
++      }
++}
++
++#endif /* DHCP */
++
++#endif  /* LINUX_NETWORK */
+   
+diff --git a/src/option.c b/src/option.c
+index 8b994098cc9f..22e11c37d374 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -149,7 +149,7 @@ struct myoption {
+ #define LOPT_LOOP_DETECT   337
+ #define LOPT_IGNORE_ADDR   338
+ #define LOPT_MINCTTL       339
+-
++#define LOPT_DHCP_INOTIFY  340
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =  
+@@ -248,6 +248,7 @@ static const struct myoption opts[] =
+     { "interface-name", 1, 0, LOPT_INTNAME },
+     { "dhcp-hostsfile", 1, 0, LOPT_DHCP_HOST },
+     { "dhcp-optsfile", 1, 0, LOPT_DHCP_OPTS },
++    { "dhcp-hostsdir", 1, 0, LOPT_DHCP_INOTIFY },
+     { "dhcp-no-override", 0, 0, LOPT_OVERRIDE },
+     { "tftp-port-range", 1, 0, LOPT_TFTPPORTS },
+     { "stop-dns-rebind", 0, 0, LOPT_REBIND },
+@@ -336,6 +337,7 @@ static struct {
+   { 'G', ARG_DUP, "<hostspec>", gettext_noop("Set address or hostname for a specified machine."), NULL },
+   { LOPT_DHCP_HOST, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from file."), NULL },
+   { LOPT_DHCP_OPTS, ARG_DUP, "<path>", gettext_noop("Read DHCP option specs from file."), NULL },
++  { LOPT_DHCP_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from a directory."), NULL }, 
+   { LOPT_TAG_IF, ARG_DUP, "tag-expression", gettext_noop("Evaluate conditional tag expression."), NULL },
+   { 'h', OPT_NO_HOSTS, NULL, gettext_noop("Do NOT load %s file."), HOSTSFILE },
+   { 'H', ARG_DUP, "<path>", gettext_noop("Specify a hosts file to be read in addition to %s."), HOSTSFILE },
+@@ -1710,8 +1712,9 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+       break;
+ #endif /* HAVE_DHCP */
+-    case LOPT_DHCP_HOST: /* --dhcp-hostfile */
++    case LOPT_DHCP_HOST: /* --dhcp-hostsfile */
+     case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
++    case LOPT_DHCP_INOTIFY: /* dhcp-hostsdir */
+     case 'H': /* --addn-hosts */
+       {
+       struct hostsfile *new = opt_malloc(sizeof(struct hostsfile));
+@@ -1734,6 +1737,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+           new->next = daemon->dhcp_opts_file;
+           daemon->dhcp_opts_file = new;
+         }       
++      else if (option == LOPT_DHCP_INOTIFY)
++        {
++          new->next = daemon->inotify_hosts;
++          daemon->inotify_hosts = new;
++        }
++      
+       break;
+       }
+       
+@@ -4042,6 +4051,13 @@ static void read_file(char *file, FILE *f, int hard_opt)
+   fclose(f);
+ }
++#ifdef HAVE_DHCP
++int option_read_hostsfile(char *file)
++{
++  return one_file(file, LOPT_BANK);
++}
++#endif
++
+ static int one_file(char *file, int hard_opt)
+ {
+   FILE *f;
+@@ -4139,7 +4155,7 @@ struct hostsfile *expand_filelist(struct hostsfile *list)
+           
+           /* don't read this as a file */
+           ah->flags |= AH_INACTIVE;
+-
++          
+           if (!(dir_stream = opendir(ah->fname)))
+             my_syslog(LOG_ERR, _("cannot access directory %s: %s"), 
+                       ah->fname, strerror(errno));
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0035-Update-German-translation.patch b/src/patches/dnsmasq/0035-Update-German-translation.patch
new file mode 100644 (file)
index 0000000..af45a1c
--- /dev/null
@@ -0,0 +1,327 @@
+From fbf01f7046e75f9aa73fd4aab2a94e43386d9052 Mon Sep 17 00:00:00 2001
+From: Conrad Kostecki <ck@conrad-kostecki.de>
+Date: Tue, 20 Jan 2015 21:07:56 +0000
+Subject: [PATCH 35/55] Update German translation.
+
+---
+ po/de.po | 101 +++++++++++++++++++++++++++++----------------------------------
+ 1 file changed, 47 insertions(+), 54 deletions(-)
+
+diff --git a/po/de.po b/po/de.po
+index e2317376d8a9..4c93c5b28ef2 100644
+--- a/po/de.po
++++ b/po/de.po
+@@ -9,10 +9,10 @@
+ # Simon Kelley <simon@thekelleys.org.uk>, 2005.
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: dnsmasq 2.70\n"
++"Project-Id-Version: dnsmasq 2.73\n"
+ "Report-Msgid-Bugs-To: \n"
+ "POT-Creation-Date: 2009-06-18 12:24+0100\n"
+-"PO-Revision-Date: 2014-05-01 22:51+0100\n"
++"PO-Revision-Date: 2015-01-19 15:43+0100\n"
+ "Last-Translator: Conrad Kostecki <ck@conrad-kostecki.de>\n"
+ "Language-Team: German <de@li.org>\n"
+ "Language: de\n"
+@@ -20,12 +20,12 @@ msgstr ""
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
+-"X-Generator: Poedit 1.6.5\n"
++"X-Generator: Poedit 1.7.3\n"
+ "X-Poedit-SourceCharset: UTF-8\n"
+ #: cache.c:505
+ msgid "Internal error in cache."
+-msgstr ""
++msgstr "Interner Fehler im Cache."
+ #: cache.c:908
+ #, c-format
+@@ -126,7 +126,7 @@ msgstr "Lokale abzuhörende Adresse(n) angeben."
+ #: option.c:319
+ msgid "Return ipaddr for all hosts in specified domains."
+-msgstr "IP-Adresse für alle Hosts in angebenen Domänen festlegen."
++msgstr "IP-Adresse für alle Hosts in angegebenen Domänen festlegen."
+ # FIXME: the English test is not to the point. Just use a shortened description
+ # from the manpage instead. -- MA
+@@ -310,18 +310,16 @@ msgid "Specify path to resolv.conf (defaults to %s)."
+ msgstr "Pfad zu resolv.conf festlegen (%s voreingestellt)."
+ #: option.c:362
+-#, fuzzy
+ msgid "Specify path to file with server= options"
+-msgstr "Dateipfad für Prozesskennung (PID) festlegen (Voreinstellung: %s)."
++msgstr " Dateipfad mit der Option server= angeben"
+ #: option.c:363
+ msgid "Specify address(es) of upstream servers with optional domains."
+ msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
+ #: option.c:364
+-#, fuzzy
+ msgid "Specify address of upstream servers for reverse address queries"
+-msgstr "Adresse(n) vorgelagerter Server festlegen, optional mit Domänen."
++msgstr "Adresse(n) vorgelagerter Server festlegen, für reverse Adressanfragen"
+ #: option.c:365
+ msgid "Never forward queries to specified domains."
+@@ -657,23 +655,23 @@ msgstr "Spezifiziere eine Domain und Adressbereich für synthetisierte Namen"
+ #: option.c:446
+ msgid "Activate DNSSEC validation"
+-msgstr ""
++msgstr "Aktiviere DNSSEC-Validierung"
+ #: option.c:447
+ msgid "Specify trust anchor key digest."
+-msgstr ""
++msgstr "Spezifiziere Vertrauensursprung (Trust Anchor) der Schlüssel-Prüfdaten (Key Digest)."
+ #: option.c:448
+ msgid "Disable upstream checking for DNSSEC debugging."
+-msgstr ""
++msgstr "Deaktiviere die Überprüfung vorgelagerter Server für DNSSEC-Debugging"
+ #: option.c:449
+ msgid "Ensure answers without DNSSEC are in unsigned zones."
+-msgstr ""
++msgstr "Stellt sicher, dass Antworten ohne DNSSEC sich in einer unsignierten Zone befinden."
+ #: option.c:450
+ msgid "Don't check DNSSEC signature timestamps until first cache-reload"
+-msgstr ""
++msgstr "DNSSEC Signatur-Zeitstempel nicht prüfen, bis erstmalig der Cache neugeladen wird"
+ #: option.c:452
+ msgid "Specify DHCPv6 prefix class"
+@@ -697,11 +695,11 @@ msgstr "RA nicht protokollieren."
+ #: option.c:458
+ msgid "Accept queries only from directly-connected networks"
+-msgstr ""
++msgstr "Akzeptiere nur Anfragen von direkt verbundenen Netzwerken"
+ #: option.c:459
+ msgid "Detect and remove DNS forwarding loops"
+-msgstr ""
++msgstr "Erkennen und Entfernen von DNS-Weiterleitungsschleifen"
+ #: option.c:661
+ #, c-format
+@@ -958,18 +956,16 @@ msgid "Bad name in host-record"
+ msgstr "Unzulässiger Name in host-record"
+ #: option.c:3826
+-#, fuzzy
+ msgid "bad trust anchor"
+-msgstr "unzulässiger Portbereich"
++msgstr "unzulässiger Vertrauensursprung (Trust Anchor)"
+ #: option.c:3840
+ msgid "bad HEX in trust anchor"
+-msgstr ""
++msgstr "unzulässiger Hexwert in Vertrauensursprung (Trust Anchor)"
+ #: option.c:3850
+-#, fuzzy
+ msgid "unsupported option (check that dnsmasq was compiled with DHCP/TFTP/DNSSEC/DBus support)"
+-msgstr "unzulässige Option (prüfen Sie, ob dnsmasq mit DHCP/TFTP/DBus-Unterstützt übersetzt wurde)"
++msgstr "Nicht unterstützte Option (prüfen Sie, ob DNSMasq mit DHCP/TFTP/DNSSEC/DBus-Unterstützung übersetzt wurde)"
+ #: option.c:3909
+ msgid "missing \""
+@@ -988,7 +984,6 @@ msgid "missing parameter"
+ msgstr "fehler Parameter"
+ #: option.c:3972
+-#, fuzzy
+ msgid "illegal option"
+ msgstr "unzulässige Option"
+@@ -1110,7 +1105,7 @@ msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
+ #: forward.c:1132 forward.c:1663
+ msgid "Ignoring query from non-local network"
+-msgstr ""
++msgstr "Ignoriere Anfragen vom nicht lokalen Netzwerk"
+ #: forward.c:2101
+ #, c-format
+@@ -1189,9 +1184,9 @@ msgid "using nameserver %s#%d for %s %s"
+ msgstr "Benutze Namensserver %s#%d für %s %s"
+ #: network.c:1483
+-#, fuzzy, c-format
++#, c-format
+ msgid "NOT using nameserver %s#%d - query loop detected"
+-msgstr "Benutze Namensserver %s#%d für %s %s"
++msgstr "Benutze Namensserver %s#%d NICHT - Anfragenschleife festgetellt"
+ #: network.c:1486
+ #, c-format
+@@ -1205,16 +1200,15 @@ msgstr "Benutze Namensserver %s#%d"
+ #: dnsmasq.c:154
+ msgid "No trust anchors provided for DNSSEC"
+-msgstr ""
++msgstr "Keine Vertrauensursprünge (Trust Anchor) für DNSSEC verfügbar"
+ #: dnsmasq.c:157
+ msgid "Cannot reduce cache size from default when DNSSEC enabled"
+-msgstr ""
++msgstr "Kann die Standard Cachegröße nicht verkleinern, wenn DNSSEC aktiviert ist"
+ #: dnsmasq.c:159
+-#, fuzzy
+ msgid "DNSSEC not available: set HAVE_DNSSEC in src/config.h"
+-msgstr "DBus nicht verfügbar: setzen Sie HAVE_DBUS in src/config.h"
++msgstr "DNSSEC nicht verfügbar: setzen Sie HAVE_DNSSEC in src/config.h"
+ #: dnsmasq.c:165
+ msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
+@@ -1241,9 +1235,8 @@ msgid "authoritative DNS not available: set HAVE_AUTH in src/config.h"
+ msgstr "Authoritatives DNS nicht verfügbar: Es muss HAVE_AUTH in src/config.h gesetzt sein"
+ #: dnsmasq.c:193
+-#, fuzzy
+ msgid "Loop detection not available: set HAVE_LOOP in src/config.h"
+-msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
++msgstr "Loop-Erkennung nicht verfügbar, setzen Sie HAVE_LOOP in src/config.h"
+ #: dnsmasq.c:201
+ msgid "zone serial must be configured in --auth-soa"
+@@ -1317,15 +1310,15 @@ msgstr "DBus-Unterstützung eingeschaltet: warte auf Systembus-Verbindung"
+ #: dnsmasq.c:672
+ msgid "DNS service limited to local subnets"
+-msgstr ""
++msgstr "DNS-Dienst auf lokale Subnetze eingeschränkt"
+ #: dnsmasq.c:677
+ msgid "DNSSEC validation enabled"
+-msgstr ""
++msgstr "DNSSEC-Validierung aktiviert"
+ #: dnsmasq.c:679
+ msgid "DNSSEC signature timestamps not checked until first cache reload"
+-msgstr ""
++msgstr "DNSSEC Signatur-Zeitstempel werden erst ab dem ersten Neuladen des Caches überprüft"
+ #: dnsmasq.c:684
+ #, c-format
+@@ -1366,7 +1359,7 @@ msgstr "DHCP, Sockets exklusiv an das Interface %s gebunden"
+ # FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
+ #: dnsmasq.c:753
+ msgid "root is "
+-msgstr "Wurzel ist"
++msgstr "Wurzel ist "
+ #: dnsmasq.c:753
+ msgid "enabled"
+@@ -1432,7 +1425,7 @@ msgstr "Das TFTP-Verzeichnis %s ist nicht zugreifbar: %s"
+ #: dnsmasq.c:1151
+ msgid "now checking DNSSEC signature timestamps"
+-msgstr ""
++msgstr "Prüfe jetzt DNSSEC Signatur-Zeitstempel"
+ #: dnsmasq.c:1218
+ #, c-format
+@@ -1506,7 +1499,7 @@ msgstr "DHCP-Paket ohne Adresse an Schnittstelle %s empfangen"
+ #: dhcp.c:408
+ #, c-format
+ msgid "ARP-cache injection failed: %s"
+-msgstr ""
++msgstr "APR-Cache Injektion fehlgeschlagen: %s"
+ #: dhcp.c:506
+ #, c-format
+@@ -1763,13 +1756,13 @@ msgid "DHCP request for unsupported hardware type (%d) received on %s"
+ msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen"
+ #: bpf.c:376
+-#, fuzzy, c-format
++#, c-format
+ msgid "cannot create PF_ROUTE socket: %s"
+-msgstr "kann DHCP-Socket nicht erzeugen: %s"
++msgstr "Kann PF_ROUTE socket nicht erzeugen: %s"
+ #: bpf.c:397
+ msgid "Unknown protocol version from route socket"
+-msgstr ""
++msgstr "Unbekannte Protokollversion vom Route Socket"
+ #: helper.c:153
+ msgid "lease() function missing in Lua script"
+@@ -2020,50 +2013,50 @@ msgstr "konnte IPset-Kontroll-Socket nicht erzeugen: %s"
+ #: blockdata.c:58
+ #, c-format
+ msgid "DNSSEC memory in use %u, max %u, allocated %u"
+-msgstr ""
++msgstr "DNSSEC Speicher in Benutzung %u, Max %u, zugewiesen %u"
+ #: tables.c:76
+ msgid "error: fill_addr missused"
+-msgstr ""
++msgstr "Fehler: fill_addr falsch verwendet"
+ #: tables.c:105
+-#, fuzzy, c-format
++#, c-format
+ msgid "failed to access pf devices: %s"
+-msgstr "konnte auf %s nicht zugreifen: %s"
++msgstr "konnte auf pf Geräte nicht zugreifen: %s"
+ #: tables.c:119
+-#, fuzzy, c-format
++#, c-format
+ msgid "warning: no opened pf devices %s"
+-msgstr "Warnung: Keine Adresse für die Schnittstelle %s gefunden"
++msgstr "Warnung: Keine geöffneten pf Geräte %s"
+ #: tables.c:127
+-#, fuzzy, c-format
++#, c-format
+ msgid "error: cannot use table name %s"
+-msgstr "kann Hostnamen nicht ermitteln: %s"
++msgstr "Fehler: Kann Tabellenname %s nicht benutzen"
+ #: tables.c:135
+ #, c-format
+ msgid "error: cannot strlcpy table name %s"
+-msgstr ""
++msgstr "Fehler: Kann den Tabellennamen %s nicht strlcpy"
+ #: tables.c:141
+ #, c-format
+ msgid "warning: pfr_add_tables: %s(%d)"
+-msgstr ""
++msgstr "Warnung: pfr_add_tables: %s(%d)"
+ #: tables.c:147
+ msgid "info: table created"
+-msgstr ""
++msgstr "Info: Tabelle erstellt"
+ #: tables.c:158
+ #, c-format
+ msgid "warning: DIOCR%sADDRS: %s"
+-msgstr ""
++msgstr "Warnung: DIOCR%sADDRS: %s"
+ #: tables.c:162
+-#, fuzzy, c-format
++#, c-format
+ msgid "%d addresses %s"
+-msgstr "Fehlerhafte Adresse"
++msgstr "%d Adressen %s"
+ #~ msgid "no interface with address %s"
+ #~ msgstr "keine Schnittstelle mit Adresse %s"
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0036-Don-t-reply-to-DHCPv6-SOLICIT-messages-when-not-conf.patch b/src/patches/dnsmasq/0036-Don-t-reply-to-DHCPv6-SOLICIT-messages-when-not-conf.patch
new file mode 100644 (file)
index 0000000..25007de
--- /dev/null
@@ -0,0 +1,53 @@
+From 61b838dd574c51d96fef100285a0d225824534f9 Mon Sep 17 00:00:00 2001
+From: Win King Wan <pinwing+dnsmasq@gmail.com>
+Date: Wed, 21 Jan 2015 20:41:48 +0000
+Subject: [PATCH 36/55] Don't reply to DHCPv6 SOLICIT messages when not
+ configured for statefull DHCPv6.
+
+---
+ CHANGELOG     |  4 ++++
+ src/rfc3315.c | 13 +++++++++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 0076b557e95e..a4cb901e83ae 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -59,6 +59,10 @@ version 2.73
+           cheaply than having dnsmasq re-read all its existing
+           configuration each time. 
+       
++          Don't reply to DHCPv6 SOLICIT messages if we're not 
++          configured to do stateful DHCPv6. Thanks to Win King Wan 
++          for the patch.
++
+       
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index ddb390bf1136..e593ec9c362c 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -824,6 +824,19 @@ static int dhcp6_no_relay(struct state *state, int msg_type, void *inbuff, size_
+         }
+       else
+         { 
++          /* Windows 8 always requests an address even if the Managed bit
++             in RA is 0 and it keeps retrying if it receives a reply
++             stating that no addresses are available. We solve this 
++             by not replying at all if we're not configured to give any 
++             addresses by DHCPv6. RFC 3315 17.2.1. appears to allow this. */
++          
++          for (c = state->context; c; c = c->current)
++            if (!(c->flags & CONTEXT_RA_STATELESS))
++              break;
++          
++          if (!c)
++            return 0;
++          
+           /* no address, return error */
+           o1 = new_opt6(OPTION6_STATUS_CODE);
+           put_opt6_short(DHCP6NOADDRS);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0037-Allow-inotify-to-be-disabled-at-compile-time-on-Linu.patch b/src/patches/dnsmasq/0037-Allow-inotify-to-be-disabled-at-compile-time-on-Linu.patch
new file mode 100644 (file)
index 0000000..7318688
--- /dev/null
@@ -0,0 +1,213 @@
+From 0491805d2ff6e7727f0272c94fd97d9897d1e22c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 26 Jan 2015 11:23:43 +0000
+Subject: [PATCH 37/55] Allow inotify to be disabled at compile time on Linux.
+
+---
+ CHANGELOG     |  4 +++-
+ src/config.h  | 13 ++++++++++++-
+ src/dnsmasq.c | 21 +++++++++++++--------
+ src/dnsmasq.h | 11 +++++++----
+ src/inotify.c |  4 ++--
+ 5 files changed, 37 insertions(+), 16 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a4cb901e83ae..c05dec63c587 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -9,7 +9,9 @@ version 2.73
+           Use inotify for checking on updates to /etc/resolv.conf and
+           friends under Linux. This fixes race conditions when the files are 
+-          updated rapidly and saves CPU by noy polling.
++          updated rapidly and saves CPU by noy polling. To build
++          a binary that runs on old Linux kernels without inotify,
++          use make COPTS=-DNO_INOTIFY
+           Fix breakage of --domain=<domain>,<subnet>,local - only reverse
+           queries were intercepted. THis appears to have been broken 
+diff --git a/src/config.h b/src/config.h
+index cdca231b4079..5e5009271eba 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -115,6 +115,8 @@ HAVE_DNSSEC
+ HAVE_LOOP
+    include functionality to probe for and remove DNS forwarding loops.
++HAVE_INOTIFY
++   use the Linux inotify facility to efficiently re-read configuration files.
+ NO_IPV6
+ NO_TFTP
+@@ -123,6 +125,7 @@ NO_DHCP6
+ NO_SCRIPT
+ NO_LARGEFILE
+ NO_AUTH
++NO_INOTIFY
+    these are avilable to explictly disable compile time options which would 
+    otherwise be enabled automatically (HAVE_IPV6, >2Gb file sizes) or 
+    which are enabled  by default in the distributed source tree. Building dnsmasq
+@@ -355,6 +358,10 @@ HAVE_SOCKADDR_SA_LEN
+ #undef HAVE_LOOP
+ #endif
++#if defined (HAVE_LINUX_NETWORK) && !defined(NO_INOTIFY)
++#define HAVE_INOTIFY
++#endif
++
+ /* Define a string indicating which options are in use.
+    DNSMASQP_COMPILE_OPTS is only defined in dnsmasq.c */
+@@ -428,7 +435,11 @@ static char *compile_opts =
+ #ifndef HAVE_LOOP
+ "no-"
+ #endif
+-"loop-detect";
++"loop-detect "
++#ifndef HAVE_INOTIFY
++"no-"
++#endif
++"inotify";
+ #endif
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 04cc98278f62..bc4f47170705 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -142,7 +142,9 @@ int main (int argc, char **argv)
+       set_option_bool(OPT_NOWILD);
+       reset_option_bool(OPT_CLEVERBIND);
+     }
++#endif
++#ifndef HAVE_INOTIFY
+   if (daemon->inotify_hosts)
+     die(_("dhcp-hostsdir not supported on this platform"), NULL, EC_BADCONF);
+ #endif
+@@ -321,7 +323,7 @@ int main (int argc, char **argv)
+ #endif
+     }
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+   if ((!option_bool(OPT_NO_POLL) && daemon->port != 0) ||
+       daemon->dhcp || daemon->doing_dhcp6)
+     inotify_dnsmasq_init();
+@@ -802,7 +804,7 @@ int main (int argc, char **argv)
+   
+   pid = getpid();
+   
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+   /* Using inotify, have to select a resolv file at startup */
+   poll_resolv(1, 0, now);
+ #endif
+@@ -872,15 +874,18 @@ int main (int argc, char **argv)
+         bump_maxfd(daemon->icmp6fd, &maxfd); 
+       }
+ #endif
+-
+-#if defined(HAVE_LINUX_NETWORK)
+-      FD_SET(daemon->netlinkfd, &rset);
+-      bump_maxfd(daemon->netlinkfd, &maxfd);
++    
++#ifdef HAVE_INOTIFY
+       if (daemon->inotifyfd != -1)
+       {
+         FD_SET(daemon->inotifyfd, &rset);
+         bump_maxfd(daemon->inotifyfd, &maxfd);
+       }
++#endif
++
++#if defined(HAVE_LINUX_NETWORK)
++      FD_SET(daemon->netlinkfd, &rset);
++      bump_maxfd(daemon->netlinkfd, &maxfd);
+ #elif defined(HAVE_BSD_NETWORK)
+       FD_SET(daemon->routefd, &rset);
+       bump_maxfd(daemon->routefd, &maxfd);
+@@ -948,7 +953,7 @@ int main (int argc, char **argv)
+       route_sock();
+ #endif
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+       if  (daemon->inotifyfd != -1 && FD_ISSET(daemon->inotifyfd, &rset) && inotify_check(now))
+       {
+         if (daemon->port != 0 && !option_bool(OPT_NO_POLL))
+@@ -1394,7 +1399,7 @@ void clear_cache_and_reload(time_t now)
+       if (option_bool(OPT_ETHERS))
+       dhcp_read_ethers();
+       reread_dhcp();
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+       set_dhcp_inotify();
+ #endif
+       dhcp_update_configs(daemon->dhcp_conf);
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index d841fdc064ad..8091634f69db 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -544,7 +544,7 @@ struct resolvc {
+   int is_default, logged;
+   time_t mtime;
+   char *name;
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+   int wd; /* inotify watch descriptor */
+   char *file; /* pointer to file part if path */
+ #endif
+@@ -558,7 +558,7 @@ struct hostsfile {
+   struct hostsfile *next;
+   int flags;
+   char *fname;
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+   int wd; /* inotify watch descriptor */
+ #endif
+   unsigned int index; /* matches to cache entries for logging */
+@@ -1013,8 +1013,11 @@ extern struct daemon {
+   /* DHCP state */
+   int dhcpfd, helperfd, pxefd; 
++#ifdef HAVE_INOTIFY
++  int inotifyfd;
++#endif
+ #if defined(HAVE_LINUX_NETWORK)
+-  int netlinkfd, inotifyfd;
++  int netlinkfd;
+ #elif defined(HAVE_BSD_NETWORK)
+   int dhcp_raw_fd, dhcp_icmp_fd, routefd;
+ #endif
+@@ -1488,7 +1491,7 @@ int detect_loop(char *query, int type);
+ #endif
+ /* inotify.c */
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ void inotify_dnsmasq_init();
+ int inotify_check(time_t now);
+ #  ifdef HAVE_DHCP
+diff --git a/src/inotify.c b/src/inotify.c
+index 52a30d7f44db..818fe8eddda4 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -15,7 +15,7 @@
+ */
+ #include "dnsmasq.h"
+-#ifdef HAVE_LINUX_NETWORK
++#ifdef HAVE_INOTIFY
+ #include <sys/inotify.h>
+@@ -216,5 +216,5 @@ static void check_for_dhcp_inotify(struct inotify_event *in, time_t now)
+ #endif /* DHCP */
+-#endif  /* LINUX_NETWORK */
++#endif  /* INOTIFY */
+   
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0038-Expand-inotify-code-to-dhcp-hostsdir-dhcp-optsdir-an.patch b/src/patches/dnsmasq/0038-Expand-inotify-code-to-dhcp-hostsdir-dhcp-optsdir-an.patch
new file mode 100644 (file)
index 0000000..7514034
--- /dev/null
@@ -0,0 +1,562 @@
+From 70d1873dd9e70041ed4bb88c69d5b886b7cc634c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 19:59:29 +0000
+Subject: [PATCH 38/55] Expand inotify code to dhcp-hostsdir, dhcp-optsdir and
+ hostsdir.
+
+---
+ src/cache.c   |  81 +++++++++++++++++---------
+ src/dnsmasq.c |   9 ++-
+ src/dnsmasq.h |  14 +++--
+ src/inotify.c | 179 +++++++++++++++++++++++++++++-----------------------------
+ src/option.c  |  37 +++++++++---
+ 5 files changed, 187 insertions(+), 133 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 09b6dbf8087a..abaf25ec0f18 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -835,27 +835,42 @@ static void add_hosts_entry(struct crec *cache, struct all_addr *addr, int addrl
+      Only insert each unique address once into this hashing structure.
+      This complexity avoids O(n^2) divergent CPU use whilst reading
+-     large (10000 entry) hosts files. */
+-  
+-  /* hash address */
+-  for (j = 0, i = 0; i < addrlen; i++)
+-    j = (j*2 +((unsigned char *)addr)[i]) % hashsz;
+-  
+-  for (lookup = rhash[j]; lookup; lookup = lookup->next)
+-    if ((lookup->flags & cache->flags & (F_IPV4 | F_IPV6)) &&
+-      memcmp(&lookup->addr.addr, addr, addrlen) == 0)
+-      {
+-      cache->flags &= ~F_REVERSE;
+-      break;
+-      }
++     large (10000 entry) hosts files. 
++
++     Note that we only do this process when bulk-reading hosts files, 
++     for incremental reads, rhash is NULL, and we use cache lookups
++     instead.
++  */
+   
+-  /* maintain address hash chain, insert new unique address */
+-  if (!lookup)
++  if (rhash)
+     {
+-      cache->next = rhash[j];
+-      rhash[j] = cache;
++      /* hash address */
++      for (j = 0, i = 0; i < addrlen; i++)
++      j = (j*2 +((unsigned char *)addr)[i]) % hashsz;
++      
++      for (lookup = rhash[j]; lookup; lookup = lookup->next)
++      if ((lookup->flags & cache->flags & (F_IPV4 | F_IPV6)) &&
++          memcmp(&lookup->addr.addr, addr, addrlen) == 0)
++        {
++          cache->flags &= ~F_REVERSE;
++          break;
++        }
++      
++      /* maintain address hash chain, insert new unique address */
++      if (!lookup)
++      {
++        cache->next = rhash[j];
++        rhash[j] = cache;
++      }
+     }
+-  
++  else
++    {
++      /* incremental read, lookup in cache */
++      lookup = cache_find_by_addr(NULL, addr, 0, cache->flags & (F_IPV4 | F_IPV6));
++      if (lookup && lookup->flags & F_HOSTS)
++      cache->flags &= ~F_REVERSE;
++    }
++
+   cache->uid = index;
+   memcpy(&cache->addr.addr, addr, addrlen);  
+   cache_hash(cache);
+@@ -912,7 +927,7 @@ static int gettok(FILE *f, char *token)
+     }
+ }
+-static int read_hostsfile(char *filename, unsigned int index, int cache_size, struct crec **rhash, int hashsz)
++int read_hostsfile(char *filename, unsigned int index, int cache_size, struct crec **rhash, int hashsz)
+ {  
+   FILE *f = fopen(filename, "r");
+   char *token = daemon->namebuff, *domain_suffix = NULL;
+@@ -958,7 +973,7 @@ static int read_hostsfile(char *filename, unsigned int index, int cache_size, st
+       addr_count++;
+       
+       /* rehash every 1000 names. */
+-      if ((name_count - cache_size) > 1000)
++      if (rhash && ((name_count - cache_size) > 1000))
+       {
+         rehash(name_count);
+         cache_size = name_count;
+@@ -1005,10 +1020,13 @@ static int read_hostsfile(char *filename, unsigned int index, int cache_size, st
+     } 
+   fclose(f);
+-  rehash(name_count);
+-  
+-  my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
+   
++  if (rhash)
++    {
++      rehash(name_count); 
++      my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
++    }
++
+   return name_count;
+ }
+           
+@@ -1118,14 +1136,19 @@ void cache_reload(void)
+       my_syslog(LOG_INFO, _("cleared cache"));
+       return;
+     }
+-    
++  
+   if (!option_bool(OPT_NO_HOSTS))
+     total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
+-         
++  
+   daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
+   for (ah = daemon->addn_hosts; ah; ah = ah->next)
+     if (!(ah->flags & AH_INACTIVE))
+       total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
++  
++#ifdef HAVE_INOTIFY
++  set_dynamic_inotify(AH_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
++#endif
++  
+ } 
+ #ifdef HAVE_DHCP
+@@ -1505,7 +1528,13 @@ char *record_source(unsigned int index)
+   for (ah = daemon->addn_hosts; ah; ah = ah->next)
+     if (ah->index == index)
+       return ah->fname;
+-  
++
++#ifdef HAVE_INOTIFY
++  for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
++     if (ah->index == index)
++       return ah->fname;
++#endif
++
+   return "<unknown>";
+ }
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index bc4f47170705..2c629fe422aa 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -145,8 +145,8 @@ int main (int argc, char **argv)
+ #endif
+ #ifndef HAVE_INOTIFY
+-  if (daemon->inotify_hosts)
+-    die(_("dhcp-hostsdir not supported on this platform"), NULL, EC_BADCONF);
++  if (daemon->dynamic_dirs)
++    die(_("dhcp-hostsdir, dhcp-optsdir and hostsdir are not supported on this platform"), NULL, EC_BADCONF);
+ #endif
+   
+   if (option_bool(OPT_DNSSEC_VALID))
+@@ -324,8 +324,7 @@ int main (int argc, char **argv)
+     }
+ #ifdef HAVE_INOTIFY
+-  if ((!option_bool(OPT_NO_POLL) && daemon->port != 0) ||
+-      daemon->dhcp || daemon->doing_dhcp6)
++  if (daemon->port != 0 || daemon->dhcp || daemon->doing_dhcp6)
+     inotify_dnsmasq_init();
+   else
+     daemon->inotifyfd = -1;
+@@ -1400,7 +1399,7 @@ void clear_cache_and_reload(time_t now)
+       dhcp_read_ethers();
+       reread_dhcp();
+ #ifdef HAVE_INOTIFY
+-      set_dhcp_inotify();
++      set_dynamic_inotify(AH_DHCP_HST | AH_DHCP_OPT, 0, NULL, 0);
+ #endif
+       dhcp_update_configs(daemon->dhcp_conf);
+       lease_update_from_configs(); 
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 8091634f69db..0c322a93993e 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -554,6 +554,9 @@ struct resolvc {
+ #define AH_DIR      1
+ #define AH_INACTIVE 2
+ #define AH_WD_DONE  4
++#define AH_HOSTS    8
++#define AH_DHCP_HST 16
++#define AH_DHCP_OPT 32
+ struct hostsfile {
+   struct hostsfile *next;
+   int flags;
+@@ -965,7 +968,7 @@ extern struct daemon {
+   int doing_ra, doing_dhcp6;
+   struct dhcp_netid_list *dhcp_ignore, *dhcp_ignore_names, *dhcp_gen_names; 
+   struct dhcp_netid_list *force_broadcast, *bootp_dynamic;
+-  struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *inotify_hosts;
++  struct hostsfile *dhcp_hosts_file, *dhcp_opts_file, *dynamic_dirs;
+   int dhcp_max, tftp_max;
+   int dhcp_server_port, dhcp_client_port;
+   int start_tftp_port, end_tftp_port; 
+@@ -1071,6 +1074,8 @@ int cache_make_stat(struct txt_record *t);
+ char *cache_get_name(struct crec *crecp);
+ char *cache_get_cname_target(struct crec *crecp);
+ struct crec *cache_enumerate(int init);
++int read_hostsfile(char *filename, unsigned int index, int cache_size, 
++                 struct crec **rhash, int hashsz);
+ /* blockdata.c */
+ #ifdef HAVE_DNSSEC
+@@ -1204,7 +1209,8 @@ void reset_option_bool(unsigned int opt);
+ struct hostsfile *expand_filelist(struct hostsfile *list);
+ char *parse_server(char *arg, union mysockaddr *addr, 
+                  union mysockaddr *source_addr, char *interface, int *flags);
+-int option_read_hostsfile(char *file);
++int option_read_dynfile(char *file, int flags);
++
+ /* forward.c */
+ void reply_query(int fd, int family, time_t now);
+ void receive_query(struct listener *listen, time_t now);
+@@ -1494,7 +1500,5 @@ int detect_loop(char *query, int type);
+ #ifdef HAVE_INOTIFY
+ void inotify_dnsmasq_init();
+ int inotify_check(time_t now);
+-#  ifdef HAVE_DHCP
+-void set_dhcp_inotify(void);
+-#  endif
++void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revhashsz);
+ #endif
+diff --git a/src/inotify.c b/src/inotify.c
+index 818fe8eddda4..c537f4c1562a 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -19,11 +19,6 @@
+ #include <sys/inotify.h>
+-#ifdef HAVE_DHCP
+-static void check_for_dhcp_inotify(struct inotify_event *in, time_t now);
+-#endif
+-
+-
+ /* the strategy is to set a inotify on the directories containing
+    resolv files, for any files in the directory which are close-write 
+    or moved into the directory.
+@@ -82,57 +77,28 @@ void inotify_dnsmasq_init()
+     }
+ }
+-int inotify_check(time_t now)
++
++/* initialisation for dynamic-dir. Set inotify watch for each directory, and read pre-existing files */
++void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revhashsz)
+ {
+-  int hit = 0;
++  struct hostsfile *ah;
+   
+-  while (1)
++  for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
+     {
+-      int rc;
+-      char *p;
+-      struct resolvc *res;
+-      struct inotify_event *in;
+-
+-      while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
+-      
+-      if (rc <= 0)
+-      break;
+-      
+-      for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len) 
++      DIR *dir_stream = NULL;
++      struct dirent *ent;
++      struct stat buf;
++     
++      if (!(ah->flags & flag))
++      continue;
++ 
++      if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
+       {
+-        in = (struct inotify_event*)p;
+-        
+-        for (res = daemon->resolv_files; res; res = res->next)
+-          if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
+-            hit = 1;
+-
+-#ifdef HAVE_DHCP
+-        if (daemon->dhcp || daemon->doing_dhcp6)
+-          check_for_dhcp_inotify(in, now);
+-#endif
++        my_syslog(LOG_ERR, _("bad dynamic directory %s: %s"), 
++                  ah->fname, strerror(errno));
++        continue;
+       }
+-    }
+-  return hit;
+-}
+-
+-#ifdef HAVE_DHCP 
+-/* initialisation for dhcp-hostdir. Set inotify watch for each directory, and read pre-existing files */
+-void set_dhcp_inotify(void)
+-{
+-  struct hostsfile *ah;
+-
+-  for (ah = daemon->inotify_hosts; ah; ah = ah->next)
+-    {
+-       DIR *dir_stream = NULL;
+-       struct dirent *ent;
+-       struct stat buf;
+-
+-       if (stat(ah->fname, &buf) == -1 || !(S_ISDIR(buf.st_mode)))
+-       {
+-         my_syslog(LOG_ERR, _("bad directory in dhcp-hostsdir %s"), ah->fname);
+-         continue;
+-       }
+-
++      
+        if (!(ah->flags & AH_WD_DONE))
+        {
+          ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
+@@ -142,7 +108,8 @@ void set_dhcp_inotify(void)
+         a race which misses files being added as we start */
+        if (ah->wd == -1 || !(dir_stream = opendir(ah->fname)))
+        {
+-         my_syslog(LOG_ERR, _("failed to create inotify for %s"), ah->fname);
++         my_syslog(LOG_ERR, _("failed to create inotify for %s: %s"),
++                   ah->fname, strerror(errno));
+          continue;
+        }
+@@ -167,54 +134,90 @@ void set_dhcp_inotify(void)
+              
+              /* ignore non-regular files */
+              if (stat(path, &buf) != -1 && S_ISREG(buf.st_mode))
+-               option_read_hostsfile(path);
+-             
++               {
++                 if (ah->flags & AH_HOSTS)
++                   total_size = read_hostsfile(path, ah->index, total_size, rhash, revhashsz);
++#ifdef HAVE_DHCP
++                 else if (ah->flags & (AH_DHCP_HST | AH_DHCP_OPT))
++                   option_read_dynfile(path, ah->flags);
++#endif                   
++               }
++
+              free(path);
+            }
+        }
+     }
+ }
+-static void check_for_dhcp_inotify(struct inotify_event *in, time_t now)
++int inotify_check(time_t now)
+ {
++  int hit = 0;
+   struct hostsfile *ah;
+-  /* ignore emacs backups and dotfiles */
+-  if (in->len == 0 || 
+-      in->name[in->len - 1] == '~' ||
+-      (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
+-      in->name[0] == '.')
+-    return;
+-
+-  for (ah = daemon->inotify_hosts; ah; ah = ah->next)
+-    if (ah->wd == in->wd)
+-      {
+-      size_t lendir = strlen(ah->fname);
+-      char *path;
+-         
+-      if ((path = whine_malloc(lendir + in->len + 2)))
+-        {
+-          strcpy(path, ah->fname);
+-          strcat(path, "/");
+-          strcat(path, in->name);
+-          
+-          if (option_read_hostsfile(path))
++  while (1)
++    {
++      int rc;
++      char *p;
++      struct resolvc *res;
++      struct inotify_event *in;
++
++      while ((rc = read(daemon->inotifyfd, inotify_buffer, INOTIFY_SZ)) == -1 && errno == EINTR);
++      
++      if (rc <= 0)
++      break;
++      
++      for (p = inotify_buffer; rc - (p - inotify_buffer) >= (int)sizeof(struct inotify_event); p += sizeof(struct inotify_event) + in->len) 
++      {
++        in = (struct inotify_event*)p;
++        
++        for (res = daemon->resolv_files; res; res = res->next)
++          if (res->wd == in->wd && in->len != 0 && strcmp(res->file, in->name) == 0)
++            hit = 1;
++
++        /* ignore emacs backups and dotfiles */
++        if (in->len == 0 || 
++            in->name[in->len - 1] == '~' ||
++            (in->name[0] == '#' && in->name[in->len - 1] == '#') ||
++            in->name[0] == '.')
++          continue;
++        
++        for (ah = daemon->dynamic_dirs; ah; ah = ah->next)
++          if (ah->wd == in->wd)
+             {
+-              /* Propogate the consequences of loading a new dhcp-host */
+-              dhcp_update_configs(daemon->dhcp_conf);
+-              lease_update_from_configs(); 
+-              lease_update_file(now); 
+-              lease_update_dns(1);
++              size_t lendir = strlen(ah->fname);
++              char *path;
++              
++              if ((path = whine_malloc(lendir + in->len + 2)))
++                {
++                  strcpy(path, ah->fname);
++                  strcat(path, "/");
++                  strcat(path, in->name);
++                  
++                  if (ah->flags & AH_HOSTS)
++                    read_hostsfile(path, ah->index, 0, NULL, 0);
++#ifdef HAVE_DHCP
++                  else if (ah->flags & AH_DHCP_HST)
++                    {
++                      if (option_read_dynfile(path, AH_DHCP_HST))
++                        {
++                          /* Propogate the consequences of loading a new dhcp-host */
++                          dhcp_update_configs(daemon->dhcp_conf);
++                          lease_update_from_configs(); 
++                          lease_update_file(now); 
++                          lease_update_dns(1);
++                        }
++                    }
++                  else if (ah->flags & AH_DHCP_OPT)
++                    option_read_dynfile(path, AH_DHCP_OPT);
++#endif
++                  
++                  free(path);
++                }
+             }
+-          
+-          free(path);
+-        }
+-      
+-      return;
+-      }
++      }
++    }
++  return hit;
+ }
+-#endif /* DHCP */
+-
+ #endif  /* INOTIFY */
+   
+diff --git a/src/option.c b/src/option.c
+index 22e11c37d374..6ef80117cc8c 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -150,6 +150,8 @@ struct myoption {
+ #define LOPT_IGNORE_ADDR   338
+ #define LOPT_MINCTTL       339
+ #define LOPT_DHCP_INOTIFY  340
++#define LOPT_DHOPT_INOTIFY 341
++#define LOPT_HOST_INOTIFY  342
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =  
+@@ -200,6 +202,7 @@ static const struct myoption opts[] =
+     { "local-ttl", 1, 0, 'T' },
+     { "no-negcache", 0, 0, 'N' },
+     { "addn-hosts", 1, 0, 'H' },
++    { "hostsdir", 1, 0, LOPT_HOST_INOTIFY },
+     { "query-port", 1, 0, 'Q' },
+     { "except-interface", 1, 0, 'I' },
+     { "no-dhcp-interface", 1, 0, '2' },
+@@ -249,6 +252,7 @@ static const struct myoption opts[] =
+     { "dhcp-hostsfile", 1, 0, LOPT_DHCP_HOST },
+     { "dhcp-optsfile", 1, 0, LOPT_DHCP_OPTS },
+     { "dhcp-hostsdir", 1, 0, LOPT_DHCP_INOTIFY },
++    { "dhcp-optsdir", 1, 0, LOPT_DHOPT_INOTIFY },
+     { "dhcp-no-override", 0, 0, LOPT_OVERRIDE },
+     { "tftp-port-range", 1, 0, LOPT_TFTPPORTS },
+     { "stop-dns-rebind", 0, 0, LOPT_REBIND },
+@@ -338,9 +342,11 @@ static struct {
+   { LOPT_DHCP_HOST, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from file."), NULL },
+   { LOPT_DHCP_OPTS, ARG_DUP, "<path>", gettext_noop("Read DHCP option specs from file."), NULL },
+   { LOPT_DHCP_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP host specs from a directory."), NULL }, 
++  { LOPT_DHOPT_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read DHCP options from a directory."), NULL }, 
+   { LOPT_TAG_IF, ARG_DUP, "tag-expression", gettext_noop("Evaluate conditional tag expression."), NULL },
+   { 'h', OPT_NO_HOSTS, NULL, gettext_noop("Do NOT load %s file."), HOSTSFILE },
+   { 'H', ARG_DUP, "<path>", gettext_noop("Specify a hosts file to be read in addition to %s."), HOSTSFILE },
++  { LOPT_HOST_INOTIFY, ARG_DUP, "<path>", gettext_noop("Read hosts files from a directory."), NULL },
+   { 'i', ARG_DUP, "<interface>", gettext_noop("Specify interface(s) to listen on."), NULL },
+   { 'I', ARG_DUP, "<interface>", gettext_noop("Specify interface(s) NOT to listen on.") , NULL },
+   { 'j', ARG_DUP, "set:<tag>,<class>", gettext_noop("Map DHCP user class to tag."), NULL },
+@@ -1712,10 +1718,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+       break;
+ #endif /* HAVE_DHCP */
+-    case LOPT_DHCP_HOST: /* --dhcp-hostsfile */
+-    case LOPT_DHCP_OPTS: /* --dhcp-optsfile */
+-    case LOPT_DHCP_INOTIFY: /* dhcp-hostsdir */
+-    case 'H': /* --addn-hosts */
++    case LOPT_DHCP_HOST:     /* --dhcp-hostsfile */
++    case LOPT_DHCP_OPTS:     /* --dhcp-optsfile */
++    case LOPT_DHCP_INOTIFY:  /* --dhcp-hostsdir */
++    case LOPT_DHOPT_INOTIFY: /* --dhcp-optsdir */
++    case LOPT_HOST_INOTIFY:  /* --hostsdir */
++    case 'H':                /* --addn-hosts */
+       {
+       struct hostsfile *new = opt_malloc(sizeof(struct hostsfile));
+       static unsigned int hosts_index = SRC_AH;
+@@ -1737,10 +1745,16 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+           new->next = daemon->dhcp_opts_file;
+           daemon->dhcp_opts_file = new;
+         }       
+-      else if (option == LOPT_DHCP_INOTIFY)
++      else 
+         {
+-          new->next = daemon->inotify_hosts;
+-          daemon->inotify_hosts = new;
++          new->next = daemon->dynamic_dirs;
++          daemon->dynamic_dirs = new; 
++          if (option == LOPT_DHCP_INOTIFY)
++            new->flags |= AH_DHCP_HST;
++          else if (option == LOPT_DHOPT_INOTIFY)
++            new->flags |= AH_DHCP_OPT;
++          else if (option == LOPT_HOST_INOTIFY)
++            new->flags |= AH_HOSTS;
+         }
+       
+       break;
+@@ -4052,9 +4066,14 @@ static void read_file(char *file, FILE *f, int hard_opt)
+ }
+ #ifdef HAVE_DHCP
+-int option_read_hostsfile(char *file)
++int option_read_dynfile(char *file, int flags)
+ {
+-  return one_file(file, LOPT_BANK);
++  if (flags & AH_DHCP_HST)
++    return one_file(file, LOPT_BANK);
++  else if (flags & AH_DHCP_OPT)
++    return one_file(file, LOPT_OPTS);
++
++  return 0;
+ }
+ #endif
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0039-Update-copyrights-for-dawn-of-2015.patch b/src/patches/dnsmasq/0039-Update-copyrights-for-dawn-of-2015.patch
new file mode 100644 (file)
index 0000000..11bde00
--- /dev/null
@@ -0,0 +1,428 @@
+From aff3396280e944833f0e23d834aa6acd5fe2605a Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 20:13:40 +0000
+Subject: [PATCH 39/55] Update copyrights for dawn of 2015.
+
+---
+ Makefile             | 2 +-
+ src/auth.c           | 2 +-
+ src/blockdata.c      | 2 +-
+ src/bpf.c            | 2 +-
+ src/cache.c          | 2 +-
+ src/config.h         | 2 +-
+ src/conntrack.c      | 2 +-
+ src/dbus.c           | 2 +-
+ src/dhcp-common.c    | 2 +-
+ src/dhcp-protocol.h  | 2 +-
+ src/dhcp.c           | 2 +-
+ src/dhcp6-protocol.h | 2 +-
+ src/dhcp6.c          | 2 +-
+ src/dns-protocol.h   | 2 +-
+ src/dnsmasq.c        | 2 +-
+ src/dnsmasq.h        | 4 ++--
+ src/dnssec.c         | 2 +-
+ src/domain.c         | 2 +-
+ src/forward.c        | 2 +-
+ src/helper.c         | 2 +-
+ src/inotify.c        | 2 +-
+ src/ip6addr.h        | 2 +-
+ src/lease.c          | 2 +-
+ src/log.c            | 2 +-
+ src/loop.c           | 2 +-
+ src/netlink.c        | 2 +-
+ src/network.c        | 2 +-
+ src/option.c         | 2 +-
+ src/outpacket.c      | 2 +-
+ src/radv-protocol.h  | 2 +-
+ src/radv.c           | 2 +-
+ src/rfc1035.c        | 2 +-
+ src/rfc2131.c        | 2 +-
+ src/rfc3315.c        | 2 +-
+ src/slaac.c          | 2 +-
+ src/tftp.c           | 2 +-
+ src/util.c           | 2 +-
+ 37 files changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index bcbd5571671d..21e4a5c4101c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,4 +1,4 @@
+-# dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++# dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+ #
+ #  This program is free software; you can redistribute it and/or modify
+ #  it under the terms of the GNU General Public License as published by
+diff --git a/src/auth.c b/src/auth.c
+index 59e05d3da38e..15721e52793f 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/blockdata.c b/src/blockdata.c
+index 5a70a7967fa3..c8f5eae811eb 100644
+--- a/src/blockdata.c
++++ b/src/blockdata.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/bpf.c b/src/bpf.c
+index 4416b1c07287..997d87421bed 100644
+--- a/src/bpf.c
++++ b/src/bpf.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/cache.c b/src/cache.c
+index abaf25ec0f18..117ae279fd4e 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/config.h b/src/config.h
+index 5e5009271eba..8def6f200461 100644
+--- a/src/config.h
++++ b/src/config.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/conntrack.c b/src/conntrack.c
+index 6a5133ab93af..0fa2da903b03 100644
+--- a/src/conntrack.c
++++ b/src/conntrack.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dbus.c b/src/dbus.c
+index a2a94dc85dac..5b69de518beb 100644
+--- a/src/dbus.c
++++ b/src/dbus.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dhcp-common.c b/src/dhcp-common.c
+index 9d13ac8df6f1..ce115202a646 100644
+--- a/src/dhcp-common.c
++++ b/src/dhcp-common.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dhcp-protocol.h b/src/dhcp-protocol.h
+index 4c0961472482..701b6cb3346e 100644
+--- a/src/dhcp-protocol.h
++++ b/src/dhcp-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dhcp.c b/src/dhcp.c
+index 7acf2c4311a9..f29be9b489a7 100644
+--- a/src/dhcp.c
++++ b/src/dhcp.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dhcp6-protocol.h b/src/dhcp6-protocol.h
+index 5927dc32f6af..928a2fa162ed 100644
+--- a/src/dhcp6-protocol.h
++++ b/src/dhcp6-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dhcp6.c b/src/dhcp6.c
+index bc48fdddd3de..3c56e77c6085 100644
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dns-protocol.h b/src/dns-protocol.h
+index 0aced3ce6952..16fade33d98c 100644
+--- a/src/dns-protocol.h
++++ b/src/dns-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 2c629fe422aa..e903a24c8105 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 0c322a93993e..89e758b56a0a 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+  
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -14,7 +14,7 @@
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+-#define COPYRIGHT "Copyright (c) 2000-2014 Simon Kelley" 
++#define COPYRIGHT "Copyright (c) 2000-2015 Simon Kelley" 
+ #ifndef NO_LARGEFILE
+ /* Ensure we can use files >2GB (log files may grow this big) */
+diff --git a/src/dnssec.c b/src/dnssec.c
+index d39ab85ed966..a8dfe3871c85 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -1,5 +1,5 @@
+ /* dnssec.c is Copyright (c) 2012 Giovanni Bajo <rasky@develer.com>
+-           and Copyright (c) 2012-2014 Simon Kelley
++           and Copyright (c) 2012-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/domain.c b/src/domain.c
+index fdd5e4f0838f..278698ca04b3 100644
+--- a/src/domain.c
++++ b/src/domain.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/forward.c b/src/forward.c
+index b17bc34f865f..438e9fa490b8 100644
+--- a/src/forward.c
++++ b/src/forward.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/helper.c b/src/helper.c
+index 4be53c361ee1..1fee72dead8c 100644
+--- a/src/helper.c
++++ b/src/helper.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/inotify.c b/src/inotify.c
+index c537f4c1562a..470d6ed99213 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+  
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/ip6addr.h b/src/ip6addr.h
+index c7dcb39c33fa..f0b7e820e227 100644
+--- a/src/ip6addr.h
++++ b/src/ip6addr.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/lease.c b/src/lease.c
+index 5d56b1b9147e..545bbb7fd09c 100644
+--- a/src/lease.c
++++ b/src/lease.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/log.c b/src/log.c
+index 8083a8697323..a5ac605c7c5d 100644
+--- a/src/log.c
++++ b/src/log.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/loop.c b/src/loop.c
+index bb377ad12644..565f7d8e58e0 100644
+--- a/src/loop.c
++++ b/src/loop.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/netlink.c b/src/netlink.c
+index b39328376389..10f94db25a14 100644
+--- a/src/netlink.c
++++ b/src/netlink.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/network.c b/src/network.c
+index 14d2af2ce313..7045253d467b 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/option.c b/src/option.c
+index 6ef80117cc8c..cb4e76ba0aa2 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/outpacket.c b/src/outpacket.c
+index dce68f7cb09f..5b1ff9318bbd 100644
+--- a/src/outpacket.c
++++ b/src/outpacket.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/radv-protocol.h b/src/radv-protocol.h
+index 72ccda49d7fe..4cc1ea426e69 100644
+--- a/src/radv-protocol.h
++++ b/src/radv-protocol.h
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/radv.c b/src/radv.c
+index 3c8b162dbd8e..6da125b864ae 100644
+--- a/src/radv.c
++++ b/src/radv.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/rfc1035.c b/src/rfc1035.c
+index 262274fc5b80..5ef5ddb7485e 100644
+--- a/src/rfc1035.c
++++ b/src/rfc1035.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/rfc2131.c b/src/rfc2131.c
+index 5c9040892f1d..55526443dc84 100644
+--- a/src/rfc2131.c
++++ b/src/rfc2131.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/rfc3315.c b/src/rfc3315.c
+index e593ec9c362c..c1ddc805988d 100644
+--- a/src/rfc3315.c
++++ b/src/rfc3315.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/slaac.c b/src/slaac.c
+index 351d6802f85e..abaad537e25a 100644
+--- a/src/slaac.c
++++ b/src/slaac.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/tftp.c b/src/tftp.c
+index a527911fc0df..a57a31514f44 100644
+--- a/src/tftp.c
++++ b/src/tftp.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+diff --git a/src/util.c b/src/util.c
+index d532444da207..91d02410b13f 100644
+--- a/src/util.c
++++ b/src/util.c
+@@ -1,4 +1,4 @@
+-/* dnsmasq is Copyright (c) 2000-2014 Simon Kelley
++/* dnsmasq is Copyright (c) 2000-2015 Simon Kelley
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0040-inotify-documentation-updates.patch b/src/patches/dnsmasq/0040-inotify-documentation-updates.patch
new file mode 100644 (file)
index 0000000..981e553
--- /dev/null
@@ -0,0 +1,53 @@
+From 3d04f46334d0e345f589eda1372e638b946fe637 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 21:59:13 +0000
+Subject: [PATCH 40/55] inotify documentation updates.
+
+---
+ man/dnsmasq.8 | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 005b5cca8d1f..c858323d78bd 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -50,6 +50,10 @@ Additional hosts file. Read the specified file as well as /etc/hosts. If -h is g
+ only the specified file. This option may be repeated for more than one
+ additional hosts file. If a directory is given, then read all the files contained in that directory. 
+ .TP
++.B --hostsdir=<path>
++Read all the hosts files contained in the directory. New or changed files
++are read automatically. See --dhcp-hostsdir for details.
++.TP
+ .B \-E, --expand-hosts
+ Add the domain to simple names (without a period) in /etc/hosts
+ in the same way as for DHCP-derived names. Note that this does not
+@@ -979,12 +983,14 @@ dhcp-optsfile will be re-read when dnsmasq receives SIGHUP. Note that
+ it is possible to encode the information in a
+ .TP
+ .B --dhcp-hostsdir=<path>
+-This is exactly equivalent to dhcp-hostfile, except for the following. The path MUST be a
++This is equivalent to dhcp-hostsfile, except for the following. The path MUST be a
+ directory, and not an individual file. Changed or new files within
+ the directory are read automatically, without the need to send SIGHUP.
+ If a file is deleted for changed after it has been read by dnsmasq, then the
+ host record it contained will remain until dnsmasq recieves a SIGHUP, or 
+ is restarted; ie host records are only added dynamically.
++.B --dhcp-optsdir=<path>
++This is equivalent to dhcp-optsfile, with the differences noted for --dhcp-hostsdir.
+ .TP
+ .B --dhcp-boot
+ flag as DHCP options, using the options names bootfile-name,
+@@ -1791,7 +1797,8 @@ clears its cache and then re-loads
+ .I /etc/hosts
+ and 
+ .I /etc/ethers 
+-and any file given by --dhcp-hostsfile, --dhcp-optsfile or --addn-hosts.
++and any file given by --dhcp-hostsfile, --dhcp-hostsdir, --dhcp-optsfile, 
++--dhcp-optsdir, --addn-hosts or --hostsdir.
+ The dhcp lease change script is called for all
+ existing DHCP leases. If 
+ .B
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0041-Fix-broken-ECDSA-DNSSEC-signatures.patch b/src/patches/dnsmasq/0041-Fix-broken-ECDSA-DNSSEC-signatures.patch
new file mode 100644 (file)
index 0000000..0c8aa9b
--- /dev/null
@@ -0,0 +1,39 @@
+From 6ef15b34ca83c62a939f69356d5c3f7a6bfef3d0 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 31 Jan 2015 22:44:26 +0000
+Subject: [PATCH 41/55] Fix broken ECDSA DNSSEC signatures.
+
+---
+ CHANGELOG    | 2 ++
+ src/dnssec.c | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index c05dec63c587..c80dc0fdbe9e 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -65,6 +65,8 @@ version 2.73
+           configured to do stateful DHCPv6. Thanks to Win King Wan 
+           for the patch.
++          Fix broken DNSSEC validation of ECDSA signatures.
++      
+       
+ version 2.72
+             Add ra-advrouter mode, for RFC-3775 mobile IPv6 support.
+diff --git a/src/dnssec.c b/src/dnssec.c
+index a8dfe3871c85..26932373cd3e 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -275,7 +275,7 @@ static int dnsmasq_ecdsa_verify(struct blockdata *key_data, unsigned int key_len
+     }
+   
+   if (sig_len != 2*t || key_len != 2*t ||
+-      (p = blockdata_retrieve(key_data, key_len, NULL)))
++      !(p = blockdata_retrieve(key_data, key_len, NULL)))
+     return 0;
+   
+   mpz_import(x, t , 1, 1, 0, 0, p);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0042-BSD-make-support.patch b/src/patches/dnsmasq/0042-BSD-make-support.patch
new file mode 100644 (file)
index 0000000..76f76ef
--- /dev/null
@@ -0,0 +1,29 @@
+From 106266761828a0acb006346ae47bf031dee46a5d Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 1 Feb 2015 00:15:16 +0000
+Subject: [PATCH 42/55] BSD make support
+
+---
+ Makefile | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 21e4a5c4101c..2910320b6452 100644
+--- a/Makefile
++++ b/Makefile
+@@ -64,8 +64,10 @@ nettle_libs =   `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG
+ gmp_libs =      `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp`
+ sunos_libs =    `if uname | grep SunOS >/dev/null 2>&1; then echo -lsocket -lnsl -lposix4; fi`
+ version =     -DVERSION='\"`$(top)/bld/get-version $(top)`\"'
+-copts_conf = .copts_$(shell $(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | \
+-                      ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' ')
++
++sum?=$(shell $(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' ')
++sum!=$(CC) -DDNSMASQ_COMPILE_OPTS $(COPTS) -E $(top)/$(SRC)/dnsmasq.h | ( md5sum 2>/dev/null || md5 ) | cut -f 1 -d ' '
++copts_conf = .copts_$(sum)
+ objs = cache.o rfc1035.o util.o option.o forward.o network.o \
+        dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o \
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0043-Fix-build-failure-on-openBSD.patch b/src/patches/dnsmasq/0043-Fix-build-failure-on-openBSD.patch
new file mode 100644 (file)
index 0000000..a3df61b
--- /dev/null
@@ -0,0 +1,25 @@
+From 8d8a54ec79d9f96979fabbd97b1dd2ddebc7d78f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 1 Feb 2015 21:48:46 +0000
+Subject: [PATCH 43/55] Fix build failure on openBSD.
+
+---
+ src/tables.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tables.c b/src/tables.c
+index dcdef794c4d2..aae1252708db 100644
+--- a/src/tables.c
++++ b/src/tables.c
+@@ -21,7 +21,7 @@
+ #if defined(HAVE_IPSET) && defined(HAVE_BSD_NETWORK)
+ #ifndef __FreeBSD__
+-#include <bsd/string.h>
++#include <string.h>
+ #endif
+ #include <sys/types.h>
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0044-Manpage-typo-fix.patch b/src/patches/dnsmasq/0044-Manpage-typo-fix.patch
new file mode 100644 (file)
index 0000000..e0e384f
--- /dev/null
@@ -0,0 +1,25 @@
+From d36b732c4cfa91ea09af64b5dc0f3a85a075e5bc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Thi=C3=A9baud=20Weksteen?= <thiebaud@weksteen.fr>
+Date: Mon, 2 Feb 2015 21:37:27 +0000
+Subject: [PATCH 44/55] Manpage typo fix.
+
+---
+ man/dnsmasq.8 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index c858323d78bd..27f85d40fbbb 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -516,7 +516,7 @@ zone files: the port, weight and priority numbers are in a different
+ order. More than one SRV record for a given service/domain is allowed,
+ all that match are returned.
+ .TP
+-.B --host-record=<name>[,<name>....][<IPv4-address>],[<IPv6-address>]
++.B --host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>]
+ Add A, AAAA and PTR records to the DNS. This adds one or more names to
+ the DNS with associated IPv4 (A) and IPv6 (AAAA) records. A name may
+ appear in more than one 
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0045-Fixup-dhcp-configs-after-reading-extra-hostfiles-wit.patch b/src/patches/dnsmasq/0045-Fixup-dhcp-configs-after-reading-extra-hostfiles-wit.patch
new file mode 100644 (file)
index 0000000..fc1b98a
--- /dev/null
@@ -0,0 +1,38 @@
+From 2941d3ac898cf84b544e47c9735c5e4111711db1 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 2 Feb 2015 22:36:42 +0000
+Subject: [PATCH 45/55] Fixup dhcp-configs after reading extra hostfiles with
+ inotify.
+
+---
+ src/inotify.c | 14 +++++++++++++-
+ 1 file changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 470d6ed99213..6f4cd79e0030 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -194,7 +194,19 @@ int inotify_check(time_t now)
+                   strcat(path, in->name);
+                   
+                   if (ah->flags & AH_HOSTS)
+-                    read_hostsfile(path, ah->index, 0, NULL, 0);
++                    {
++                      read_hostsfile(path, ah->index, 0, NULL, 0);
++#ifdef HAVE_DHCP
++                      if (daemon->dhcp || daemon->doing_dhcp6) 
++                        {
++                          /* Propogate the consequences of loading a new dhcp-host */
++                          dhcp_update_configs(daemon->dhcp_conf);
++                          lease_update_from_configs(); 
++                          lease_update_file(now); 
++                          lease_update_dns(1);
++                        }
++#endif
++                    }
+ #ifdef HAVE_DHCP
+                   else if (ah->flags & AH_DHCP_HST)
+                     {
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0046-Extra-logging-for-inotify-code.patch b/src/patches/dnsmasq/0046-Extra-logging-for-inotify-code.patch
new file mode 100644 (file)
index 0000000..803174a
--- /dev/null
@@ -0,0 +1,68 @@
+From f9c863708c6b0aea31ff7a466647685dc739de50 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Tue, 3 Feb 2015 21:52:48 +0000
+Subject: [PATCH 46/55] Extra logging for inotify code.
+
+---
+ src/cache.c   | 9 ++++-----
+ src/inotify.c | 4 +++-
+ src/option.c  | 4 +++-
+ 3 files changed, 10 insertions(+), 7 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 117ae279fd4e..43245b771b53 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1022,11 +1022,10 @@ int read_hostsfile(char *filename, unsigned int index, int cache_size, struct cr
+   fclose(f);
+   
+   if (rhash)
+-    {
+-      rehash(name_count); 
+-      my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
+-    }
+-
++    rehash(name_count); 
++  
++  my_syslog(LOG_INFO, _("read %s - %d addresses"), filename, addr_count);
++  
+   return name_count;
+ }
+           
+diff --git a/src/inotify.c b/src/inotify.c
+index 6f4cd79e0030..44ce0c9af051 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -192,7 +192,9 @@ int inotify_check(time_t now)
+                   strcpy(path, ah->fname);
+                   strcat(path, "/");
+                   strcat(path, in->name);
+-                  
++                   
++                  my_syslog(LOG_INFO, _("inotify, new or changed file %s"), path);
++
+                   if (ah->flags & AH_HOSTS)
+                     {
+                       read_hostsfile(path, ah->index, 0, NULL, 0);
+diff --git a/src/option.c b/src/option.c
+index cb4e76ba0aa2..e4b4865d07a5 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -4068,11 +4068,13 @@ static void read_file(char *file, FILE *f, int hard_opt)
+ #ifdef HAVE_DHCP
+ int option_read_dynfile(char *file, int flags)
+ {
++  my_syslog(MS_DHCP | LOG_INFO, _("read %s"), file);
++  
+   if (flags & AH_DHCP_HST)
+     return one_file(file, LOPT_BANK);
+   else if (flags & AH_DHCP_OPT)
+     return one_file(file, LOPT_OPTS);
+-
++  
+   return 0;
+ }
+ #endif
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0047-man-page-typo.patch b/src/patches/dnsmasq/0047-man-page-typo.patch
new file mode 100644 (file)
index 0000000..6606a7a
--- /dev/null
@@ -0,0 +1,24 @@
+From efb8b5566aafc1f3ce18514a2df93af5a2e4998c Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 7 Feb 2015 22:36:34 +0000
+Subject: [PATCH 47/55] man page typo.
+
+---
+ man/dnsmasq.8 | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 27f85d40fbbb..5cdd186afaa0 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -989,6 +989,7 @@ the directory are read automatically, without the need to send SIGHUP.
+ If a file is deleted for changed after it has been read by dnsmasq, then the
+ host record it contained will remain until dnsmasq recieves a SIGHUP, or 
+ is restarted; ie host records are only added dynamically.
++.TP
+ .B --dhcp-optsdir=<path>
+ This is equivalent to dhcp-optsfile, with the differences noted for --dhcp-hostsdir.
+ .TP
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0048-Fix-get-version-script-which-returned-wrong-tag-in-s.patch b/src/patches/dnsmasq/0048-Fix-get-version-script-which-returned-wrong-tag-in-s.patch
new file mode 100644 (file)
index 0000000..5633d9d
--- /dev/null
@@ -0,0 +1,26 @@
+From f4f400776b3c1aa303d1a0fcd500f0ab5bc970f2 Mon Sep 17 00:00:00 2001
+From: Shantanu Gadgil <shantanugadgil@yahoo.com>
+Date: Wed, 11 Feb 2015 20:16:59 +0000
+Subject: [PATCH 48/55] Fix get-version script which returned wrong tag in some
+ situations.
+
+---
+ bld/get-version | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bld/get-version b/bld/get-version
+index c246a3cc6a47..7ab75db729ac 100755
+--- a/bld/get-version
++++ b/bld/get-version
+@@ -20,7 +20,7 @@ else
+      vers=`cat $1/VERSION | sed 's/[(), ]/,/ g' | tr ',' '\n' | grep ^v[0-9]`
+      if [ $? -eq 0 ]; then
+-         echo "${vers}" | sort | head -n 1 | sed 's/^v//'
++         echo "${vers}" | sort -r | head -n 1 | sed 's/^v//'
+      else
+          cat $1/VERSION
+      fi
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0049-Typos.patch b/src/patches/dnsmasq/0049-Typos.patch
new file mode 100644 (file)
index 0000000..8f64b39
--- /dev/null
@@ -0,0 +1,26 @@
+From 8ff70de618eb7de9147dbfbd4deca4a2dd62f0cb Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 14 Feb 2015 20:02:37 +0000
+Subject: [PATCH 49/55] Typos.
+
+---
+ src/inotify.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/inotify.c b/src/inotify.c
+index 44ce0c9af051..9422066257f5 100644
+--- a/src/inotify.c
++++ b/src/inotify.c
+@@ -104,7 +104,8 @@ void set_dynamic_inotify(int flag, int total_size, struct crec **rhash, int revh
+          ah->wd = inotify_add_watch(daemon->inotifyfd, ah->fname, IN_CLOSE_WRITE | IN_MOVED_TO);
+          ah->flags |= AH_WD_DONE;
+        }
+-       /* Read contents of dir _after_ calling add_watch, in the ho[e of avoiding
++
++       /* Read contents of dir _after_ calling add_watch, in the hope of avoiding
+         a race which misses files being added as we start */
+        if (ah->wd == -1 || !(dir_stream = opendir(ah->fname)))
+        {
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0050-Make-dynamic-hosts-files-work-when-no-hosts-set.patch b/src/patches/dnsmasq/0050-Make-dynamic-hosts-files-work-when-no-hosts-set.patch
new file mode 100644 (file)
index 0000000..af79802
--- /dev/null
@@ -0,0 +1,45 @@
+From caeea190f12efd20139f694aac4942d1ac00019f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 14 Feb 2015 20:08:56 +0000
+Subject: [PATCH 50/55] Make dynamic hosts files work when --no-hosts set.
+
+---
+ src/cache.c | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/src/cache.c b/src/cache.c
+index 43245b771b53..c95624c42b1c 100644
+--- a/src/cache.c
++++ b/src/cache.c
+@@ -1133,17 +1133,18 @@ void cache_reload(void)
+     {
+       if (daemon->cachesize > 0)
+       my_syslog(LOG_INFO, _("cleared cache"));
+-      return;
+     }
+-  
+-  if (!option_bool(OPT_NO_HOSTS))
+-    total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
+-  
+-  daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
+-  for (ah = daemon->addn_hosts; ah; ah = ah->next)
+-    if (!(ah->flags & AH_INACTIVE))
+-      total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
+-  
++  else
++    {
++      if (!option_bool(OPT_NO_HOSTS))
++      total_size = read_hostsfile(HOSTSFILE, SRC_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
++      
++      daemon->addn_hosts = expand_filelist(daemon->addn_hosts);
++      for (ah = daemon->addn_hosts; ah; ah = ah->next)
++      if (!(ah->flags & AH_INACTIVE))
++        total_size = read_hostsfile(ah->fname, ah->index, total_size, (struct crec **)daemon->packet, revhashsz);
++    }
++
+ #ifdef HAVE_INOTIFY
+   set_dynamic_inotify(AH_HOSTS, total_size, (struct crec **)daemon->packet, revhashsz);
+ #endif
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0051-Fix-trivial-memory-leaks-to-quieten-valgrind.patch b/src/patches/dnsmasq/0051-Fix-trivial-memory-leaks-to-quieten-valgrind.patch
new file mode 100644 (file)
index 0000000..2c38cfc
--- /dev/null
@@ -0,0 +1,55 @@
+From 28b879ac47b872af6e8c5e86d76806c69338434d Mon Sep 17 00:00:00 2001
+From: Chen Wei <weichen302@icloud.com>
+Date: Tue, 17 Feb 2015 22:07:35 +0000
+Subject: [PATCH 51/55] Fix trivial memory leaks to quieten valgrind.
+
+---
+ src/dnsmasq.c |  2 ++
+ src/option.c  | 11 +++++++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index e903a24c8105..e6dabbf556f7 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -627,6 +627,8 @@ int main (int argc, char **argv)
+     }
+   
+ #ifdef HAVE_LINUX_NETWORK
++  free(hdr);
++  free(data);
+   if (option_bool(OPT_DEBUG)) 
+     prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
+ #endif
+diff --git a/src/option.c b/src/option.c
+index e4b4865d07a5..ae0ad002d8b8 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -4361,7 +4361,7 @@ void read_opts(int argc, char **argv, char *compile_opts)
+ {
+   char *buff = opt_malloc(MAXDNAME);
+   int option, conffile_opt = '7', testmode = 0;
+-  char *arg, *conffile = CONFFILE;
++  char *arg, *conffile = NULL;
+       
+   opterr = 0;
+@@ -4476,7 +4476,14 @@ void read_opts(int argc, char **argv, char *compile_opts)
+     }
+   if (conffile)
+-    one_file(conffile, conffile_opt);
++    {
++      one_file(conffile, conffile_opt);
++      free(conffile);
++    }
++  else
++    {
++      one_file(CONFFILE, conffile_opt);
++    }
+   /* port might not be known when the address is parsed - fill in here */
+   if (daemon->servers)
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0052-Fix-uninitialized-value-used-in-get_client_mac.patch b/src/patches/dnsmasq/0052-Fix-uninitialized-value-used-in-get_client_mac.patch
new file mode 100644 (file)
index 0000000..46277fb
--- /dev/null
@@ -0,0 +1,27 @@
+From 0705a7e2d57654b27c7e14f35ca77241c1821f4d Mon Sep 17 00:00:00 2001
+From: Tomas Hozza <thozza@redhat.com>
+Date: Mon, 23 Feb 2015 21:26:26 +0000
+Subject: [PATCH 52/55] Fix uninitialized value used in get_client_mac()
+
+---
+ src/dhcp6.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/dhcp6.c b/src/dhcp6.c
+index 3c56e77c6085..c7144f5fee7c 100644
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -246,7 +246,9 @@ void get_client_mac(struct in6_addr *client, int iface, unsigned char *mac, unsi
+   neigh.code = 0;
+   neigh.reserved = 0;
+   neigh.target = *client;
+-  
++  /* RFC4443 section-2.3: checksum has to be zero to be calculated */
++  neigh.checksum = 0;
++   
+   memset(&addr, 0, sizeof(addr));
+ #ifdef HAVE_SOCKADDR_SA_LEN
+   addr.sin6_len = sizeof(struct sockaddr_in6);
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0053-Log-parsing-utils-in-contrib-reverse-dns.patch b/src/patches/dnsmasq/0053-Log-parsing-utils-in-contrib-reverse-dns.patch
new file mode 100644 (file)
index 0000000..9527030
--- /dev/null
@@ -0,0 +1,110 @@
+From 47b9ac59c715827252ae6e6732903c3dabb697fb Mon Sep 17 00:00:00 2001
+From: Joachim Zobel <jz-2014@heute-morgen.de>
+Date: Mon, 23 Feb 2015 21:38:11 +0000
+Subject: [PATCH 53/55] Log parsing utils in contrib/reverse-dns
+
+---
+ contrib/reverse-dns/README             | 18 ++++++++++++++++++
+ contrib/reverse-dns/reverse_dns.sh     | 29 +++++++++++++++++++++++++++++
+ contrib/reverse-dns/reverse_replace.sh | 28 ++++++++++++++++++++++++++++
+ 3 files changed, 75 insertions(+)
+ create mode 100644 contrib/reverse-dns/README
+ create mode 100644 contrib/reverse-dns/reverse_dns.sh
+ create mode 100644 contrib/reverse-dns/reverse_replace.sh
+
+diff --git a/contrib/reverse-dns/README b/contrib/reverse-dns/README
+new file mode 100644
+index 000000000000..f87eb77c4c22
+--- /dev/null
++++ b/contrib/reverse-dns/README
+@@ -0,0 +1,18 @@
++Hi.\r
++\r
++To translate my routers netstat-nat output into names that actually talk\r
++to me I have started writing to simple shell scripts. They require \r
++\r
++log-queries\r
++log-facility=/var/log/dnsmasq.log\r
++\r
++to be set. With\r
++\r
++netstat-nat -n -4 | reverse_replace.sh \r
++\r
++I get retranslated output.\r
++\r
++Sincerely,\r
++Joachim\r
++\r
++\r
+diff --git a/contrib/reverse-dns/reverse_dns.sh b/contrib/reverse-dns/reverse_dns.sh
+new file mode 100644
+index 000000000000..c0fff300a947
+--- /dev/null
++++ b/contrib/reverse-dns/reverse_dns.sh
+@@ -0,0 +1,29 @@
++#!/bin/bash
++# $Id: reverse_dns.sh 4 2015-02-17 20:14:59Z jo $
++#
++# Usage: reverse_dns.sh IP
++# Uses the dnsmasq query log to lookup the name 
++# that was last queried to return the given IP.
++#
++
++IP=$1
++qmIP=`echo $IP | sed 's#\.#\\.#g'`
++LOG=/var/log/dnsmasq.log
++
++IP_regex='^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'
++
++if ! [[ $IP =~ $IP_regex ]]; then
++  echo -n $IP
++  exit
++fi
++
++NAME=`tac $LOG | \
++  grep " is $IP" | head -1 | \
++  sed "s#.* \([^ ]*\) is $qmIP.*#\1#" `
++
++if [ -z "$NAME" ]; then
++  echo -n $IP
++else
++  echo -n $NAME
++fi
++
+diff --git a/contrib/reverse-dns/reverse_replace.sh b/contrib/reverse-dns/reverse_replace.sh
+new file mode 100644
+index 000000000000..a11c164b7f19
+--- /dev/null
++++ b/contrib/reverse-dns/reverse_replace.sh
+@@ -0,0 +1,28 @@
++#!/bin/bash
++# $Id: reverse_replace.sh 4 2015-02-17 20:14:59Z jo $
++#
++# Usage e.g.: netstat -n -4 | reverse_replace.sh 
++# Parses stdin for IP4 addresses and replaces them 
++# with names retrieved by reverse_dns.sh
++#
++
++DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
++DNS=$DIR/reverse_dns.sh
++
++# sed regex
++IP_regex='[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
++
++while read LINE; do
++  if grep --quiet $IP_regex <<< "$LINE"; then
++    IPs=`sed "s#.*\b\($IP_regex\)\b.*#\1 #g" <<< "$LINE"`
++    IPs=($IPs)
++    for IP in "${IPs[@]}"
++    do
++      NAME=`$DNS $IP`
++      # echo "$NAME is $IP";
++      LINE="${LINE/$IP/$NAME}" 
++    done
++  fi
++  echo $LINE
++done < /dev/stdin
++
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0054-Add-dnssec-timestamp-option-and-facility.patch b/src/patches/dnsmasq/0054-Add-dnssec-timestamp-option-and-facility.patch
new file mode 100644 (file)
index 0000000..2ff79d5
--- /dev/null
@@ -0,0 +1,252 @@
+From f6e62e2af96f5fa0d1e3d93167a93a8f09bf6e61 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sun, 1 Mar 2015 18:17:54 +0000
+Subject: [PATCH 54/55] Add --dnssec-timestamp option and facility.
+
+---
+ CHANGELOG     |  6 +++++
+ man/dnsmasq.8 |  6 +++++
+ src/dnsmasq.c | 11 +++++++-
+ src/dnsmasq.h |  2 ++
+ src/dnssec.c  | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
+ src/option.c  |  7 +++++
+ 6 files changed, 108 insertions(+), 6 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index c80dc0fdbe9e..4f4fa305deaa 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -66,6 +66,12 @@ version 2.73
+           for the patch.
+           Fix broken DNSSEC validation of ECDSA signatures.
++
++          Add --dnssec-timestamp option, which provides an automatic
++          way to detect when the system time becomes valid after boot
++          on systems without an RTC, whilst allowing DNS queries before the
++          clock is valid so that NTP can run. Thanks to
++          Kevin Darbyshire-Bryant for developing this idea.
+       
+       
+ version 2.72
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 5cdd186afaa0..097e7d75145c 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -674,6 +674,12 @@ that dnsmasq should be started with this flag when the platform determines that
+ reliable time is established, a SIGHUP should be sent to dnsmasq, which enables time checking, and purges the cache of DNS records
+ which have not been throughly checked.
+ .TP
++.B --dnssec-timestamp=<path>
++Enables an alternative way of checking the validity of the system time for DNSSEC (see --dnssec-no-timecheck). In this case, the 
++system time is considered to be valid once it becomes later than the timestamp on the specified file. The file is created and 
++its timestamp set automatically by dnsmasq. The file must be stored on a persistent filesystem, so that it and its mtime are carried 
++over system restarts. 
++.TP
+ .B --proxy-dnssec
+ Copy the DNSSEC Authenticated Data bit from upstream servers to downstream clients and cache it.  This is an 
+ alternative to having dnsmasq validate DNSSEC, but it depends on the security of the network between 
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index e6dabbf556f7..769a19afe6c5 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -58,6 +58,9 @@ int main (int argc, char **argv)
+   struct dhcp_context *context;
+   struct dhcp_relay *relay;
+ #endif
++#ifdef HAVE_DNSSEC
++  int badtime;
++#endif
+ #ifdef LOCALEDIR
+   setlocale(LC_ALL, "");
+@@ -369,7 +372,11 @@ int main (int argc, char **argv)
+   if (baduser)
+     die(_("unknown user or group: %s"), baduser, EC_BADCONF);
+-   
++
++#ifdef HAVE_DNSSEC  
++  badtime = setup_timestamp(ent_pw->pw_uid);
++#endif
++
+   /* implement group defaults, "dip" if available, or group associated with uid */
+   if (!daemon->group_set && !gp)
+     {
+@@ -689,6 +696,8 @@ int main (int argc, char **argv)
+       my_syslog(LOG_INFO, _("DNSSEC validation enabled"));
+       if (option_bool(OPT_DNSSEC_TIME))
+       my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until first cache reload"));
++      if (badtime)
++      my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until system time valid"));
+     }
+ #endif
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index 89e758b56a0a..b2f02dda63f0 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -986,6 +986,7 @@ extern struct daemon {
+ #endif
+ #ifdef HAVE_DNSSEC
+   struct ds_config *ds;
++  char *timestamp_file;
+ #endif
+   /* globally used stuff for DNS */
+@@ -1151,6 +1152,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name);
++int setup_timestamp(uid_t uid);
+ /* util.c */
+ void rand_init(void);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index 26932373cd3e..bf4406469de0 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -34,6 +34,7 @@
+ #include <nettle/dsa-compat.h>
+ #endif
++#include <utime.h>
+ #define SERIAL_UNDEF  -100
+ #define SERIAL_EQ        0
+@@ -394,17 +395,88 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
+   return SERIAL_UNDEF;
+ }
++/* Called at startup. If the timestamp file is configured and exists, put its mtime on
++   timestamp_time. If it doesn't exist, create it, and set the mtime to 1-1-2015.
++   Change the ownership to the user we'll be running as, so that we can update the mtime.
++*/
++static time_t timestamp_time;
++static int back_to_the_future;
++
++int setup_timestamp(uid_t uid)
++{
++  struct stat statbuf;
++  
++  back_to_the_future = 0;
++  
++  if (!option_bool(OPT_DNSSEC_VALID) || !daemon->timestamp_file)
++    return 0;
++  
++  if (stat(daemon->timestamp_file, &statbuf) != -1)
++    {
++      timestamp_time = statbuf.st_mtime;
++    check_and_exit:
++      if (difftime(timestamp_time, time(0)) <=  0)
++      {
++        /* time already OK, update timestamp, and do key checking from the start. */
++        if (utime(daemon->timestamp_file, NULL) == -1)
++          my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
++        back_to_the_future = 1;
++        return 0;
++      }
++      return 1;
++    }
++  
++  if (errno == ENOENT)
++    {
++      int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK, 0666);
++      if (fd != -1)
++      {
++        struct utimbuf timbuf;
++
++        close(fd);
++        
++        timestamp_time = timbuf.actime = timbuf.modtime = 1420070400; /* 1-1-2015 */
++        if (utime(daemon->timestamp_file, &timbuf) == 0 &&
++            (getuid() != 0 || chown(daemon->timestamp_file, uid, -1) == 0))
++          goto check_and_exit;
++      }
++    }
++
++  die(_("Cannot create timestamp file %s: %s" ), daemon->timestamp_file, EC_BADCONF);
++  return 0;
++}
++
+ /* Check whether today/now is between date_start and date_end */
+ static int check_date_range(unsigned long date_start, unsigned long date_end)
+ {
+-  unsigned long curtime;
+-
++  unsigned long curtime = time(0);
++ 
+   /* Checking timestamps may be temporarily disabled */
+-  if (option_bool(OPT_DNSSEC_TIME))
++    
++  /* If the current time if _before_ the timestamp
++     on our persistent timestamp file, then assume the
++     time if not yet correct, and don't check the
++     key timestamps. As soon as the current time is
++     later then the timestamp, update the timestamp
++     and start checking keys */
++  if (daemon->timestamp_file)
++    {
++      if (back_to_the_future == 0 && difftime(timestamp_time, curtime) <= 0)
++      {
++        if (utime(daemon->timestamp_file, NULL) != 0)
++          my_syslog(LOG_ERR, _("failed to update mtime on %s: %s"), daemon->timestamp_file, strerror(errno));
++        
++        back_to_the_future = 1;       
++        set_option_bool(OPT_DNSSEC_TIME);
++        queue_event(EVENT_RELOAD); /* purge cache */
++      } 
++
++      if (back_to_the_future == 0)
++      return 1;
++    }
++  else if (option_bool(OPT_DNSSEC_TIME))
+     return 1;
+   
+-  curtime = time(0);
+-  
+   /* We must explicitly check against wanted values, because of SERIAL_UNDEF */
+   return serial_compare_32(curtime, date_start) == SERIAL_GT
+     && serial_compare_32(curtime, date_end) == SERIAL_LT;
+diff --git a/src/option.c b/src/option.c
+index ae0ad002d8b8..eace40bb566c 100644
+--- a/src/option.c
++++ b/src/option.c
+@@ -152,6 +152,7 @@ struct myoption {
+ #define LOPT_DHCP_INOTIFY  340
+ #define LOPT_DHOPT_INOTIFY 341
+ #define LOPT_HOST_INOTIFY  342
++#define LOPT_DNSSEC_STAMP  343
+ #ifdef HAVE_GETOPT_LONG
+ static const struct option opts[] =  
+@@ -300,6 +301,7 @@ static const struct myoption opts[] =
+     { "dnssec-debug", 0, 0, LOPT_DNSSEC_DEBUG },
+     { "dnssec-check-unsigned", 0, 0, LOPT_DNSSEC_CHECK },
+     { "dnssec-no-timecheck", 0, 0, LOPT_DNSSEC_TIME },
++    { "dnssec-timestamp", 1, 0, LOPT_DNSSEC_STAMP },
+ #ifdef OPTION6_PREFIX_CLASS 
+     { "dhcp-prefix-class", 1, 0, LOPT_PREF_CLSS },
+ #endif
+@@ -463,6 +465,7 @@ static struct {
+   { LOPT_DNSSEC_DEBUG, OPT_DNSSEC_DEBUG, NULL, gettext_noop("Disable upstream checking for DNSSEC debugging."), NULL },
+   { LOPT_DNSSEC_CHECK, OPT_DNSSEC_NO_SIGN, NULL, gettext_noop("Ensure answers without DNSSEC are in unsigned zones."), NULL },
+   { LOPT_DNSSEC_TIME, OPT_DNSSEC_TIME, NULL, gettext_noop("Don't check DNSSEC signature timestamps until first cache-reload"), NULL },
++  { LOPT_DNSSEC_STAMP, ARG_ONE, "<path>", gettext_noop("Timestamp file to verify system clock for DNSSEC"), NULL },
+ #ifdef OPTION6_PREFIX_CLASS 
+   { LOPT_PREF_CLSS, ARG_DUP, "set:tag,<class>", gettext_noop("Specify DHCPv6 prefix class"), NULL },
+ #endif
+@@ -3867,6 +3870,10 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
+       }
+ #ifdef HAVE_DNSSEC
++    case LOPT_DNSSEC_STAMP:
++      daemon->timestamp_file = opt_string_alloc(arg); 
++      break;
++
+     case LOPT_TRUST_ANCHOR:
+       {
+       struct ds_config *new = opt_malloc(sizeof(struct ds_config));
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0055-Fix-last-commit-to-not-crash-if-uid-changing-not-con.patch b/src/patches/dnsmasq/0055-Fix-last-commit-to-not-crash-if-uid-changing-not-con.patch
new file mode 100644 (file)
index 0000000..54bb5d5
--- /dev/null
@@ -0,0 +1,63 @@
+From 9003b50b13da624ca45f3e0cf99abb623b8d026b Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Mon, 2 Mar 2015 22:47:23 +0000
+Subject: [PATCH 55/55] Fix last commit to not crash if uid changing not
+ configured.
+
+---
+ src/dnsmasq.c | 2 +-
+ src/dnsmasq.h | 2 +-
+ src/dnssec.c  | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 769a19afe6c5..9e05c0e31569 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -374,7 +374,7 @@ int main (int argc, char **argv)
+     die(_("unknown user or group: %s"), baduser, EC_BADCONF);
+ #ifdef HAVE_DNSSEC  
+-  badtime = setup_timestamp(ent_pw->pw_uid);
++  badtime = setup_timestamp(ent_pw);
+ #endif
+   /* implement group defaults, "dip" if available, or group associated with uid */
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index b2f02dda63f0..a451cb4dd03c 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -1152,7 +1152,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name);
+-int setup_timestamp(uid_t uid);
++int setup_timestamp(struct passwd *ent_pw);
+ /* util.c */
+ void rand_init(void);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index bf4406469de0..c60eacf73c6b 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -402,7 +402,7 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
+ static time_t timestamp_time;
+ static int back_to_the_future;
+-int setup_timestamp(uid_t uid)
++int setup_timestamp(struct passwd *ent_pw)
+ {
+   struct stat statbuf;
+   
+@@ -437,7 +437,7 @@ int setup_timestamp(uid_t uid)
+         
+         timestamp_time = timbuf.actime = timbuf.modtime = 1420070400; /* 1-1-2015 */
+         if (utime(daemon->timestamp_file, &timbuf) == 0 &&
+-            (getuid() != 0 || chown(daemon->timestamp_file, uid, -1) == 0))
++            (!ent_pw || getuid() != 0 || chown(daemon->timestamp_file, ent_pw->pw_uid, -1) == 0))
+           goto check_and_exit;
+       }
+     }
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0056-New-version-of-contrib-reverse-dns.patch b/src/patches/dnsmasq/0056-New-version-of-contrib-reverse-dns.patch
new file mode 100644 (file)
index 0000000..9a05215
--- /dev/null
@@ -0,0 +1,194 @@
+From 4c960fa90a975d20f75a1ecabd217247f1922c8f Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Wed, 4 Mar 2015 20:32:26 +0000
+Subject: [PATCH 56/57] New version of contrib/reverse-dns
+
+---
+ contrib/reverse-dns/README             |  22 +++---
+ contrib/reverse-dns/reverse_replace.sh | 131 ++++++++++++++++++++++++++++-----
+ 2 files changed, 125 insertions(+), 28 deletions(-)
+
+diff --git a/contrib/reverse-dns/README b/contrib/reverse-dns/README
+index f87eb77c4c22..2ec4df1f957e 100644
+--- a/contrib/reverse-dns/README
++++ b/contrib/reverse-dns/README
+@@ -1,18 +1,18 @@
+-Hi.\r
++The script reads stdin and replaces all IP addresses with names before\r
++outputting it again. IPs from private networks are reverse looked  up\r
++via dns. Other IP adresses are searched for in the dnsmasq query log.\r
++This gives names (CNAMEs if I understand DNS correctly) that are closer\r
++to the name the client originally asked for then the names obtained by\r
++reverse lookup. Just run\r
\r
+-To translate my routers netstat-nat output into names that actually talk\r
+-to me I have started writing to simple shell scripts. They require \r
++netstat -n -4 | ./reverse_replace.sh \r
++\r
++to see what it does. It needs \r
\r
+ log-queries\r
+ log-facility=/var/log/dnsmasq.log\r
\r
+-to be set. With\r
+-\r
+-netstat-nat -n -4 | reverse_replace.sh \r
+-\r
+-I get retranslated output.\r
+-\r
+-Sincerely,\r
+-Joachim\r
++in the dnsmasq configuration.\r
\r
++The script runs on debian (with ash installed) and on busybox.\r
\r
+diff --git a/contrib/reverse-dns/reverse_replace.sh b/contrib/reverse-dns/reverse_replace.sh
+index a11c164b7f19..5b4aebd71456 100644
+--- a/contrib/reverse-dns/reverse_replace.sh
++++ b/contrib/reverse-dns/reverse_replace.sh
+@@ -1,28 +1,125 @@
+-#!/bin/bash
+-# $Id: reverse_replace.sh 4 2015-02-17 20:14:59Z jo $
++#!/bin/ash
++# $Id: reverse_replace.sh 18 2015-03-01 16:12:35Z jo $
+ #
+ # Usage e.g.: netstat -n -4 | reverse_replace.sh 
+ # Parses stdin for IP4 addresses and replaces them 
+-# with names retrieved by reverse_dns.sh
++# with names retrieved by parsing the dnsmasq log.
++# This currently only gives CNAMEs. But these 
++# usually tell ou more than the mones from reverse 
++# lookups. 
++#
++# This has been tested on debian and asuswrt. Plese
++# report successful tests on other platforms.
++#
++# Author: Joachim Zobel <jz-2014@heute-morgen.de>
++# License: Consider this MIT style licensed. You can 
++#   do as you ike, but you must not remove my name.
+ #
+-DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+-DNS=$DIR/reverse_dns.sh
++LOG=/var/log/dnsmasq.log
++MAX_LINES=15000
+-# sed regex
++# sed regex do match IPs
+ IP_regex='[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
++# private IP ranges
++IP_private='\(^127\.\)\|\(^192\.168\.\)\|\(^10\.\)\|\(^172\.1[6-9]\.\)\|\(^172\.2[0-9]\.\)\|\(^172\.3[0-1]\.\)'
+-while read LINE; do
+-  if grep --quiet $IP_regex <<< "$LINE"; then
+-    IPs=`sed "s#.*\b\($IP_regex\)\b.*#\1 #g" <<< "$LINE"`
+-    IPs=($IPs)
+-    for IP in "${IPs[@]}"
+-    do
+-      NAME=`$DNS $IP`
+-      # echo "$NAME is $IP";
+-      LINE="${LINE/$IP/$NAME}" 
+-    done
++#######################################################################
++# Find Commands
++  
++HOST=nslookup
++if type host > /dev/null 2>&1; then
++  # echo "No need for nslookup, host is there"
++  HOST=host
++fi
++
++#######################################################################
++# Functions
++
++# Use shell variables for an (IP) lookup table
++create_lookup_table()
++{
++  # Parse log into lookup table
++  local CMDS="$( tail -"$MAX_LINES" "$LOG" | \
++    grep " is $IP_regex" | \
++    sed "s#.* \([^ ]*\) is \($IP_regex\).*#set_val \2 \1;#" )"
++
++  local IFS='
++'
++  for CMD in $CMDS
++  do
++    eval $CMD
++  done
++}
++
++set_val()
++{
++  local _IP=$(echo $1 | tr . _)
++  local KEY="__IP__$_IP"
++  eval "$KEY"=$2
++}
++
++get_val()
++{
++  local _IP=$(echo $1 | tr . _)
++  local KEY="__IP__$_IP"
++  eval echo -n '${'"$KEY"'}'
++}
++
++dns_lookup()
++{
++  local IP=$1
++
++  local RTN="$($HOST $IP | \
++        sed 's#\s\+#\n#g' | \
++        grep -v '^$' | \
++        tail -1 | tr -d '\n' | \
++        sed 's#\.$##')"
++  if echo $RTN | grep -q NXDOMAIN; then
++    echo -n $IP
++  else
++    echo -n "$RTN"
++  fi     
++}
++
++reverse_dns()
++{
++  local IP=$1
++
++  # Skip if it is not an IP
++  if ! echo $IP | grep -q "^$IP_regex$"; then
++    echo -n $IP
++    return 
++  fi
++    
++  # Do a dns lookup, if it is a local IP
++  if echo $IP | grep -q $IP_private; then
++    dns_lookup $IP
++    return
+   fi
++    
++  local NAME="$(get_val $IP)"
++  
++  if [ -z "$NAME" ]; then
++    echo -n $IP
++  else
++    echo -n $NAME
++  fi
++}
++
++#######################################################################
++# Main
++create_lookup_table
++
++while read LINE; do
++  for IP in $(echo "$LINE" | \
++              sed "s#\b\($IP_regex\)\b#\n\1\n#g" | \
++              grep $IP_regex) 
++  do
++    NAME=`reverse_dns $IP `
++    # echo "$NAME $IP"
++    LINE=`echo "$LINE" | sed "s#$IP#$NAME#" ` 
++  done
+   echo $LINE
+-done < /dev/stdin
++done
+-- 
+2.1.0
+
diff --git a/src/patches/dnsmasq/0057-Tweak-DNSSEC-timestamp-code-to-create-file-later-rem.patch b/src/patches/dnsmasq/0057-Tweak-DNSSEC-timestamp-code-to-create-file-later-rem.patch
new file mode 100644 (file)
index 0000000..df47cd0
--- /dev/null
@@ -0,0 +1,202 @@
+From 360f2513ab12a9bf1e262d388dd2ea8a566590a3 Mon Sep 17 00:00:00 2001
+From: Simon Kelley <simon@thekelleys.org.uk>
+Date: Sat, 7 Mar 2015 18:28:06 +0000
+Subject: [PATCH 57/57] Tweak DNSSEC timestamp code to create file later,
+ removing need to chown it.
+
+---
+ man/dnsmasq.8 |  3 ++-
+ src/dnsmasq.c | 35 ++++++++++++++++++++++-------------
+ src/dnsmasq.h |  3 ++-
+ src/dnssec.c  | 18 ++++++++++--------
+ 4 files changed, 36 insertions(+), 23 deletions(-)
+
+diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
+index 097e7d75145c..2db780d90987 100644
+--- a/man/dnsmasq.8
++++ b/man/dnsmasq.8
+@@ -678,7 +678,8 @@ which have not been throughly checked.
+ Enables an alternative way of checking the validity of the system time for DNSSEC (see --dnssec-no-timecheck). In this case, the 
+ system time is considered to be valid once it becomes later than the timestamp on the specified file. The file is created and 
+ its timestamp set automatically by dnsmasq. The file must be stored on a persistent filesystem, so that it and its mtime are carried 
+-over system restarts. 
++over system restarts. The timestamp file is created after dnsmasq has dropped root, so it must be in a location writable by the 
++unprivileged user that dnsmasq runs as.
+ .TP
+ .B --proxy-dnssec
+ Copy the DNSSEC Authenticated Data bit from upstream servers to downstream clients and cache it.  This is an 
+diff --git a/src/dnsmasq.c b/src/dnsmasq.c
+index 9e05c0e31569..f3e5bcffec4f 100644
+--- a/src/dnsmasq.c
++++ b/src/dnsmasq.c
+@@ -58,9 +58,6 @@ int main (int argc, char **argv)
+   struct dhcp_context *context;
+   struct dhcp_relay *relay;
+ #endif
+-#ifdef HAVE_DNSSEC
+-  int badtime;
+-#endif
+ #ifdef LOCALEDIR
+   setlocale(LC_ALL, "");
+@@ -156,10 +153,10 @@ int main (int argc, char **argv)
+     {
+ #ifdef HAVE_DNSSEC
+       if (!daemon->ds)
+-      die(_("No trust anchors provided for DNSSEC"), NULL, EC_BADCONF);
++      die(_("no trust anchors provided for DNSSEC"), NULL, EC_BADCONF);
+       
+       if (daemon->cachesize < CACHESIZ)
+-      die(_("Cannot reduce cache size from default when DNSSEC enabled"), NULL, EC_BADCONF);
++      die(_("cannot reduce cache size from default when DNSSEC enabled"), NULL, EC_BADCONF);
+ #else 
+       die(_("DNSSEC not available: set HAVE_DNSSEC in src/config.h"), NULL, EC_BADCONF);
+ #endif
+@@ -172,10 +169,10 @@ int main (int argc, char **argv)
+ #ifdef HAVE_CONNTRACK
+   if (option_bool(OPT_CONNTRACK) && (daemon->query_port != 0 || daemon->osport))
+-    die (_("Cannot use --conntrack AND --query-port"), NULL, EC_BADCONF); 
++    die (_("cannot use --conntrack AND --query-port"), NULL, EC_BADCONF); 
+ #else
+   if (option_bool(OPT_CONNTRACK))
+-    die(_("Conntrack support not available: set HAVE_CONNTRACK in src/config.h"), NULL, EC_BADCONF);
++    die(_("conntrack support not available: set HAVE_CONNTRACK in src/config.h"), NULL, EC_BADCONF);
+ #endif
+ #ifdef HAVE_SOLARIS_NETWORK
+@@ -195,7 +192,7 @@ int main (int argc, char **argv)
+ #ifndef HAVE_LOOP
+   if (option_bool(OPT_LOOP_DETECT))
+-    die(_("Loop detection not available: set HAVE_LOOP in src/config.h"), NULL, EC_BADCONF);
++    die(_("loop detection not available: set HAVE_LOOP in src/config.h"), NULL, EC_BADCONF);
+ #endif
+   
+   now = dnsmasq_time();
+@@ -373,10 +370,6 @@ int main (int argc, char **argv)
+   if (baduser)
+     die(_("unknown user or group: %s"), baduser, EC_BADCONF);
+-#ifdef HAVE_DNSSEC  
+-  badtime = setup_timestamp(ent_pw);
+-#endif
+-
+   /* implement group defaults, "dip" if available, or group associated with uid */
+   if (!daemon->group_set && !gp)
+     {
+@@ -693,10 +686,23 @@ int main (int argc, char **argv)
+ #ifdef HAVE_DNSSEC
+   if (option_bool(OPT_DNSSEC_VALID))
+     {
++      int rc;
++
++      /* Delay creating the timestamp file until here, after we've changed user, so that
++       it has the correct owner to allow updating the mtime later. 
++       This means we have to report fatal errors via the pipe. */
++      if ((rc = setup_timestamp()) == -1)
++      {
++        send_event(err_pipe[1], EVENT_TIME_ERR, errno, daemon->timestamp_file);
++        _exit(0);
++      }
++      
+       my_syslog(LOG_INFO, _("DNSSEC validation enabled"));
++      
+       if (option_bool(OPT_DNSSEC_TIME))
+       my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until first cache reload"));
+-      if (badtime)
++      
++      if (rc == 1)
+       my_syslog(LOG_INFO, _("DNSSEC signature timestamps not checked until system time valid"));
+     }
+ #endif
+@@ -1170,6 +1176,9 @@ static void fatal_event(struct event_desc *ev, char *msg)
+     case EVENT_TFTP_ERR:
+       die(_("TFTP directory %s inaccessible: %s"), msg, EC_FILE);
++    
++    case EVENT_TIME_ERR:
++      die(_("cannot create timestamp file %s: %s" ), msg, EC_BADCONF);
+     }
+ }     
+       
+diff --git a/src/dnsmasq.h b/src/dnsmasq.h
+index a451cb4dd03c..fc7259881358 100644
+--- a/src/dnsmasq.h
++++ b/src/dnsmasq.h
+@@ -167,6 +167,7 @@ struct event_desc {
+ #define EVENT_INIT      21
+ #define EVENT_NEWADDR   22
+ #define EVENT_NEWROUTE  23
++#define EVENT_TIME_ERR  24
+ /* Exit codes. */
+ #define EC_GOOD        0
+@@ -1152,7 +1153,7 @@ int dnssec_chase_cname(time_t now, struct dns_header *header, size_t plen, char
+ int dnskey_keytag(int alg, int flags, unsigned char *rdata, int rdlen);
+ size_t filter_rrsigs(struct dns_header *header, size_t plen);
+ unsigned char* hash_questions(struct dns_header *header, size_t plen, char *name);
+-int setup_timestamp(struct passwd *ent_pw);
++int setup_timestamp(void);
+ /* util.c */
+ void rand_init(void);
+diff --git a/src/dnssec.c b/src/dnssec.c
+index c60eacf73c6b..ad0d6f072ba2 100644
+--- a/src/dnssec.c
++++ b/src/dnssec.c
+@@ -397,18 +397,21 @@ static int serial_compare_32(unsigned long s1, unsigned long s2)
+ /* Called at startup. If the timestamp file is configured and exists, put its mtime on
+    timestamp_time. If it doesn't exist, create it, and set the mtime to 1-1-2015.
+-   Change the ownership to the user we'll be running as, so that we can update the mtime.
++   return -1 -> Cannot create file.
++           0 -> not using timestamp, or timestamp exists and is in past.
++           1 -> timestamp exists and is in future.
+ */
++
+ static time_t timestamp_time;
+ static int back_to_the_future;
+-int setup_timestamp(struct passwd *ent_pw)
++int setup_timestamp(void)
+ {
+   struct stat statbuf;
+   
+   back_to_the_future = 0;
+   
+-  if (!option_bool(OPT_DNSSEC_VALID) || !daemon->timestamp_file)
++  if (!daemon->timestamp_file)
+     return 0;
+   
+   if (stat(daemon->timestamp_file, &statbuf) != -1)
+@@ -428,7 +431,8 @@ int setup_timestamp(struct passwd *ent_pw)
+   
+   if (errno == ENOENT)
+     {
+-      int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK, 0666);
++      /* NB. for explanation of O_EXCL flag, see comment on pidfile in dnsmasq.c */ 
++      int fd = open(daemon->timestamp_file, O_WRONLY | O_CREAT | O_NONBLOCK | O_EXCL, 0666);
+       if (fd != -1)
+       {
+         struct utimbuf timbuf;
+@@ -436,14 +440,12 @@ int setup_timestamp(struct passwd *ent_pw)
+         close(fd);
+         
+         timestamp_time = timbuf.actime = timbuf.modtime = 1420070400; /* 1-1-2015 */
+-        if (utime(daemon->timestamp_file, &timbuf) == 0 &&
+-            (!ent_pw || getuid() != 0 || chown(daemon->timestamp_file, ent_pw->pw_uid, -1) == 0))
++        if (utime(daemon->timestamp_file, &timbuf) == 0)
+           goto check_and_exit;
+       }
+     }
+-  die(_("Cannot create timestamp file %s: %s" ), daemon->timestamp_file, EC_BADCONF);
+-  return 0;
++  return -1;
+ }
+ /* Check whether today/now is between date_start and date_end */
+-- 
+2.1.0
+
diff --git a/src/patches/kernel/utilite/linux-3.10-compulab-utilite-support.patch b/src/patches/kernel/utilite/linux-3.10-compulab-utilite-support.patch
deleted file mode 100644 (file)
index 3d7f676..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-Add initial support for cm-fx6 module.
-
-cm-fx6 is a module based on mx6q SoC with the following features:
-- Up to 4GB of DDR3
-- 1 LCD/DVI output port
-- 1 HDMI output port
-- 2 LVDS LCD ports
-- Gigabit Ethernet
-- Analog Audio
-- CAN
-- SATA
-- NAND
-- PCIE
-
-This patch allows to boot up the module, configures the serial console,
-the Ethernet adapter and the heartbeat led.
-
-cm-fx6 is embedded inside the Utilite computer.
-
-Signed-off-by: Valentin Raevsky <valentin@compulab.co.il>
-Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
----
-
-Shawn, can this still be applied for 3.13 ?
-
-diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index f0895c5..7521a34 100644
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -117,6 +117,7 @@ dtb-$(CONFIG_ARCH_MXC) += \
-       imx6dl-sabresd.dtb \
-       imx6dl-wandboard.dtb \
-       imx6q-arm2.dtb \
-+      imx6q-cm-fx6.dtb \
-       imx6q-sabreauto.dtb \
-       imx6q-sabrelite.dtb \
-       imx6q-sabresd.dtb \
-diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts
-new file mode 100644
-index 0000000..2419751
---- /dev/null
-+++ b/arch/arm/boot/dts/imx6q-cm-fx6.dts
-@@ -0,0 +1,53 @@
-+/*
-+ * Copyright 2013 CompuLab Ltd.
-+ *
-+ * Author: Valentin Raevsky <valentin@compulab.co.il>
-+ *
-+ * The code contained herein is licensed under the GNU General Public
-+ * License. You may obtain a copy of the GNU General Public License
-+ * Version 2 or later at the following locations:
-+ *
-+ * http://www.opensource.org/licenses/gpl-license.html
-+ * http://www.gnu.org/copyleft/gpl.html
-+ */
-+
-+/dts-v1/;
-+#include "imx6q.dtsi"
-+
-+/ {
-+      model = "CompuLab CM-FX6";
-+      compatible = "compulab,cm-fx6", "fsl,imx6q";
-+
-+      memory {
-+              reg = <0x10000000 0x80000000>;
-+      };
-+
-+      leds {
-+              compatible = "gpio-leds";
-+
-+              heartbeat-led {
-+                      label = "Heartbeat";
-+                      gpios = <&gpio2 31 0>;
-+                      linux,default-trigger = "heartbeat";
-+              };
-+      };
-+};
-+
-+&fec {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_enet_1>;
-+      phy-mode = "rgmii";
-+      status = "okay";
-+};
-+
-+&gpmi {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_gpmi_nand_1>;
-+      status = "okay";
-+};
-+
-+&uart4 {
-+      pinctrl-names = "default";
-+      pinctrl-0 = <&pinctrl_uart4_1>;
-+      status = "okay";
-+};
diff --git a/src/patches/linux-3.14.x-lamobo-r1-fix-sata-pwr.patch b/src/patches/linux-3.14.x-lamobo-r1-fix-sata-pwr.patch
new file mode 100644 (file)
index 0000000..1c0f994
--- /dev/null
@@ -0,0 +1,49 @@
+From 7f558e6e8abee42cc966e2cb64be0de875797e07 Mon Sep 17 00:00:00 2001
+From: Arne Fitzenreiter <arne_f@ipfire.org>
+Date: Fri, 20 Feb 2015 10:01:26 +0100
+Subject: [PATCH] sun7i: dts: lamobo-r1: fix sata pwr regulator pin.
+
+Lamobo-R1 use PB3 instead of PB8 for controlling the SATA power regulator.
+---
+ arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+diff --git a/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
+index 1eb6c9b..d634d2f 100644
+--- a/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
++++ b/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
+@@ -166,6 +166,16 @@
+                               reg = <1>;
+                       };
+               };
++
++              pio: pinctrl@01c20800 {
++                      ahci_pwr_pin_a: ahci_pwr_pin@0 {
++                              allwinner,pins = "PB3";
++                              allwinner,function = "gpio_out";
++                              allwinner,drive = <0>;
++                              allwinner,pull = <0>;
++                      };
++              };
++
+       };
+       leds {
+@@ -181,6 +191,14 @@
+       };
+         reg_ahci_5v: ahci-5v {
++              compatible = "regulator-fixed";
++              pinctrl-names = "default";
++              pinctrl-0 = <&ahci_pwr_pin_a>;
++              regulator-name = "ahci-5v";
++              regulator-min-microvolt = <5000000>;
++              regulator-max-microvolt = <5000000>;
++              enable-active-high;
++              gpio = <&pio 1 3 0>;
+                 status = "okay";
+         };
+-- 
+1.8.5.2
+
diff --git a/src/patches/linux-3.14.x-update_banana_dts.patch b/src/patches/linux-3.14.x-update_banana_dts.patch
deleted file mode 100644 (file)
index 309416b..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-diff -Naur linux-3.14.30.org/arch/arm/boot/dts/Makefile linux-3.14.30/arch/arm/boot/dts/Makefile
---- linux-3.14.30.org/arch/arm/boot/dts/Makefile       2015-01-29 19:56:17.000000000 +0100
-+++ linux-3.14.30/arch/arm/boot/dts/Makefile   2015-01-29 20:41:06.598335182 +0100
-@@ -304,6 +304,7 @@
-       sun5i-a13-olinuxino-micro.dtb \
-       sun6i-a31-colombus.dtb \
-       sun7i-a20-bananapi.dtb \
-+      sun7i-a20-bananapro.dtb \
-       sun7i-a20-cubieboard2.dtb \
-       sun7i-a20-cubietruck.dtb \
-       sun7i-a20-lamobo-r1.dtb \
-diff -Naur linux-3.14.30.org/arch/arm/boot/dts/sun7i-a20-bananapi.dts linux-3.14.30/arch/arm/boot/dts/sun7i-a20-bananapi.dts
---- linux-3.14.30.org/arch/arm/boot/dts/sun7i-a20-bananapi.dts 2015-01-29 19:56:17.000000000 +0100
-+++ linux-3.14.30/arch/arm/boot/dts/sun7i-a20-bananapi.dts     2015-01-29 20:33:18.143334959 +0100
-@@ -199,7 +199,7 @@
-                       regulator-name = "gmac-3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
--                      startup-delay-us = <50000>;
-+                      startup-delay-us = <100000>;
-                       enable-active-high;
-                       gpio = <&pio 7 23 0>;
-                       status = "okay";
-diff -Naur linux-3.14.30.org/arch/arm/boot/dts/sun7i-a20-bananapro.dts linux-3.14.30/arch/arm/boot/dts/sun7i-a20-bananapro.dts
---- linux-3.14.30.org/arch/arm/boot/dts/sun7i-a20-bananapro.dts        1970-01-01 01:00:00.000000000 +0100
-+++ linux-3.14.30/arch/arm/boot/dts/sun7i-a20-bananapro.dts    2015-01-29 20:40:45.153335172 +0100
-@@ -0,0 +1,262 @@
-+/*
-+ * Copyright 2015 Arne Fitzenreiter
-+ * Arne Fitzenreiter <arne_f@ipfire.org>
-+ *
-+ * The code contained herein is licensed under the GNU General Public
-+ * License. You may obtain a copy of the GNU General Public License
-+ * Version 2 or later at the following locations:
-+ *
-+ * http://www.opensource.org/licenses/gpl-license.html
-+ * http://www.gnu.org/copyleft/gpl.html
-+ */
-+
-+/dts-v1/;
-+/include/ "sun7i-a20.dtsi"
-+/include/ "sunxi-common-regulators.dtsi"
-+#include <dt-bindings/input/input.h>
-+
-+/ {
-+      model = "LeMaker Banana Pro";
-+      compatible = "lemaker,bananapro", "allwinner,sun7i-a20";
-+
-+      aliases {
-+              spi0 = &spi1;
-+              spi1 = &spi2;
-+      };
-+
-+      soc@01c00000 {
-+              spi1: spi@01c06000 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&spi1_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              spi2: spi@01c17000 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&spi2_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              mmc0: mmc@01c0f000 {
-+                      pinctrl-names = "default", "default";
-+                      pinctrl-0 = <&mmc0_pins_a>;
-+                      pinctrl-1 = <&mmc0_cd_pin_bananapi>;
-+                      cd-gpios = <&pio 7 10 0>; /* PH10 */
-+                      status = "okay";
-+              };
-+
-+              mmc3: mmc@01c12000 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&mmc3_pins_a>;
-+                      vmmc-supply = <&reg_vmmc3>;
-+                      bus-width = <4>;
-+                      non-removable;
-+                      status = "okay";
-+              };
-+
-+              usbphy: phy@01c13400 {
-+                      usb1_vbus-supply = <&reg_usb1_vbus>;
-+                      usb2_vbus-supply = <&reg_usb2_vbus>;
-+                      status = "okay";
-+              };
-+
-+              ehci0: usb@01c14000 {
-+                      status = "okay";
-+              };
-+
-+              ohci0: usb@01c14400 {
-+                      status = "okay";
-+              };
-+
-+              ahci: sata@01c18000 {
-+                      target-supply = <&reg_ahci_5v>;
-+                      status = "okay";
-+              };
-+
-+              ehci1: usb@01c1c000 {
-+                      status = "okay";
-+              };
-+
-+              ohci1: usb@01c1c400 {
-+                      status = "okay";
-+              };
-+
-+              pinctrl@01c20800 {
-+                      usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
-+                              allwinner,pins = "PH0";
-+                              allwinner,function = "gpio_out";
-+                              allwinner,drive = <0>;
-+                              allwinner,pull = <0>;
-+                      };
-+
-+                      usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
-+                              allwinner,pins = "PH1";
-+                              allwinner,function = "gpio_out";
-+                              allwinner,drive = <0>;
-+                              allwinner,pull = <0>;
-+                      };
-+
-+                      led_pins_bananapi: led_pins@0 {
-+                              allwinner,pins = "PH24", "PG2";
-+                              allwinner,function = "gpio_out";
-+                              allwinner,drive = <0>;
-+                              allwinner,pull = <0>;
-+                      };
-+
-+                      mmc0_cd_pin_bananapi: mmc0_cd_pin@0 {
-+                              allwinner,pins = "PH10";
-+                              allwinner,function = "gpio_in";
-+                              allwinner,drive = <0>;
-+                              allwinner,pull = <1>;
-+                      };
-+ 
-+                      vmmc3_pin_bananapro: vmmc3_pin@0 {
-+                              allwinner,pins = "PH22";
-+                              allwinner,function = "gpio_out";
-+                              allwinner,drive = <0>;
-+                              allwinner,pull = <0>;
-+                      };
-+
-+                      gmac_power_pin_bananapi: gmac_power_pin@0 {
-+                              allwinner,pins = "PH23";
-+                              allwinner,function = "gpio_out";
-+                              allwinner,drive = <0>;
-+                              allwinner,pull = <0>;
-+                      };
-+              };
-+
-+              lradc: lradc@01c22800 {
-+                      allwinner,chan0-step = <200>;
-+                      linux,chan0-keycodes = <KEY_VOLUMEUP KEY_VOLUMEDOWN
-+                                              KEY_MENU KEY_SEARCH KEY_HOME
-+                                              KEY_ESC KEY_ENTER>;
-+                      status = "okay";
-+              };
-+
-+              ir0: ir@01c21800 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&ir0_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              uart0: serial@01c28000 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&uart0_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              uart2: serial@01c28800 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&uart2_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              uart6: serial@01c29800 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&uart6_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              uart7: serial@01c29c00 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&uart7_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              i2c0: i2c@01c2ac00 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&i2c0_pins_a>;
-+                      status = "okay";
-+
-+                      axp: axp20x@34 {
-+                              reg = <0x34>;
-+                              interrupt-parent = <&nmi_intc>;
-+                              interrupts = <0 8>;
-+                              axp,system-power-controller;
-+                              /include/ "x-powers-axp209.dtsi"
-+                      };
-+              };
-+
-+              i2c1: i2c@01c2b000 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&i2c1_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              i2c2: i2c@01c2b400 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&i2c2_pins_a>;
-+                      status = "okay";
-+              };
-+
-+              gmac: ethernet@01c50000 {
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&gmac_pins_rgmii_a>;
-+                      phy = <&phy1>;
-+                      phy-mode = "rgmii";
-+                      phy-supply = <&reg_gmac_3v3>;
-+                      status = "okay";
-+
-+                      phy1: ethernet-phy@1 {
-+                              reg = <1>;
-+                      };
-+              };
-+      };
-+
-+      leds {
-+              compatible = "gpio-leds";
-+              pinctrl-names = "default";
-+              pinctrl-0 = <&led_pins_bananapi>;
-+
-+              green {
-+                      label = "bananapi:green:usr";
-+                      gpios = <&pio 7 24 0>;
-+                      linux,default-trigger = "heartbeat";
-+              };
-+              blue {
-+                      label = "bananapi:blue:usr";
-+                      gpios = <&pio 6 2 0>;
-+                      linux,default-trigger = "mmc0";
-+              };
-+      };
-+
-+        reg_ahci_5v: ahci-5v {
-+                status = "okay";
-+        };
-+
-+        reg_usb1_vbus: usb1-vbus {
-+              pinctrl-0 = <&usb1_vbus_pin_bananapro>;
-+              gpio = <&pio 7 0 0>; /* PH0 */
-+                status = "okay";
-+        };
-+
-+        reg_usb2_vbus: usb2-vbus {
-+              pinctrl-0 = <&usb2_vbus_pin_bananapro>;
-+              gpio = <&pio 7 1 0>; /* PH1 */
-+                status = "okay";
-+        };
-+
-+      reg_gmac_3v3: gmac-3v3 {
-+                      compatible = "regulator-fixed";
-+                      pinctrl-names = "default";
-+                      pinctrl-0 = <&gmac_power_pin_bananapi>;
-+                      regulator-name = "gmac-3v3";
-+                      regulator-min-microvolt = <3300000>;
-+                      regulator-max-microvolt = <3300000>;
-+                      startup-delay-us = <100000>;
-+                      enable-active-high;
-+                      gpio = <&pio 7 23 0>;
-+                      status = "okay";
-+      };
-+
-+      reg_vmmc3: vmmc3 {
-+              compatible = "regulator-fixed";
-+              pinctrl-names = "default";
-+              pinctrl-0 = <&vmmc3_pin_bananapro>;
-+              regulator-name = "vmmc3";
-+              regulator-min-microvolt = <3300000>;
-+              regulator-max-microvolt = <3300000>;
-+              enable-active-high;
-+              gpio = <&pio 7 22 0>;
-+      };
-+};
-diff -Naur linux-3.14.30.org/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts linux-3.14.30/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts
---- linux-3.14.30.org/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts        2015-01-29 19:56:17.000000000 +0100
-+++ linux-3.14.30/arch/arm/boot/dts/sun7i-a20-lamobo-r1.dts    2015-01-30 00:00:01.678340873 +0100
-@@ -199,7 +199,7 @@
-                       regulator-name = "gmac-3v3";
-                       regulator-min-microvolt = <3300000>;
-                       regulator-max-microvolt = <3300000>;
--                      startup-delay-us = <50000>;
-+                      startup-delay-us = <100000>;
-                       enable-active-high;
-                       gpio = <&pio 7 23 0>;
-                       status = "okay";
diff --git a/src/patches/strongswan-5.2.2-issue-816-650a3ad.patch b/src/patches/strongswan-5.2.2-issue-816-650a3ad.patch
new file mode 100644 (file)
index 0000000..44b247e
--- /dev/null
@@ -0,0 +1,35 @@
+commit 650a3ad5151958b99a95836fb8b84b8aa18da1be
+Author: Tobias Brunner <tobias@strongswan.org>
+Date:   Wed Feb 25 08:09:11 2015 +0100
+
+    ike-sa-manager: Make sure the message ID of initial messages is 0
+    
+    It is mandated by the RFCs and it is expected by the task managers.
+    
+    Initial messages with invalid MID will be treated like regular messages,
+    so no IKE_SA will be created for them.  Instead, if the responder SPI is 0
+    no SA will be found and the message is rejected with ALERT_INVALID_IKE_SPI.
+    If an SPI is set and we do find an SA, then we either ignore the message
+    because the MID is unexpected, or because we don't allow initial messages
+    on established connections.
+    
+    There is one exception, though, if an attacker can slip in an IKE_SA_INIT
+    with both SPIs set before the client's IKE_AUTH is handled by the server,
+    it does get processed (see next commit).
+    
+    References #816.
+
+diff --git a/src/libcharon/sa/ike_sa_manager.c b/src/libcharon/sa/ike_sa_manager.c
+index d0cbd47..5e2b925 100644
+--- a/src/libcharon/sa/ike_sa_manager.c
++++ b/src/libcharon/sa/ike_sa_manager.c
+@@ -1184,7 +1184,8 @@ METHOD(ike_sa_manager_t, checkout_by_message, ike_sa_t*,
+       DBG2(DBG_MGR, "checkout IKE_SA by message");
+-      if (id->get_responder_spi(id) == 0)
++      if (id->get_responder_spi(id) == 0 &&
++              message->get_message_id(message) == 0)
+       {
+               if (message->get_major_version(message) == IKEV2_MAJOR_VERSION)
+               {
diff --git a/src/patches/strongswan-5.2.2-issue-816-dd0ebb.patch b/src/patches/strongswan-5.2.2-issue-816-dd0ebb.patch
new file mode 100644 (file)
index 0000000..4d76e7c
--- /dev/null
@@ -0,0 +1,42 @@
+commit dd0ebb54837298c869389d36a0b42eefdb893dd6
+Author: Tobias Brunner <tobias@strongswan.org>
+Date:   Wed Feb 25 08:30:33 2015 +0100
+
+    ikev2: Only accept initial messages in specific states
+    
+    The previous code allowed an attacker to slip in an IKE_SA_INIT with
+    both SPIs and MID 1 set when an IKE_AUTH would be expected instead.
+    
+    References #816.
+
+diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/task_manager_v2.c
+index be84e71..540d4dc 100644
+--- a/src/libcharon/sa/ikev2/task_manager_v2.c
++++ b/src/libcharon/sa/ikev2/task_manager_v2.c
+@@ -1304,17 +1304,16 @@ METHOD(task_manager_t, process_message, status_t,
+       {
+               if (mid == this->responding.mid)
+               {
+-                      /* reject initial messages once established */
+-                      if (msg->get_exchange_type(msg) == IKE_SA_INIT ||
+-                              msg->get_exchange_type(msg) == IKE_AUTH)
++                      /* reject initial messages if not received in specific states */
++                      if ((msg->get_exchange_type(msg) == IKE_SA_INIT &&
++                               this->ike_sa->get_state(this->ike_sa) != IKE_CREATED) ||
++                              (msg->get_exchange_type(msg) == IKE_AUTH &&
++                               this->ike_sa->get_state(this->ike_sa) != IKE_CONNECTING))
+                       {
+-                              if (this->ike_sa->get_state(this->ike_sa) != IKE_CREATED &&
+-                                      this->ike_sa->get_state(this->ike_sa) != IKE_CONNECTING)
+-                              {
+-                                      DBG1(DBG_IKE, "ignoring %N in established IKE_SA state",
+-                                               exchange_type_names, msg->get_exchange_type(msg));
+-                                      return FAILED;
+-                              }
++                              DBG1(DBG_IKE, "ignoring %N in IKE_SA state %N",
++                                       exchange_type_names, msg->get_exchange_type(msg),
++                                       ike_sa_state_names, this->ike_sa->get_state(this->ike_sa));
++                              return FAILED;
+                       }
+                       if (!this->ike_sa->supports_extension(this->ike_sa, EXT_MOBIKE))
+                       {       /* with MOBIKE, we do no implicit updates */
diff --git a/src/patches/strongswan-5.2.2-issue-816-eb25190.patch b/src/patches/strongswan-5.2.2-issue-816-eb25190.patch
new file mode 100644 (file)
index 0000000..8dcb32b
--- /dev/null
@@ -0,0 +1,31 @@
+commit eb251906298b529fa53b8a99746a9a7a9f318dd5
+Author: Tobias Brunner <tobias@strongswan.org>
+Date:   Wed Feb 25 08:18:58 2015 +0100
+
+    ikev2: Don't destroy the SA if an IKE_SA_INIT with unexpected MID is received
+    
+    This reverts 8f727d800751 ("Clean up IKE_SA state if IKE_SA_INIT request
+    does not have message ID 0") because it allowed to close any IKE_SA by
+    sending an IKE_SA_INIT with an unexpected MID and both SPIs set to those
+    of that SA.
+    
+    The next commit will prevent SAs from getting created for IKE_SA_INIT messages
+    with invalid MID.
+    
+    Fixes #816.
+
+diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/task_manager_v2.c
+index 48266aa..be84e71 100644
+--- a/src/libcharon/sa/ikev2/task_manager_v2.c
++++ b/src/libcharon/sa/ikev2/task_manager_v2.c
+@@ -1355,10 +1355,6 @@ METHOD(task_manager_t, process_message, status_t,
+               {
+                       DBG1(DBG_IKE, "received message ID %d, expected %d. Ignored",
+                                mid, this->responding.mid);
+-                      if (msg->get_exchange_type(msg) == IKE_SA_INIT)
+-                      {       /* clean up IKE_SA state if IKE_SA_INIT has invalid msg ID */
+-                              return DESTROY_ME;
+-                      }
+               }
+       }
+       else
diff --git a/src/patches/strongswan-5.2.2-issue-816.patch b/src/patches/strongswan-5.2.2-issue-816.patch
deleted file mode 100644 (file)
index d9dfc8a..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/libcharon/sa/ikev2/task_manager_v2.c b/src/libcharon/sa/ikev2/t
-index e9a677a655e4..69118abe78df 100644
---- a/src/libcharon/sa/ikev2/task_manager_v2.c
-+++ b/src/libcharon/sa/ikev2/task_manager_v2.c
-@@ -1339,7 +1339,7 @@ METHOD(task_manager_t, process_message, status_t,
-        {
-            DBG1(DBG_IKE, "received message ID %d, expected %d. Ignored",
-                 mid, this->responding.mid);
--           if (msg->get_exchange_type(msg) == IKE_SA_INIT)
-+           if (mid != 0 && msg->get_exchange_type(msg) == IKE_SA_INIT)
-            {   /* clean up IKE_SA state if IKE_SA_INIT has invalid msg ID */
-                return DESTROY_ME;
-            }
index fb203bd2a7cacb11471e425a5a057d69a81eda78..08fba1a63b6deb5eaf5c6c09c09c87c0b37350ad 100644 (file)
@@ -2,8 +2,8 @@
 
 COREVER=$(cat /opt/pakfire/db/core/mine)
 # FIXME: edit this lines before release
-URL="http://download.ipfire.org/releases/ipfire-2.x/2.15-core$COREVER/"
-ISO="ipfire-2.15.i586-full-core$COREVER.iso"
+URL="http://download.ipfire.org/releases/ipfire-2.x/2.17-core$COREVER/"
+ISO="ipfire-2.17.i586-full-core$COREVER.iso"
 
 if [ -z $1 ]; then
        echo usage: $0 backup-file
index a656e9f910b183a8520b95308c7f02ed02503caa..f5b3849893e0784f63ba8cdf6752d50c45588766 100644 (file)
@@ -527,27 +527,6 @@ int rename_nics(void) {
                                }
 }
 
-int create_udev(void)
-{
-       #define UDEV_NET_CONF "/etc/udev/rules.d/30-persistent-network.rules"
-       FILE *fp;
-       int i;
-
-       if ( (fp = fopen(UDEV_NET_CONF, "w")) == NULL ) {
-               fprintf(stderr,"Couldn't open" UDEV_NET_CONF);
-               return 1;
-       }
-
-       for (i = 0 ; i < 4 ; i++)
-       {
-               if (strcmp(knics[i].macaddr, "")) {
-                       fprintf(fp,"\n# %s\nACTION==\"add\", SUBSYSTEM==\"net\", ATTR{type}==\"1\", ATTR{address}==\"%s\", NAME=\"%s0\"\n", knics[i].description, knics[i].macaddr, lcolourcard[i]);
-               }
-       }
-       fclose(fp);
-       return 0;
-}
-
 int write_configs_netudev(int card , int colour)
 {      
        char commandstring[STRING_SIZE];
index df4f00f0b1f6b28e238aefd255780708fea4dbba..0791764ebddaab149397557ccaf090edbc65a0d9 100644 (file)
@@ -117,7 +117,6 @@ int handlenetworking(void)
        } else {
                rename_nics();
        }
-       create_udev();
        return 1;
 }
 
index 6fbf14ca7e7fc989771535a0ca98ba1a48baa641..86788507567c694a15ee0fd2b0d3f1077b643d86 100644 (file)
@@ -12,7 +12,6 @@ hu
 id
 it
 ja
-ja_JP
 jv
 km_KH
 nl
@@ -21,7 +20,6 @@ pt_BR
 pt_PT
 ro_RO
 ru
-ru_RU
 rw
 sk
 sq
index eb04ad4fd24efeda0bf2f055bb16bf8c3996d65f..c649710cd5a152259d6a1188c40810cbdaf57c80 100644 (file)
@@ -4,13 +4,15 @@
 # 
 # Translators:
 # irenee Munyaneza <muirenee@yahoo.fr>, 2014
+# nonux <nonux@free.fr>, 2015
+# Sebastien Labrie <fonkyy@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-10-06 16:32+0000\n"
-"Last-Translator: irenee Munyaneza <muirenee@yahoo.fr>\n"
+"PO-Revision-Date: 2015-02-17 23:25+0000\n"
+"Last-Translator: nonux <nonux@free.fr>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/ipfire/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,31 +22,31 @@ msgstr ""
 
 #: dhcp.c:50
 msgid "Start address:"
-msgstr ""
+msgstr "Adresse du début :"
 
 #: dhcp.c:51
 msgid "End address:"
-msgstr ""
+msgstr "Adresse de fin : "
 
 #: dhcp.c:52 networking.c:717
 msgid "Primary DNS:"
-msgstr ""
+msgstr "DNS primaire:"
 
 #: dhcp.c:53 networking.c:723
 msgid "Secondary DNS:"
-msgstr ""
+msgstr "DNS secondaire:"
 
 #: dhcp.c:54
 msgid "Default lease (mins):"
-msgstr ""
+msgstr "Bail par défaut (mins) :"
 
 #: dhcp.c:55
 msgid "Max lease (mins):"
-msgstr ""
+msgstr "Bail maximum (mins) :"
 
 #: dhcp.c:56
 msgid "Domain name suffix:"
-msgstr ""
+msgstr "Suffixe du nom de domaine : "
 
 #: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
 #: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
@@ -52,11 +54,11 @@ msgstr ""
 #: networking.c:442 networking.c:552 networking.c:603 networking.c:610
 #: networking.c:713 timezone.c:63
 msgid "Unable to open settings file"
-msgstr ""
+msgstr "Impossible d'ouvrir le fichier de paramètres"
 
 #: dhcp.c:111
 msgid "DHCP server configuration"
-msgstr ""
+msgstr "Configuration du serveur DHCP"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
@@ -64,7 +66,7 @@ msgstr ""
 
 #: dhcp.c:125
 msgid "Enabled"
-msgstr ""
+msgstr "Activé"
 
 #: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
 #: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
@@ -85,31 +87,31 @@ msgstr "Annuler"
 msgid ""
 "The following fields are invalid:\n"
 "\n"
-msgstr ""
+msgstr "Les champs suivants sont invalides:\n\n"
 
 #: dhcp.c:159
 msgid "Start address"
-msgstr ""
+msgstr "Adresse du début :"
 
 #: dhcp.c:165
 msgid "End address"
-msgstr ""
+msgstr "Adresse de fin : "
 
 #: dhcp.c:173 networking.c:755
 msgid "Primary DNS"
-msgstr ""
+msgstr "DNS primaire"
 
 #: dhcp.c:182 networking.c:764
 msgid "Secondary DNS"
-msgstr ""
+msgstr "DNS secondaire"
 
 #: dhcp.c:189
 msgid "Default lease time"
-msgstr ""
+msgstr "Bail par défaut"
 
 #: dhcp.c:195
 msgid "Max. lease time"
-msgstr ""
+msgstr "Bail maximum"
 
 #: domainname.c:42 main.c:70
 msgid "Domain name"
@@ -117,35 +119,35 @@ msgstr "Nom de domaine"
 
 #: domainname.c:42
 msgid "Enter Domain name"
-msgstr ""
+msgstr "Entrez le nom de domaine"
 
 #: domainname.c:48
 msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "Le nom de domaine ne peut pas être vide."
 
 #: domainname.c:50
 msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "Le nom de domaine ne peut pas contenir d'espace."
 
 #: domainname.c:53
 msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "Le nom de domaine ne peut contenir que des lettres, nombres, traits d'union ou point."
 
 #: hostname.c:46 main.c:69
 msgid "Hostname"
-msgstr ""
+msgstr "Nom d'hôte"
 
 #: hostname.c:46
 msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Entrez le nom d'hôte de la machine."
 
 #: hostname.c:53
 msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "Le nom de domaine ne peut pas être vide."
 
 #: hostname.c:55
 msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "Le nom de domaine ne doit pas contenir d'espaces."
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
@@ -161,11 +163,11 @@ msgstr ""
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
-msgstr ""
+msgstr "Fuseau horaire"
 
 #: main.c:71 networking.c:110 networking.c:115 networking.c:447
 msgid "Networking"
-msgstr ""
+msgstr "Réseau"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
@@ -173,11 +175,11 @@ msgstr ""
 
 #: main.c:73
 msgid "'root' password"
-msgstr ""
+msgstr "Mot de passe \"root\""
 
 #: main.c:74
 msgid "'admin' password"
-msgstr ""
+msgstr "Most de passe \"admin\""
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
@@ -185,7 +187,7 @@ msgstr ""
 
 #: main.c:97
 msgid "Section menu"
-msgstr ""
+msgstr "Menu de sélection"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
@@ -193,7 +195,7 @@ msgstr ""
 
 #: main.c:99
 msgid "Quit"
-msgstr ""
+msgstr "Quitter"
 
 #: main.c:172
 msgid "Setup is complete."
@@ -220,19 +222,19 @@ msgstr ""
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
-msgstr ""
+msgstr "Impossible d'écrire /etc/hosts."
 
 #: misc.c:117
 msgid "Unable to write /etc/hosts.deny."
-msgstr ""
+msgstr "Impossible d'écrire /etc/hosts.deny."
 
 #: misc.c:125
 msgid "Unable to write /etc/hosts.allow."
-msgstr ""
+msgstr "Impossible d'écrire /etc/hosts.allow."
 
 #: misc.c:136
 msgid "Unable to set hostname."
-msgstr ""
+msgstr "Impossible de définir le nom d'hôte"
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
@@ -245,7 +247,7 @@ msgstr ""
 #: netstuff.c:86
 #, c-format
 msgid "Interface - %s"
-msgstr ""
+msgstr "Interface - %s"
 
 #: netstuff.c:91
 #, c-format
@@ -254,11 +256,11 @@ msgstr ""
 
 #: netstuff.c:103
 msgid "Static"
-msgstr ""
+msgstr "Statique"
 
 #: netstuff.c:104
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
@@ -266,7 +268,7 @@ msgstr ""
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
-msgstr ""
+msgstr "Nom d'hôte DHCP:"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
@@ -278,11 +280,11 @@ msgstr "Adresse IP"
 
 #: netstuff.c:146
 msgid "Network mask:"
-msgstr ""
+msgstr "Masque de sous-réseau : "
 
 #: netstuff.c:173 networking.c:749
 msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Les champs suivants sont invalides : "
 
 #: netstuff.c:183
 msgid "IP address"
@@ -290,11 +292,11 @@ msgstr "Adresse IP"
 
 #: netstuff.c:189
 msgid "Network mask"
-msgstr ""
+msgstr "Masque de réseau"
 
 #: netstuff.c:198
 msgid "DHCP hostname"
-msgstr ""
+msgstr "Nom d'hôte DHCP"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
@@ -311,7 +313,7 @@ msgstr ""
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
-msgstr ""
+msgstr "Sélectionner"
 
 #: netstuff.c:673
 msgid "Identify"
@@ -319,7 +321,7 @@ msgstr ""
 
 #: netstuff.c:678
 msgid "Device Identification"
-msgstr ""
+msgstr "Identification du périphérique"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
@@ -348,7 +350,7 @@ msgstr ""
 
 #: netstuff.c:762
 msgid "Loading module..."
-msgstr ""
+msgstr "Chargement du module..."
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
@@ -360,15 +362,15 @@ msgstr "Le nom du module ne doit pas être vide"
 
 #: networking.c:110
 msgid "Stopping network..."
-msgstr ""
+msgstr "Arrêt du réseau..."
 
 #: networking.c:115
 msgid "Restarting network..."
-msgstr ""
+msgstr "Re-démarrage du réseau..."
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Pas d'interface VERTE assignée."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
@@ -384,7 +386,7 @@ msgstr ""
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr ""
+msgstr "Pas d'interface ROUGE assignée."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
@@ -392,7 +394,7 @@ msgstr ""
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Pas d'interface ORANGE assignée."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
@@ -400,7 +402,7 @@ msgstr ""
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Pas d'interface BLEUE assignée."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
@@ -448,7 +450,7 @@ msgstr "Menu de configuration Reseau"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr ""
+msgstr "Terminé"
 
 #: networking.c:300
 #, c-format
diff --git a/src/setup/po/ja_JP.po b/src/setup/po/ja_JP.po
deleted file mode 100644 (file)
index 0d2d2b6..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
-# This file is distributed under the same license as the PACKAGE package.
-# 
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: IPFire Project\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-12 10:08+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/ipfire/language/ja_JP/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ja_JP\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#: dhcp.c:50
-msgid "Start address:"
-msgstr ""
-
-#: dhcp.c:51
-msgid "End address:"
-msgstr ""
-
-#: dhcp.c:52 networking.c:717
-msgid "Primary DNS:"
-msgstr ""
-
-#: dhcp.c:53 networking.c:723
-msgid "Secondary DNS:"
-msgstr ""
-
-#: dhcp.c:54
-msgid "Default lease (mins):"
-msgstr ""
-
-#: dhcp.c:55
-msgid "Max lease (mins):"
-msgstr ""
-
-#: dhcp.c:56
-msgid "Domain name suffix:"
-msgstr ""
-
-#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
-#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
-#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
-#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
-#: networking.c:713 timezone.c:63
-msgid "Unable to open settings file"
-msgstr ""
-
-#: dhcp.c:111
-msgid "DHCP server configuration"
-msgstr ""
-
-#: dhcp.c:116
-msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
-
-#: dhcp.c:125
-msgid "Enabled"
-msgstr ""
-
-#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
-#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
-#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
-#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
-#: timezone.c:78
-msgid "OK"
-msgstr ""
-
-#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
-#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
-#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
-#: passwords.c:89 timezone.c:78
-msgid "Cancel"
-msgstr ""
-
-#: dhcp.c:156
-msgid ""
-"The following fields are invalid:\n"
-"\n"
-msgstr ""
-
-#: dhcp.c:159
-msgid "Start address"
-msgstr ""
-
-#: dhcp.c:165
-msgid "End address"
-msgstr ""
-
-#: dhcp.c:173 networking.c:755
-msgid "Primary DNS"
-msgstr ""
-
-#: dhcp.c:182 networking.c:764
-msgid "Secondary DNS"
-msgstr ""
-
-#: dhcp.c:189
-msgid "Default lease time"
-msgstr ""
-
-#: dhcp.c:195
-msgid "Max. lease time"
-msgstr ""
-
-#: domainname.c:42 main.c:70
-msgid "Domain name"
-msgstr ""
-
-#: domainname.c:42
-msgid "Enter Domain name"
-msgstr ""
-
-#: domainname.c:48
-msgid "Domain name cannot be empty."
-msgstr ""
-
-#: domainname.c:50
-msgid "Domain name cannot contain spaces."
-msgstr ""
-
-#: domainname.c:53
-msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
-
-#: hostname.c:46 main.c:69
-msgid "Hostname"
-msgstr ""
-
-#: hostname.c:46
-msgid "Enter the machine's hostname."
-msgstr ""
-
-#: hostname.c:53
-msgid "Hostname cannot be empty."
-msgstr ""
-
-#: hostname.c:55
-msgid "Hostname cannot contain spaces."
-msgstr ""
-
-#: hostname.c:58
-msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
-
-#: keymap.c:84 main.c:67
-msgid "Keyboard mapping"
-msgstr ""
-
-#: keymap.c:85
-msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
-
-#: main.c:68 timezone.c:77
-msgid "Timezone"
-msgstr ""
-
-#: main.c:71 networking.c:110 networking.c:115 networking.c:447
-msgid "Networking"
-msgstr ""
-
-#: main.c:72 misc.c:147
-msgid "ISDN"
-msgstr ""
-
-#: main.c:73
-msgid "'root' password"
-msgstr ""
-
-#: main.c:74
-msgid "'admin' password"
-msgstr ""
-
-#: main.c:90
-msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
-
-#: main.c:97
-msgid "Section menu"
-msgstr ""
-
-#: main.c:98
-msgid "Select the item you wish to configure."
-msgstr ""
-
-#: main.c:99
-msgid "Quit"
-msgstr ""
-
-#: main.c:172
-msgid "Setup is complete."
-msgstr ""
-
-#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
-msgid "Warning"
-msgstr ""
-
-#: main.c:175
-msgid ""
-"Initial setup was not entirely complete. You must ensure that Setup is "
-"properly finished by running setup again at the shell."
-msgstr ""
-
-#: misc.c:62
-#, c-format
-msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
-
-#: misc.c:71
-msgid "Unable to open main hosts file."
-msgstr ""
-
-#: misc.c:76
-msgid "Unable to write /etc/hosts."
-msgstr ""
-
-#: misc.c:117
-msgid "Unable to write /etc/hosts.deny."
-msgstr ""
-
-#: misc.c:125
-msgid "Unable to write /etc/hosts.allow."
-msgstr ""
-
-#: misc.c:136
-msgid "Unable to set hostname."
-msgstr ""
-
-#: misc.c:147
-msgid "Scanning and configuring ISDN devices."
-msgstr ""
-
-#: misc.c:148
-msgid "Unable to scan for ISDN devices."
-msgstr ""
-
-#: netstuff.c:86
-#, c-format
-msgid "Interface - %s"
-msgstr ""
-
-#: netstuff.c:91
-#, c-format
-msgid "Enter the IP address information for the %s interface."
-msgstr ""
-
-#: netstuff.c:103
-msgid "Static"
-msgstr ""
-
-#: netstuff.c:104
-msgid "DHCP"
-msgstr ""
-
-#: netstuff.c:105
-msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
-
-#: netstuff.c:113
-msgid "DHCP Hostname:"
-msgstr ""
-
-#: netstuff.c:115
-msgid "Force DHCP MTU:"
-msgstr ""
-
-#: netstuff.c:134
-msgid "IP address:"
-msgstr ""
-
-#: netstuff.c:146
-msgid "Network mask:"
-msgstr ""
-
-#: netstuff.c:173 networking.c:749
-msgid "The following fields are invalid:"
-msgstr ""
-
-#: netstuff.c:183
-msgid "IP address"
-msgstr ""
-
-#: netstuff.c:189
-msgid "Network mask"
-msgstr ""
-
-#: netstuff.c:198
-msgid "DHCP hostname"
-msgstr ""
-
-#: netstuff.c:396 netstuff.c:709
-msgid "Unset"
-msgstr ""
-
-#: netstuff.c:669
-#, c-format
-msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
-
-#: netstuff.c:672
-msgid "Extended Network Menu"
-msgstr ""
-
-#: netstuff.c:673 networking.c:520
-msgid "Select"
-msgstr ""
-
-#: netstuff.c:673
-msgid "Identify"
-msgstr ""
-
-#: netstuff.c:678
-msgid "Device Identification"
-msgstr ""
-
-#: netstuff.c:678
-msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
-
-#: netstuff.c:679
-msgid "Identification is not supported by this interface."
-msgstr ""
-
-#: netstuff.c:691
-msgid "There are no unassigned interfaces on your system."
-msgstr ""
-
-#: netstuff.c:732
-#, c-format
-msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
-
-#: netstuff.c:755
-msgid "Select network driver"
-msgstr ""
-
-#: netstuff.c:755
-msgid "Set additional module parameters"
-msgstr ""
-
-#: netstuff.c:762
-msgid "Loading module..."
-msgstr ""
-
-#: netstuff.c:777
-msgid "Unable to load driver module."
-msgstr ""
-
-#: netstuff.c:780
-msgid "Module name cannot be blank."
-msgstr ""
-
-#: networking.c:110
-msgid "Stopping network..."
-msgstr ""
-
-#: networking.c:115
-msgid "Restarting network..."
-msgstr ""
-
-#: networking.c:146
-msgid "No GREEN interface assigned."
-msgstr ""
-
-#: networking.c:152
-msgid "Missing an IP address on GREEN."
-msgstr ""
-
-#: networking.c:163
-msgid "Error"
-msgstr ""
-
-#: networking.c:163
-msgid "Ignore"
-msgstr ""
-
-#: networking.c:164
-msgid "No RED interface assigned."
-msgstr ""
-
-#: networking.c:173
-msgid "Missing an IP address on RED."
-msgstr ""
-
-#: networking.c:183
-msgid "No ORANGE interface assigned."
-msgstr ""
-
-#: networking.c:189
-msgid "Missing an IP address on ORANGE."
-msgstr ""
-
-#: networking.c:199
-msgid "No BLUE interface assigned."
-msgstr ""
-
-#: networking.c:205
-msgid "Missing an IP address on BLUE."
-msgstr ""
-
-#: networking.c:217
-msgid "Misssing DNS."
-msgstr ""
-
-#: networking.c:224
-msgid "Missing Default Gateway."
-msgstr ""
-
-#: networking.c:237 networking.c:304
-msgid "Network configuration type"
-msgstr ""
-
-#: networking.c:238 networking.c:409
-msgid "Drivers and card assignments"
-msgstr ""
-
-#: networking.c:239 networking.c:640
-msgid "Address settings"
-msgstr ""
-
-#: networking.c:240 networking.c:743
-msgid "DNS and Gateway settings"
-msgstr ""
-
-#: networking.c:260
-msgid "When configuration is complete, a network restart will be required."
-msgstr ""
-
-#: networking.c:267
-#, c-format
-msgid ""
-"Current config: %s\n"
-"\n"
-"%s"
-msgstr ""
-
-#: networking.c:268
-msgid "Network configuration menu"
-msgstr ""
-
-#: networking.c:269 networking.c:520 networking.c:642
-msgid "Done"
-msgstr ""
-
-#: networking.c:300
-#, c-format
-msgid ""
-"Select the network configuration for %s. The following configuration types "
-"list those interfaces which have ethernet attached. If you change this "
-"setting, a network restart will be required, and you will have to "
-"reconfigure the network driver assignments."
-msgstr ""
-
-#: networking.c:307
-#, c-format
-msgid ""
-"Not enough netcards for your choice.\n"
-"\n"
-"Needed: %d - Available: %d\n"
-msgstr ""
-
-#: networking.c:359
-msgid ""
-"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
-"\n"
-msgstr ""
-
-#: networking.c:408
-msgid "Do you wish to change these settings?"
-msgstr ""
-
-#: networking.c:447
-msgid "Restarting non-local network..."
-msgstr ""
-
-#: networking.c:464
-msgid ""
-"Please choose the interface you wish to change.\n"
-"\n"
-msgstr ""
-
-#: networking.c:519
-msgid "Assigned Cards"
-msgstr ""
-
-#: networking.c:520
-msgid "Remove"
-msgstr ""
-
-#: networking.c:556 networking.c:649
-#, c-format
-msgid ""
-"If you change this IP address, and you are logged in remotely, your "
-"connection to the %s machine will be broken, and you will have to reconnect "
-"on the new IP. This is a risky operation, and should only be attempted if "
-"you have physical access to the machine, should something go wrong."
-msgstr ""
-
-#: networking.c:641
-msgid "Select the interface you wish to reconfigure."
-msgstr ""
-
-#: networking.c:729
-msgid "Default gateway:"
-msgstr ""
-
-#: networking.c:744
-msgid ""
-"Enter the DNS and gateway information. These settings are used only with "
-"Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
-
-#: networking.c:773
-msgid "Default gateway"
-msgstr ""
-
-#: networking.c:780
-msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
-
-#: passwords.c:33
-msgid ""
-"Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
-
-#: passwords.c:38 passwords.c:61
-msgid "Setting password"
-msgstr ""
-
-#: passwords.c:38
-msgid "Setting 'root' password...."
-msgstr ""
-
-#: passwords.c:39
-msgid "Problem setting 'root' password."
-msgstr ""
-
-#: passwords.c:53
-#, c-format
-msgid ""
-"Enter %s 'admin' user password. This is the user to use for logging into the"
-" %s web administration pages."
-msgstr ""
-
-#: passwords.c:60
-#, c-format
-msgid "Setting %s 'admin' user password..."
-msgstr ""
-
-#: passwords.c:62
-#, c-format
-msgid "Problem setting %s 'admin' user password."
-msgstr ""
-
-#: passwords.c:76
-msgid "Password:"
-msgstr ""
-
-#: passwords.c:77
-msgid "Again:"
-msgstr ""
-
-#: passwords.c:95
-msgid "Password cannot be blank."
-msgstr ""
-
-#: passwords.c:102
-msgid "Passwords do not match."
-msgstr ""
-
-#: passwords.c:109
-msgid "Password cannot contain spaces."
-msgstr ""
-
-#: timezone.c:77
-msgid "Choose the timezone you are in from the list below."
-msgstr ""
index 1ee909386590f8ca691a059af8777f3ebb7a0f1e..439f50c192f0694e65e19530346136c3bcc3b48a 100644 (file)
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-01-26 08:29+0000\n"
+"PO-Revision-Date: 2015-02-03 07:00+0000\n"
 "Last-Translator: Jacques Hylkema <j.hylkema@intronics.nl>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/ipfire/language/nl/)\n"
 "MIME-Version: 1.0\n"
@@ -298,7 +298,7 @@ msgstr "DHCP hostnaam"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr ""
+msgstr "Niet ingesteld"
 
 #: netstuff.c:669
 #, c-format
@@ -352,87 +352,87 @@ msgstr "Bezig met laden van module..."
 
 #: netstuff.c:777
 msgid "Unable to load driver module."
-msgstr ""
+msgstr "Kan driver module niet laden."
 
 #: netstuff.c:780
 msgid "Module name cannot be blank."
-msgstr ""
+msgstr "Module naam mag niet leeg zijn."
 
 #: networking.c:110
 msgid "Stopping network..."
-msgstr ""
+msgstr "Bezig met stoppen van netwerk..."
 
 #: networking.c:115
 msgid "Restarting network..."
-msgstr ""
+msgstr "Bezig met herstarten van netwerk..."
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr ""
+msgstr "Geen GROENE interface toegewezen."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan GROEN."
 
 #: networking.c:163
 msgid "Error"
-msgstr ""
+msgstr "Fout"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "Negeer"
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr ""
+msgstr "Geen RODE interface toegewezen."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan ROOD."
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr ""
+msgstr "Geen ORANJE interface toegewezen."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan ORANJE"
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr ""
+msgstr "Geen BLAUWE interface toegewezen."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
-msgstr ""
+msgstr "Geen IP adres toegewezen aan BLAUW."
 
 #: networking.c:217
 msgid "Misssing DNS."
-msgstr ""
+msgstr "DNS gegevens ontbreken."
 
 #: networking.c:224
 msgid "Missing Default Gateway."
-msgstr ""
+msgstr "Standaard gateway ontbreekt."
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr ""
+msgstr "Netwerk configuratie type"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
-msgstr ""
+msgstr "Drivers en kaart toewijzingen"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr ""
+msgstr "Adres instellingen"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "DNS en Gateway instellingen"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "Nadat de configuratie is voltooid, moet het netwerk worden herstart."
 
 #: networking.c:267
 #, c-format
@@ -440,15 +440,15 @@ msgid ""
 "Current config: %s\n"
 "\n"
 "%s"
-msgstr ""
+msgstr "Huidige configuratie: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr ""
+msgstr "Netwerk configuratie menu"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr ""
+msgstr "Gereed"
 
 #: networking.c:300
 #, c-format
@@ -457,7 +457,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr ""
+msgstr "Selecteer de netwerk configuratie voor %s. De volgende configuratie types laten alleen de netwerkkaarten zien die op ethernet zijn aangesloten. Als je dit wijzigt, moet het netwerk worden herstart en moet je de netwerk driver toewijzingen opnieuw configureren."
 
 #: networking.c:307
 #, c-format
@@ -465,35 +465,35 @@ msgid ""
 "Not enough netcards for your choice.\n"
 "\n"
 "Needed: %d - Available: %d\n"
-msgstr ""
+msgstr "Er zijn onvoldoende netwerkkaarten aanwezig voor je keuze.\n\nBenodigd: %d - Beschikbaar: %d\n"
 
 #: networking.c:359
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr ""
+msgstr "Configureer netwerk drivers, en welke netwerkkaart aan welke interface is toegewezen. De huidige configuratie is het volgende:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Wil je deze instellingen wijzigen?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Bezig met herstarten van het niet-lokale netwerk..."
 
 #: networking.c:464
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr ""
+msgstr "Kies de interface die je wil wijzigen.\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
-msgstr ""
+msgstr "Toegewezen kaarten"
 
 #: networking.c:520
 msgid "Remove"
-msgstr ""
+msgstr "Verwijder"
 
 #: networking.c:556 networking.c:649
 #, c-format
@@ -502,84 +502,84 @@ msgid ""
 "connection to the %s machine will be broken, and you will have to reconnect "
 "on the new IP. This is a risky operation, and should only be attempted if "
 "you have physical access to the machine, should something go wrong."
-msgstr ""
+msgstr "Als je dit IP adres wijzigt en je bent op afstand ingelogd, dan zal je connectie naar de %s machine worden onderbroken en moet je opnieuw inloggen op het nieuwe IP adres. Dit is een risicovolle operatie die alleen zou moeten worden uitgevoerd als je fysieke toegang tot de machine hebt, mocht er iets misgaan."
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Selecteer de interface die je wil herconfigureren."
 
 #: networking.c:729
 msgid "Default gateway:"
-msgstr ""
+msgstr "Standaard gateway:"
 
 #: networking.c:744
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
+msgstr "Voer de DNS en gatway informatie in. Deze instellingen worden alleen gebruikt indien een statisch IP adres (en DHCP indien DNS is ingesteld) voor de RODE interface is ingesteld."
 
 #: networking.c:773
 msgid "Default gateway"
-msgstr ""
+msgstr "Standaard gateway"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "Er is een secundaire DNS ingesteld zonder dat een primaire DNS is ingesteld"
 
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
+msgstr "Voer het 'root' wachtwoord in. Log als deze gebruiker in voor commando regel toegang."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
-msgstr ""
+msgstr "Instellen wachtwoord"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr ""
+msgstr "Instellen 'root' wachtwoord..."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr ""
+msgstr "Probleem bij instellen van 'root' wachtwoord."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr ""
+msgstr "Voer het %s 'admin' gebruiker wachtwoord in. Dit is de gebruiker om mee in te loggen op de %s web administratie interface."
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr ""
+msgstr "Instellen %s 'admin' wachtwoord..."
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr ""
+msgstr "Probleem bij instellen van %s 'admin' wachtwoord."
 
 #: passwords.c:76
 msgid "Password:"
-msgstr ""
+msgstr "Wachtwoord:"
 
 #: passwords.c:77
 msgid "Again:"
-msgstr ""
+msgstr "Nogmaals:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr ""
+msgstr "Wachtwoord mag niet leeg zijn."
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr ""
+msgstr "Wachtwoorden komen niet overeen,"
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr ""
+msgstr "Wachtwoord mag geen spaties bevatten."
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Kies de tijdzone waar je bent uit onderstaande lijst."
index 1cb5bc6b7ae2269bc0ea66e89caa634f54863d69..b1ea09c51a578e01c84173308261c3e686aa4088 100644 (file)
@@ -3,14 +3,16 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# douglasdiasn <douglasdiasn@gmail.com>, 2015
+# Evertton de Lima <e.everttonlima@gmail.com>, 2015
 # Rafael Tavares <rafael@ibinetwork.com.br>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2015-01-22 20:19+0000\n"
-"Last-Translator: Rafael Tavares <rafael@ibinetwork.com.br>\n"
+"PO-Revision-Date: 2015-02-16 23:15+0000\n"
+"Last-Translator: Evertton de Lima <e.everttonlima@gmail.com>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/ipfire/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -85,7 +87,7 @@ msgstr "Cancelar"
 msgid ""
 "The following fields are invalid:\n"
 "\n"
-msgstr ""
+msgstr "Os campos a seguir são inválidos: \n"
 
 #: dhcp.c:159
 msgid "Start address"
@@ -117,19 +119,19 @@ msgstr "Domínio "
 
 #: domainname.c:42
 msgid "Enter Domain name"
-msgstr ""
+msgstr "Entre com o nome do Domínio"
 
 #: domainname.c:48
 msgid "Domain name cannot be empty."
-msgstr ""
+msgstr "O nome de Domínio não pode ser vazio."
 
 #: domainname.c:50
 msgid "Domain name cannot contain spaces."
-msgstr ""
+msgstr "O nome de Domínio não pode conter \"espaços\"."
 
 #: domainname.c:53
 msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
+msgstr "O nome de Domínio pode conter somente letras, números, hífens e pontos."
 
 #: hostname.c:46 main.c:69
 msgid "Hostname"
@@ -137,19 +139,19 @@ msgstr "Hostname"
 
 #: hostname.c:46
 msgid "Enter the machine's hostname."
-msgstr ""
+msgstr "Entre com o nome do host."
 
 #: hostname.c:53
 msgid "Hostname cannot be empty."
-msgstr ""
+msgstr "O nome de Host não pode ser vazio."
 
 #: hostname.c:55
 msgid "Hostname cannot contain spaces."
-msgstr ""
+msgstr "O nome de Host não pode conter \"espaços\"."
 
 #: hostname.c:58
 msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
+msgstr "O nome de Host pode conter somente Letras, números e hífens."
 
 #: keymap.c:84 main.c:67
 msgid "Keyboard mapping"
@@ -157,7 +159,7 @@ msgstr "Selecione seu teclado"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
+msgstr "Escolha o tipo do teclado que você esta usando a partir da lista abaixo:"
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
@@ -165,7 +167,7 @@ msgstr "Fuso horário "
 
 #: main.c:71 networking.c:110 networking.c:115 networking.c:447
 msgid "Networking"
-msgstr ""
+msgstr "Rede"
 
 #: main.c:72 misc.c:147
 msgid "ISDN"
@@ -173,19 +175,19 @@ msgstr "ISDN"
 
 #: main.c:73
 msgid "'root' password"
-msgstr "senha ´'root'"
+msgstr "senha 'ROOT'"
 
 #: main.c:74
 msgid "'admin' password"
-msgstr "senha 'admin'"
+msgstr "senha 'ADMIN'"
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
+msgstr "<Tab>/<Alt-Tab> entre elementos | <Space> seleciona"
 
 #: main.c:97
 msgid "Section menu"
-msgstr ""
+msgstr "Menu de seleção"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
@@ -207,7 +209,7 @@ msgstr "Atenção"
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr ""
+msgstr "O setup inicial não foi inteiramente completo. Você deve se certificar que o Setup foi finalizado corretamente rodando o setup novamente no shell."
 
 #: misc.c:62
 #, c-format
@@ -216,7 +218,7 @@ msgstr "Não foi possível salvar %s/main/hostname.conf"
 
 #: misc.c:71
 msgid "Unable to open main hosts file."
-msgstr ""
+msgstr "Não foi possível abrir o arquivo de Hosts Principal"
 
 #: misc.c:76
 msgid "Unable to write /etc/hosts."
@@ -232,15 +234,15 @@ msgstr "Não foi possível salvar /etc/hosts.allow."
 
 #: misc.c:136
 msgid "Unable to set hostname."
-msgstr ""
+msgstr "Não foi possível aplicar o Hostname"
 
 #: misc.c:147
 msgid "Scanning and configuring ISDN devices."
-msgstr ""
+msgstr "Escaneando e configurando dispositivos ISDN."
 
 #: misc.c:148
 msgid "Unable to scan for ISDN devices."
-msgstr ""
+msgstr "Não foi possível escanear por dispositivos ISDN."
 
 #: netstuff.c:86
 #, c-format
@@ -250,7 +252,7 @@ msgstr "Interface - %s"
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr ""
+msgstr "Entre com a informação do endereço IP  para a interface %s."
 
 #: netstuff.c:103
 msgid "Static"
@@ -266,11 +268,11 @@ msgstr "Discador PPP (PPPoE, modem, ATM ...)"
 
 #: netstuff.c:113
 msgid "DHCP Hostname:"
-msgstr ""
+msgstr "Nome do Host DHCP:"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr ""
+msgstr "Forçar DHCP MTU:"
 
 #: netstuff.c:134
 msgid "IP address:"
@@ -282,7 +284,7 @@ msgstr "Mascara de rede:"
 
 #: netstuff.c:173 networking.c:749
 msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Os campos a seguir são inválidos:"
 
 #: netstuff.c:183
 msgid "IP address"
@@ -294,7 +296,7 @@ msgstr "Marcara de rede"
 
 #: netstuff.c:198
 msgid "DHCP hostname"
-msgstr ""
+msgstr "Nome do Host DHCP:"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
@@ -303,11 +305,11 @@ msgstr ""
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
+msgstr "Favor selecionar a Placa de Rede para a interface - %s."
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr ""
+msgstr "Abrir o menu de redes"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
@@ -319,28 +321,28 @@ msgstr "Identifique"
 
 #: netstuff.c:678
 msgid "Device Identification"
-msgstr ""
+msgstr "Identificação do dispositivo"
 
 #: netstuff.c:678
 msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
+msgstr "As luzes da porta selecionada deverão piscar por 10 segundos a partir de agora..."
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr ""
+msgstr "Identificação não é suportada por esta interface."
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr ""
+msgstr "Não existem interfaces não associadas em seu sistema."
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
+msgstr "Você realmente quer remover a interface %s associada?"
 
 #: netstuff.c:755
 msgid "Select network driver"
-msgstr ""
+msgstr "Selecionar driver de rede"
 
 #: netstuff.c:755
 msgid "Set additional module parameters"
@@ -432,7 +434,7 @@ msgstr "Configurar Gateway e DNS"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr ""
+msgstr "Quando a configuração estiver completa, um reinício da rede será necessário."
 
 #: networking.c:267
 #, c-format
@@ -444,7 +446,7 @@ msgstr "Configuração atual: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr ""
+msgstr "Menu de configuração de rede"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
@@ -475,11 +477,11 @@ msgstr ""
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Você gostaria de alterar essas configurações?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
-msgstr ""
+msgstr "Reiniciando rede non-local..."
 
 #: networking.c:464
 msgid ""
@@ -524,7 +526,7 @@ msgstr "Gateway padrão"
 
 #: networking.c:780
 msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
+msgstr "DNS secundário especificado sem um DNS primário"
 
 #: passwords.c:33
 msgid ""
index 1a03f0bbe1d941c1db3d6062b765567d20954b24..4869ecf2b75e931aa45e9d7f16f14dbe6ef3b12d 100644 (file)
@@ -4,14 +4,15 @@
 # 
 # Translators:
 # Andrei Skipin <skian2007@yandex.ru>, 2014
+# ellviss <kpe1501@gmail.com>, 2015
 # bubnov_pi <ipfire@bubnov.su>, 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-12-10 10:22+0000\n"
-"Last-Translator: Andrei Skipin <skian2007@yandex.ru>\n"
+"PO-Revision-Date: 2015-02-17 19:30+0000\n"
+"Last-Translator: ellviss <kpe1501@gmail.com>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/ipfire/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -259,7 +260,7 @@ msgstr "Статический"
 
 #: netstuff.c:104
 msgid "DHCP"
-msgstr ""
+msgstr "DHCP-сервер"
 
 #: netstuff.c:105
 msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
@@ -377,11 +378,11 @@ msgstr ""
 
 #: networking.c:163
 msgid "Error"
-msgstr ""
+msgstr "Ошибка"
 
 #: networking.c:163
 msgid "Ignore"
-msgstr ""
+msgstr "Игнорировать"
 
 #: networking.c:164
 msgid "No RED interface assigned."
@@ -425,11 +426,11 @@ msgstr ""
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr ""
+msgstr "Настройки адреса"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr ""
+msgstr "Настройка DNS и Шлюза"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
@@ -476,7 +477,7 @@ msgstr ""
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
-msgstr ""
+msgstr "Вы уверены что хотите изменить эти настройки?"
 
 #: networking.c:447
 msgid "Restarting non-local network..."
@@ -507,7 +508,7 @@ msgstr ""
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr ""
+msgstr "Выберете интерфейс для реконфигурации"
 
 #: networking.c:729
 msgid "Default gateway:"
@@ -583,4 +584,4 @@ msgstr "Пароль не может содержать пробелы"
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr ""
+msgstr "Выберете временную зону в которой вы находитесь из списка ниже"
diff --git a/src/setup/po/ru_RU.po b/src/setup/po/ru_RU.po
deleted file mode 100644 (file)
index 0a803e0..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR The IPFire Project (www.ipfire.org)
-# This file is distributed under the same license as the PACKAGE package.
-# 
-# Translators:
-msgid ""
-msgstr ""
-"Project-Id-Version: IPFire Project\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-12 10:08+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/ipfire/language/ru_RU/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ru_RU\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: dhcp.c:50
-msgid "Start address:"
-msgstr ""
-
-#: dhcp.c:51
-msgid "End address:"
-msgstr ""
-
-#: dhcp.c:52 networking.c:717
-msgid "Primary DNS:"
-msgstr ""
-
-#: dhcp.c:53 networking.c:723
-msgid "Secondary DNS:"
-msgstr ""
-
-#: dhcp.c:54
-msgid "Default lease (mins):"
-msgstr ""
-
-#: dhcp.c:55
-msgid "Max lease (mins):"
-msgstr ""
-
-#: dhcp.c:56
-msgid "Domain name suffix:"
-msgstr ""
-
-#: dhcp.c:86 dhcp.c:93 dhcp.c:101 domainname.c:34 hostname.c:37 keymap.c:70
-#: misc.c:40 misc.c:52 netstuff.c:377 netstuff.c:566 netstuff.c:704
-#: networking.c:134 networking.c:255 networking.c:291 networking.c:346
-#: networking.c:442 networking.c:552 networking.c:603 networking.c:610
-#: networking.c:713 timezone.c:63
-msgid "Unable to open settings file"
-msgstr ""
-
-#: dhcp.c:111
-msgid "DHCP server configuration"
-msgstr ""
-
-#: dhcp.c:116
-msgid "Configure the DHCP server by entering the settings information."
-msgstr ""
-
-#: dhcp.c:125
-msgid "Enabled"
-msgstr ""
-
-#: dhcp.c:142 domainname.c:43 hostname.c:47 keymap.c:86 main.c:99 main.c:172
-#: main.c:174 netstuff.c:157 netstuff.c:733 netstuff.c:756 networking.c:163
-#: networking.c:269 networking.c:305 networking.c:409 networking.c:560
-#: networking.c:642 networking.c:653 networking.c:746 passwords.c:89
-#: timezone.c:78
-msgid "OK"
-msgstr ""
-
-#: dhcp.c:143 domainname.c:43 hostname.c:47 keymap.c:86 netstuff.c:158
-#: netstuff.c:673 netstuff.c:733 netstuff.c:756 networking.c:305
-#: networking.c:410 networking.c:560 networking.c:653 networking.c:746
-#: passwords.c:89 timezone.c:78
-msgid "Cancel"
-msgstr ""
-
-#: dhcp.c:156
-msgid ""
-"The following fields are invalid:\n"
-"\n"
-msgstr ""
-
-#: dhcp.c:159
-msgid "Start address"
-msgstr ""
-
-#: dhcp.c:165
-msgid "End address"
-msgstr ""
-
-#: dhcp.c:173 networking.c:755
-msgid "Primary DNS"
-msgstr ""
-
-#: dhcp.c:182 networking.c:764
-msgid "Secondary DNS"
-msgstr ""
-
-#: dhcp.c:189
-msgid "Default lease time"
-msgstr ""
-
-#: dhcp.c:195
-msgid "Max. lease time"
-msgstr ""
-
-#: domainname.c:42 main.c:70
-msgid "Domain name"
-msgstr ""
-
-#: domainname.c:42
-msgid "Enter Domain name"
-msgstr ""
-
-#: domainname.c:48
-msgid "Domain name cannot be empty."
-msgstr ""
-
-#: domainname.c:50
-msgid "Domain name cannot contain spaces."
-msgstr ""
-
-#: domainname.c:53
-msgid "Domain name may only contain letters, numbers, hyphens and periods."
-msgstr ""
-
-#: hostname.c:46 main.c:69
-msgid "Hostname"
-msgstr ""
-
-#: hostname.c:46
-msgid "Enter the machine's hostname."
-msgstr ""
-
-#: hostname.c:53
-msgid "Hostname cannot be empty."
-msgstr ""
-
-#: hostname.c:55
-msgid "Hostname cannot contain spaces."
-msgstr ""
-
-#: hostname.c:58
-msgid "Hostname may only contain letters, numbers and hyphens."
-msgstr ""
-
-#: keymap.c:84 main.c:67
-msgid "Keyboard mapping"
-msgstr ""
-
-#: keymap.c:85
-msgid "Choose the type of keyboard you are using from the list below."
-msgstr ""
-
-#: main.c:68 timezone.c:77
-msgid "Timezone"
-msgstr ""
-
-#: main.c:71 networking.c:110 networking.c:115 networking.c:447
-msgid "Networking"
-msgstr ""
-
-#: main.c:72 misc.c:147
-msgid "ISDN"
-msgstr ""
-
-#: main.c:73
-msgid "'root' password"
-msgstr ""
-
-#: main.c:74
-msgid "'admin' password"
-msgstr ""
-
-#: main.c:90
-msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
-msgstr ""
-
-#: main.c:97
-msgid "Section menu"
-msgstr ""
-
-#: main.c:98
-msgid "Select the item you wish to configure."
-msgstr ""
-
-#: main.c:99
-msgid "Quit"
-msgstr ""
-
-#: main.c:172
-msgid "Setup is complete."
-msgstr ""
-
-#: main.c:174 netstuff.c:733 networking.c:560 networking.c:653
-msgid "Warning"
-msgstr ""
-
-#: main.c:175
-msgid ""
-"Initial setup was not entirely complete. You must ensure that Setup is "
-"properly finished by running setup again at the shell."
-msgstr ""
-
-#: misc.c:62
-#, c-format
-msgid "Unable to write %s/main/hostname.conf"
-msgstr ""
-
-#: misc.c:71
-msgid "Unable to open main hosts file."
-msgstr ""
-
-#: misc.c:76
-msgid "Unable to write /etc/hosts."
-msgstr ""
-
-#: misc.c:117
-msgid "Unable to write /etc/hosts.deny."
-msgstr ""
-
-#: misc.c:125
-msgid "Unable to write /etc/hosts.allow."
-msgstr ""
-
-#: misc.c:136
-msgid "Unable to set hostname."
-msgstr ""
-
-#: misc.c:147
-msgid "Scanning and configuring ISDN devices."
-msgstr ""
-
-#: misc.c:148
-msgid "Unable to scan for ISDN devices."
-msgstr ""
-
-#: netstuff.c:86
-#, c-format
-msgid "Interface - %s"
-msgstr ""
-
-#: netstuff.c:91
-#, c-format
-msgid "Enter the IP address information for the %s interface."
-msgstr ""
-
-#: netstuff.c:103
-msgid "Static"
-msgstr ""
-
-#: netstuff.c:104
-msgid "DHCP"
-msgstr ""
-
-#: netstuff.c:105
-msgid "PPP DIALUP (PPPoE, modem, ATM ...)"
-msgstr ""
-
-#: netstuff.c:113
-msgid "DHCP Hostname:"
-msgstr ""
-
-#: netstuff.c:115
-msgid "Force DHCP MTU:"
-msgstr ""
-
-#: netstuff.c:134
-msgid "IP address:"
-msgstr ""
-
-#: netstuff.c:146
-msgid "Network mask:"
-msgstr ""
-
-#: netstuff.c:173 networking.c:749
-msgid "The following fields are invalid:"
-msgstr ""
-
-#: netstuff.c:183
-msgid "IP address"
-msgstr ""
-
-#: netstuff.c:189
-msgid "Network mask"
-msgstr ""
-
-#: netstuff.c:198
-msgid "DHCP hostname"
-msgstr ""
-
-#: netstuff.c:396 netstuff.c:709
-msgid "Unset"
-msgstr ""
-
-#: netstuff.c:669
-#, c-format
-msgid "Please choose a networkcard for the following interface - %s."
-msgstr ""
-
-#: netstuff.c:672
-msgid "Extended Network Menu"
-msgstr ""
-
-#: netstuff.c:673 networking.c:520
-msgid "Select"
-msgstr ""
-
-#: netstuff.c:673
-msgid "Identify"
-msgstr ""
-
-#: netstuff.c:678
-msgid "Device Identification"
-msgstr ""
-
-#: netstuff.c:678
-msgid "The lights on the selected port should flash now for 10 seconds..."
-msgstr ""
-
-#: netstuff.c:679
-msgid "Identification is not supported by this interface."
-msgstr ""
-
-#: netstuff.c:691
-msgid "There are no unassigned interfaces on your system."
-msgstr ""
-
-#: netstuff.c:732
-#, c-format
-msgid "Do you really want to remove the assigned %s interface?"
-msgstr ""
-
-#: netstuff.c:755
-msgid "Select network driver"
-msgstr ""
-
-#: netstuff.c:755
-msgid "Set additional module parameters"
-msgstr ""
-
-#: netstuff.c:762
-msgid "Loading module..."
-msgstr ""
-
-#: netstuff.c:777
-msgid "Unable to load driver module."
-msgstr ""
-
-#: netstuff.c:780
-msgid "Module name cannot be blank."
-msgstr ""
-
-#: networking.c:110
-msgid "Stopping network..."
-msgstr ""
-
-#: networking.c:115
-msgid "Restarting network..."
-msgstr ""
-
-#: networking.c:146
-msgid "No GREEN interface assigned."
-msgstr ""
-
-#: networking.c:152
-msgid "Missing an IP address on GREEN."
-msgstr ""
-
-#: networking.c:163
-msgid "Error"
-msgstr ""
-
-#: networking.c:163
-msgid "Ignore"
-msgstr ""
-
-#: networking.c:164
-msgid "No RED interface assigned."
-msgstr ""
-
-#: networking.c:173
-msgid "Missing an IP address on RED."
-msgstr ""
-
-#: networking.c:183
-msgid "No ORANGE interface assigned."
-msgstr ""
-
-#: networking.c:189
-msgid "Missing an IP address on ORANGE."
-msgstr ""
-
-#: networking.c:199
-msgid "No BLUE interface assigned."
-msgstr ""
-
-#: networking.c:205
-msgid "Missing an IP address on BLUE."
-msgstr ""
-
-#: networking.c:217
-msgid "Misssing DNS."
-msgstr ""
-
-#: networking.c:224
-msgid "Missing Default Gateway."
-msgstr ""
-
-#: networking.c:237 networking.c:304
-msgid "Network configuration type"
-msgstr ""
-
-#: networking.c:238 networking.c:409
-msgid "Drivers and card assignments"
-msgstr ""
-
-#: networking.c:239 networking.c:640
-msgid "Address settings"
-msgstr ""
-
-#: networking.c:240 networking.c:743
-msgid "DNS and Gateway settings"
-msgstr ""
-
-#: networking.c:260
-msgid "When configuration is complete, a network restart will be required."
-msgstr ""
-
-#: networking.c:267
-#, c-format
-msgid ""
-"Current config: %s\n"
-"\n"
-"%s"
-msgstr ""
-
-#: networking.c:268
-msgid "Network configuration menu"
-msgstr ""
-
-#: networking.c:269 networking.c:520 networking.c:642
-msgid "Done"
-msgstr ""
-
-#: networking.c:300
-#, c-format
-msgid ""
-"Select the network configuration for %s. The following configuration types "
-"list those interfaces which have ethernet attached. If you change this "
-"setting, a network restart will be required, and you will have to "
-"reconfigure the network driver assignments."
-msgstr ""
-
-#: networking.c:307
-#, c-format
-msgid ""
-"Not enough netcards for your choice.\n"
-"\n"
-"Needed: %d - Available: %d\n"
-msgstr ""
-
-#: networking.c:359
-msgid ""
-"Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
-"\n"
-msgstr ""
-
-#: networking.c:408
-msgid "Do you wish to change these settings?"
-msgstr ""
-
-#: networking.c:447
-msgid "Restarting non-local network..."
-msgstr ""
-
-#: networking.c:464
-msgid ""
-"Please choose the interface you wish to change.\n"
-"\n"
-msgstr ""
-
-#: networking.c:519
-msgid "Assigned Cards"
-msgstr ""
-
-#: networking.c:520
-msgid "Remove"
-msgstr ""
-
-#: networking.c:556 networking.c:649
-#, c-format
-msgid ""
-"If you change this IP address, and you are logged in remotely, your "
-"connection to the %s machine will be broken, and you will have to reconnect "
-"on the new IP. This is a risky operation, and should only be attempted if "
-"you have physical access to the machine, should something go wrong."
-msgstr ""
-
-#: networking.c:641
-msgid "Select the interface you wish to reconfigure."
-msgstr ""
-
-#: networking.c:729
-msgid "Default gateway:"
-msgstr ""
-
-#: networking.c:744
-msgid ""
-"Enter the DNS and gateway information. These settings are used only with "
-"Static IP (and DHCP if DNS set) on the RED interface."
-msgstr ""
-
-#: networking.c:773
-msgid "Default gateway"
-msgstr ""
-
-#: networking.c:780
-msgid "Secondary DNS specified without a Primary DNS"
-msgstr ""
-
-#: passwords.c:33
-msgid ""
-"Enter the 'root' user password. Login as this user for commandline access."
-msgstr ""
-
-#: passwords.c:38 passwords.c:61
-msgid "Setting password"
-msgstr ""
-
-#: passwords.c:38
-msgid "Setting 'root' password...."
-msgstr ""
-
-#: passwords.c:39
-msgid "Problem setting 'root' password."
-msgstr ""
-
-#: passwords.c:53
-#, c-format
-msgid ""
-"Enter %s 'admin' user password. This is the user to use for logging into the"
-" %s web administration pages."
-msgstr ""
-
-#: passwords.c:60
-#, c-format
-msgid "Setting %s 'admin' user password..."
-msgstr ""
-
-#: passwords.c:62
-#, c-format
-msgid "Problem setting %s 'admin' user password."
-msgstr ""
-
-#: passwords.c:76
-msgid "Password:"
-msgstr ""
-
-#: passwords.c:77
-msgid "Again:"
-msgstr ""
-
-#: passwords.c:95
-msgid "Password cannot be blank."
-msgstr ""
-
-#: passwords.c:102
-msgid "Passwords do not match."
-msgstr ""
-
-#: passwords.c:109
-msgid "Password cannot contain spaces."
-msgstr ""
-
-#: timezone.c:77
-msgid "Choose the timezone you are in from the list below."
-msgstr ""
index 4378e9d38f3207d78aab780cf349707f2ef5bd11..339dea1d9c3eeb56f7b20dc9f8aeecff3525b4a7 100644 (file)
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Ardit Dani <ardit.dani@gmail.com>, 2015
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-08-21 15:13+0000\n"
-"Last-Translator: Michael Tremer <michael.tremer@ipfire.org>\n"
+"PO-Revision-Date: 2015-02-02 22:35+0000\n"
+"Last-Translator: Ardit Dani <ardit.dani@gmail.com>\n"
 "Language-Team: Albanian (http://www.transifex.com/projects/p/ipfire/language/sq/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -78,7 +79,7 @@ msgstr ""
 #: networking.c:410 networking.c:560 networking.c:653 networking.c:746
 #: passwords.c:89 timezone.c:78
 msgid "Cancel"
-msgstr ""
+msgstr "Anulo"
 
 #: dhcp.c:156
 msgid ""
@@ -253,7 +254,7 @@ msgstr ""
 
 #: netstuff.c:103
 msgid "Static"
-msgstr ""
+msgstr "Statik"
 
 #: netstuff.c:104
 msgid "DHCP"
@@ -310,11 +311,11 @@ msgstr ""
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
-msgstr ""
+msgstr "Përzgjedhje"
 
 #: netstuff.c:673
 msgid "Identify"
-msgstr ""
+msgstr "Identifikuesi"
 
 #: netstuff.c:678
 msgid "Device Identification"
index dcb417de7ed081c362fa11b2238e6e881954720a..4e684182d1d3f308892f8ea7e5e770a15e3ec372 100644 (file)
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Ersan YILDIRIM <ersan73@gmail.com>, 2015
 # Kudret Emre <kudretemre@hotmail.com.tr>, 2014
 msgid ""
 msgstr ""
 "Project-Id-Version: IPFire Project\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2014-08-21 15:12+0000\n"
-"PO-Revision-Date: 2014-09-30 20:41+0000\n"
-"Last-Translator: Kudret Emre <kudretemre@hotmail.com.tr>\n"
+"PO-Revision-Date: 2015-02-28 22:59+0000\n"
+"Last-Translator: Ersan YILDIRIM <ersan73@gmail.com>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/ipfire/language/tr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -56,11 +57,11 @@ msgstr "Ayar dosyası açılamıyor"
 
 #: dhcp.c:111
 msgid "DHCP server configuration"
-msgstr "DHCP sunucu yapılandırması"
+msgstr "DHCP Sunucu Yapılandırması"
 
 #: dhcp.c:116
 msgid "Configure the DHCP server by entering the settings information."
-msgstr "Ayarlar bilgisini girerek DHCP sunucusunu yapılandırın."
+msgstr "DHCP ayar bilgilerini girerek DHCP sunucusunu yapılandırın."
 
 #: dhcp.c:125
 msgid "Enabled"
@@ -157,7 +158,7 @@ msgstr "Klavye eşlemesi"
 
 #: keymap.c:85
 msgid "Choose the type of keyboard you are using from the list below."
-msgstr "Aşağıdaki listeden kullandığınız klavye tipini seçin."
+msgstr "Aşağıdaki listeden kullandığınız klavye türünü seçin."
 
 #: main.c:68 timezone.c:77
 msgid "Timezone"
@@ -173,11 +174,11 @@ msgstr "ISDN"
 
 #: main.c:73
 msgid "'root' password"
-msgstr "'root' şifresi"
+msgstr "'root' parolası"
 
 #: main.c:74
 msgid "'admin' password"
-msgstr "'admin' şifresi"
+msgstr "'admin' parolası"
 
 #: main.c:90
 msgid "              <Tab>/<Alt-Tab> between elements   |  <Space> selects"
@@ -185,7 +186,7 @@ msgstr "              <Tab>/<Alt-Tab> elementler arası geçiş   |  <Space> se
 
 #: main.c:97
 msgid "Section menu"
-msgstr "Bölüm menüsü"
+msgstr "Bölüm listesi"
 
 #: main.c:98
 msgid "Select the item you wish to configure."
@@ -207,7 +208,7 @@ msgstr "Uyarı"
 msgid ""
 "Initial setup was not entirely complete. You must ensure that Setup is "
 "properly finished by running setup again at the shell."
-msgstr "İlk kurulum tamamen yapılamadı. Kurulumun kabuktan yeniden başlatılıp düzgünce bitirildiğinden emin olmalısınız."
+msgstr "İlk kurulum tamamen yapılamadı. Kurulumun terminalden yeniden başlatılıp düzgünce bitirildiğinden emin olmalısınız."
 
 #: misc.c:62
 #, c-format
@@ -245,12 +246,12 @@ msgstr "ISDN cihazları için tarama yapılamıyor."
 #: netstuff.c:86
 #, c-format
 msgid "Interface - %s"
-msgstr "Arayüz - %s"
+msgstr "Ara Birim - %s"
 
 #: netstuff.c:91
 #, c-format
 msgid "Enter the IP address information for the %s interface."
-msgstr "%s arayüzü için IP adresi bilgisini girin."
+msgstr "%s ara birimi için IP adres bilgisini girin."
 
 #: netstuff.c:103
 msgid "Static"
@@ -270,7 +271,7 @@ msgstr "DHCP Ana bilgisayar adı:"
 
 #: netstuff.c:115
 msgid "Force DHCP MTU:"
-msgstr "Force DHCP MTU:"
+msgstr "DHCP MTU zorla:"
 
 #: netstuff.c:134
 msgid "IP address:"
@@ -298,16 +299,16 @@ msgstr "DHCP Ana bilgisayar adı"
 
 #: netstuff.c:396 netstuff.c:709
 msgid "Unset"
-msgstr "Unset"
+msgstr "Kurulmamış"
 
 #: netstuff.c:669
 #, c-format
 msgid "Please choose a networkcard for the following interface - %s."
-msgstr "Lütfen %s arayüzü için bit ağ kartı seçin."
+msgstr "Lütfen %s ara birimi için bir ağ kartı seçin."
 
 #: netstuff.c:672
 msgid "Extended Network Menu"
-msgstr "Genişletilmiş Ağ Menüsü"
+msgstr "Genişletilmiş Ağ Listesi"
 
 #: netstuff.c:673 networking.c:520
 msgid "Select"
@@ -327,16 +328,16 @@ msgstr "Seçilen porttaki ışıklar şimdi 10 saniye boyunca yanıp sönmeli...
 
 #: netstuff.c:679
 msgid "Identification is not supported by this interface."
-msgstr "Bu arayüz kimdik doğrulamayı desteklemiyor."
+msgstr "Bu ara birim kimdik doğrulamayı desteklemiyor."
 
 #: netstuff.c:691
 msgid "There are no unassigned interfaces on your system."
-msgstr "Sisteminizde atanmamış arayüz yok."
+msgstr "Sisteminizde atanmamış ara birim yok."
 
 #: netstuff.c:732
 #, c-format
 msgid "Do you really want to remove the assigned %s interface?"
-msgstr "Atanmış %s arayüzü gerçekten kaldırmak istiyor musunuz?"
+msgstr "Atanmış %s ara birimini gerçekten kaldırmak istiyor musunuz?"
 
 #: netstuff.c:755
 msgid "Select network driver"
@@ -368,7 +369,7 @@ msgstr "Ağ yeniden başlatılıyor..."
 
 #: networking.c:146
 msgid "No GREEN interface assigned."
-msgstr "Atanmış YEŞİL arayüz yok."
+msgstr "Atanmış YEŞİL ara birim yok."
 
 #: networking.c:152
 msgid "Missing an IP address on GREEN."
@@ -384,7 +385,7 @@ msgstr "Yoksay"
 
 #: networking.c:164
 msgid "No RED interface assigned."
-msgstr "Atanmış KIRMIZI arayüz yok."
+msgstr "Atanmış KIRMIZI ara birim yok."
 
 #: networking.c:173
 msgid "Missing an IP address on RED."
@@ -392,7 +393,7 @@ msgstr "KIRMIZI üzerinde kayıp IP adresi."
 
 #: networking.c:183
 msgid "No ORANGE interface assigned."
-msgstr "Atanmış TURUNCU arayüz yok."
+msgstr "Atanmış TURUNCU ara birim yok."
 
 #: networking.c:189
 msgid "Missing an IP address on ORANGE."
@@ -400,7 +401,7 @@ msgstr "TURUNCU üzerinde kayıp IP adresi."
 
 #: networking.c:199
 msgid "No BLUE interface assigned."
-msgstr "Atanmış MAVİ arayüz yok."
+msgstr "Atanmış MAVİ ara birim yok."
 
 #: networking.c:205
 msgid "Missing an IP address on BLUE."
@@ -416,7 +417,7 @@ msgstr "Kayıp Varsayılan Ağ Geçidi"
 
 #: networking.c:237 networking.c:304
 msgid "Network configuration type"
-msgstr "Ağ yapılandırma tipi"
+msgstr "Ağ yapılandırma türü"
 
 #: networking.c:238 networking.c:409
 msgid "Drivers and card assignments"
@@ -424,15 +425,15 @@ msgstr "Sürücüler ve kart atamaları"
 
 #: networking.c:239 networking.c:640
 msgid "Address settings"
-msgstr "Adres ayarları"
+msgstr "Adres Ayarları"
 
 #: networking.c:240 networking.c:743
 msgid "DNS and Gateway settings"
-msgstr "DNS ve Ağ Geçidi ayarları"
+msgstr "DNS ve Ağ Geçidi Ayarları"
 
 #: networking.c:260
 msgid "When configuration is complete, a network restart will be required."
-msgstr "Yapılandırma tamamlandığında yeniden başlatma gerekecek."
+msgstr "Yapılandırma tamamlandığında ağı yeniden başlatmanız gerekir."
 
 #: networking.c:267
 #, c-format
@@ -444,11 +445,11 @@ msgstr "Geçerli yapılandırma: %s\n\n%s"
 
 #: networking.c:268
 msgid "Network configuration menu"
-msgstr "Ağ yapılandırma menüsü"
+msgstr "Ağ Yapılandırma Listesi"
 
 #: networking.c:269 networking.c:520 networking.c:642
 msgid "Done"
-msgstr "Tamam"
+msgstr "Bitti"
 
 #: networking.c:300
 #, c-format
@@ -457,7 +458,7 @@ msgid ""
 "list those interfaces which have ethernet attached. If you change this "
 "setting, a network restart will be required, and you will have to "
 "reconfigure the network driver assignments."
-msgstr "%s için ağ yapılandırmasını seçin. Aşağıdaki yapılandırma tipi listesi ethernet ayarı yapılmış olan arayüzleri gösterir. Eğer bu ayarları değiştirirseniz, ağın yeniden başlatılması ve ağ sürücüleri atamalarını tekrar yapılandırmanız gerekecektir."
+msgstr "%s için ağ yapılandırmasını seçin. Aşağıdaki yapılandırma türleri ethernet kartlarına atanmış arabirimleri listeler. Eğer bu ayarları değiştirirseniz, ağın yeniden başlatılması ve ağ sürücüleri atamalarını tekrar yapılandırmanız gerekecektir."
 
 #: networking.c:307
 #, c-format
@@ -471,7 +472,7 @@ msgstr "Seçiminiz için yeterli kart yok.\n\nGereken: %d - Kullanılabilir: %d\
 msgid ""
 "Configure network drivers, and which interface each card is assigned to. The current configuration is as follows:\n"
 "\n"
-msgstr "Ağ sürücülerini ve her bir kart için atanmış arayüzleri yapılandırın. Geçerli yapılandırma aşağıdaki gibidir:\n\n"
+msgstr "Ağ sürücülerini ve her bir kart için atanmış ara birimleri yapılandırın. Geçerli yapılandırma aşağıdaki gibidir:\n\n"
 
 #: networking.c:408
 msgid "Do you wish to change these settings?"
@@ -485,7 +486,7 @@ msgstr "Yerel olmayan ağ yeniden başlatılıyor..."
 msgid ""
 "Please choose the interface you wish to change.\n"
 "\n"
-msgstr "Lütfen değiştirmek istediğiniz arayüzü seçin.\n\n"
+msgstr "Lütfen değiştirmek istediğiniz ara birimi seçin.\n\n"
 
 #: networking.c:519
 msgid "Assigned Cards"
@@ -506,7 +507,7 @@ msgstr "Eğer bu IP adresini değiştirirseniz, ve uzaktan oturum açmışsanız
 
 #: networking.c:641
 msgid "Select the interface you wish to reconfigure."
-msgstr "Yeniden yapılandırmak istediğiniz arayüzü seçin."
+msgstr "Yeniden yapılandırmak istediğiniz ara birimi seçin."
 
 #: networking.c:729
 msgid "Default gateway:"
@@ -516,7 +517,7 @@ msgstr "Varsayılan ağ geçidi:"
 msgid ""
 "Enter the DNS and gateway information. These settings are used only with "
 "Static IP (and DHCP if DNS set) on the RED interface."
-msgstr "DNS ve ağ geçidi bilgisini girin. Bu ayarlar sadece KIRMIZI arayüzde Statik IP  (ve eğer DNS ayarlanmışsa DHCP) ile kullanılacaktır."
+msgstr "DNS ve ağ geçidi bilgilerini girin. Bu ayarlar sadece KIRMIZI ara birim adres ayarlarında Statik seçeneği seçilmişse kullanılır. Eğer KIRMIZI ara birim adres ayarlarında DHCP seçeneğini seçtiyseniz bu alanı boş bırakabilirsiniz."
 
 #: networking.c:773
 msgid "Default gateway"
@@ -529,40 +530,40 @@ msgstr "Birincil DNS olmadan İkincil DNS belirtildi."
 #: passwords.c:33
 msgid ""
 "Enter the 'root' user password. Login as this user for commandline access."
-msgstr "'root' kullanıcı şifresini girin. Komut satırına erişmek için bu kullanıcıyla oturum açın."
+msgstr "%s 'root' kullanıcı parolasını girin. Komut satırı erişimi için bu kullanıcıyla oturum açın."
 
 #: passwords.c:38 passwords.c:61
 msgid "Setting password"
-msgstr "Şifre ayarlanıyor"
+msgstr "Parola ayarlanıyor"
 
 #: passwords.c:38
 msgid "Setting 'root' password...."
-msgstr "'root' şifresi ayarlanıyor..."
+msgstr "'root' parolası ayarlanıyor..."
 
 #: passwords.c:39
 msgid "Problem setting 'root' password."
-msgstr "'root' şifresi ayarlama sorunu."
+msgstr "'root' parolası ayarlama sorunu."
 
 #: passwords.c:53
 #, c-format
 msgid ""
 "Enter %s 'admin' user password. This is the user to use for logging into the"
 " %s web administration pages."
-msgstr "%s 'admin' kullanıcısı için şifre girin. Bu kullanıcı, %s web yönetim sayfalarını kullanmak için oturum açılacak kullanıcıdır."
+msgstr "%s 'admin' kullanıcı parolasını girin. Bu kullanıcı, %s web yönetimi sayfalarının kayıtlarına erişebilen kullanıcıdır."
 
 #: passwords.c:60
 #, c-format
 msgid "Setting %s 'admin' user password..."
-msgstr "%s 'admin' kullanıcısının şifresi ayarlanıyor..."
+msgstr "%s 'admin' kullanıcısının parolası ayarlanıyor..."
 
 #: passwords.c:62
 #, c-format
 msgid "Problem setting %s 'admin' user password."
-msgstr "%s 'admin' kullanıcı şifresi ayarlama sorunu."
+msgstr "%s 'admin' kullanıcı parolası ayarlama sorunu."
 
 #: passwords.c:76
 msgid "Password:"
-msgstr "Şifre:"
+msgstr "Parola:"
 
 #: passwords.c:77
 msgid "Again:"
@@ -570,16 +571,16 @@ msgstr "Tekrar:"
 
 #: passwords.c:95
 msgid "Password cannot be blank."
-msgstr "Şifre boş olamaz."
+msgstr "Parola boş olamaz."
 
 #: passwords.c:102
 msgid "Passwords do not match."
-msgstr "Şifreler eşleşmiyor."
+msgstr "Parolalar eşleşmiyor."
 
 #: passwords.c:109
 msgid "Password cannot contain spaces."
-msgstr "Şifre boşluk içeremez."
+msgstr "Parola boşluk içeremez."
 
 #: timezone.c:77
 msgid "Choose the timezone you are in from the list below."
-msgstr "Aşağıdaki listeden içinde bulunduğunuz zaman dilimini seçin."
+msgstr "Aşağıdaki listeden bulunduğunuz zaman dilimini seçin."
index 388d2edcfed9ff75ebbe7182235db51abf19cb6f..14fd64634bd4ef3ad09f33be14f86c75610d863c 100644 (file)
@@ -79,7 +79,6 @@ void networkdialogcallbacktype(newtComponent cm, void *data);
 int interfacecheck(struct keyvalue *kv, char *colour);
 int rename_nics(void);
 int init_knics(void);
-int create_udev(void);
 int scan_network_cards(void);
 int nicmenu(int colour);
 int clear_card_entry(int cards);