| 1 | #!/bin/bash |
|---|
| 2 | # |
|---|
| 3 | ##################################################################### |
|---|
| 4 | # |
|---|
| 5 | # This script converts a LICQ user database into a Trillian |
|---|
| 6 | # user buddies.xml file |
|---|
| 7 | # |
|---|
| 8 | #################################################################### |
|---|
| 9 | # |
|---|
| 10 | # You might want to adjust the default group name, as well as the |
|---|
| 11 | # replacements (sed-batchfile) to fit your needs. |
|---|
| 12 | # |
|---|
| 13 | # by default a file named buddies.xml is generated in your current |
|---|
| 14 | # directory. If one is already present, it will be overwritten! |
|---|
| 15 | # Just replace your buddies.xml on your trillian machine |
|---|
| 16 | # and you're all set. |
|---|
| 17 | # |
|---|
| 18 | #################################################################### |
|---|
| 19 | |
|---|
| 20 | # Licq Dirs -- change if applicable |
|---|
| 21 | |
|---|
| 22 | LICQ_DIR=$HOME/.licq/ |
|---|
| 23 | LICQ_USER_DIR=${LICQ_DIR}users/ |
|---|
| 24 | |
|---|
| 25 | # Licq Files -- change if applicable |
|---|
| 26 | |
|---|
| 27 | LICQ_CONF=$LICQ_DIR/licq.conf |
|---|
| 28 | # LICQ_USERS=$LICQ_DIR/users.conf |
|---|
| 29 | |
|---|
| 30 | # output file |
|---|
| 31 | OUT_FILE="buddies.xml" |
|---|
| 32 | |
|---|
| 33 | #Default Group for users that don't belong to a group |
|---|
| 34 | GRUPPEN[0]="Andere user" |
|---|
| 35 | |
|---|
| 36 | #Filename for a temporary sed batch-file |
|---|
| 37 | SED_TMP=sed.tmp |
|---|
| 38 | |
|---|
| 39 | #generate sed batchfile for stripping leading blanks and replacing Umlauts in Alias-names |
|---|
| 40 | # |
|---|
| 41 | # adjust for special Characters in your language |
|---|
| 42 | # |
|---|
| 43 | echo "s/^ *//" > $SED_TMP #leading blanks |
|---|
| 44 | echo "s/Ä/%C4/g" >> $SED_TMP #Ä |
|---|
| 45 | echo "s/Ö/%D6/g" >> $SED_TMP #Ö |
|---|
| 46 | echo "s/Ü/%DC/g" >> $SED_TMP #Ü |
|---|
| 47 | echo "s/ä/%E4/g" >> $SED_TMP #ä |
|---|
| 48 | echo "s/ö/%F6/g" >> $SED_TMP #ö |
|---|
| 49 | echo "s/ü/%FC/g" >> $SED_TMP #ü |
|---|
| 50 | |
|---|
| 51 | GROUP_COUNT=`awk -F = '/NumOfGroups/ {printf "%i",$2}' < $LICQ_CONF` |
|---|
| 52 | |
|---|
| 53 | echo "Parsing Group Names" |
|---|
| 54 | |
|---|
| 55 | #Parsing group names into Array |
|---|
| 56 | for ((j=1;$j<=$GROUP_COUNT;j++)) |
|---|
| 57 | do |
|---|
| 58 | GRUPPEN[$j]="`cat $LICQ_CONF | grep Group$j\.name | awk -F = '{ print $2 }' | sed "s/^ *//"`" |
|---|
| 59 | done |
|---|
| 60 | |
|---|
| 61 | |
|---|
| 62 | echo "Analyzing Group Memberships" |
|---|
| 63 | |
|---|
| 64 | #Determine group memberships |
|---|
| 65 | for DATEI in `ls -1 $LICQ_USER_DIR/*` |
|---|
| 66 | do |
|---|
| 67 | DAT=`basename "$DATEI"` |
|---|
| 68 | |
|---|
| 69 | #is user on ignore list? -- don't add |
|---|
| 70 | SYSTEM_GROUP=`cat $DATEI | awk -F = '/Groups\.System/ {print $2}'` |
|---|
| 71 | if ([ -n "$SYSTEM_GROUP" ] && ! [ $SYSTEM_GROUP -eq 8 ]) |
|---|
| 72 | then |
|---|
| 73 | |
|---|
| 74 | #determine group membership |
|---|
| 75 | GROUP_CODE=`cat $DATEI | awk -F = '/Groups\.User/ {print $2}' | sed "s/^ *//"` |
|---|
| 76 | if ([ -z "$GROUP_CODE" ] || [ "$GROUP_CODE" -eq 0 ] ) |
|---|
| 77 | then |
|---|
| 78 | MEMBERS[0]=`echo "${MEMBERS[0]} $DAT"` |
|---|
| 79 | else |
|---|
| 80 | for ((j=0;$j<=$GROUP_COUNT;j++)) |
|---|
| 81 | do |
|---|
| 82 | TEST_GROUP=$((2**($GROUP_COUNT - $j) )) |
|---|
| 83 | TEST_ERG=$(( $GROUP_CODE / $TEST_GROUP )) |
|---|
| 84 | if [ $TEST_ERG -eq 1 ] |
|---|
| 85 | then |
|---|
| 86 | #member of group group_count - j + 1 |
|---|
| 87 | GROUP_NUM=$(($GROUP_COUNT - $j + 1)) |
|---|
| 88 | MEMBERS[$GROUP_NUM]=`echo "${MEMBERS[$GROUP_NUM]} $DAT"` |
|---|
| 89 | if [ ! $TEST_GROUP -eq 1 ] |
|---|
| 90 | then |
|---|
| 91 | GROUP_CODE=$(($GROUP_CODE % $TEST_GROUP )) |
|---|
| 92 | fi |
|---|
| 93 | fi |
|---|
| 94 | done |
|---|
| 95 | fi |
|---|
| 96 | fi |
|---|
| 97 | done |
|---|
| 98 | |
|---|
| 99 | echo "Writing File Header" |
|---|
| 100 | |
|---|
| 101 | #old output file will be overwritten!!! |
|---|
| 102 | #Write Header |
|---|
| 103 | |
|---|
| 104 | echo "<?xml version=\"1.0\"?>" > $OUT_FILE |
|---|
| 105 | echo "<!DOCTYPE buddies">> $OUT_FILE |
|---|
| 106 | echo " PUBLIC \"-//IETF//DTD RFCxxxx XBUDDY 1.0 //EN\" \"xbuddy.dtd\">" >> $OUT_FILE |
|---|
| 107 | echo >> $OUT_FILE |
|---|
| 108 | echo "<!-- some warning from Trillian here :-) -->" >> $OUT_FILE |
|---|
| 109 | echo >> $OUT_FILE |
|---|
| 110 | |
|---|
| 111 | #End of Header |
|---|
| 112 | |
|---|
| 113 | echo "Writing Data" |
|---|
| 114 | |
|---|
| 115 | #genereate entries in OUT_FILE |
|---|
| 116 | |
|---|
| 117 | echo "<buddies>" >> $OUT_FILE |
|---|
| 118 | echo " <title>Buddies for Trillian User</title>" >> $OUT_FILE |
|---|
| 119 | echo " <version>1.2</version>" >> $OUT_FILE |
|---|
| 120 | |
|---|
| 121 | TMP=0 |
|---|
| 122 | for ((COUNT=1;$COUNT <= $GROUP_COUNT; COUNT++)) |
|---|
| 123 | do |
|---|
| 124 | echo "Adding Group ${GRUPPEN[$COUNT]}" |
|---|
| 125 | echo " <group expanded=\"1\">" >> $OUT_FILE |
|---|
| 126 | echo " <title>${GRUPPEN[$COUNT]}</title>" >> $OUT_FILE |
|---|
| 127 | |
|---|
| 128 | for BUDDY in ${MEMBERS[$COUNT]} |
|---|
| 129 | do |
|---|
| 130 | TMP=$(($TMP + 1)) |
|---|
| 131 | #add entries for buddies |
|---|
| 132 | UIN=`basename "$BUDDY" ".Licq"` |
|---|
| 133 | ALIAS=`awk -F = '/^Alias\ / {print $2}' < $LICQ_USER_DIR/$BUDDY | sed -f $SED_TMP` |
|---|
| 134 | echo "adding buddy $ALIAS ($UIN)" |
|---|
| 135 | echo " <buddy uri=\"ICQ:1%3A${UIN}%3A${ALIAS}\">${ALIAS}</buddy>" >> $OUT_FILE |
|---|
| 136 | |
|---|
| 137 | done |
|---|
| 138 | echo " </group>" >> $OUT_FILE |
|---|
| 139 | done |
|---|
| 140 | |
|---|
| 141 | COUNT=0 |
|---|
| 142 | #Lets add the default group last :-) |
|---|
| 143 | echo "Adding Group ${GRUPPEN[$COUNT]}" |
|---|
| 144 | echo " <group expanded=\"1\">" >> $OUT_FILE |
|---|
| 145 | echo " <title>${GRUPPEN[$COUNT]}</title>" >> $OUT_FILE |
|---|
| 146 | |
|---|
| 147 | for BUDDY in ${MEMBERS[$COUNT]} |
|---|
| 148 | do |
|---|
| 149 | TMP=$(($TMP + 1)) |
|---|
| 150 | #add entries for buddies |
|---|
| 151 | UIN=`basename "$BUDDY" ".Licq"` |
|---|
| 152 | ALIAS=`awk -F = '/^Alias\ / {print $2}' < $LICQ_USER_DIR/$BUDDY | sed -f $SED_TMP` |
|---|
| 153 | echo "adding buddy $ALIAS ($UIN)" |
|---|
| 154 | echo " <buddy uri=\"ICQ:1%3A${UIN}%3A${ALIAS}\">${ALIAS}</buddy>" >> $OUT_FILE |
|---|
| 155 | done |
|---|
| 156 | echo " </group>" >> $OUT_FILE |
|---|
| 157 | echo "</buddies>" >> $OUT_FILE |
|---|
| 158 | |
|---|
| 159 | rm -f $SED_TMP |
|---|
| 160 | |
|---|
| 161 | echo "added $TMP Buddies" |
|---|