This file is indexed.

/usr/share/gtkpod/scripts/sync-ldif.sh is in gtkpod-data 2.1.1-1.

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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#! /bin/bash

# Placed under GPL; to know more, see:
# 			http://www.gnu.org/licenses/licenses.html
#
# if you make any change, I would be happy to be kept advised by
# sending an email at <sberidot at libertysurf dot fr>.
#
# Write "[sync-ldif.sh]" in the subject, otherwise the message is
# bound to be considered as spam... :(
#
#
# RESTRICTION : I haven't managed yet to read correctly data from
# ldif files when accents are used, Thunderbird writes the names
# differently...This is still Chinese for me!! :)

export LDIFAMILYNAME=contactIPOD	# Filenames will look like $LDIFAMILYNAMEXX.vcf, X=[0-9]
export IPOD_MOUNT=/media/ipod		# Mount point of the ipod
declare LDIFILE=addressbook.ldif	# default filename 'addressbook.ldif'
declare ENCODING=ISO-8859-15            # To try others encodings : 'iconv --list'
declare DELETE="NO"			# To delete old .vcf files by default? 'NO'!!

# Exiting function
function EXITING {
	export -n LDIFAMILYNAME
	export -n IPOD_MOUNT
}

# Please HELP!!! :)
function DISPLAY_HELP {
	cat <<- EOF
		Beware not to share the same familyname with old .vcf in the ipod directory;
		no one precaution is taken, so files will be overwritten. :(
		For the moment, I did not manage to make accents be displayed properly,
		but still working on it. Enjoy!

		Default options:
		Current Ipod directory is      : $IPOD_MOUNT
		Current Encoding               : $ENCODING
		Current template for filenames : $LDIFAMILYNAME[1-9*].vcf
		$(basename $0) doesn't delete old .vcf files by default, but overwrites.

		Options:
		Syntax : $(basename $0) -f addbook.ldif -m /media/ipod -n contactIPOD -d (-h)
		[-f] addbook.ldif  : contains the .ldif Filename
		[-m] /media/ipod   : contains the ipod Mounted directory
		[-n] contactIPOD   : contains the .vcf family fileName
		[-d]               : contains the option to Delete all old .vcf files
		[-h]               : contains this Help
	EOF
}

# $1 contains the directory to be tested
# Is/Are .vcf file(s) present?
function TST_VCF {
	local j
	for j in "${1%%/}/"* ; do
		if [ "${j##*.}" = "vcf" ] ; then
			return 0
			break
		fi
	done
	return 1
}

# $1 contains the util name
# Is $1 already installed?
function TST_UTIL {
	which "$1" >/dev/null 2>&1
	if [ "$?" != "0" ]; then
		echo "[INSTALL] $1 utility not found, please install $1 package first!"
		EXITING
		exit 3
	fi
}

# $1 contains the .vcf filename
# extracts names from .vcf filename
function EXTRACT_CONTACT_FROM_VCF {
	local NAME="UNKNOWN"
	if [ -e "$1" ] ; then
		NAME=$(grep "fn:" "$1")
		NAME=${NAME:3}
	fi
	echo "$NAME"
}

function DELETE_VCFILE_FROM_IPOD {
	# if no .vcf file's found, exit!
	if ! TST_VCF "$IPOD_MOUNT"/Contacts/ ; then
		echo "[DELETING] no file detected"
		return
	fi
	# begin to delete
	local i
	for i in "$IPOD_MOUNT"/Contacts/*.vcf ; do
		echo "[DELETING] " $(EXTRACT_CONTACT_FROM_VCF "$i") "from ${i##*/}"
		rm -f "$i"
	done
}

# Is Ipod Directory valid?
function IS_IPOD_DIR_VALID {
	# Test of the $IPOD_MOUNT directory
	if [ ! -d "$IPOD_MOUNT/Contacts/" ]; then
		echo "$IPOD_MOUNT/Contacts invalid... Exiting."
		EXITING
		exit 2
	fi
}

# Program's starting here!

# Testing awk and iconv utils...
TST_UTIL "awk"
TST_UTIL "iconv"

# picking up and processing parameters from prompt...
while getopts ":f:m:n:dh:" option ; do
	case $option in
		f )	LDIFILE="$OPTARG";;
		m )     IPOD_MOUNT="${OPTARG%%/}";;
		n )	LDIFAMILYNAME="$OPTARG";;
		d )	DELETE="OK";;
		h | * )	DISPLAY_HELP; EXITING; exit 1;;
	esac
done

# check, if not valid, exit!
IS_IPOD_DIR_VALID

# Is LDIFILE really a ldif file? just testing the extension, and if the file exists...
if [ "${LDIFILE##*.}" == "ldif" ] || [ "${LDIFILE##*.}" == "LDIF" ] && [ -e "$LDIFILE" ] ; then
	# The $IPOD_MOUNT/Contacts/ directory will be emptied if '-d' option!
	if [ "$DELETE" == "OK" ]; then
		echo "Old contacts being deleted from $IPOD_MOUNT. Work in progress..."
		DELETE_VCFILE_FROM_IPOD
		sleep 1
	fi

	echo "New contacts being synchronised from $LDIFILE. Work in progress..."
	# Translation from LDIF into VCF, in order to cut standard output in vcf files...
	# Converting into vcf stream | converting to ENCODING | detection of VCF card
	#							and writing it into the Ipod
	ldif2vcf.sh < "$LDIFILE" | iconv -f UTF-8 -t $ENCODING | awk 'BEGIN{RS="\n"; NAME=""; CARD=""; VCFILE=""; NCARD=1} /^fn:/ {NAME=substr($0,4)} /^$/{next} /^end:vcard/ {VCFILE = ENVIRON["IPOD_MOUNT"] "/Contacts/" ENVIRON["LDIFAMILYNAME"] (NCARD-1) ".vcf"; print "[WRITING] " NAME " in " ENVIRON["LDIFAMILYNAME"] (NCARD-1) ".vcf"; print CARD "end:vcard" > VCFILE; CARD=""; VCFILE=""; NCARD++; next} {CARD=CARD $0 RS} END{print (NCARD-1) " vcards added."}' # >/dev/null 2>&1

	if [ "$?" != "0" ]; then
		echo "[ERROR] An error occured, exiting, sorry for that... Please Report!"
		EXITING
		exit 1
	fi
	echo "complete!"
else
	DISPLAY_HELP
fi

EXITING
exit 0