[Git][debian-proftpd-team/proftpd-mod-autohost][master] Fix the build, broken by API changes in ProFTPD 1.3.7b.
Hilmar Preuße (@hilmar-guest)
gitlab at salsa.debian.org
Mon Sep 20 08:01:06 BST 2021
Hilmar Preuße pushed to branch master at Debian ProFTPD Team / proftpd-mod-autohost
Commits:
c3fb8e49 by Hilmar Preusse at 2021-09-20T08:59:53+02:00
Fix the build, broken by API changes in ProFTPD 1.3.7b.
- - - - -
4 changed files:
- debian/changelog
- debian/control
- + debian/patches/issue_8
- + debian/patches/series
Changes:
=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+proftpd-mod-autohost (0.6-2) UNRELEASED; urgency=medium
+
+ * Add patch for Upstream issue #8 "Fix the build, broken by API changes
+ in ProFTPD 1.3.7b.". Bump BD version to 1.3.7b.
+
+ -- Hilmar Preusse <hille42 at web.de> Mon, 20 Sep 2021 08:51:25 +0200
+
proftpd-mod-autohost (0.6-1) unstable; urgency=medium
* New upstream release (bump B-D Version of proftpd to 1.3.6-1).
=====================================
debian/control
=====================================
@@ -6,7 +6,7 @@ Uploaders: Mahyuddin Susanto <udienz at ubuntu.com>,
Francesco Paolo Lovergine <frankie at debian.org>,
Hilmar Preusse <hille42 at web.de>
Build-Depends: debhelper-compat (=13),
- proftpd-dev (>= 1.3.6-1~)
+ proftpd-dev (>= 1.3.7b-1~)
Standards-Version: 4.5.0
Rules-Requires-Root: no
Homepage: http://www.castaglia.org/proftpd/modules/mod_autohost.html
=====================================
debian/patches/issue_8
=====================================
@@ -0,0 +1,529 @@
+From dc46dde78b8f9288efd8ea516da2fde9ed8f8f51 Mon Sep 17 00:00:00 2001
+From: TJ Saunders <tj at castaglia.org>
+Date: Wed, 16 Jun 2021 20:49:36 -0700
+Subject: [PATCH] Issue #8: Fix the build, broken by API changes in ProFTPD 1.3.7b.
+
+Index: proftpd-mod-autohost/mod_autohost.c
+===================================================================
+--- proftpd-mod-autohost.orig/mod_autohost.c 2020-08-18 20:46:01.608645323 +0200
++++ proftpd-mod-autohost/mod_autohost.c 2021-09-20 08:50:00.005619649 +0200
+@@ -1,6 +1,6 @@
+ /*
+ * ProFTPD: mod_autohost -- a module for mass virtual hosting
+- * Copyright (c) 2004-2020 TJ Saunders
++ * Copyright (c) 2004-2021 TJ Saunders
+ *
+ * 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
+@@ -118,13 +118,20 @@
+ }
+
+ /* Largely borrowed/copied from src/bindings.c. */
+-static unsigned int process_serveralias(server_rec *s) {
++static unsigned int process_serveralias(server_rec *s, pr_ipbind_t *ipbind) {
+ unsigned namebind_count = 0;
+ config_rec *c;
+
+ /* If there is no ipbind already for this server, we cannot associate
+ * any ServerAlias-based namebinds to it.
++ *
++ * Keep in mind that there may be multiple ipbinds pointed at this server:
++ *
++ * <VirtualHost 1.2.3.4 5.6.7.8>
++ * ServerAlias alias
++ * </VirtualHost>
+ */
++
+ if (pr_ipbind_get_server(s->addr, s->ServerPort) == NULL) {
+ return 0;
+ }
+@@ -133,9 +140,11 @@
+ while (c != NULL) {
+ int res;
+
+- pr_signals_handle();
+-
++#if PROFTPD_VERSION_NUMBER < 0x0001030707
+ res = pr_namebind_create(s, c->argv[0], s->addr, s->ServerPort);
++#else
++ res = pr_namebind_create(s, c->argv[0], ipbind, s->addr, s->ServerPort);
++#endif /* ProFTPD 1.3.7b and later */
+ if (res == 0) {
+ namebind_count++;
+
+@@ -163,14 +172,13 @@
+
+ static int autohost_parse_config(conn_t *conn, const char *path) {
+ server_rec *s;
+- pr_ipbind_t *binding;
++ pr_ipbind_t *ipbind;
+
+ /* We use session.pool here, rather than autohost_pool, because
+ * we'll be destroying autohost_pool once the server_rec has
+ * been created and bound.
+ */
+ pr_parser_prepare(session.pool, &autohost_server_list);
+-
+ pr_parser_server_ctxt_open(pr_netaddr_get_ipstr(conn->local_addr));
+
+ /* XXX: some things, like Port, <VirtualHost>, etc in the autohost.conf
+@@ -182,14 +190,13 @@
+ }
+
+ pr_parser_server_ctxt_close();
+-
+ pr_parser_cleanup();
+
+ if (fixup_servers(autohost_server_list) < 0) {
+ int xerrno = errno;
+
+ (void) pr_log_writefile(autohost_logfd, MOD_AUTOHOST_VERSION,
+- "error fixing up autohost: %s", strerror(xerrno));
++ "error fixing up autohost config '%s': %s", path, strerror(xerrno));
+
+ errno = xerrno;
+ return -1;
+@@ -198,17 +205,18 @@
+ s = (server_rec *) autohost_server_list->xas_list;
+ s->ServerPort = conn->local_port;
+
++ ipbind = pr_ipbind_find(conn->local_addr, conn->local_port, TRUE);
++
+ /* Now that we have a valid server_rec, we need to bind it to
+ * the address to which the client connected.
+ */
+- process_serveralias(s);
++ process_serveralias(s, ipbind);
+
+- binding = pr_ipbind_find(conn->local_addr, conn->local_port, TRUE);
+- if (binding != NULL) {
++ if (ipbind != NULL) {
+ /* If we already have a binding in place, we need to replace the
+ * server_rec to which that binding points with our new server_rec.
+ */
+- binding->ib_server = s;
++ ipbind->ib_server = s;
+
+ return 0;
+ }
+@@ -418,8 +426,6 @@
+
+ pr_trace_msg(trace_channel, 9, "found using autohost for %s#%u",
+ pr_netaddr_get_ipstr(conn->local_addr), conn->local_port);
+-
+- return;
+ }
+
+ #if defined(PR_SHARED_MODULE)
+@@ -465,8 +471,6 @@
+ pr_trace_msg(trace_channel, 9, "TLS SNI '%s' found using autohost for %s#%u",
+ server_name, pr_netaddr_get_ipstr(session.c->local_addr),
+ session.c->local_port);
+-
+- return;
+ }
+
+ static void autohost_postparse_ev(const void *event_data, void *user_data) {
+@@ -550,6 +554,11 @@
+ */
+
+ for (i = 0; i < port_list->nelts; i++) {
++ /* If this port duplicates the existing Port, skip it. */
++ if (ports[i] == main_server->ServerPort) {
++ continue;
++ }
++
+ if (pr_ipbind_find(main_server->addr, ports[i], TRUE) == NULL) {
+ int res;
+ conn_t *listener;
+@@ -590,8 +599,6 @@
+ }
+ }
+ }
+-
+- return;
+ }
+
+ /* Initialization routines
+Index: proftpd-mod-autohost/t/lib/ProFTPD/Tests/Modules/mod_autohost.pm
+===================================================================
+--- proftpd-mod-autohost.orig/t/lib/ProFTPD/Tests/Modules/mod_autohost.pm 2020-08-18 20:46:01.608645323 +0200
++++ proftpd-mod-autohost/t/lib/ProFTPD/Tests/Modules/mod_autohost.pm 2021-09-20 08:50:00.009619605 +0200
+@@ -339,48 +339,16 @@
+ sub autohost_ports {
+ my $self = shift;
+ my $tmpdir = $self->{tmpdir};
+-
+- my $config_file = "$tmpdir/autohost.conf";
+- my $pid_file = File::Spec->rel2abs("$tmpdir/autohost.pid");
+- my $scoreboard_file = File::Spec->rel2abs("$tmpdir/autohost.scoreboard");
+-
+- my $log_file = File::Spec->rel2abs('tests.log');
+-
+- my $auth_user_file = File::Spec->rel2abs("$tmpdir/autohost.passwd");
+- my $auth_group_file = File::Spec->rel2abs("$tmpdir/autohost.group");
+-
+- my $user = 'proftpd';
+- my $passwd = 'test';
+- my $group = 'ftpd';
+- my $home_dir = File::Spec->rel2abs("$tmpdir/home");
+- mkpath($home_dir);
+- my $uid = 500;
+- my $gid = 500;
+-
+- # Make sure that, if we're running as root, that the home directory has
+- # permissions/privs set for the account we create
+- if ($< == 0) {
+- unless (chmod(0755, $home_dir)) {
+- die("Can't set perms on $home_dir to 0755: $!");
+- }
+-
+- unless (chown($uid, $gid, $home_dir)) {
+- die("Can't set owner of $home_dir to $uid/$gid: $!");
+- }
+- }
+-
+- auth_user_write($auth_user_file, $user, $passwd, $uid, $gid, $home_dir,
+- '/bin/bash');
+- auth_group_write($auth_group_file, $group, $gid, $user);
++ my $setup = test_setup($tmpdir, 'autohost');
+
+ my $test_root = File::Spec->rel2abs($tmpdir);
+
+ my $config = {
+- PidFile => $pid_file,
+- ScoreboardFile => $scoreboard_file,
+- SystemLog => $log_file,
+- TraceLog => $log_file,
+- Trace => 'DEFAULT:10',
++ PidFile => $setup->{pid_file},
++ ScoreboardFile => $setup->{scoreboard_file},
++ SystemLog => $setup->{log_file},
++ TraceLog => $setup->{log_file},
++ Trace => 'DEFAULT:10 binding:20 autohost:20',
+
+ IfModules => {
+ 'mod_delay.c' => {
+@@ -389,34 +357,36 @@
+ },
+ };
+
+- my ($port, $config_user, $config_group) = config_write($config_file, $config);
++ my ($port, $config_user, $config_group) = config_write($setup->{config_file},
++ $config);
+
+- if (open(my $fh, ">> $config_file")) {
++ my $autohost_port = $port + 21;
++ if (open(my $fh, ">> $setup->{config_file}")) {
+ print $fh <<EOC;
+ <IfModule mod_autohost.c>
+ AutoHostEngine on
+- AutoHostLog $log_file
++ AutoHostLog $setup->{log_file}
+ AutoHostConfig $test_root/conf.d/%0:%p.conf
+- AutoHostPorts $port
++ AutoHostPorts $autohost_port
+ </IfModule>
+ EOC
+ unless (close($fh)) {
+- die("Can't write $config_file: $!");
++ die("Can't write $setup->{config_file}: $!");
+ }
+
+ } else {
+- die("Can't open $config_file: $!");
++ die("Can't open $setup->{config_file}: $!");
+ }
+
+ mkpath("$tmpdir/conf.d");
+- my $auto_config = File::Spec->rel2abs("$tmpdir/conf.d/127.0.0.1:$port.conf");
++ my $auto_config = File::Spec->rel2abs("$tmpdir/conf.d/127.0.0.1:$autohost_port.conf");
+ if (open(my $fh, "> $auto_config")) {
+ print $fh <<EOC;
+ ServerName "AutoHost Server"
+-AuthUserFile $auth_user_file
+-AuthGroupFile $auth_group_file
+-ServerLog $log_file
++AuthUserFile $setup->{auth_user_file}
++AuthGroupFile $setup->{auth_group_file}
+ RequireValidShell off
++ServerLog $setup->{log_file}
+ EOC
+ unless (close($fh)) {
+ die("Can't write $auto_config: $!");
+@@ -441,12 +411,10 @@
+ defined(my $pid = fork()) or die("Can't fork: $!");
+ if ($pid) {
+ eval {
+- my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port);
+-
+- $client->login($user, $passwd);
++ my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $autohost_port);
++ $client->login($setup->{user}, $setup->{passwd});
+ $client->quit();
+ };
+-
+ if ($@) {
+ $ex = $@;
+ }
+@@ -455,7 +423,7 @@
+ $wfh->flush();
+
+ } else {
+- eval { server_wait($config_file, $rfh) };
++ eval { server_wait($setup->{config_file}, $rfh) };
+ if ($@) {
+ warn($@);
+ exit 1;
+@@ -465,15 +433,10 @@
+ }
+
+ # Stop server
+- server_stop($pid_file);
+-
++ server_stop($setup->{pid_file});
+ $self->assert_child_ok($pid);
+
+- if ($ex) {
+- die($ex);
+- }
+-
+- unlink($log_file);
++ test_cleanup($setup->{log_file}, $ex);
+ }
+
+ sub autohost_extlog_var_p {
+@@ -489,7 +452,7 @@
+ ScoreboardFile => $setup->{scoreboard_file},
+ SystemLog => $setup->{log_file},
+ TraceLog => $setup->{log_file},
+- Trace => 'DEFAULT:10',
++ Trace => 'DEFAULT:10 autohost:20',
+
+ LogFormat => 'custom "%p"',
+
+@@ -503,13 +466,15 @@
+ my ($port, $config_user, $config_group) = config_write($setup->{config_file},
+ $config);
+
++ my $autohost_port = $port + 11;
++
+ if (open(my $fh, ">> $setup->{config_file}")) {
+ print $fh <<EOC;
+ <IfModule mod_autohost.c>
+ AutoHostEngine on
+ AutoHostLog $setup->{log_file}
+ AutoHostConfig $test_root/conf.d/%0:%p.conf
+- AutoHostPorts $port
++ AutoHostPorts $autohost_port
+ </IfModule>
+ EOC
+ unless (close($fh)) {
+@@ -521,7 +486,7 @@
+ }
+
+ mkpath("$tmpdir/conf.d");
+- my $auto_config = File::Spec->rel2abs("$tmpdir/conf.d/127.0.0.1:$port.conf");
++ my $auto_config = File::Spec->rel2abs("$tmpdir/conf.d/127.0.0.1:$autohost_port.conf");
+ if (open(my $fh, "> $auto_config")) {
+ print $fh <<EOC;
+ ServerName "AutoHost Server"
+@@ -554,7 +519,7 @@
+ defined(my $pid = fork()) or die("Can't fork: $!");
+ if ($pid) {
+ eval {
+- my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port);
++ my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $autohost_port);
+ $client->login($setup->{user}, $setup->{passwd});
+ $client->quit();
+ };
+@@ -596,8 +561,8 @@
+ print STDERR "# $line\n";
+ }
+
+- $self->assert($port eq $line,
+- test_msg("Expected '$port', got '$line'"));
++ $self->assert($autohost_port eq $line,
++ test_msg("Expected '$autohost_port', got '$line'"));
+
+ } else {
+ die("Can't read $ext_log: $!");
+@@ -613,49 +578,17 @@
+ sub autohost_global_config {
+ my $self = shift;
+ my $tmpdir = $self->{tmpdir};
+-
+- my $config_file = "$tmpdir/autohost.conf";
+- my $pid_file = File::Spec->rel2abs("$tmpdir/autohost.pid");
+- my $scoreboard_file = File::Spec->rel2abs("$tmpdir/autohost.scoreboard");
+-
+- my $log_file = File::Spec->rel2abs('tests.log');
+-
+- my $auth_user_file = File::Spec->rel2abs("$tmpdir/autohost.passwd");
+- my $auth_group_file = File::Spec->rel2abs("$tmpdir/autohost.group");
+-
+- my $user = 'proftpd';
+- my $passwd = 'test';
+- my $group = 'ftpd';
+- my $home_dir = File::Spec->rel2abs("$tmpdir/home");
+- mkpath($home_dir);
+- my $uid = 500;
+- my $gid = 500;
+-
+- # Make sure that, if we're running as root, that the home directory has
+- # permissions/privs set for the account we create
+- if ($< == 0) {
+- unless (chmod(0755, $home_dir)) {
+- die("Can't set perms on $home_dir to 0755: $!");
+- }
+-
+- unless (chown($uid, $gid, $home_dir)) {
+- die("Can't set owner of $home_dir to $uid/$gid: $!");
+- }
+- }
+-
+- auth_user_write($auth_user_file, $user, $passwd, $uid, $gid, $home_dir,
+- '/bin/bash');
+- auth_group_write($auth_group_file, $group, $gid, $user);
++ my $setup = test_setup($tmpdir, 'autohost');
+
+ my $test_root = File::Spec->rel2abs($tmpdir);
+ my $ext_log = File::Spec->rel2abs("$tmpdir/custom.log");
+
+ my $config = {
+- PidFile => $pid_file,
+- ScoreboardFile => $scoreboard_file,
+- SystemLog => $log_file,
+- TraceLog => $log_file,
+- Trace => 'DEFAULT:10',
++ PidFile => $setup->{pid_file},
++ ScoreboardFile => $setup->{scoreboard_file},
++ SystemLog => $setup->{log_file},
++ TraceLog => $setup->{log_file},
++ Trace => 'DEFAULT:10 autohost:20',
+
+ LogFormat => 'custom "%p"',
+
+@@ -670,33 +603,36 @@
+ },
+ };
+
+- my ($port, $config_user, $config_group) = config_write($config_file, $config);
++ my ($port, $config_user, $config_group) = config_write($setup->{config_file},
++ $config);
+
+- if (open(my $fh, ">> $config_file")) {
++ my $autohost_port = $port + 7;
++
++ if (open(my $fh, ">> $setup->{config_file}")) {
+ print $fh <<EOC;
+ <IfModule mod_autohost.c>
+ AutoHostEngine on
+- AutoHostLog $log_file
++ AutoHostLog $setup->{log_file}
+ AutoHostConfig $test_root/conf.d/%0:%p.conf
+- AutoHostPorts $port
++ AutoHostPorts $autohost_port
+ </IfModule>
+ EOC
+ unless (close($fh)) {
+- die("Can't write $config_file: $!");
++ die("Can't write $setup->{config_file}: $!");
+ }
+
+ } else {
+- die("Can't open $config_file: $!");
++ die("Can't open $setup->{config_file}: $!");
+ }
+
+ mkpath("$tmpdir/conf.d");
+- my $auto_config = File::Spec->rel2abs("$tmpdir/conf.d/127.0.0.1:$port.conf");
++ my $auto_config = File::Spec->rel2abs("$tmpdir/conf.d/127.0.0.1:$autohost_port.conf");
+ if (open(my $fh, "> $auto_config")) {
+ print $fh <<EOC;
+ ServerName "AutoHost Server"
+-AuthUserFile $auth_user_file
+-AuthGroupFile $auth_group_file
+-ServerLog $log_file
++AuthUserFile $setup->{auth_user_file}
++AuthGroupFile $setup->{auth_group_file}
++ServerLog $setup->{log_file}
+ RequireValidShell off
+ EOC
+ unless (close($fh)) {
+@@ -722,11 +658,10 @@
+ defined(my $pid = fork()) or die("Can't fork: $!");
+ if ($pid) {
+ eval {
+- my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $port);
+- $client->login($user, $passwd);
++ my $client = ProFTPD::TestSuite::FTP->new('127.0.0.1', $autohost_port);
++ $client->login($setup->{user}, $setup->{passwd});
+ $client->quit();
+ };
+-
+ if ($@) {
+ $ex = $@;
+ }
+@@ -735,7 +670,7 @@
+ $wfh->flush();
+
+ } else {
+- eval { server_wait($config_file, $rfh) };
++ eval { server_wait($setup->{config_file}, $rfh) };
+ if ($@) {
+ warn($@);
+ exit 1;
+@@ -745,29 +680,38 @@
+ }
+
+ # Stop server
+- server_stop($pid_file);
+-
++ server_stop($setup->{pid_file});
+ $self->assert_child_ok($pid);
+
+ if ($ex) {
+- die($ex);
++ test_cleanup($setup->{log_file}, $ex);
++ return;
+ }
+
+- # Now, read in the ExtendedLog, and see whether the %p variable was
+- # properly written out.
+- if (open(my $fh, "< $ext_log")) {
+- my $line = <$fh>;
+- chomp($line);
+- close($fh);
++ eval {
++ # Now, read in the ExtendedLog, and see whether the %p variable was
++ # properly written out.
++ if (open(my $fh, "< $ext_log")) {
++ my $line = <$fh>;
++ chomp($line);
++ close($fh);
+
+- $self->assert($port eq $line,
+- test_msg("Expected '$port', got '$line'"));
++ if ($ENV{TEST_VERBOSE}) {
++ print STDERR "# $line\n";
++ }
+
+- } else {
+- die("Can't read $ext_log: $!");
++ $self->assert($autohost_port eq $line,
++ test_msg("Expected '$autohost_port', got '$line'"));
++
++ } else {
++ die("Can't read $ext_log: $!");
++ }
++ };
++ if ($@) {
++ $ex;
+ }
+
+- unlink($log_file);
++ test_cleanup($setup->{log_file}, $ex);
+ }
+
+ 1;
=====================================
debian/patches/series
=====================================
@@ -0,0 +1 @@
+issue_8
View it on GitLab: https://salsa.debian.org/debian-proftpd-team/proftpd-mod-autohost/-/commit/c3fb8e4964c0b6b4135c0c7e20fb1f7ea6e11181
--
View it on GitLab: https://salsa.debian.org/debian-proftpd-team/proftpd-mod-autohost/-/commit/c3fb8e4964c0b6b4135c0c7e20fb1f7ea6e11181
You're receiving this email because of your account on salsa.debian.org.
More information about the Pkg-proftpd-maintainers
mailing list