⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 check_multiple_ldap_entries.pl

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 PL
字号:
#!/usr/bin/perl -w# Guenther Deschner <gd@samba.org>## check for multiple LDAP entriesuse strict;use Net::LDAP;use Getopt::Std;my %opts;if (!@ARGV) {	print "usage: $0 -h host -b base -D admindn -w password [-l]\n";	print "\tperforms checks for multiple sid, uid and gid-entries on your LDAP server\n";	print "\t-l adds additional checks against the local /etc/passwd and /etc/group file\n";	exit 1;}getopts('b:h:D:w:l', \%opts);my $host =   $opts{h}	|| "localhost";my $suffix = $opts{b}	|| die "please set base with -b";my $binddn = $opts{D}	|| die "please set basedn with -D";my $bindpw = $opts{w}	|| die "please set password with -w";my $check_local_files = $opts{l} || 0;########################my ($ldap, $res);my (%passwd_h, %group_h);my $bad_uids = 0;my $bad_gids = 0;my $bad_sids = 0;my $ret = 0;if ($check_local_files) {	my @uids = `cut -d ':' -f 3 /etc/passwd`;	my @gids = `cut -d ':' -f 3 /etc/group`; 	foreach my $uid (@uids) {		chomp($uid);		$passwd_h{$uid} = $uid;	}	foreach my $gid (@gids) {		chomp($gid);		$group_h{$gid} = $gid;	}}######### bind #########$ldap = Net::LDAP->new($host, version => '3');$res = $ldap->bind( $binddn, password => $bindpw);$res->code && die "failed to bind: ", $res->error;############################ check for double sids   ############################print "\ntesting for multiple sambaSids\n";$res = $ldap->search( 	base => $suffix, 	filter => "(objectclass=sambaSamAccount)");$res->code && die "failed to search: ", $res->error;foreach my $entry ($res->all_entries) {	my $sid = $entry->get_value('sambaSid');	my $local_res = $ldap->search( 		base => $suffix, 		filter => "(&(objectclass=sambaSamAccount)(sambaSid=$sid))");		$local_res->code && die "failed to search: ", $local_res->error;	if ($local_res->count > 1) {		print "A SambaSamAccount with sambaSid [$sid] must exactly exist once\n";		print "You have ", $local_res->count, " entries:\n";		foreach my $loc_entry ($local_res->all_entries) {			printf "\t%s\n", $loc_entry->dn;		}		++$bad_sids;	}}if ($bad_sids) {	$ret = -1;	print "You have $bad_sids bad sambaSids in your system. You might need to repair them\n";} else {	print "No multiple sambaSids found in your system\n";}print "-" x 80, "\n";############################ check for double groups ############################print "\ntesting for multiple gidNumbers\n";$res = $ldap->search( 	base => $suffix, 	filter => "(objectclass=posixGroup)");$res->code && die "failed to search: ", $res->error;foreach my $entry ($res->all_entries) {	my $gid = $entry->get_value('gidNumber');	my $dn  = $entry->dn;	my $local_res = $ldap->search( 		base => $suffix, 		filter => "(&(objectclass=posixGroup)(gidNumber=$gid))");		$local_res->code && die "failed to search: ", $local_res->error;	if ($local_res->count > 1) {		print "A PosixGroup with gidNumber [$gid] must exactly exist once\n";		print "You have ", $local_res->count, " entries:\n";		foreach my $loc_entry ($local_res->all_entries) {			printf "\t%s\n", $loc_entry->dn;		}		++$bad_gids;		next;	}	if ($check_local_files && exists $group_h{$gid}) {		print "Warning: There is a group in /etc/group that has gidNumber [$gid] as well\n";		print "This entry may conflict with $dn\n";		++$bad_gids;	}}if ($bad_gids) {	$ret = -1;	print "You have $bad_gids bad gidNumbers in your system. You might need to repair them\n";} else {	print "No multiple gidNumbers found in your system\n";}print "-" x 80, "\n";############################ check for double users  ############################print "\ntesting for multiple uidNumbers\n";$res = $ldap->search( 	base => $suffix, 	filter => "(objectclass=posixAccount)");$res->code && die "failed to search: ", $res->error;foreach my $entry ($res->all_entries) {	my $uid = $entry->get_value('uidNumber');	my $dn  = $entry->dn;	my $local_res = $ldap->search( 		base => $suffix, 		filter => "(&(objectclass=posixAccount)(uidNumber=$uid))");		$local_res->code && die "failed to search: ", $local_res->error;	if ($local_res->count > 1) {		print "A PosixAccount with uidNumber [$uid] must exactly exist once\n";		print "You have ", $local_res->count, " entries:\n";		foreach my $loc_entry ($local_res->all_entries) {			printf "\t%s\n", $loc_entry->dn;		}		++$bad_uids;		next;	}	if ($check_local_files && exists $passwd_h{$uid}) {		print "Warning: There is a user in /etc/passwd that has uidNumber [$uid] as well\n";		print "This entry may conflict with $dn\n";		++$bad_uids;	}}if ($bad_uids) {	$ret = -1;	print "You have $bad_uids bad uidNumbers in your system. You might need to repair them\n";} else {	print "No multiple uidNumbers found in your system\n";}$ldap->unbind;exit $ret;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -