diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..effec28 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/rbldnsd_0.996b.tar.gz +/rbldnsd-0.997a.tar.gz +/rbldnsd-0.998.tar.gz +/rbldnsd-0.998b.tgz diff --git a/85932ec5.patch b/85932ec5.patch new file mode 100644 index 0000000..8b919ef --- /dev/null +++ b/85932ec5.patch @@ -0,0 +1,62 @@ +From 85932ec5d89041424cf6d20c71b482e23cf17d2f Mon Sep 17 00:00:00 2001 +From: "Antonio \"Criddi\" Mammita" + <77116213+ammammita@users.noreply.github.com> +Date: Wed, 13 Jan 2021 17:17:31 +0000 +Subject: [PATCH] Ticket 18 and 19 (#22) + +Fix issue #18 and issue #19 + +Base template replacement issue +--- + rbldnsd.8 | 4 ++-- + rbldnsd_util.c | 8 ++++++-- + 2 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/rbldnsd.8 b/rbldnsd.8 +index 36e70fa..addb737 100644 +--- a/rbldnsd.8 ++++ b/rbldnsd.8 +@@ -726,7 +726,7 @@ the above example may be simplified to: + .fi + There is no default TXT value, so + .B rbldnsd +-will not return anything for TXT queries it TXT isn't ++will not return anything for TXT queries unless TXT isn't + specified. + .PP + When A value is specified for a given entry, but TXT template +@@ -782,7 +782,7 @@ text given for individual entries. In order to stop usage of base template + \fB$=\fR for a single record, start it with \fB=\fR (which will be omitted + from the resulting TXT value). For example, + .nf +- $0 See http://www.example.com/bl?$= ($) for details ++ $= See http://www.example.com/bl?$= ($) for details + 127.0.0.2 r123 + 127.0.0.3 + 127.0.0.4 =See other blocklists for details about $ +diff --git a/rbldnsd_util.c b/rbldnsd_util.c +index c6d628d..eeafd07 100644 +--- a/rbldnsd_util.c ++++ b/rbldnsd_util.c +@@ -243,6 +243,8 @@ int txtsubst(char sb[TXTBUFSIZ], const char *txt, + char *const e = sb + 254; + char *lp = sb; + const char *s, *si, *sx; ++ const char *srec = s0; ++ + if (txt[0] == '=') + sx = ++txt; + else if (sn[SUBST_BASE_TEMPLATE] && *sn[SUBST_BASE_TEMPLATE]) { +@@ -273,8 +275,10 @@ int txtsubst(char sb[TXTBUFSIZ], const char *txt, + sl = strlen(si); + ++s; + } +- else +- sl = strlen(si = s0); ++ else { ++ sl = strlen(si = srec); ++ } ++ + if (lp + sl > e) /* silently truncate TXT RR >255 bytes */ + sl = e - lp; + memcpy(lp, si, sl); diff --git a/README.systemd b/README.systemd new file mode 100644 index 0000000..474f5f5 --- /dev/null +++ b/README.systemd @@ -0,0 +1,76 @@ +Using rbldnsd with systemd +========================== + +The traditional SysV initscript shipped with rbldnsd supports using +multiple instances with arbitrary command lines. This is difficult +to achieve with systemd so a wrapper script, rbldnsctl, has been +provided to assist with the creation and use of native systemd unit +files for each required instance, using exactly the same configuration +in /etc/sysconfig/rbldnsd as the SysV initscript used. + +Having edited /etc/sysconfig/rbldnsd to specify the rbldnsd +instance(s) required, individual unit files for each instance can be +created by: + + rbldnsctl create + +This creates unit files /etc/systemd/system/rbldnsd-.service +for each required instance. These units can then be manipulated +individually using /bin/systemctl as usual, or all at once by using +other rbldnsctl commands: + + rbldnsctl enable + +This enables all configured rbldnsd instances to start at boot time +(equivalent of chkconfig rbldnsd on). + + rbldnsctl disable + +This disables all configured rbldnsd instances from starting at boot time +(equivalent of chkconfig rbldnsd off). + + rbldnsctl start + +This starts all configured rbldnsd instances immediately +(equivalent of service rbldnsd start). + + rbldnsctl stop + +This stops all configured rbldnsd instances +(equivalent of service rbldnsd stop). + + rbldnsctl reload + +This reloads all configured rbldnsd instances +(equivalent of service rbldnsd reload). + + rbldnsctl restart + +This restarts all configured rbldnsd instances +(equivalent of service rbldnsd restart). + + rbldnsctl condrestart + rbldnsctl try-restart + +These restart all configured rbldnsd instances immediately, if they are +already running (equivalent of service rbldnsd condrestart). + + rbldnsctl status + +This shows status of all configured rbldnsd instances +(equivalent of service rbldnsd status). + +When editing /etc/sysconfig/rbldnsd to specify rbldnsd instance options, +bear in mind: + +* systemd prefers the daemons it controls not to fork, so the unit files + created by rbldnsctl start rbldnsd with the "-n" option to prevent + it from forking; this also means that systemd knows the PIDs of all + instances itself, so there is no need to specify any forking/pidfile related + options in /etc/sysconfig/rbldnsd + +* if you want just a single instance of rbldnsd and use the traditional "-" + identifier for it, rbldnsctl will create a unit file + /etc/systemd/system/rbldnsd-single.service, i.e. the instance name will be + set to "single" + diff --git a/dead.package b/dead.package deleted file mode 100644 index a72aec0..0000000 --- a/dead.package +++ /dev/null @@ -1 +0,0 @@ -epel8-playground decommissioned : https://pagure.io/epel/issue/136 diff --git a/rbldnsctl b/rbldnsctl new file mode 100755 index 0000000..f5bb1b9 --- /dev/null +++ b/rbldnsctl @@ -0,0 +1,175 @@ +#!/bin/bash +# +# rbldnsctl : helper script for managing rbldnsd instances with systemd +# +# Configuration is via the RBLDNSD variable in /etc/sysconfig/rbldnsd, +# exactly as used with the traditional sysv initscript. +# +# Usage: +# +# rbldnsctl create +# Creates unit files /etc/systemd/system/rbldnsd-.service +# for each configured rbldnsd instance +# +# rbldnsctl enable +# Enables (via systemctl) all configured rbldnsd instances to start +# at boot time +# +# rbldnsctl disable +# Disables (via systemctl) all configured rbldnsd instances from +# starting at boot time +# +# rbldnsctl start +# Starts (via systemctl) all configured rbldnsd instances immediately +# +# rbldnsctl stop +# Stop (via systemctl) all configured rbldnsd instances immediately +# +# rbldnsctl reload +# Reloads (via systemctl) all configured rbldnsd instances immediately +# +# rbldnsctl restart +# Restarts (via systemctl) all configured rbldnsd instances immediately +# +# rbldnsctl condrestart +# rbldnsctl try-restart +# Restarts (via systemctl) all configured rbldnsd instances immediately, +# if they are already running +# +# rbldnsctl status +# Shows status of all configured rbldnsd instances +# +PATH=/sbin:/bin:/usr/bin:/usr/sbin + +# Get config and check that RBLDNSD is set +[ -f /etc/sysconfig/rbldnsd ] && . /etc/sysconfig/rbldnsd + +# Check that configuration has been set up (RBLDNSD set in /etc/sysconfig/rbldnsd) +if [ -z "$RBLDNSD" ]; then + echo "rbldnsctl: RBLDNSD not configured in /etc/sysconfig/rbldnsd" >&2 + exit 6 +fi + +# Set an exit status +set_status() { + exit $1 +} + +# Process multiple instances of the daemon (see /etc/sysconfig/rbldnsd) +for_all_daemons() { + ret=0 + while read name args; do + # For a single instance (name = "-"), use "single" as name + case "$name" in + ""|\#*) continue;; + -) name=single;; + *) ;; + esac + # Process this instance + $1 + thisret=$? + if [ "$1" = "check_one_daemon" -o "$1" = "reload_one_daemon" ]; then + if [ $thisret -ne 0 ]; then + ret=$thisret + fi + else + if [ $thisret -ne 0 ]; then + ret=1 + fi + fi + done < <(echo "$RBLDNSD") + set_status $ret +} + +start_one_daemon() { + /usr/bin/systemctl start "rbldnsd-${name}.service" +} + +stop_one_daemon() { + /usr/bin/systemctl stop "rbldnsd-${name}.service" +} + +reload_one_daemon() { + /usr/bin/systemctl reload "rbldnsd-${name}.service" +} + +check_one_daemon() { + /usr/bin/systemctl status "rbldnsd-${name}.service" +} + +restart_one_daemon() { + /usr/bin/systemctl restart "rbldnsd-${name}.service" +} + +condrestart_one_daemon() { + /usr/bin/systemctl try-restart "rbldnsd-${name}.service" +} + +create_one_daemon() { + { + awk '/^\[Unit\]/, 1 == 2' /etc/systemd/rbldnsd.conf + cat <<-END_OF_UNIT + [Unit] + Description=DNSBL (rbldnsd) ${name} instance + + [Service] + ExecStart=/sbin/rbldnsd -n ${args} + END_OF_UNIT + } > "/etc/systemd/system/rbldnsd-${name}.service" + echo "Created unit file /etc/systemd/system/rbldnsd-${name}.service" +} + +enable_one_daemon() { + /usr/bin/systemctl enable "rbldnsd-${name}.service" +} + +disable_one_daemon() { + /usr/bin/systemctl disable "rbldnsd-${name}.service" +} + +# See how we were called. +case "$1" in + create) + for_all_daemons create_one_daemon + RETVAL=$? + /usr/bin/systemctl daemon-reload + ;; + enable) + for_all_daemons enable_one_daemon + RETVAL=$? + ;; + disable) + for_all_daemons disable_one_daemon + RETVAL=$? + ;; + start) + for_all_daemons start_one_daemon + RETVAL=$? + ;; + restart) + for_all_daemons restart_one_daemon + RETVAL=$? + ;; + reload) + for_all_daemons reload_one_daemon + RETVAL=$? + ;; + stop) + for_all_daemons stop_one_daemon + RETVAL=$? + ;; + status) + for_all_daemons check_one_daemon + RETVAL=$? + ;; + condrestart|try-restart) + for_all_daemons condrestart_one_daemon + RETVAL=$? + ;; + *) + echo $"Usage: $0 {create|enable|disable|start|stop|restart|try-restart|reload|status}" >&2 + RETVAL=1 + ;; +esac + +exit $RETVAL diff --git a/rbldnsd-0.998b-version.patch b/rbldnsd-0.998b-version.patch new file mode 100644 index 0000000..a193fd9 --- /dev/null +++ b/rbldnsd-0.998b-version.patch @@ -0,0 +1,16 @@ +This addition of the release date for version 0.998b fixes the +version number that rbldnsd reports in its logging output. The +version is extracted from the NEWS file by the configure script +but the pattern matching requires the date to be present. + +--- NEWS ++++ NEWS +@@ -1,7 +1,7 @@ + This file describes user-visible changes in rbldnsd. + Newer news is at the top. + +-0.998b ++0.998b (21 Dec 2016) + - Fix for memory errors on very large datasets. + Patch by Andrew Clayton + diff --git a/rbldnsd-configure-c99.patch b/rbldnsd-configure-c99.patch new file mode 100644 index 0000000..3eb7970 --- /dev/null +++ b/rbldnsd-configure-c99.patch @@ -0,0 +1,20 @@ +Avoid implicit declarations of gethostbyname and connect in the +non-autoconf configure script. This prevents altering the test result +with compilers which do not support implicit function declarations. + +A more elaborate pull request has been submitted upstream: + + + +diff --git a/configure b/configure +index b0cb655797639dac..978f480e391a46a8 100755 +--- a/configure ++++ b/configure +@@ -173,6 +173,7 @@ else + fi + + if ac_library_find_v 'connect()' "" "-lsocket -lnsl" <rbldnsd.sysusers.conf </dev/null || groupadd -r rbldns +getent passwd rbldns >/dev/null || \ + useradd -r -g rbldns -d %{_localstatedir}/lib/rbldnsd \ + -s /sbin/nologin -c "rbldns daemon" rbldns +exit 0 +%endif + +%post +systemctl daemon-reload &>/dev/null || : + +%preun +if [ $1 -eq 0 ]; then + # Package removal, not upgrade + %{_sbindir}/rbldnsctl stop &>/dev/null || : + %{_sbindir}/rbldnsctl disable &>/dev/null || : +fi + +%postun +systemctl daemon-reload &>/dev/null || : +if [ $1 -ge 1 ]; then + # Package upgrade, not uninstall + %{_sbindir}/rbldnsctl try-restart &>/dev/null || : +fi + +%files +%license LICENSE.txt +%doc CHANGES-0.81 NEWS README README.user TODO contrib/debian/changelog +%{_sbindir}/rbldnsd +%{_mandir}/man8/rbldnsd.8* +%dir %{_localstatedir}/lib/rbldnsd/ +%config(noreplace) %{_sysconfdir}/sysconfig/rbldnsd +%doc README.systemd +%config(noreplace) %{_sysconfdir}/systemd/rbldnsd.conf +%{_sbindir}/rbldnsctl +%if %{use_sysusers} +%{_sysusersdir}/rbldnsd.conf +%endif + +%changelog +* Fri Sep 26 2025 Paul Howarth - 0.998b-19 +- Fix base template replacement issue (GH#18, GH#19, GH#22, rhbz#2398024) + +* Fri Jul 25 2025 Fedora Release Engineering - 0.998b-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Wed Feb 12 2025 Paul Howarth - 0.998b-17 +- Add sysusers.d config file to allow rpm to create users/groups automatically + from Fedora 43 onwards + +* Sat Jan 18 2025 Fedora Release Engineering - 0.998b-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Fri Jul 19 2024 Fedora Release Engineering - 0.998b-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jan 26 2024 Fedora Release Engineering - 0.998b-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 22 2024 Fedora Release Engineering - 0.998b-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jul 21 2023 Fedora Release Engineering - 0.998b-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Fri Jun 23 2023 Paul Howarth - 0.998b-11 +- Avoid use of systemd ".include" directive (rhbz#2216790) +- Avoid use of deprecated patch syntax +- Fix version number reported by rbldnsd + +* Mon Jan 30 2023 Paul Howarth - 0.998b-10 +- Use SPDX-format license tag + +* Mon Jan 30 2023 Florian Weimer - 0.998b-9 +- Port non-autoconf configure script to C99 + +* Fri Jan 20 2023 Fedora Release Engineering - 0.998b-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 0.998b-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Fri Jan 21 2022 Fedora Release Engineering - 0.998b-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jul 23 2021 Fedora Release Engineering - 0.998b-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jan 27 2021 Paul Howarth - 0.998b-4 +- Drop EL-6 support + - Always assume systemd init + - Drop support for sysv-to-systemd migration + - Use %%license unconditionally + - Use %%{?systemd_requires} + +* Wed Jan 27 2021 Fedora Release Engineering - 0.998b-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 0.998b-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue May 5 2020 Paul Howarth - 0.998b-1 +- Update to 0.998b + - Minor fixes in copyright and documentation + - Bugfix: Minor fix to prevent errors on newer compilers + - Fix for memory errors on very large datasets +- Upstream is now at rbldnsd.io +- Package new LICENSE.txt and README files + +* Thu Jan 30 2020 Fedora Release Engineering - 0.998-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jul 26 2019 Fedora Release Engineering - 0.998-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Feb 02 2019 Fedora Release Engineering - 0.998-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Jul 14 2018 Fedora Release Engineering - 0.998-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Fri Feb 09 2018 Fedora Release Engineering - 0.998-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Jan 29 2018 Paul Howarth - 0.998-6 +- Account for systemd-units being merged into systemd at Fedora 17 +- Drop support for SysV-to-systemd migration from Fedora 18, RHEL 7 +- Use forward-looking conditionals +- Use fewer full paths from commands in scriptlets, to aid readability +- Drop legacy BuildRoot: and Group: tags +- Drop explicit buildroot cleaning in %%clean and %%install + +* Thu Aug 03 2017 Fedora Release Engineering - 0.998-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 0.998-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 0.998-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 0.998-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jan 1 2016 Paul Howarth - 0.998-1 +- Update to 0.998 + - Correctly handle V4MAPPED (v4 in v6) addresses; the original v6 prefix was + wrong + - Sometimes IP4-based datasets gave false positives when an IP6 dataset was + present, and it was also possible to have false positives in IP6 datasets; + both have been fixed + +* Thu Jun 18 2015 Fedora Release Engineering - 0.997a-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sun Aug 17 2014 Fedora Release Engineering - 0.997a-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Thu Jul 10 2014 Paul Howarth 0.997a-4 +- fix return value from initscript, by using process substitution instead of + a while loop at the end of a pipe (#1118013) +- drop %%defattr, redundant since rpm 4.4 + +* Sun Jun 8 2014 Fedora Release Engineering 0.997a-3 +- rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu Nov 21 2013 Paul Howarth 0.997a-2 +- use format string in dslog() invocation + +* Mon Jul 29 2013 Paul Howarth 0.997a-1 +- update to 0.997a + - minor fixes/changes in packaging, no code changes + - in particular, fixes a build failure on *BSD introduced in 0.997 + +* Sun Jun 30 2013 Paul Howarth 0.997-1 +- update to 0.997 + - main feature of this version is ipv6 support + - feature: ip6trie - new dataset supports listing of arbitrary length ip6 + CIDRs, along with individual A/TXT values for each prefix + - feature: ip6tset - new dataset supports listing of ip6 /64 subnets and the + exclusion of /128 subnets; only supports a single A/TXT value for the + entire dataset + - optimization: ip4trie - using new trie implementation (developed for the + ip6trie dataset) decreases memory consumption by roughly a factor of three + - feature: acl dataset - ip6 addresses are now supported in ACLs + - feature: added --enable-asserts configure option to enable compilation of + debugging assertions; assertion checking is disabled by default + - featurette: zero-length "wildcard" IP4 CIDR prefixes are now allowed in + ip4trie and acl datasets + +* Thu Feb 14 2013 Fedora Release Engineering 0.996b-10 +- rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Jul 21 2012 Fedora Release Engineering 0.996b-9 +- rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Apr 17 2012 Paul Howarth 0.996b-8 +- rename systemctl-rbldnsd to rbldnsctl (#807504) + +* Tue Apr 17 2012 Paul Howarth 0.996b-7 +- use native systemd init from F-17 onwards (see README.systemd) + +* Mon Apr 16 2012 Paul Howarth 0.996b-6 +- fix some initscript issues (#807504) +- do a hardened build (PIE) where possible + +* Thu Jan 5 2012 Paul Howarth 0.996b-5 +- nobody else likes macros for commands + +* Wed Feb 9 2011 Fedora Release Engineering 0.996b-4 +- rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Jul 26 2009 Fedora Release Engineering 0.996b-3 +- rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Wed Feb 25 2009 Fedora Release Engineering 0.996b-2 +- rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Mar 31 2008 Paul Howarth 0.996b-1 +- update to 0.996b +- _GNU_SOURCE no longer needed + +* Wed Feb 20 2008 Paul Howarth 0.996a-6 +- fix exit codes for reload, stop, and try-restart actions of initscript + +* Wed Feb 13 2008 Paul Howarth 0.996a-5 +- define _GNU_SOURCE for NI_MAXHOST symbol visibility +- LSB-ize initscript (#247043) + +* Thu Aug 23 2007 Paul Howarth 0.996a-4 +- add buildreq gawk + +* Thu Aug 23 2007 Paul Howarth 0.996a-3 +- upstream released a new version without changing the version number (the + only changes are in debian/control and debian/changelog, neither of which + are used in the RPM package) +- unexpand tabs in spec +- use the standard scriptlet for user/group creation in %%pre +- drop scriptlet dependencies on /sbin/service by calling initscript directly +- clarify license as GPL version 2 or later + +* Wed Aug 30 2006 Paul Howarth 0.996a-2 +- FE6 mass rebuild + +* Fri Jul 28 2006 Paul Howarth 0.996a-1 +- update to 0.996a + +* Tue Feb 21 2006 Paul Howarth 0.996-1 +- update to 0.996 +- use /usr/sbin/useradd instead of %%{_sbindir}/useradd +- add buildreq zlib-devel to support gzipped zone files + +* Wed Feb 15 2006 Paul Howarth 0.995-5 +- license text not included in upstream tarball, so don't include it + +* Tue Jun 28 2005 Paul Howarth 0.995-4 +- include gpl.txt as %%doc + +* Mon Jun 27 2005 Paul Howarth 0.995-3 +- fix /etc/sysconfig/rbldnsd references to /var/lib/rbldns to point to + %%{_localstatedir}/lib/rbldnsd instead +- don't enable daemons in any runlevel by default +- add -q option to sample entries in /etc/sysconfig/rbldnsd + +* Fri Jun 17 2005 Paul Howarth 0.995-2 +- first Fedora Extras build, largely based on upstream spec file diff --git a/sources b/sources new file mode 100644 index 0000000..e8638f2 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (rbldnsd-0.998b.tgz) = 8efa1e324475c29baeeb1e64c433d4e28516b01ff871a620938fb72d7ad8bdfa23e541b9546081bdda12622178da2f4d32cec6cb83466b05ee9076f67e31d8fe