[Samba] vfs_shadow_copy2 delimiter not working

Anoop C S anoopcs at redhat.com
Wed Apr 19 06:14:35 UTC 2017


On Sun, 2017-04-02 at 22:42 +0100, Michael Miller via samba wrote:
> Hi
> 
> I could not get a custom "shadow:delimiter" for the vfs shadow_copy2 
> module to work successfully for me with Samba 4.6.2. I did not try 
> previous versions. Based on my testing it seems that an additional line 
> of code is needed in vfs_shadow_copy2.c as shown in the patch below 
> (some comment updates are included too for code readability).
> 
> Without the below patch, previous versions were not being returned by 
> Samba when using a shadow:delimiter. I was using a sample config of
> 
> shadow:snapprefix = ^Snap
> shadow:delimiter = _._
> shadow:format = %Y.%m.%d-%H.%M.%S
> 

I think you missed to specify delimiter in format parameter for shadow_copy2 module as below:

shadow:format = _._%Y.%m.%d-%H.%M.%S

If its still not working, can you please share me the logs(with log level 10) so as to debug the
issue?

> with sample snapshots named:
> Snap_testing1_._2016.11.01-01.00.01
> Snap_prerelease_._2016.12.01-01.00.02
> Snap_postrelease_._2017.01.01-01.00.01
> 
> Is anyone able to use a custom shadow:delimiter successfully without any 
> modifications to the Samba code? If not, how do I go about getting this 
> patch applied?
> 
> 
> diff -up vfs_shadow_copy2.c.orig vfs_shadow_copy2.c
> --- vfs_shadow_copy2.c.orig     2017-03-31 14:53:38.722560396 +0100
> +++ vfs_shadow_copy2.c  2017-04-02 22:13:41.943038415 +0100
> @@ -1866,16 +1866,19 @@ static bool shadow_copy2_snapshot_to_gmt
>           */
>          if (priv->snaps->regex != NULL) {
>                  tmpstr = talloc_strdup(talloc_tos(), name);
> -               /* point "name" to the time format */
> +               /* Point "name" at <delimiter><time_format> */
>                  name = strstr(name, priv->config->delimiter);
>                  if (name == NULL) {
>                          goto done;
>                  }
> -               /* Extract the prefix */
> +               /* Now point name at <time_format> */
> +                name = name + strlen(priv->config->delimiter);
> +               /* Locate the the prefix */
>                  tmp = strstr(tmpstr, priv->config->delimiter);
>                  if (tmp == NULL) {
>                          goto done;
>                  }
> +               /* Trim <delimiter><time_format> from tmpstr leaving 
> prefix */
>                  *tmp = '\0';
> 
>                  /* Parse regex */
> 



More information about the samba mailing list