Add mdns name configuration option
authorKevin Anderson <andersonkw2@gmail.com>
Sun, 26 Nov 2017 04:03:59 +0000 (23:03 -0500)
committerJeremy Allison <jra@samba.org>
Fri, 8 Dec 2017 21:58:17 +0000 (22:58 +0100)
Add the mdns name configuration variable to control the mdns hostname.
The default is to use the NETBIOS name of the system to match previous
versions which is typically the hostname in all capitals. A value of mdns
can be provided to defer the hostname to the mdns library.

With the recent patch to support time machine being merged this patch
allows for a user to configure the server name that is advertised to
be lower cased through Avahi advertisements.

Signed-off-by: Kevin Anderson <andersonkw2@gmail.com>
Reviewed-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
WHATSNEW.txt
docs-xml/smbdotconf/base/mdnsname.xml [new file with mode: 0644]
lib/param/loadparm.c
lib/param/loadparm.h
lib/param/param_table.c
source3/smbd/avahi_register.c

index 8f5986ec55ef4ffb5307b608f60b0d066347409b..007e5d914b0c59650f0db9f5a5b35c207d087291 100644 (file)
@@ -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 (file)
index 0000000..fba90ff
--- /dev/null
@@ -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>
index d788ffbe36f1db02dc9a8f601f92d5b5289d5476..73b7901d7f603c485c957a8a3b61bfedc26e66b2 100644 (file)
@@ -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");
index e3c82164ca4c6c1aa6324574f6d10f43c1c769bd..b5d79b912c759f7eb2deee6f90c4c7daf14f6ce5 100644 (file)
@@ -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};
 
index f9052304bdac15a3329ad2d844bcafb216259ae7..f9d3b55adf2ad93d8b7d43c64f675db14fb06f3a 100644 (file)
@@ -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},
index 91e8a439b84cb4dd4d46f1f920ee433184d18df4..50462b5c610c78e9fefbd3f259890ac262372919 100644 (file)
@@ -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;