]> arthur.barton.de Git - netatalk.git/commitdiff
New uuid option for volumes for TM zeroconf announcement
authorFrank Lahm <franklahm@googlemail.com>
Sat, 19 Jun 2010 00:48:45 +0000 (02:48 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Sat, 19 Jun 2010 00:48:45 +0000 (02:48 +0200)
etc/afpd/afp_avahi.c
etc/afpd/volume.c
include/atalk/volume.h

index cd385da91e5e8e48bd5782ee588f304f56ebee7c..fddbe5b71bd3e945bf2f425a6279f7a89a99c99c 100644 (file)
@@ -69,10 +69,16 @@ static void register_stuff(void) {
                strlist = avahi_string_list_add_printf(strlist, "sys=waMa=0,adVF=0x100");
                
                for (volume = getvolumes(); volume; volume = volume->v_next, i++) {
+
                        if (convert_string(CH_UCS2, CH_UTF8_MAC, volume->v_name, -1, tmpname, 255) <= 0)
                                goto fail;
-                       LOG(log_debug, logtype_afpd, "Adding volume '%s'", volume->v_localname);
-                       strlist = avahi_string_list_add_printf(strlist, "dk%u=adVN=%s,adVF=0x01", i, tmpname);
+
+                       if ((volume->v_flags & AFPVOL_TM) && volume->v_uuid) {
+                               LOG(log_info, logtype_afpd, "Registering volume '%s' with UUID: '%s' for TimeMachine",
+                                               volume->v_localname, volume->v_uuid);
+                               strlist = avahi_string_list_add_printf(strlist, "dk%u=adVN=%s,adVF=0xa1,adVU=%s",
+                                                                                                                                                                                        i, tmpname, volume->v_uuid);
+                       }
                }
 
                /* AFP server */
index 888d21da31b6c19b0d1ce310de1dac0fe835bbb4..d9cba5d731c815c0fa84481e3ad8e478719c6157 100644 (file)
@@ -119,8 +119,9 @@ static void             free_extmap(void);
 #define VOLOPT_EA_VFS        27  /* Extended Attributes vfs indirection */
 #define VOLOPT_CNIDSERVER    28  /* CNID Server ip address*/
 #define VOLOPT_CNIDPORT      30  /* CNID server tcp port */
+#define VOLOPT_UUID          31  /* CNID server tcp port */
 
-#define VOLOPT_MAX           31  /* <== IMPORTANT !!!!!! */
+#define VOLOPT_MAX           32  /* <== IMPORTANT !!!!!! */
 #define VOLOPT_NUM           (VOLOPT_MAX + 1)
 
 #define VOLPASSLEN  8
@@ -529,6 +530,9 @@ static void volset(struct vol_option *options, struct vol_option *save,
     } else if (optionok(tmp, "volsizelimit:", val)) {
         options[VOLOPT_LIMITSIZE].i_value = (uint32_t)strtoul(val + 1, NULL, 10);
 
+    } else if (optionok(tmp, "uuid:", val)) {
+        setoption(options, save, VOLOPT_UUID, val);
+
     } else {
         /* ignore unknown options */
         LOG(log_debug, logtype_afpd, "ignoring unknown volume option: %s", tmp);
@@ -750,6 +754,9 @@ static int creatvol(AFPObj *obj, struct passwd *pwd,
         if (options[VOLOPT_LIMITSIZE].i_value)
             volume->v_limitsize = options[VOLOPT_LIMITSIZE].i_value;
 
+        if (options[VOLOPT_UUID].c_value)
+            volume->v_uuid = strdup(options[VOLOPT_UUID].c_value);
+
         /* Mac to Unix conversion flags*/
         volume->v_mtou_flags = 0;
         if (!(volume->v_flags & AFPVOL_NOHEX))
index de1134f2ede26930a144a0aaf99784a4df75b1c8..993b1a746ecd9b3295d4f33074ef5a063119e1d5 100644 (file)
@@ -85,7 +85,7 @@ struct vol {
     char            *v_postexec;
     int             v_root_preexec_close;
     int             v_preexec_close;
-
+    char            *v_uuid;    /* For TimeMachine zeroconf record */
 #ifdef FORCE_UIDGID
     char            *v_forceuid;
     char            *v_forcegid;