[SCM] Samba Shared Repository - branch v4-9-stable updated
Karolin Seeger
kseeger at samba.org
Tue Jul 31 16:34:31 UTC 2018
The branch, v4-9-stable has been updated
via 7f744ab VERSION: Disable GIT_SNAPSHOT for the 4.9.0rc2 release.
via 9fc6a2e WHATSNEW: Add release notes for Samba 4.9.0rc2.
via d666a5e ctdb-docs: Update documentation for "ctdb event" command
via 8932003 ctdb-event: Implement event tool "script list" command
via 792e170 ctdb-event: Change event-tool script enable/disable to chmod file directly
via 0c65347 ctdb-common: Use script abstraction in run_event
via 4cce86e ctdb-common: Factor out basic script abstraction
via 34aba6f ctdb-event: Fix "ctdb event status" usage message
via f24f0f13 ctdb-doc: Provide an example script for migrating old configuration
via cb1292d WHATSNEW: Add further CTDB updates for 4.9
via d197d11 ctdb-docs: Replace obsolete reference to CTDB_DEBUG_HUNG_SCRIPT option
via 5c2513d ctdb-protocol: Fix compilation issue with strncpy()
via d4e9454 ctdb-common: Fix compilation issue with strncpy()
via eb3f8ae ctdb-common: Fix the TCP packet length check
via e4aa9b9 ctdb-tests: Strip all spaces from od output
via 23e4131 ctdb-tests: Fix a typo
via 0733f13 ctdb-tests: Use errcode to translate ETIMEDOUT
via 0be07ae ctdb-tests: Replace md5sum with posix cksum
via 862aedc ctdb-tests: Use portable wc -c instead of stat -c "%s"
via 55fe4b5 ctdb-scripts: date "+%N" is non-portable
via 33df4f9 ctdb-tests: Simplify pattern matching for ctime output
via 18aa6548 ctdb-tests: Do not try to match pstree output in eventd tests
via eb1279e ctdb-common: Add fd argument to ctdb_connection_list_read()
via ea5643f ctdb-protocol: Avoid fgets in ctdb_connection_list_read
via b21efa2 ctdb-common: Add line based I/O
via fcae5c6 ctdb-tests: Porting tests should ignore unsupported features
via 16838f3 ctdb-tests: Use sigcode to match signals
via 0ec4783 ctdb-tests: Add signal code matching utility
via adc4c78 ctdb-tests: Add ps output filter for freebsd
via ed50360 ctdb-client: Switch to ETIMEDOUT instead of ETIME
via 60ef296 ctdb-daemon: Switch to using ETIMEDOUT instead of ETIME
via 0782860 ctdb-event: Switch to ETIMEDOUT instead of ETIME
via 43cd4e4 ctdb-common: Switch to ETIMEDOUT from ETIME
via d49d03d ctdb-tests: Add required_error() to match on error codes
via 3f75791 ctdb-tests: Add errno matching utility
via f6be661 ctdb-tests: Switch some test stubs to use /bin/sh
via 58671b0 ctdb-tests: Improve portability by not using mktemp --tmpdir option
via ebeecc3 ctdb-tests: Avoid use of non-portable getopt in stubs
via 04a9667 ctdb-tests: Avoid use of non-portable getopt in run_tests.sh
via e4b703e ctdb-tools: Avoid use of non-portable getopt in onnode
via 7d28f01 ctdb-tests: Improve portability by not using /bin/bash directly
via 23b5be4 ctdb-tools: Improve portability by not using /bin/bash directly
via 4c2e666 s3: smbd: Fix AIX sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via a221165 s3: smbd: Fix FreeBSD sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via 8b54ad0 s3: smbd: Fix HPUX sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via 8652ab1 s3: smbd: Fix Solaris sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via 76d3abe s3: smbd: Fix Linux sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via a6dab26 dns wildcards: fix BUG 13536
via 1496392 dns wildcards: tests to confirm BUG 13536
via 9ad7af6 s3: smbd: fix path check in smbd_smb2_create_durable_lease_check()
via 3b7a39b s4: torture: run test_durable_v2_open_reopen2_lease() in a subdirectory
via c775cda ctdb-tests: Loosen match against pstree output in simple test
via 5abe6e6 ctdb-tests: Simplify pstree output in eventd unit tests
via 0b3e00a samba-tool trust: support discovery via netr_GetDcName
via a3c26b3 s3:selftest: run rpc.lsa.lookupsids also with explicit [smb1] and [smb2]
via e3e6425 s4:librpc: autonegotiate SMB1/2/3
via 25405ee python/tests: use explicit "client ipc max protocol = NT1" for samba.tests.net_join_no_spnego
via 373406a tests/auth_log: Permit SMB2 service description if empty binding is used for kerberos authentication
via b1753af s4:libcli: add smb_connect_nego_{send,recv}()
via 3d8c4bf s4:libcli: allow a fallback to NTLMSSP if SPNEGO is not supported locally
via 02f7b65 s4:libcli: add fallback_to_anonymous to smb2_connect_send()
via 4d7023f s4:libcli: allow passing an already negotiated connection to smb2_connect_send()
via a3a5797 s4:libcli: split out smb2_connect_session_start()
via c85c9b5 s4:libcli: add smb2_transport_raw_init()
via f9b685e s4:libcli: allow passing an already negotiated connection to smb_composite_connect()
via 71a1355 s4:libcli: use talloc_zero() for struct smb_composite_connect in fetchfile.c
via 00e5ea1 s4:libcli: add smbcli_transport_raw_init()
via a8cd704 s4:libcli: split out smb_raw_negotiate_fill_transport()
via 7e96021 librpc: add binding handle support for [smb1]
via d85dd18 python/samba/tests: make sure samba.tests can be imported without SamDB
via c6a325c s4-dsdb: only build dsdb Python modules for AD DC
via bc280e8 s4-dns_server: Only build dns server Python code for AD DC
via 516a440 s3: vfs: bump to version 39, Samba 4.9 will ship with that
via ef0cae1 VERSION: Bump version up to 4.9.0rc2...
from 7bc8b7f VERSION: Bump version up to 4.9.0rc1...
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-9-stable
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
VERSION | 2 +-
WHATSNEW.txt | 55 +-
ctdb/client/client.h | 2 +-
ctdb/client/client_connect.c | 2 +-
ctdb/common/event_script.c | 246 ++++++++
ctdb/common/event_script.h | 72 +++
ctdb/common/line.c | 145 +++++
ctdb/common/line.h | 62 ++
ctdb/common/run_event.c | 221 ++-----
ctdb/common/run_proc.c | 2 +-
ctdb/common/system_socket.c | 6 +-
ctdb/config/events/legacy/00.ctdb.script | 2 +-
ctdb/config/functions | 9 +-
ctdb/doc/ctdb-script.options.5.xml | 5 +-
ctdb/doc/ctdb.1.xml | 95 +--
ctdb/doc/examples/config_migrate.sh | 688 +++++++++++++++++++++
ctdb/doc/examples/config_migrate.test_input | 45 ++
ctdb/event/event_cmd.c | 4 +-
ctdb/event/event_tool.c | 232 +++++--
ctdb/protocol/protocol_util.c | 92 +--
ctdb/protocol/protocol_util.h | 4 +-
ctdb/server/ctdb_client.c | 2 +-
ctdb/server/ctdb_monitor.c | 2 +-
ctdb/server/ctdb_recover.c | 2 +-
ctdb/server/ctdb_takeover.c | 8 +-
ctdb/server/eventscript.c | 4 +-
ctdb/tests/cunit/event_script_test_001.sh | 125 ++++
ctdb/tests/cunit/line_test_001.sh | 90 +++
ctdb/tests/cunit/pidfile_test_001.sh | 2 +-
ctdb/tests/cunit/porting_tests_001.sh | 13 +-
ctdb/tests/cunit/run_event_001.sh | 8 +-
ctdb/tests/cunit/run_proc_001.sh | 19 +-
ctdb/tests/cunit/sock_daemon_test_001.sh | 26 +-
ctdb/tests/eventd/etc-ctdb/debug-script.sh | 2 +-
.../01.disabled.script => data/03.notalink.script} | 1 -
.../data/{01.dummy.script => 02.disabled.script} | 0
.../etc-ctdb/{ => share}/events/empty/README | 0
.../{ => share}/events/random/01.disabled.script | 0
.../{ => share}/events/random/02.enabled.script | 0
.../{ => share}/events/random/README.script | 0
.../etc-ctdb/{ => share}/events/random/a.script | 0
ctdb/tests/eventd/eventd_001.sh | 11 +-
ctdb/tests/eventd/eventd_002.sh | 10 +-
ctdb/tests/eventd/eventd_003.sh | 20 +-
ctdb/tests/eventd/eventd_004.sh | 2 +-
ctdb/tests/eventd/eventd_006.sh | 2 +-
ctdb/tests/eventd/eventd_007.sh | 4 +-
ctdb/tests/eventd/eventd_009.sh | 116 ++++
ctdb/tests/eventd/eventd_011.sh | 4 +-
ctdb/tests/eventd/eventd_012.sh | 4 +-
ctdb/tests/eventd/eventd_013.sh | 4 +-
ctdb/tests/eventd/eventd_021.sh | 2 +-
ctdb/tests/eventd/eventd_022.sh | 4 +-
ctdb/tests/eventd/eventd_023.sh | 2 +-
ctdb/tests/eventd/eventd_024.sh | 4 +-
ctdb/tests/eventd/eventd_032.sh | 6 +-
ctdb/tests/eventd/eventd_033.sh | 12 +-
ctdb/tests/eventd/eventd_042.sh | 2 +-
ctdb/tests/eventd/eventd_043.sh | 4 +-
ctdb/tests/eventd/eventd_052.sh | 4 +-
ctdb/tests/eventd/scripts/local.sh | 6 +-
ctdb/tests/eventscripts/00.ctdb.init.009.sh | 1 +
ctdb/tests/eventscripts/13.per_ip_routing.024.sh | 2 +-
ctdb/tests/eventscripts/scripts/00.ctdb.sh | 3 +-
ctdb/tests/eventscripts/scripts/11.natgw.sh | 8 +-
ctdb/tests/eventscripts/stubs/ctdb | 38 +-
ctdb/tests/eventscripts/stubs/ip | 2 +-
ctdb/tests/eventscripts/stubs/rpcinfo | 34 +-
ctdb/tests/eventscripts/stubs/smnotify | 17 +-
ctdb/tests/eventscripts/stubs/ss | 28 +-
ctdb/tests/run_tests.sh | 48 +-
ctdb/tests/scripts/integration.bash | 2 +-
ctdb/tests/scripts/unit.sh | 7 +
ctdb/tests/simple/90_debug_hung_script.sh | 2 +-
ctdb/tests/src/dummy_client.c | 2 +-
ctdb/tests/src/errcode.c | 189 ++++++
ctdb/tests/src/event_script_test.c | 119 ++++
ctdb/tests/src/line_test.c | 102 +++
ctdb/tests/src/porting_tests.c | 10 +-
ctdb/tests/src/protocol_util_test.c | 18 +-
ctdb/tests/src/run_event_test.c | 1 +
ctdb/tests/src/sigcode.c | 120 ++++
ctdb/tests/takeover_helper/210.sh | 6 +-
ctdb/tests/takeover_helper/211.sh | 6 +-
ctdb/tests/takeover_helper/220.sh | 6 +-
ctdb/tests/takeover_helper/230.sh | 8 +-
ctdb/tests/takeover_helper/240.sh | 6 +-
ctdb/tests/takeover_helper/250.sh | 6 +-
ctdb/tests/takeover_helper/260.sh | 6 +-
ctdb/tests/takeover_helper/scripts/local.sh | 4 +-
ctdb/tools/ctdb.c | 6 +-
ctdb/tools/ctdb_killtcp.c | 2 +-
ctdb/tools/onnode | 55 +-
ctdb/wscript | 21 +-
librpc/rpc/binding.c | 1 +
librpc/rpc/rpc_common.h | 2 +
python/samba/netcmd/domain.py | 26 +-
python/samba/tests/__init__.py | 5 +-
python/samba/tests/auth_log.py | 26 +-
python/samba/tests/dns_wildcard.py | 48 ++
python/samba/tests/net_join_no_spnego.py | 2 +
source3/include/vfs.h | 1 +
source3/lib/sendfile.c | 293 ++++++++-
source3/selftest/tests.py | 2 +-
source3/smbd/smb2_create.c | 16 +-
source4/dns_server/dnsserver_common.c | 1 +
source4/dns_server/wscript_build | 8 +-
source4/dsdb/wscript_build | 11 +-
source4/libcli/raw/clitransport.c | 44 ++
source4/libcli/raw/clitree.c | 1 +
source4/libcli/raw/rawnegotiate.c | 74 ++-
source4/libcli/smb2/connect.c | 69 ++-
source4/libcli/smb2/session.c | 35 +-
source4/libcli/smb2/transport.c | 35 ++
source4/libcli/smb_composite/connect.c | 48 +-
source4/libcli/smb_composite/connect_nego.c | 209 +++++++
source4/libcli/smb_composite/fetchfile.c | 2 +-
source4/libcli/smb_composite/smb_composite.h | 23 +
source4/libcli/wscript_build | 20 +-
source4/librpc/rpc/dcerpc_connect.c | 257 ++++----
source4/ntvfs/cifs/vfs_cifs.c | 1 +
source4/torture/smb2/durable_v2_open.c | 11 +-
122 files changed, 3856 insertions(+), 818 deletions(-)
create mode 100644 ctdb/common/event_script.c
create mode 100644 ctdb/common/event_script.h
create mode 100644 ctdb/common/line.c
create mode 100644 ctdb/common/line.h
create mode 100755 ctdb/doc/examples/config_migrate.sh
create mode 100644 ctdb/doc/examples/config_migrate.test_input
create mode 100755 ctdb/tests/cunit/event_script_test_001.sh
create mode 100755 ctdb/tests/cunit/line_test_001.sh
copy ctdb/tests/eventd/etc-ctdb/events/{random/01.disabled.script => data/03.notalink.script} (94%)
copy ctdb/tests/eventd/etc-ctdb/share/events/data/{01.dummy.script => 02.disabled.script} (100%)
copy ctdb/tests/eventd/etc-ctdb/{ => share}/events/empty/README (100%)
copy ctdb/tests/eventd/etc-ctdb/{ => share}/events/random/01.disabled.script (100%)
copy ctdb/tests/eventd/etc-ctdb/{ => share}/events/random/02.enabled.script (100%)
copy ctdb/tests/eventd/etc-ctdb/{ => share}/events/random/README.script (100%)
copy ctdb/tests/eventd/etc-ctdb/{ => share}/events/random/a.script (100%)
create mode 100644 ctdb/tests/src/errcode.c
create mode 100644 ctdb/tests/src/event_script_test.c
create mode 100644 ctdb/tests/src/line_test.c
create mode 100644 ctdb/tests/src/sigcode.c
create mode 100644 source4/libcli/smb_composite/connect_nego.c
Changeset truncated at 500 lines:
diff --git a/VERSION b/VERSION
index 94eee6c..7da5b10 100644
--- a/VERSION
+++ b/VERSION
@@ -87,7 +87,7 @@ SAMBA_VERSION_PRE_RELEASE=
# e.g. SAMBA_VERSION_RC_RELEASE=1 #
# -> "3.0.0rc1" #
########################################################
-SAMBA_VERSION_RC_RELEASE=1
+SAMBA_VERSION_RC_RELEASE=2
########################################################
# To mark SVN snapshots this should be set to 'yes' #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 6de49f2..b28cbf4 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,7 +1,7 @@
Release Announcements
=====================
-This is the first release candidate of Samba 4.9. This is *not*
+This is the second release candidate of Samba 4.9. This is *not*
intended for production environments and is designed for testing
purposes only. Please report any defects via the Samba bug reporting
system at https://bugzilla.samba.org/.
@@ -286,8 +286,8 @@ There are many changes to CTDB in this release.
CTDB_SET_TunableVariable=<value> in the main configuration file is
no longer supported. See ctdb-tunables(7) for details.
- A script to convert an old-style configuration to a new one will be
- available for release but is not yet available.
+ A example script to migrate an old-style configuration to the new
+ style is available in ctdb/doc/examples/config_migrate.sh.
* The following configuration variables and corresponding ctdbd
command-line options have been removed and not replaced with
@@ -324,6 +324,20 @@ There are many changes to CTDB in this release.
Event scripts must now end with a ".script" suffix.
+* The "ctdb event" command has changed in 2 ways:
+
+ - A component is now required for all commands
+
+ In this release the only valid component is "legacy".
+
+ - There is no longer a default event when running "ctdb event status"
+
+ Listing the status of the "monitor" event is now done via:
+
+ ctdb event status legacy monitor
+
+ See ctdb(1) for details.
+
* The following service-related event script options have been
removed:
@@ -436,6 +450,41 @@ SMB_VFS_FCHMOD_ACL: Removed: Only FCHMOD is used.
Any external VFS modules will need to be updated to match these
changes in order to work with 4.9.x.
+
+CHANGES SINCE 4.9.0rc1
+======================
+
+o Jeremy Allison <jra at samba.org>
+ * BUG 13537: s3: smbd: Using "sendfile = yes" with SMB2 can cause CPU spin.
+
+o Ralph Boehme <slow at samba.org>
+ * BUG 13535: s3: smbd: Fix path check in
+ smbd_smb2_create_durable_lease_check().
+
+o Alexander Bokovoy <ab at samba.org>
+ * BUG 13538: samba-tool trust: Support discovery via netr_GetDcName.
+ * BUG 13542: s4-dsdb: Only build dsdb Python modules for AD DC.
+
+o Amitay Isaacs <amitay at gmail.com>
+ * BUG 13520: Fix portability issues on freebsd.
+
+o Gary Lockyer <gary at catalyst.net.nz>
+ * BUG 13536: DNS wildcard search does not handle multiple labels correctly.
+
+o Stefan Metzmacher <metze at samba.org>
+ * BUG 13308: samba-tool domain trust: Fix trust compatibility to Windows
+ Server 1709 and FreeIPA.
+
+o Martin Schwenke <martin at meltin.net>
+ * BUG 13520: Fix portability issues on freebsd.
+ * BUG 13545: ctdb-protocol: Fix CTDB compilation issues.
+ * BUG 13546: ctdb-docs: Replace obsolete reference to CTDB_DEBUG_HUNG_SCRIPT
+ option.
+ * BUG 13550: ctdb-doc: Provide an example script for migrating old
+ configuration.
+ * BUG 13551: ctdb-event: Implement event tool "script list" command.
+
+
KNOWN ISSUES
============
diff --git a/ctdb/client/client.h b/ctdb/client/client.h
index 2eec3ea..d4d1450 100644
--- a/ctdb/client/client.h
+++ b/ctdb/client/client.h
@@ -184,7 +184,7 @@ void ctdb_client_wait(struct tevent_context *ev, bool *done);
* @param[in] ev Tevent context
* @param[in] done Boolean flag to indicate when to stop waiting
* @param[in] timeout How long to wait
- * @return 0 on succes, ETIME on timeout, and errno on failure
+ * @return 0 on succes, ETIMEDOUT on timeout, and errno on failure
*/
int ctdb_client_wait_timeout(struct tevent_context *ev, bool *done,
struct timeval timeout);
diff --git a/ctdb/client/client_connect.c b/ctdb/client/client_connect.c
index 1e4157e..0977d71 100644
--- a/ctdb/client/client_connect.c
+++ b/ctdb/client/client_connect.c
@@ -363,7 +363,7 @@ int ctdb_client_wait_timeout(struct tevent_context *ev, bool *done,
talloc_free(mem_ctx);
if (timed_out) {
- return ETIME;
+ return ETIMEDOUT;
}
return 0;
diff --git a/ctdb/common/event_script.c b/ctdb/common/event_script.c
new file mode 100644
index 0000000..8978d14
--- /dev/null
+++ b/ctdb/common/event_script.c
@@ -0,0 +1,246 @@
+/*
+ Low level event script handling
+
+ Copyright (C) Amitay Isaacs 2017
+ Copyright (C) Martin Schwenke 2018
+
+ 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/>.
+*/
+
+#include "replace.h"
+#include "system/filesys.h"
+#include "system/dir.h"
+#include "system/glob.h"
+
+#include <talloc.h>
+
+#include "common/event_script.h"
+
+static int script_filter(const struct dirent *de)
+{
+ int ret;
+
+ /* Match a script pattern */
+ ret = fnmatch("[0-9][0-9].*.script", de->d_name, 0);
+ if (ret == 0) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int event_script_get_list(TALLOC_CTX *mem_ctx,
+ const char *script_dir,
+ struct event_script_list **out)
+{
+ struct dirent **namelist = NULL;
+ struct event_script_list *script_list = NULL;
+ size_t ds_len;
+ int count, ret;
+ int i;
+
+ count = scandir(script_dir, &namelist, script_filter, alphasort);
+ if (count == -1) {
+ ret = errno;
+ goto done;
+ }
+
+ script_list = talloc_zero(mem_ctx, struct event_script_list);
+ if (script_list == NULL) {
+ goto nomem;
+ }
+
+ if (count == 0) {
+ ret = 0;
+ *out = script_list;
+ goto done;
+ }
+
+ script_list->num_scripts = count;
+ script_list->script = talloc_zero_array(script_list,
+ struct event_script *,
+ count);
+ if (script_list->script == NULL) {
+ goto nomem;
+ }
+
+ ds_len = strlen(".script");
+ for (i = 0; i < count; i++) {
+ struct event_script *s;
+ struct stat statbuf;
+
+ s = talloc_zero(script_list->script, struct event_script);
+ if (s == NULL) {
+ goto nomem;
+ }
+
+ script_list->script[i] = s;
+
+ s->name = talloc_strndup(script_list->script,
+ namelist[i]->d_name,
+ strlen(namelist[i]->d_name) - ds_len);
+ if (s->name == NULL) {
+ goto nomem;
+ }
+
+ s->path = talloc_asprintf(script_list->script,
+ "%s/%s",
+ script_dir,
+ namelist[i]->d_name);
+ if (s->path == NULL) {
+ goto nomem;
+ }
+
+ ret = stat(s->path, &statbuf);
+ if (ret == 0) {
+ /*
+ * If ret != 0 this is either a dangling
+ * symlink or it has just disappeared. Either
+ * way, it isn't executable. See the note
+ * below about things that have disappeared.
+ */
+ if (statbuf.st_mode & S_IXUSR) {
+ s->enabled = true;
+ }
+ }
+ }
+
+ *out = script_list;
+ return 0;
+
+nomem:
+ ret = ENOMEM;
+ talloc_free(script_list);
+
+done:
+ if (namelist != NULL && count != -1) {
+ for (i=0; i<count; i++) {
+ free(namelist[i]);
+ }
+ free(namelist);
+ }
+
+ return ret;
+}
+
+int event_script_chmod(const char *script_dir,
+ const char *script_name,
+ bool enable)
+{
+ const char *dot_script = ".script";
+ size_t ds_len = strlen(dot_script);
+ size_t sn_len = strlen(script_name);
+ DIR *dirp;
+ struct dirent *de;
+ char buf[PATH_MAX];
+ const char *script_file;
+ int ret, new_mode;
+ char filename[PATH_MAX];
+ struct stat st;
+ bool found;
+ ino_t found_inode;
+ int fd = -1;
+
+ /* Allow script_name to already have ".script" suffix */
+ if (sn_len > ds_len &&
+ strcmp(&script_name[sn_len - ds_len], dot_script) == 0) {
+ script_file = script_name;
+ } else {
+ ret = snprintf(buf, sizeof(buf), "%s.script", script_name);
+ if (ret >= sizeof(buf)) {
+ return ENAMETOOLONG;
+ }
+ script_file = buf;
+ }
+
+ dirp = opendir(script_dir);
+ if (dirp == NULL) {
+ return errno;
+ }
+
+ found = false;
+ while ((de = readdir(dirp)) != NULL) {
+ if (strcmp(de->d_name, script_file) == 0) {
+ /* check for valid script names */
+ ret = script_filter(de);
+ if (ret == 0) {
+ closedir(dirp);
+ return EINVAL;
+ }
+
+ found = true;
+ found_inode = de->d_ino;
+ break;
+ }
+ }
+ closedir(dirp);
+
+ if (! found) {
+ return ENOENT;
+ }
+
+ ret = snprintf(filename,
+ sizeof(filename),
+ "%s/%s",
+ script_dir,
+ script_file);
+ if (ret >= sizeof(filename)) {
+ return ENAMETOOLONG;
+ }
+
+ fd = open(filename, O_RDWR);
+ if (fd == -1) {
+ ret = errno;
+ goto done;
+ }
+
+ ret = fstat(fd, &st);
+ if (ret != 0) {
+ ret = errno;
+ goto done;
+ }
+
+ /*
+ * If the directory entry inode number doesn't match the one
+ * returned by fstat() then this is probably a symlink, so the
+ * caller should not be calling this function. Note that this
+ * is a cheap sanity check to catch most programming errors.
+ * This doesn't cost any extra system calls but can still miss
+ * the unlikely case where the symlink is to a file on a
+ * different filesystem with the same inode number as the
+ * symlink.
+ */
+ if (found && found_inode != st.st_ino) {
+ ret = EINVAL;
+ goto done;
+ }
+
+ if (enable) {
+ new_mode = st.st_mode | (S_IXUSR | S_IXGRP | S_IXOTH);
+ } else {
+ new_mode = st.st_mode & ~(S_IXUSR | S_IXGRP | S_IXOTH);
+ }
+
+ ret = fchmod(fd, new_mode);
+ if (ret != 0) {
+ ret = errno;
+ goto done;
+ }
+
+done:
+ if (fd != -1) {
+ close(fd);
+ }
+ return ret;
+}
diff --git a/ctdb/common/event_script.h b/ctdb/common/event_script.h
new file mode 100644
index 0000000..bf5a8fd
--- /dev/null
+++ b/ctdb/common/event_script.h
@@ -0,0 +1,72 @@
+/*
+ Low level event script handling
+
+ Copyright (C) Amitay Isaacs 2017
+ Copyright (C) Martin Schwenke 2018
+
+ 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/>.
+*/
+
+#ifndef __CTDB_SCRIPT_H__
+#define __CTDB_SCRIPT_H__
+
+#include "replace.h"
+#include "system/filesys.h"
+
+#include <talloc.h>
+
+/**
+ * @file script.h
+ *
+ * @brief Script listing and manipulation
+ */
+
+
+struct event_script {
+ char *name;
+ char *path;
+ bool enabled;
+};
+
+struct event_script_list {
+ unsigned int num_scripts;
+ struct event_script **script;
+};
+
+
+/**
+ * @brief Retrieve a list of scripts
+ *
+ * @param[in] mem_ctx Talloc memory context
+ * @param[in] script_dir Directory containing scripts
+ * @param[out] out List of scripts
+ * @return 0 on success, errno on failure
+ */
+int event_script_get_list(TALLOC_CTX *mem_ctx,
+ const char *script_dir,
+ struct event_script_list **out);
+
+/**
+ * @brief Make a script executable or not executable
+ *
+ * @param[in] script_dir Directory containing script
+ * @param[in] script_name Name of the script to enable
+ * @param[in] executable True if script should be made executable
+ * @return 0 on success, errno on failure
+ */
+int event_script_chmod(const char *script_dir,
+ const char *script_name,
+ bool executable);
+
+#endif /* __CTDB_SCRIPT_H__ */
diff --git a/ctdb/common/line.c b/ctdb/common/line.c
new file mode 100644
index 0000000..c4c6726
--- /dev/null
+++ b/ctdb/common/line.c
@@ -0,0 +1,145 @@
+/*
+ Line based I/O over fds
+
+ Copyright (C) Amitay Isaacs 2018
+
+ 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/>.
+*/
+
+#include "replace.h"
+
+#include <talloc.h>
+
+#include "lib/util/sys_rw.h"
+
+#include "common/line.h"
+
+struct line_read_state {
+ line_process_fn_t callback;
+ void *private_data;
+ char *buf;
+ size_t hint, len, offset;
+ int num_lines;
+};
+
+static bool line_read_one(char *buf, size_t start, size_t len, size_t *pos)
+{
+ size_t i;
--
Samba Shared Repository
More information about the samba-cvs
mailing list