This file is indexed.

/usr/sbin/usn-tombstone-cleanup is in 389-ds-base 1.3.7.10-1ubuntu1.

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
#!/usr/bin/env perl
#
# BEGIN COPYRIGHT BLOCK
# Copyright (C) 2013 Red Hat, Inc.
# All rights reserved.
#
# License: GPL (version 3 or any later version).
# See LICENSE for details. 
# END COPYRIGHT BLOCK
#

use lib qw(/usr/lib/x86_64-linux-gnu/dirsrv/perl);
use DSUtil;

DSUtil::libpath_add("");
DSUtil::libpath_add("/usr/lib");
DSUtil::libpath_add("/usr/lib64");
$ENV{'PATH'} = ":/usr/bin:/usr/lib64/mozldap/";
$ENV{'SHLIB_PATH'} = "$ENV{'LD_LIBRARY_PATH'}";

$i = 0;

sub usage {
    print(STDERR "Usage: usn-tombstone-cleanup.pl [-Z serverID] [-D rootdn] { -w password | -w - | -j filename }\n");
    print(STDERR "                                -s suffix -n backend [-m maxusn_to_delete] [-P protocol] [-h]\n");
    print(STDERR "Options:\n");
    print(STDERR "        -D rootdn            - Directory Manager\n");
    print(STDERR "        -w password          - Directory Manager's password\n");
    print(STDERR "        -w -                 - Prompt for Directory Manager's password\n");
    print(STDERR "        -Z serverID          - Server instance identifier\n");
    print(STDERR "        -j filename          - Read Directory Manager's password from file\n");
    print(STDERR "        -s suffix            - Suffix where USN tombstone entries are cleaned up\n");
    print(STDERR "        -n backend           - Backend instance in which USN tombstone entries are cleaned up (alternative to suffix)\n");
    print(STDERR "        -m maxusn_to_delete  - USN tombstone entries are deleted up to the entry with maxusn_to_delete\n");
    print(STDERR "        -P protocol          - STARTTLS, LDAPS, LDAPI, LDAP (default: uses most secure protocol available)\n");
    print(STDERR "        -h                   - Display usage\n");
}

while ($i <= $#ARGV) 
{
    if ("$ARGV[$i]" eq "-s"){
        # suffix
        $i++; $suffix_arg = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-n"){
        # backend
        $i++; $backend_arg = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-m"){
        # max usn
        $i++; $maxusn_arg = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-D"){    
        # Directory Manager
        $i++; $rootdn = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-w"){    
        # Directory Manager's password
        $i++; $passwd = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-j"){
        # Read Directory Manager's password from a file
        $i++; $passwdfile = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-Z"){
        # Server instance identifier
        $i++; $servid = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-P") { 
        # protocol preference
        $i++; $protocol = $ARGV[$i];
    } elsif ("$ARGV[$i]" eq "-h"){ 
        # help
        &usage;
        exit(0);
    } else {
        print "ERROR - Unknown option: $ARGV[$i]\n";
        &usage;
        exit(1);
    }
    $i++;
}

#
# Gather all our config settings
#
($servid, $confdir) = DSUtil::get_server_id($servid, "/etc/default");
%info = DSUtil::get_info($confdir, $host, $port, $rootdn);
$info{rootdnpw} = DSUtil::get_password_from_file($passwd, $passwdfile);
$info{protocol} = $protocol;
$info{args} = "-a";
if ( $suffix_arg eq "" && $backend_arg eq "" ){ 
    &usage; 
    exit(1); 
}

#
# Construct the task entry
#
($s, $m, $h, $dy, $mn, $yr, $wdy, $ydy, $r) = localtime(time);
$mn++; $yr += 1900;
$taskname = "usn_cleanup_${yr}_${mn}_${dy}_${h}_${m}_${s}";
$dn = "dn: cn=$taskname, cn=USN tombstone cleanup task, cn=tasks, cn=config\n";
$misc = "objectclass: top\nobjectclass: extensibleObject\n";
$cn =  "cn: $taskname\n";
if ( $suffix_arg ne "" ){
    $args = "suffix: $suffix_arg\n";
} else {
    $args = "backend: $backend_arg\n";
}
if ( $maxusn_arg ne "" ){
    $args = $args . "maxusn_to_delete: $maxusn_arg\n";
}
$entry = "${dn}${misc}${cn}${args}";

$rc = DSUtil::ldapmod($entry, %info);

$dn =~ s/^dn: //;
$dn =~ s/\n//;
if($rc == 0){
    print "Successfully added task entry \"$dn\"\n";
} else {
    print "Failed to add task entry \"$dn\" error ($rc)\n";
}

exit($rc);