Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • lts-team/packages/samba
  • thctlo/samba-lintianfix
  • arnaudr/samba
  • jrwren/samba
  • paride/samba
  • athos/samba
  • henrich/samba
  • cnotin/samba
  • mimi89999/samba
  • samba-team/samba
  • ahasenack/samba
  • jrtc27/samba
  • noel/samba
13 results
Show changes
Commits on Source (64)
Showing
with 401 additions and 110 deletions
......@@ -25,7 +25,7 @@
########################################################
SAMBA_VERSION_MAJOR=4
SAMBA_VERSION_MINOR=18
SAMBA_VERSION_RELEASE=9
SAMBA_VERSION_RELEASE=10
########################################################
# If a official release has a serious bug #
......
===============================
Release Notes for Samba 4.18.10
January 31, 2024
===============================
This is the latest stable release of the Samba 4.18 release series.
Changes since 4.18.9
--------------------
o Ralph Boehme <slow@samba.org>
* BUG 13688: Windows 2016 fails to restore previous version of a file from a
shadow_copy2 snapshot.
* BUG 15549: Symlinks on AIX are broken in 4.19 (and a few version before
that).
o Samuel Cabrero <scabrero@samba.org>
* BUG 13577: net changesecretpw cannot set the machine account password if
secrets.tdb is empty.
o Bjoern Jacke <bj@sernet.de>
* BUG 12421: Fake directory create times has no effect.
o Björn Jacke <bjacke@samba.org>
* BUG 15540: For generating doc, take, if defined, env XML_CATALOG_FILES.
* BUG 15541: Trivial C typo in nsswitch/winbind_nss_netbsd.c.
* BUG 15542: vfs_linux_xfs is incorrectly named.
* BUG 15550: ctime mixed up with mtime by smbd.
o Volker Lendecke <vl@samba.org>
* BUG 15523: ctdb RELEASE_IP causes a crash in release_ip if a connection to
a non-public address disconnects first.
* BUG 15544: shadow_copy2 broken when current fileset's directories are
removed.
o Stefan Metzmacher <metze@samba.org>
* BUG 15523: ctdb RELEASE_IP causes a crash in release_ip if a connection to
a non-public address disconnects first.
* BUG 15534: smbd does not detect ctdb public ipv6 addresses for multichannel
exclusion.
o Martin Schwenke <mschwenke@ddn.com>
* BUG 15523: ctdb RELEASE_IP causes a crash in release_ip if a connection to
a non-public address disconnects first.
o Shachar Sharon <ssharon@redhat.com>
* BUG 15440: Unable to copy and write files from clients to Ceph cluster via
SMB Linux gateway with Ceph VFS module.
o Jones Syue <jonessyue@qnap.com>
* BUG 15547: Multichannel refresh network information.
* BUG 15555: smbpasswd reset permissions only if not 0600.
#######################################
Reporting bugs & Development Discussion
#######################################
Please discuss this release on the samba-technical mailing list or by
joining the #samba-technical:matrix.org matrix room, or
#samba-technical IRC channel on irc.libera.chat.
If you do report problems then please try to send high quality
feedback. If you don't provide vital information to help us track down
the problem then you will probably be ignored. All bug reports should
be filed under the Samba 4.1 and newer product in the project's Bugzilla
database (https://bugzilla.samba.org/).
======================================================================
== Our Code, Our Bugs, Our Responsibility.
== The Samba Team
======================================================================
Release notes for older releases follow:
----------------------------------------
==============================
Release Notes for Samba 4.18.9
November 29, 2023
......@@ -117,8 +196,7 @@ database (https://bugzilla.samba.org/).
======================================================================
Release notes for older releases follow:
----------------------------------------
----------------------------------------------------------------------
==============================
Release Notes for Samba 4.18.8
October 10, 2023
......
......@@ -1181,7 +1181,7 @@ def SAMBAMANPAGES(bld, manpages, extra_source=None):
bld.env.SAMBA_EXPAND_XSL = bld.srcnode.abspath() + '/docs-xml/xslt/expand-sambadoc.xsl'
bld.env.SAMBA_MAN_XSL = bld.srcnode.abspath() + '/docs-xml/xslt/man.xsl'
bld.env.SAMBA_CATALOG = bld.bldnode.abspath() + '/docs-xml/build/catalog.xml'
bld.env.SAMBA_CATALOGS = 'file:///etc/xml/catalog file:///usr/local/share/xml/catalog file://' + bld.env.SAMBA_CATALOG
bld.env.SAMBA_CATALOGS = os.getenv('XML_CATALOG_FILES', 'file:///etc/xml/catalog file:///usr/local/share/xml/catalog') + ' file://' + bld.env.SAMBA_CATALOG
for m in manpages.split():
source = [m + '.xml']
......
......@@ -132,6 +132,7 @@ struct ctdb_rec_data_old *ctdb_marshall_loop_next(
TDB_DATA *key, TDB_DATA *data);
void ctdb_canonicalize_ip(const ctdb_sock_addr *ip, ctdb_sock_addr *cip);
void ctdb_canonicalize_ip_inplace(ctdb_sock_addr *ip);
bool ctdb_same_ip(const ctdb_sock_addr *tip1, const ctdb_sock_addr *tip2);
......
......@@ -388,6 +388,13 @@ void ctdb_canonicalize_ip(const ctdb_sock_addr *ip, ctdb_sock_addr *cip)
}
}
void ctdb_canonicalize_ip_inplace(ctdb_sock_addr *ip)
{
ctdb_sock_addr tmp;
ctdb_canonicalize_ip(ip, &tmp);
memcpy(ip, &tmp, sizeof(tmp));
}
bool ctdb_same_ip(const ctdb_sock_addr *tip1, const ctdb_sock_addr *tip2)
{
ctdb_sock_addr ip1, ip2;
......
......@@ -296,7 +296,6 @@ struct ctdb_context {
struct ctdb_statistics statistics_history[MAX_STAT_HISTORY];
struct ctdb_vnn_map *vnn_map;
uint32_t num_clients;
struct ctdb_client_ip *client_ip_list;
bool do_checkpublicip;
bool do_setsched;
const char *event_script_dir;
......@@ -893,6 +892,12 @@ int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses);
int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
TDB_DATA indata);
int32_t ctdb_control_tcp_client_disconnected(struct ctdb_context *ctdb,
uint32_t client_id,
TDB_DATA indata);
int32_t ctdb_control_tcp_client_passed(struct ctdb_context *ctdb,
uint32_t client_id,
TDB_DATA indata);
int32_t ctdb_control_tcp_add(struct ctdb_context *ctdb, TDB_DATA indata,
bool tcp_update_needed);
int32_t ctdb_control_tcp_remove(struct ctdb_context *ctdb, TDB_DATA indata);
......
......@@ -381,6 +381,8 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0,
CTDB_CONTROL_ECHO_DATA = 156,
CTDB_CONTROL_DISABLE_NODE = 157,
CTDB_CONTROL_ENABLE_NODE = 158,
CTDB_CONTROL_TCP_CLIENT_DISCONNECTED = 159,
CTDB_CONTROL_TCP_CLIENT_PASSED = 160,
};
#define MAX_COUNT_BUCKETS 16
......
......@@ -410,6 +410,14 @@ static size_t ctdb_req_control_data_len(struct ctdb_req_control_data *cd)
case CTDB_CONTROL_ENABLE_NODE:
break;
case CTDB_CONTROL_TCP_CLIENT_DISCONNECTED:
len = ctdb_connection_len(cd->data.conn);
break;
case CTDB_CONTROL_TCP_CLIENT_PASSED:
len = ctdb_connection_len(cd->data.conn);
break;
}
return len;
......@@ -1016,6 +1024,22 @@ static int ctdb_req_control_data_pull(uint8_t *buf, size_t buflen,
&cd->data.echo_data,
&np);
break;
case CTDB_CONTROL_TCP_CLIENT_DISCONNECTED:
ret = ctdb_connection_pull(buf,
buflen,
mem_ctx,
&cd->data.conn,
&np);
break;
case CTDB_CONTROL_TCP_CLIENT_PASSED:
ret = ctdb_connection_pull(buf,
buflen,
mem_ctx,
&cd->data.conn,
&np);
break;
}
if (ret != 0) {
......@@ -1376,6 +1400,12 @@ static size_t ctdb_reply_control_data_len(struct ctdb_reply_control_data *cd)
case CTDB_CONTROL_ENABLE_NODE:
break;
case CTDB_CONTROL_TCP_CLIENT_DISCONNECTED:
break;
case CTDB_CONTROL_TCP_CLIENT_PASSED:
break;
}
return len;
......
......@@ -245,6 +245,8 @@ static void ctdb_opcode_print(uint32_t opcode, FILE *fp)
{ CTDB_CONTROL_ECHO_DATA, "ECHO_DATA" },
{ CTDB_CONTROL_DISABLE_NODE, "DISABLE_NODE" },
{ CTDB_CONTROL_ENABLE_NODE, "ENABLE_NODE" },
{ CTDB_CONTROL_TCP_CLIENT_DISCONNECTED, "TCP_CLIENT_DISCONNECTED" },
{ CTDB_CONTROL_TCP_CLIENT_PASSED, "TCP_CLIENT_PASSED" },
{ MAP_END, "" },
};
......
......@@ -497,6 +497,24 @@ bool ctdb_sock_addr_same(const ctdb_sock_addr *addr1,
return (ctdb_sock_addr_cmp(addr1, addr2) == 0);
}
bool ctdb_connection_same(const struct ctdb_connection *conn1,
const struct ctdb_connection *conn2)
{
bool same;
same = ctdb_sock_addr_same(&conn1->src, &conn2->src);
if (!same) {
return false;
}
same = ctdb_sock_addr_same(&conn1->dst, &conn2->dst);
if (!same) {
return false;
}
return true;
}
int ctdb_connection_to_buf(char *buf,
size_t buflen,
struct ctdb_connection *conn,
......
......@@ -55,6 +55,9 @@ bool ctdb_sock_addr_same_ip(const ctdb_sock_addr *addr1,
bool ctdb_sock_addr_same(const ctdb_sock_addr *addr1,
const ctdb_sock_addr *addr2);
bool ctdb_connection_same(const struct ctdb_connection *conn1,
const struct ctdb_connection *conn2);
int ctdb_connection_to_buf(char *buf,
size_t buflen,
struct ctdb_connection * conn,
......
......@@ -868,6 +868,14 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
CHECK_CONTROL_DATA_SIZE(0);
return ctdb_control_enable_node(ctdb);
case CTDB_CONTROL_TCP_CLIENT_DISCONNECTED:
CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_connection));
return ctdb_control_tcp_client_disconnected(ctdb, client_id, indata);
case CTDB_CONTROL_TCP_CLIENT_PASSED:
CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_connection));
return ctdb_control_tcp_client_passed(ctdb, client_id, indata);
default:
DEBUG(DEBUG_CRIT,(__location__ " Unknown CTDB control opcode %u\n", opcode));
return -1;
......
......@@ -348,20 +348,10 @@ struct ctdb_takeover_arp {
*/
struct ctdb_tcp_list {
struct ctdb_tcp_list *prev, *next;
struct ctdb_client *client;
struct ctdb_connection connection;
};
/*
list of clients to kill on IP release
*/
struct ctdb_client_ip {
struct ctdb_client_ip *prev, *next;
struct ctdb_context *ctdb;
ctdb_sock_addr addr;
uint32_t client_id;
};
/*
send a gratuitous arp
*/
......@@ -1233,16 +1223,37 @@ int ctdb_set_public_addresses(struct ctdb_context *ctdb, bool check_addresses)
}
/*
destroy a ctdb_client_ip structure
destroy a ctdb_tcp_list structure
*/
static int ctdb_client_ip_destructor(struct ctdb_client_ip *ip)
static int ctdb_tcp_list_destructor(struct ctdb_tcp_list *tcp)
{
DEBUG(DEBUG_DEBUG,("destroying client tcp for %s:%u (client_id %u)\n",
ctdb_addr_to_str(&ip->addr),
ntohs(ip->addr.ip.sin_port),
ip->client_id));
struct ctdb_client *client = tcp->client;
struct ctdb_connection *conn = &tcp->connection;
char conn_str[132] = { 0, };
int ret;
ret = ctdb_connection_to_buf(conn_str,
sizeof(conn_str),
conn,
false,
" -> ");
if (ret != 0) {
strlcpy(conn_str, "UNKNOWN", sizeof(conn_str));
}
D_DEBUG("removing client TCP connection %s "
"(client_id %u pid %d)\n",
conn_str, client->client_id, client->pid);
DLIST_REMOVE(client->tcp_list, tcp);
/*
* We don't call ctdb_remove_connection(vnn, conn) here
* as we want the caller to decide if it's called
* directly (local only) or indirectly via a
* CTDB_CONTROL_TCP_REMOVE broadcast
*/
DLIST_REMOVE(ip->ctdb->client_ip_list, ip);
return 0;
}
......@@ -1259,10 +1270,8 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
struct ctdb_connection t;
int ret;
TDB_DATA data;
struct ctdb_client_ip *ip;
struct ctdb_vnn *vnn;
ctdb_sock_addr src_addr;
ctdb_sock_addr dst_addr;
char conn_str[132] = { 0, };
/* If we don't have public IPs, tickles are useless */
if (ctdb->vnn == NULL) {
......@@ -1271,75 +1280,44 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
tcp_sock = (struct ctdb_connection *)indata.dptr;
src_addr = tcp_sock->src;
ctdb_canonicalize_ip(&src_addr, &tcp_sock->src);
ZERO_STRUCT(src_addr);
memcpy(&src_addr, &tcp_sock->src, sizeof(src_addr));
ctdb_canonicalize_ip_inplace(&tcp_sock->src);
ctdb_canonicalize_ip_inplace(&tcp_sock->dst);
dst_addr = tcp_sock->dst;
ctdb_canonicalize_ip(&dst_addr, &tcp_sock->dst);
ZERO_STRUCT(dst_addr);
memcpy(&dst_addr, &tcp_sock->dst, sizeof(dst_addr));
ret = ctdb_connection_to_buf(conn_str,
sizeof(conn_str),
tcp_sock,
false,
" -> ");
if (ret != 0) {
strlcpy(conn_str, "UNKNOWN", sizeof(conn_str));
}
vnn = find_public_ip_vnn(ctdb, &dst_addr);
vnn = find_public_ip_vnn(ctdb, &tcp_sock->dst);
if (vnn == NULL) {
char *src_addr_str = NULL;
char *dst_addr_str = NULL;
switch (dst_addr.sa.sa_family) {
case AF_INET:
if (ntohl(dst_addr.ip.sin_addr.s_addr) == INADDR_LOOPBACK) {
/* ignore ... */
return 0;
}
break;
case AF_INET6:
break;
default:
DEBUG(DEBUG_ERR,(__location__ " Unknown family type %d\n",
dst_addr.sa.sa_family));
return 0;
}
src_addr_str = ctdb_sock_addr_to_string(client, &src_addr, false);
dst_addr_str = ctdb_sock_addr_to_string(client, &dst_addr, false);
DEBUG(DEBUG_ERR,(
"Could not register TCP connection from "
"%s to %s (not a public address) (port %u) "
"(client_id %u pid %u).\n",
src_addr_str,
dst_addr_str,
ctdb_sock_addr_port(&dst_addr),
client_id, client->pid));
TALLOC_FREE(src_addr_str);
TALLOC_FREE(dst_addr_str);
D_ERR("Could not register TCP connection %s - "
"not a public address (client_id %u pid %u)\n",
conn_str, client_id, client->pid);
return 0;
}
if (vnn->pnn != ctdb->pnn) {
DEBUG(DEBUG_ERR,("Attempt to register tcp client for IP %s we don't hold - failing (client_id %u pid %u)\n",
ctdb_addr_to_str(&dst_addr),
client_id, client->pid));
D_ERR("Attempt to register tcp client for IP %s we don't hold - "
"failing (client_id %u pid %u)\n",
ctdb_addr_to_str(&tcp_sock->dst),
client_id, client->pid);
/* failing this call will tell smbd to die */
return -1;
}
ip = talloc(client, struct ctdb_client_ip);
CTDB_NO_MEMORY(ctdb, ip);
ip->ctdb = ctdb;
ip->addr = dst_addr;
ip->client_id = client_id;
talloc_set_destructor(ip, ctdb_client_ip_destructor);
DLIST_ADD(ctdb->client_ip_list, ip);
tcp = talloc(client, struct ctdb_tcp_list);
CTDB_NO_MEMORY(ctdb, tcp);
tcp->client = client;
tcp->connection.src = tcp_sock->src;
tcp->connection.dst = tcp_sock->dst;
DLIST_ADD(client->tcp_list, tcp);
talloc_set_destructor(tcp, ctdb_tcp_list_destructor);
t.src = tcp_sock->src;
t.dst = tcp_sock->dst;
......@@ -1347,24 +1325,8 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
data.dptr = (uint8_t *)&t;
data.dsize = sizeof(t);
switch (dst_addr.sa.sa_family) {
case AF_INET:
DEBUG(DEBUG_INFO,("registered tcp client for %u->%s:%u (client_id %u pid %u)\n",
(unsigned)ntohs(tcp_sock->dst.ip.sin_port),
ctdb_addr_to_str(&tcp_sock->src),
(unsigned)ntohs(tcp_sock->src.ip.sin_port), client_id, client->pid));
break;
case AF_INET6:
DEBUG(DEBUG_INFO,("registered tcp client for %u->%s:%u (client_id %u pid %u)\n",
(unsigned)ntohs(tcp_sock->dst.ip6.sin6_port),
ctdb_addr_to_str(&tcp_sock->src),
(unsigned)ntohs(tcp_sock->src.ip6.sin6_port), client_id, client->pid));
break;
default:
DEBUG(DEBUG_ERR,(__location__ " Unknown family %d\n",
dst_addr.sa.sa_family));
}
D_INFO("Registered TCP connection %s (client_id %u pid %u)\n",
conn_str, client_id, client->pid);
/* tell all nodes about this tcp connection */
ret = ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_CONNECTED, 0,
......@@ -1378,6 +1340,141 @@ int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
return 0;
}
static bool ctdb_client_remove_tcp(struct ctdb_client *client,
const struct ctdb_connection *conn)
{
struct ctdb_tcp_list *tcp = NULL;
struct ctdb_tcp_list *tcp_next = NULL;
bool found = false;
for (tcp = client->tcp_list; tcp != NULL; tcp = tcp_next) {
bool same;
tcp_next = tcp->next;
same = ctdb_connection_same(conn, &tcp->connection);
if (!same) {
continue;
}
TALLOC_FREE(tcp);
found = true;
}
return found;
}
/*
called by a client to inform us of a TCP connection that was disconnected
*/
int32_t ctdb_control_tcp_client_disconnected(struct ctdb_context *ctdb,
uint32_t client_id,
TDB_DATA indata)
{
struct ctdb_client *client = reqid_find(ctdb->idr, client_id, struct ctdb_client);
struct ctdb_connection *tcp_sock = NULL;
int ret;
TDB_DATA data;
char conn_str[132] = { 0, };
bool found = false;
tcp_sock = (struct ctdb_connection *)indata.dptr;
ctdb_canonicalize_ip_inplace(&tcp_sock->src);
ctdb_canonicalize_ip_inplace(&tcp_sock->dst);
ret = ctdb_connection_to_buf(conn_str,
sizeof(conn_str),
tcp_sock,
false,
" -> ");
if (ret != 0) {
strlcpy(conn_str, "UNKNOWN", sizeof(conn_str));
}
found = ctdb_client_remove_tcp(client, tcp_sock);
if (!found) {
DBG_DEBUG("TCP connection %s not found "
"(client_id %u pid %u).\n",
conn_str, client_id, client->pid);
return 0;
}
D_INFO("deregistered TCP connection %s "
"(client_id %u pid %u)\n",
conn_str, client_id, client->pid);
data.dptr = (uint8_t *)tcp_sock;
data.dsize = sizeof(*tcp_sock);
/* tell all nodes about this tcp connection is gone */
ret = ctdb_daemon_send_control(ctdb,
CTDB_BROADCAST_CONNECTED,
0,
CTDB_CONTROL_TCP_REMOVE,
0,
CTDB_CTRL_FLAG_NOREPLY,
data,
NULL,
NULL);
if (ret != 0) {
DBG_ERR("Failed to send CTDB_CONTROL_TCP_REMOVE: %s\n",
conn_str);
return -1;
}
return 0;
}
/*
called by a client to inform us of a TCP connection was passed to a different
"client" (typically with multichannel to another smbd process).
*/
int32_t ctdb_control_tcp_client_passed(struct ctdb_context *ctdb,
uint32_t client_id,
TDB_DATA indata)
{
struct ctdb_client *client = reqid_find(ctdb->idr, client_id, struct ctdb_client);
struct ctdb_connection *tcp_sock = NULL;
int ret;
char conn_str[132] = { 0, };
bool found = false;
tcp_sock = (struct ctdb_connection *)indata.dptr;
ctdb_canonicalize_ip_inplace(&tcp_sock->src);
ctdb_canonicalize_ip_inplace(&tcp_sock->dst);
ret = ctdb_connection_to_buf(conn_str,
sizeof(conn_str),
tcp_sock,
false,
" -> ");
if (ret != 0) {
strlcpy(conn_str, "UNKNOWN", sizeof(conn_str));
}
found = ctdb_client_remove_tcp(client, tcp_sock);
if (!found) {
DBG_DEBUG("TCP connection from %s not found "
"(client_id %u pid %u).\n",
conn_str, client_id, client->pid);
return 0;
}
D_INFO("TCP connection from %s "
"(client_id %u pid %u) passed to another client\n",
conn_str, client_id, client->pid);
/*
* We don't call CTDB_CONTROL_TCP_REMOVE
* nor ctdb_remove_connection() as the connection
* is still alive, but handled by another client
*/
return 0;
}
/*
find a tcp address on a list
*/
......@@ -1599,20 +1696,12 @@ void ctdb_takeover_client_destructor_hook(struct ctdb_client *client)
struct ctdb_tcp_list *tcp = client->tcp_list;
struct ctdb_connection *conn = &tcp->connection;
DLIST_REMOVE(client->tcp_list, tcp);
vnn = find_public_ip_vnn(client->ctdb,
&conn->dst);
if (vnn == NULL) {
DEBUG(DEBUG_ERR,
(__location__ " unable to find public address %s\n",
ctdb_addr_to_str(&conn->dst)));
continue;
}
/* If the IP address is hosted on this node then
* remove the connection. */
if (vnn->pnn == client->ctdb->pnn) {
if (vnn != NULL && vnn->pnn == client->ctdb->pnn) {
ctdb_remove_connection(vnn, conn);
}
......@@ -1621,6 +1710,11 @@ void ctdb_takeover_client_destructor_hook(struct ctdb_client *client)
* and the client has exited. This means that we
* should not delete the connection information. The
* takeover node processes connections too. */
/*
* The destructor removes from the list
*/
TALLOC_FREE(tcp);
}
}
......
samba (2:4.18.10+dfsg-1) unstable; urgency=medium
* new upstream stable/bugfix release:
o https://bugzilla.samba.org/show_bug.cgi?id=12421
Fake directory create times has no effect
o https://bugzilla.samba.org/show_bug.cgi?id=13577
net changesecretpw cannot set the machine account password
if secrets.tdb is empty
o https://bugzilla.samba.org/show_bug.cgi?id=13688
Windows 2016 fails to restore previous version of a file
from a shadow_copy2 snapshot
o https://bugzilla.samba.org/show_bug.cgi?id=15440
Unable to copy and write files from clients to Ceph cluster
via SMB Linux gateway with Ceph VFS module
o https://bugzilla.samba.org/show_bug.cgi?id=15523
ctdb RELEASE_IP causes a crash in release_ip if a connection
to a non-public address disconnects first
o https://bugzilla.samba.org/show_bug.cgi?id=15534
smbd does not detect ctdb public ipv6 addresses for multichannel exclusion
o https://bugzilla.samba.org/show_bug.cgi?id=15540
For generating doc, take, if defined, env XML_CATALOG_FILES
o https://bugzilla.samba.org/show_bug.cgi?id=15541
Trivial C typo in nsswitch/winbind_nss_netbsd.c
o https://bugzilla.samba.org/show_bug.cgi?id=15542
vfs_linux_xfs is incorrectly named
o https://bugzilla.samba.org/show_bug.cgi?id=15544
shadow_copy2 broken when current fileset's directories are removed
o https://bugzilla.samba.org/show_bug.cgi?id=15547
Multichannel refresh network information
o https://bugzilla.samba.org/show_bug.cgi?id=15549
Symlinks on AIX are broken in 4.19 (and a few version before that)
o https://bugzilla.samba.org/show_bug.cgi?id=15550
ctime mixed up with mtime by smbd
o https://bugzilla.samba.org/show_bug.cgi?id=15555
smbpasswd reset permissions only if not 0600
* d/control: fix versioned dependency on samba for samba-ad-dc
-- Michael Tokarev <mjt@tls.msk.ru> Sat, 03 Feb 2024 15:28:56 +0300
samba (2:4.18.9+dfsg-1) unstable; urgency=medium
* new stable/security/bugfix release:
......
......@@ -190,7 +190,7 @@ Package: samba-ad-dc
Architecture: all
Multi-Arch: foreign
Pre-Depends: ${misc:Pre-Depends}
Depends: samba (>= ${binary:Version}), samba-dsdb-modules, samba-vfs-modules,
Depends: samba (>= ${source:Version}~), samba-dsdb-modules, samba-vfs-modules,
winbind,
krb5-kdc (>> 1.19.0) <pkg.samba.mitkrb5>,
${misc:Depends}
......
......@@ -3,7 +3,7 @@
<refentry id="vfs_linux_xfs_sgid.8">
<refmeta>
<refentrytitle>vfs_syncops</refentrytitle>
<refentrytitle>vfs_linux_xfs_sgid</refentrytitle>
<manvolnum>8</manvolnum>
<refmiscinfo class="source">Samba</refmiscinfo>
<refmiscinfo class="manual">System Administration tools</refmiscinfo>
......@@ -49,7 +49,7 @@
<refsect1>
<title>EXAMPLES</title>
<para>Add syncops functionality for [share]:</para>
<para>Add linux_xfs_sgid functionality for [share]:</para>
<programlisting>
<smbconfsection name="[share]"/>
<smbconfoption name="vfs objects">linux_xfs_sgid</smbconfoption>
......
......@@ -1450,7 +1450,7 @@ struct timespec get_ctimespec(const struct stat *pst)
{
struct timespec ret;
ret.tv_sec = pst->st_mtime;
ret.tv_sec = pst->st_ctime;
ret.tv_nsec = get_ctimensec(pst);
return ret;
}
......
......@@ -185,7 +185,7 @@ netbsdwinbind_getgroupmembership(void *nsrv, void *nscb, va_list ap)
};
struct winbindd_response response = {
.length = 0,
}
};
gid_t *wblistv;
int wblistc, i, isdup, dupc;
......
......@@ -288,7 +288,7 @@ tasks = {
"samba-no-opath-build": {
"git-clone-required": True,
"sequence": [
("configure", "ADDITIONAL_CFLAGS='-DDISABLE_OPATH=1' ./configure.developer --without-ad-dc " + samba_configure_params),
("configure", "ADDITIONAL_CFLAGS='-DDISABLE_OPATH=1 -DDISABLE_VFS_OPEN_HOW_RESOLVE_NO_SYMLINKS=1 -DDISABLE_PROC_FDS=1' ./configure.developer --without-ad-dc " + samba_configure_params),
("make", "make -j"),
("check-clean-tree", CLEAN_SOURCE_TREE_CMD),
("chmod-R-a-w", "chmod -R a-w ."),
......
......@@ -7,3 +7,7 @@
# These fail because become_root() doesn't work in make test
^samba3.blackbox.dropbox.*
^samba3.raw.samba3hide.*
# These don't work without /proc/fd support
^samba3.blackbox.shadow_copy_torture.*\(fileserver\)
^samba3.blackbox.virus_scanner.*\(fileserver:local\)