packages/ssoinabox-webui/root/usr/local/share/ssoinabox/bin/ldap-groups-to-dbm
changeset 0 3906ca745819
child 2 700d61d93b1b
equal deleted inserted replaced
-1:000000000000 0:3906ca745819
       
     1 #!/usr/bin/perl
       
     2 
       
     3 use strict;
       
     4 use warnings;
       
     5 use DB_File;
       
     6 use Net::LDAP;
       
     7 use YAML;
       
     8 
       
     9 open my $fp, "<", "/usr/local/etc/ssoinabox/webcreds.yml" or die "failed to open yaml";
       
    10 my $config = YAML::LoadFile $fp;
       
    11 close $fp;
       
    12 
       
    13 # connect to LDAP
       
    14 my $ldap = Net::LDAP->new($config->{'ldap_server'})
       
    15 	or die "Failed to connect to LDAP: $!";
       
    16 
       
    17 $ldap->bind($config->{'ldap_manager'}->{'dn'}, password => $config->{'ldap_manager'}->{'password'})
       
    18 	or die "Failed to bind to LDAP: $!";
       
    19 
       
    20 # search for POSIX groups
       
    21 my $lr = $ldap->search(
       
    22 		base => 'dc=lan,dc=xx0r,dc=info'
       
    23 		, filter => '(objectClass=posixGroup)'
       
    24 	);
       
    25 
       
    26 die "Failed to search LDAP..." if ( $lr->code );
       
    27 
       
    28 # Fetch each group from LDAP...
       
    29 my %users;
       
    30 
       
    31 foreach my $entry ($lr->entries)
       
    32 {
       
    33 	my $groupname = $entry->get_value('cn');
       
    34 	my $attrs = $entry->get_value('memberUID', asref => 1);
       
    35 	foreach my $member (@$attrs)
       
    36 	{
       
    37 		# Make this a user-based map, as that is what the DBM uses.
       
    38 		$users{$member} = [] if !defined($users{$member});
       
    39 		push @{$users{$member}}, $groupname;
       
    40 	}
       
    41 }
       
    42 
       
    43 # We're done with LDAP
       
    44 $ldap->unbind;
       
    45 
       
    46 # Prepare to write database file
       
    47 my $dbm_file = "/etc/apache2/ldap-groups";
       
    48 my %dbm_hash;
       
    49 my ($key, $value);
       
    50 
       
    51 # Open database file
       
    52 tie %dbm_hash, "DB_File", $dbm_file, O_WRONLY or
       
    53 	die "Unable to open DBM file $dbm_file: $!";
       
    54 
       
    55 # write everything out
       
    56 while ( ($key, $value) = each(%users) )
       
    57 {
       
    58 	$dbm_hash{$key} = sprintf('*:%s', join(',', @{$users{$key}}));
       
    59 }
       
    60 
       
    61 # Save and close database
       
    62 untie %dbm_hash;
       
    63 
       
    64 exit 0;
       
    65 
       
    66 # debug - for viewing contents of the map
       
    67 
       
    68 tie %dbm_hash, "DB_File", $dbm_file, O_RDONLY or
       
    69 	die "Unable to open DBM file $dbm_file: $!";
       
    70 
       
    71 while ( ($key, $value) = each(%dbm_hash) )
       
    72 {
       
    73 	print "$key => $value\n";
       
    74 }