This file is indexed.

/usr/sbin/csync2-compare is in csync2 2.0-8-g175a01c-4ubuntu1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
#!/bin/bash

verbose=0

if [ "$1" = "-v" ]; then
	verbose=1
	shift
fi

if [ $# != 3 ]; then
	echo "Usage: $0 [-v] host1[@host1] host2[@host2] basedir" >&2
	exit 1
fi

left1="${1%@*}"
left2="${1#*@}"

right1="${2%@*}"
right2="${2#*@}"

basedir="$3"

left_cmd="ssh $left1 'csync2 -or $basedir -P $right2 | sort | xargs md5sum'"
right_cmd="ssh $right1 'csync2 -or $basedir -P $left2 | sort | xargs md5sum'"

if [ $verbose -eq 1 ]; then
	echo
	echo "L: $left_cmd"
	echo "R: $right_cmd"
	echo
fi

my_md5sum='perl -w -e '\''
	use strict;
	use Digest::MD5;

	foreach my $f (@ARGV) {
		if (-l $f) {
			print "LINK:", Digest::MD5->new->add(readlink($f))->hexdigest, " $f\n";
			next;
		}
		if (-f $f) {
			open(FILE, $f) or die "Can not open >>$f<<: $!";
			binmode(FILE);
			print "DATA:", Digest::MD5->new->addfile(*FILE)->hexdigest, " $f\n";
			close(FILE);
			next;
		}
		print "SPECIALFILE:0 $f\n";
	}
'\'

tic="'"
my_md5sum="${my_md5sum//$tic/$tic\\$tic$tic}"

left_cmd="${left_cmd/md5sum/$my_md5sum}"
right_cmd="${right_cmd/md5sum/$my_md5sum}"

diff -u <( eval "$left_cmd" ) <( eval "$right_cmd" ) | awk '

function isort(A, n,
		i, j, hold)
{
	for (i=1; i<n; i++)
	{
		hold = A[j = i];
		while (A[j-1] > hold)
			{ j--; A[j+1] = A[j]; }
		A[j] = hold;
	}
}

/^-[a-zA-Z0-9]/  { gotsomething=1; if ('$verbose') print; sub(/^./, ""); all[$2] = 1; left[$2]  = $1; }
/^\+[a-zA-Z0-9]/ { gotsomething=1; if ('$verbose') print; sub(/^./, ""); all[$2] = 1; right[$2] = $1; }

END {
	outcount = 0;

	for (filename in all) {
		outlines[filename] = sprintf("%s %s %s",
			(left[filename]  == "" ? "-" : "X"),
			(right[filename] == "" ? "-" : "X"),
			filename);
		sortindex[outcount] = filename;
		outcount++;
	}

	if ('$verbose' && gotsomething)
		printf "\n";

	isort(sortindex, outcount);
	for (i=0; i<outcount; i++)
		print outlines[sortindex[i]];

	if ('$verbose')
		printf "Found %d differences.\n", outcount;
}
'

if [ $verbose -eq 1 ]; then
	echo
	echo "X - ... Found this file on left host ($1) only."
	echo "- X ... Found this file on right host ($2) only."
	echo "X X ... Found file on both hosts but content is different."
	echo
fi