#!/usr/bin/perl # (c) 2007 by Nikolaus Hammler # Please note that this piece of code is licensed under the GNU GPL!! use Net::LDAPS; use strict; my $USERS_INI = "/home/donkey/root/.mldonkey/users.ini"; my $ADMIN_PASS = '(MD4-crypted secret for admin user)'; my $LDAP_SERVER = "ianus.intern.stiftingtal.net"; my $BINDDN = "uid=reader,dc=intern,dc=stiftingtal,dc=net"; my $BINDPW = "secret"; my $ldap = Net::LDAPS->new($LDAP_SERVER) or die "$@"; my $mesg = $ldap->bind($BINDDN, password => $BINDPW, version => 3) or die "$@"; $mesg->code && die $mesg->error; $mesg = $ldap->search(base => "ou=users,dc=intern,dc=stiftingtal,dc=net", scope => "one", filter => "(objectClass=stiftingtalDonkey)", attrs => ['uid', 'mail', 'donkeyPrimaryGroup', 'donkeyOtherGroups', 'donkeyCommit', 'donkeyCommit']); $mesg->code && die $mesg->error; my @entries = $mesg->entries; my $users = " (admin, \"$ADMIN_PASS\");"; my $users2 = ""; my @groups = (); foreach my $entr (@entries) { my $uid = $entr->get_value('uid'); my $mail = $entr->get_value('mail'); my $dgroup = $entr->get_value('donkeyPrimaryGroup'); my $commit = $entr->get_value('donkeyCommit'); my $othergroups = ""; foreach ($entr->get_value('donkeyOtherGroups')) { $othergroups .= "\n $_;"; push(@groups, $_); } if(!$commit) { $commit = $uid; } push(@groups, $dgroup); $users .= "\n ($uid, \"11111111111111111111111111111111\");"; $users2 .= "\n"; $users2 .= " { user_name = $uid\n"; #$users2 .= " user_pass = \"00000000000000000000000000000000\"\n"; $users2 .= " user_pass = \"11111111111111111111111111111111\"\n"; $users2 .= " user_groups = [\n"; $users2 .= " $dgroup;"; $users2 .= $othergroups; $users2 .= "]\n"; $users2 .= " user_default_group = $dgroup\n"; $users2 .= " user_mail = \"$mail\"\n"; $users2 .= " user_commit_dir = $commit\n"; $users2 .= " user_max_concurrent_downloads = 0\n"; $users2 .= "};"; } system("savelog -m 600 -c 30 $USERS_INI"); open(USERS, ">$USERS_INI") || die("Could not write to $USERS_INI"); print USERS "\n groups = [\n"; print USERS " { group_name = mldonkey\n"; print USERS " group_admin = true\n"; print USERS "};"; my %temp; @temp{@groups} = (); foreach my $group (keys %temp) { print USERS "\n"; print USERS " { group_name = $group\n"; ## URGS! if($group eq "admins") { print USERS " group_admin = true\n"; } else { print USERS " group_admin = false\n"; } print USERS "};"; } print USERS "]\n\n\n"; print USERS " users2 = [\n"; print USERS " { user_name = admin\n"; print USERS " user_pass = \"$ADMIN_PASS\"\n"; print USERS " user_groups = [\n"; print USERS " mldonkey;]\n"; print USERS " user_default_group = mldonkey\n"; print USERS " user_mail = \"\"\n"; print USERS " user_commit_dir = \"\"\n"; print USERS " user_max_concurrent_downloads = 0\n"; print USERS "};"; print USERS $users2; print USERS "]\n\n\n"; print USERS " users = [\n$users]\n\n\n"; close(USERS); system("chown donkey.donkey $USERS_INI"); system("chmod 600 $USERS_INI");