fix partitionsfile example to properly use __star__ and note
[matthijs/upstream/backupninja.git] / handlers / ldap
1 # -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
2 #
3 # openldap backup handler script for backupninja
4 #
5
6 getconf backupdir /var/backups/ldap
7 getconf conf /etc/ldap/slapd.conf
8 getconf databases all
9 getconf compress yes
10 getconf ldif yes
11 getconf restart no
12 getconf method ldapsearch
13 getconf passwordfile
14 getconf binddn
15 getconf ldaphost
16 getconf tls yes
17
18 if [ $tls = 'yes' ]; then
19    URLBASE="ldaps"
20 else
21    URLBASE="ldap"
22 fi
23
24 status="ok"
25
26 [ -f $conf ] || fatal "slapd config file ($conf) not found"
27 [ -d $backupdir ] || mkdir -p $backupdir
28 [ -d $backupdir ] || fatal "Backup directory '$backupdir'"
29
30 dbsuffixes=(`@AWK@ 'BEGIN {OFS=":"} /[:space:]*^database[:space:]*\w*/ {db=$2}; /^[:space:]*suffix[:space:]*\w*/ {if (db=="bdb"||db=="ldbm") print db,$2}' $conf|@SED@ -e 's/[" ]//g'`)
31
32 ## LDIF DUMP
33
34 if [ "$ldif" == "yes" ]; then
35    dumpdir="$backupdir"
36    [ -d $dumpdir ] || mkdir -p $dumpdir
37    
38    if [ "$databases" == 'all' ]; then
39       dbcount=`grep '^database' $conf | wc -l`
40       let "dbcount = dbcount - 1"
41       databases=`seq 0 $dbcount`;
42    fi   
43    
44    for db in $databases; do
45       if [ `expr index "$dbnum" "="` == "0" ]; then
46                         # db is a number, get the suffix.
47          dbsuffix=${dbsuffixes[$db]/*:/}
48       else
49          dbsuffix=$db
50       fi
51                 # some databases don't have suffix (like monitor), skip these
52       if [ "$dbsuffix" == "" ]; then
53          continue;
54       fi
55       
56       if [ "$method" == "slapcat" ]; then
57          execstr="$SLAPCAT -f $conf -b $dbsuffix"
58          debug "$execstr"
59       else
60          if [ -n "$ldaphost" ]; then
61             execstr="$LDAPSEARCH -H $URLBASE://$ldaphost -x -L -b ""$dbsuffix"" -D ""$binddn"" -y $passwordfile"
62          else
63             execstr="$LDAPSEARCH -x -L -b ""$dbsuffix"" -D ""$binddn"" -y $passwordfile"
64          fi
65          [ -f "$passwordfile" ] || fatal "Password file $passwordfile not found. When method is set to ldapsearch, you must also specify a password file."
66          debug "$execstr"
67       fi
68       if [ ! $test ]; then
69          if [ "$restart" == "yes" ]; then
70             debug "Shutting down ldap server..."
71             /etc/init.d/slapd stop
72          fi
73          
74          ext=
75          if [ "$compress" == "yes" ]; then
76             ext=".gz"
77          fi
78          touch $dumpdir/$dbsuffix.ldif$ext
79          if [ ! -f $dumpdir/$dbsuffix.ldif$ext ]; then
80             fatal "Couldn't create ldif dump file: $dumpdir/$dbsuffix.ldif$ext"
81          fi
82          
83          if [ "$compress" == "yes" ]; then
84             output=`$execstr | $GZIP > $dumpdir/$dbsuffix.ldif.gz`
85          else
86             output=`$execstr > $dumpdir/$dbsuffix.ldif`
87          fi
88          code=$?
89          if [ "$code" == "0" ]; then
90             debug $output
91             info "Successfully finished ldif export of $dbsuffix"
92          else
93             warning $output
94             warning "Failed ldif export of $dbsuffix"
95          fi
96          
97          if [ "$restart" == "yes" ]; then
98             debug "Starting ldap server..."
99             /etc/init.d/slapd start
100          fi
101       fi
102    done 
103 fi
104
105 return 0