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

📄 convertsambaaccount

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻
字号:
#!/usr/bin/perl  -w#### Convert an LDIF file containing sambaAccount entries## to the new sambaSamAccount objectclass#### Copyright Gerald (Jerry) Carter	2003#### Usage: convertSambaAccount --sid=<Domain SID> \##       --input=<input ldif> --output=<output ldif> \##       --changetype=[modify|add]#### You can generate an input ldif file using:## $ ldapsearch -LL -x -h ldapsrv -D cn=root,dc=company,dc=com \##   -b dc=copmany,dc=com > /tmp/samba3.alpha23.ldif#### Note the "-LL" so no additional comments are generated##use strict;use Net::LDAP::LDIF;use Getopt::Long;################################################################################ local variablesmy ( $domain, $domsid, $changetype );my ( $ldif, $ldif2 );my ( $entry, @objclasses, $obj );my ( $is_samba_account, $is_samba_group );my ( %attr_map, %group_attr_map, $key );my ( @dels, $deletion, @adds, $addition );my ( $result, %options );################################################################################ Print the option usagesub usage {	print "convertSambaAccount <options>\n";	print "Options:\n";	print "  --help         print this help message\n";	print "  --input        input LDIF filename\n";	print "  --output       output LDIF filename\n";	print "  --sid          domain SID\n";	print "  --changetype   [modify|add] (default is 'add')\n";}################################################################################                               MAIN DRIVER                                #################################################################################### hashes to map old attribute names to new ones ##%attr_map = ( 	lmPassword	=> 'sambaLMPassword',	ntPassword	=> 'sambaNTPassword',	pwdLastSet	=> 'sambaPwdLastSet',	pwdMustChange	=> 'sambaPwdMustChange',	pwdCanChange	=> 'sambaPwdCanChange',	homeDrive	=> 'sambaHomeDrive',	smbHome		=> 'sambaHomePath',	scriptPath	=> 'sambaLogonScript',	profilePath	=> 'sambaProfilePath',	kickoffTime	=> 'sambaKickoffTime',	logonTime	=> 'sambaLogonTime',	logoffTime	=> 'sambaLogoffTime',	userWorkstations	=> 'sambaUserWorkstations',	domain		=> 'sambaDomainName',	acctFlags	=> 'sambaAcctFlags',);%group_attr_map = (	ntSid		=> 'sambaSID',	ntGroupType	=> 'sambaGroupType',);#### process command line args##$result = GetOptions(\%options,			"help", 			"input=s", 			"output=s", 			"sid=s",			"changetype=s");if (!$result && ($#ARGV != -1)) {	usage();	exit 1;}if ( defined($options{'help'}) ) {	usage();	exit 0;}if ( !defined( $options{'sid'} ) ) {	print "You must provide a domain sid\n";	exit 1;}$domsid = $options{'sid'};$changetype = 'add';if ( defined( $options{'changetype'} ) ) {	$changetype = $options{'changetype'};}#### open files##$ldif = Net::LDAP::LDIF->new ($options{'input'}, "r") or die $!;if ( "$changetype" eq "add" ) {	$ldif2 = Net::LDAP::LDIF->new ($options{'output'}, "w") or die $!;}elsif ( "$changetype" eq "modify" ) {	open( OUTPUT, ">$options{'output'}" ) or die $!;}else {	print "Bad changetype!\n";	exit 1;}#### process LDIF ##while ( !$ldif->eof ) {	undef ( $entry );	$entry = $ldif->read_entry();	## skip entry if we find an error	if ( $ldif->error() ) {		print "Error msg: ",$ldif->error(),"\n";		print "Error lines:\n",$ldif->error_lines(),"\n";		next;	}	##	## check to see if we have anything to do on this	## entry.  If not just write it out	##	@objclasses = $entry->get_value( "objectClass" );	undef ( $is_samba_account );	undef ( $is_samba_group );	@adds = ();	@dels = ();	foreach $obj ( @objclasses ) {		if ( "$obj" eq "sambaAccount" ) {			$is_samba_account = 1;		} elsif ( "$obj" eq "sambaGroupMapping" ) {			$is_samba_group = 1;		}	}	if ( defined ( $is_samba_account ) ) {		##		## start editing the sambaAccount		##		@dels = ( 'objectclass: sambaAccount', 'rid' );		@adds = ('objectclass: sambaSamAccount', "sambaSID: " .  ${domsid} . "-" . ${entry}->get_value( 'rid' ) );		$entry->delete( 'objectclass' => [ 'sambaAccount' ] );		$entry->add( 'objectclass' => 'sambaSamAccount' );		$entry->add( 'sambaSID' => $domsid."-".$entry->get_value( "rid" ) );		$entry->delete( 'rid' );			if ( defined($entry->get_value( "primaryGroupID" )) ) {			push @adds, "sambaPrimaryGroupSID: " . $domsid."-".$entry->get_value( "primaryGroupID" );			push @dels, "primaryGroupID";			$entry->add( 'sambaPrimaryGroupSID' => $domsid."-".$entry->get_value( "primaryGroupID" ) );			$entry->delete( 'primaryGroupID' );		}			foreach $key ( keys %attr_map ) {			if ( defined($entry->get_value($key)) ) {				push @adds, "$attr_map{$key}: " . $entry->get_value($key);				push @dels, "$key";				$entry->add( $attr_map{$key} => $entry->get_value($key) );				$entry->delete( $key );			}		}	} elsif ( defined ( $is_samba_group ) ) {		foreach $key ( keys %group_attr_map ) {			if ( defined($entry->get_value($key)) ) {				push @adds, "$group_attr_map{$key}: " . $entry->get_value($key);				push @dels, "$key";				$entry->add( $group_attr_map{$key} => $entry->get_value($key) );				$entry->delete( $key );			}		}	}		## see if we should write full entries or only the changes		if ( "$changetype" eq "add" ) {		$ldif2->write_entry( $entry );	}	else {		if ( defined ( $is_samba_account ) || defined ( $is_samba_group ) ){			if ( @adds + @dels > 0 ) {				print OUTPUT "dn: " . $entry->dn . "\n";				foreach $addition (@adds) {					$addition =~ /(^\w+):/;					print OUTPUT "add: " . $1  . "\n";					print OUTPUT "$addition\n-\n";				}				foreach $deletion (@dels) {					if ( $deletion =~ /^(\w+):\s(.*)/ ) {						print OUTPUT "delete: $1\n$1: $2\n-\n";					} else {						print OUTPUT "delete: $deletion\n-\n"					}				}				print OUTPUT "\n"			}		}	}}

⌨️ 快捷键说明

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