summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WHATSNEW.txt26
-rw-r--r--docs-xml/smbdotconf/base/mdnsname.xml19
-rw-r--r--lib/param/loadparm.c2
-rw-r--r--lib/param/loadparm.h3
-rw-r--r--lib/param/param_table.c6
-rw-r--r--source3/smbd/avahi_register.c18
6 files changed, 71 insertions, 3 deletions
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 8f5986ec55e..007e5d914b0 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -29,6 +29,29 @@ policy. Can be applied automatically by setting
'server services = +gpoupdate'.
+Time Machine Support with vfs_fruit
+===================================
+Samba can be configured as a Time Machine target for Apple Mac devices
+through the vfs_fruit module. When enabling a share for Time Machine
+support the relevant Avahi records to support discovery will be published
+for installations that have been built against the Avahi client library.
+
+Shares can be designated as a Time Machine share with the following setting:
+
+ 'fruit:time machine = yes'
+
+Support for lower casing the MDNS Name
+======================================
+Allows the server name that is advertised through MDNS to be set to the
+hostname rather than the Samba NETBIOS name. This allows an administrator
+to make Samba registered MDNS records match the case of the hostname
+rather than being in all capitals.
+
+This can be set with the following settings:
+
+ 'mdns name = mdns'
+
+
smb.conf changes
================
@@ -38,7 +61,8 @@ smb.conf changes
gpo update command New
oplock contention limit Removed
prefork children New 1
-
+ mdns name Added netbios
+ fruit:time machine Added false
NT4-style replication based net commands removed
================================================
diff --git a/docs-xml/smbdotconf/base/mdnsname.xml b/docs-xml/smbdotconf/base/mdnsname.xml
new file mode 100644
index 00000000000..fba90ff9b84
--- /dev/null
+++ b/docs-xml/smbdotconf/base/mdnsname.xml
@@ -0,0 +1,19 @@
+<samba:parameter name="mdns name"
+ type="enum"
+ context="G"
+ enumlist="enum_mdns_name_values"
+ xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+
+<description>
+ <para>This parameter controls the name that multicast DNS
+ support advertises as its' hostname.</para>
+
+ <para>The default is to use the NETBIOS name which is typically
+ the hostname in all capital letters. </para>
+
+ <para>A setting of mdns will defer the hostname configuration
+ to the MDNS library that is used.</para>
+
+</description>
+<value type="default">netbios</value>
+</samba:parameter>
diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index d788ffbe36f..73b7901d7f6 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -2906,6 +2906,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
lpcfg_do_global_parameter(lp_ctx, "client ldap sasl wrapping", "sign");
+ lpcfg_do_global_parameter(lp_ctx, "mdns name", "netbios");
+
lpcfg_do_global_parameter(lp_ctx, "ldap server require strong auth", "yes");
lpcfg_do_global_parameter(lp_ctx, "follow symlinks", "yes");
diff --git a/lib/param/loadparm.h b/lib/param/loadparm.h
index e3c82164ca4..b5d79b912c7 100644
--- a/lib/param/loadparm.h
+++ b/lib/param/loadparm.h
@@ -223,6 +223,9 @@ enum ldap_server_require_strong_auth {
/* DNS update settings */
enum dns_update_settings {DNS_UPDATE_OFF, DNS_UPDATE_ON, DNS_UPDATE_SIGNED};
+/* MDNS name sources */
+enum mdns_name_values {MDNS_NAME_NETBIOS, MDNS_NAME_MDNS};
+
/* LDAP SSL options */
enum ldap_ssl_types {LDAP_SSL_OFF, LDAP_SSL_START_TLS};
diff --git a/lib/param/param_table.c b/lib/param/param_table.c
index f9052304bda..f9d3b55adf2 100644
--- a/lib/param/param_table.c
+++ b/lib/param/param_table.c
@@ -127,6 +127,12 @@ static const struct enum_list enum_smb_signing_vals[] = {
{-1, NULL}
};
+static const struct enum_list enum_mdns_name_values[] = {
+ {MDNS_NAME_NETBIOS, "netbios"},
+ {MDNS_NAME_MDNS, "mdns"},
+ {-1, NULL}
+};
+
static const struct enum_list enum_tls_verify_peer_vals[] = {
{TLS_VERIFY_PEER_NO_CHECK,
TLS_VERIFY_PEER_NO_CHECK_STRING},
diff --git a/source3/smbd/avahi_register.c b/source3/smbd/avahi_register.c
index 91e8a439b84..50462b5c610 100644
--- a/source3/smbd/avahi_register.c
+++ b/source3/smbd/avahi_register.c
@@ -111,9 +111,23 @@ static void avahi_client_callback(AvahiClient *c, AvahiClientState status,
int dk = 0;
AvahiStringList *adisk = NULL;
AvahiStringList *adisk2 = NULL;
+ const char *hostname = NULL;
+ enum mdns_name_values mdns_name = lp_mdns_name();
DBG_DEBUG("AVAHI_CLIENT_S_RUNNING\n");
+ switch (mdns_name) {
+ case MDNS_NAME_MDNS:
+ hostname = avahi_client_get_host_name(c);
+ break;
+ case MDNS_NAME_NETBIOS:
+ hostname = lp_netbios_name();
+ break;
+ default:
+ DBG_ERR("Unhandled mdns_name %d\n", mdns_name);
+ return;
+ }
+
state->entry_group = avahi_entry_group_new(
c, avahi_entry_group_callback, state);
if (state->entry_group == NULL) {
@@ -125,7 +139,7 @@ static void avahi_client_callback(AvahiClient *c, AvahiClientState status,
error = avahi_entry_group_add_service(
state->entry_group, AVAHI_IF_UNSPEC,
- AVAHI_PROTO_UNSPEC, 0, lp_netbios_name(),
+ AVAHI_PROTO_UNSPEC, 0, hostname,
"_smb._tcp", NULL, NULL, state->port, NULL);
if (error != AVAHI_OK) {
DBG_DEBUG("avahi_entry_group_add_service failed: %s\n",
@@ -169,7 +183,7 @@ static void avahi_client_callback(AvahiClient *c, AvahiClientState status,
error = avahi_entry_group_add_service_strlst(
state->entry_group, AVAHI_IF_UNSPEC,
- AVAHI_PROTO_UNSPEC, 0, lp_netbios_name(),
+ AVAHI_PROTO_UNSPEC, 0, hostname,
"_adisk._tcp", NULL, NULL, 0, adisk);
avahi_string_list_free(adisk);
adisk = NULL;