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

📄 sql2ldif26.pl

📁 GForge 3.0 协作开发平台 支持CVS, mailing lists, bug tracking, message boards/forums, task management, perman
💻 PL
字号:
#!/usr/bin/perl##  Convert SQL user database to LDIF format (for SourceForge LDAP schema)#  by pfalcon@users.sourceforge.net 2000-10-17##  ./sql2ldif.pl	: Dump only top-level ou map#  ./sql2ldif.pl --full : Dump full database (ouch!)##  $Id: sql2ldif26.pl,v 1.2 2002/12/23 13:17:14 lo-lan-do Exp $# use DBI;#require("base64.pl");  # Include all the predefined functionsrequire("include.pl");  # Include all the predefined functions&db_connect;sub homedir {	my ($user) = @_;	return "/home/users/".substr($user,0,1)."/".substr($user,0,2)."/$user";}dump_header();if (!($#ARGV+1)) {	exit;}##  Dump user entries (ou=People)## We give user maximum of privileges assigned to one by groups ;-(my $query = "SELECT user_name,realname,shell,unix_pw,unix_uid,MAX(cvs_flags)FROM users,user_groupWHERE unix_status='A'      AND users.user_id=user_group.user_idGROUP BY user_name,realname,shell,unix_pw,unix_uid";my $rel = $dbh->prepare($query);$rel->execute();#print "$sys_ldap_host\n";#print "$sys_ldap_base_dn\n";@cvs_flags2shell=('/dev/null','/bin/cvssh','/bin/bash');## Note: unix uid = db uxix_uid + $uid_add#while(my ($username, $realname, $shell, $pw, $uid, $cvs_flags) = $rel->fetchrow()) {	$uid+=$uid_add;	print "dn: uid=$username,ou=People,$sys_ldap_base_dn\n";	print "uid: $username\n";	if (!$realname) { $realname='?'; }	$realname=~tr#\x80-\xff#?#;  # it should be UTF-8 encoded, we just drop non-ascii chars	print "cn: $realname\n";	print "objectClass: accountobjectClass: posixAccountobjectClass: topobjectClass: shadowAccountobjectClass: x-sourceforgeAccount";	print "userPassword: {crypt}$pwshadowLastChange: 1shadowMax: 99999shadowWarning: 7loginShell: $shellx-cvsShell: $cvs_flags2shell[$cvs_flags]uidNumber: $uidgidNumber: 100homeDirectory: ".homedir($username)."gecos: $realname";}##  Dump group entries (ou=Group)#my $query = "SELECT groups.group_id,unix_group_name,user_nameFROM groups,users,user_groupWHERE groups.status='A'AND groups.group_id=user_group.group_idAND user_group.user_id=users.user_idORDER BY groups.group_id";my $rel = $dbh->prepare($query);$rel->execute();## Note: unix gid = db group_id + $gid_add#$last_gid=-1;while(my ($gid, $groupname, $member) = $rel->fetchrow()) {	$gid+=$gid_add;	if ($gid != $last_gid) {		print "\ndn: cn=$groupname,ou=Group,$sys_ldap_base_dnobjectClass: posixGroupobjectClass: topcn: $groupnameuserPassword: {crypt}xgidNumber: $gid";		$last_gid=$gid;	}	print "memberUid: $member\n";}##  Dump CVS group entries (ou=cvsGroup)#my $query = "SELECT groups.group_id,unix_group_name,user_name,cvs_flagsFROM groups,users,user_groupWHERE groups.status='A'AND groups.group_id=user_group.group_idAND user_group.user_id=users.user_idORDER BY groups.group_id";# we need cvsGroup even if no member has permission#AND user_group.cvs_flags > 0my $rel = $dbh->prepare($query);$rel->execute();$last_gid=-1;while(my ($gid, $groupname, $member, $cvs) = $rel->fetchrow()) {	$gid+=$gid_add;	if ($gid != $last_gid) {		# virtual member for anoncvs access		print "\ndn: uid=anoncvs_$groupname,ou=People,$sys_ldap_base_dn\n";		print "uid: anoncvs_$groupname\n";		print "cn: anoncvs\n";		print "objectClass: accountobjectClass: posixAccountobjectClass: topobjectClass: shadowAccountobjectClass: x-sourceforgeAccount";		print "userPassword: {crypt}xshadowLastChange: 1shadowMax: 99999shadowWarning: 7loginShell: /bin/falsex-cvsShell: /bin/false";		print "uidNumber: ",$gid+$anoncvs_add;		print "gidNumber: $gidhomeDirectory: ".homedir("anoncvs_$groupname")."gecos: anoncvs";		# CVS group itself		print "\ndn: cn=$groupname,ou=cvsGroup,$sys_ldap_base_dnobjectClass: posixGroupobjectClass: topcn: $groupnameuserPassword: {crypt}xgidNumber: $gidmemberUid: anoncvs_$groupname";		$last_gid=$gid;	}	if ($cvs>0) {		print "memberUid: $member\n";	}}##  Auxilary functions#sub dump_header {	print "dn: $sys_ldap_base_dndc: sourceforgeobjectClass: topobjectClass: domainobjectClass: domainRelatedObjectassociatedDomain: $sys_default_domaindn: ou=Hosts,$sys_ldap_base_dnou: HostsobjectClass: topobjectClass: organizationalUnitobjectClass: domainRelatedObjectassociatedDomain: $sys_default_domaindn: ou=People,$sys_ldap_base_dnou: PeopleobjectClass: topobjectClass: organizationalUnitobjectClass: domainRelatedObjectassociatedDomain: $sys_default_domaindn: ou=Aliases,$sys_ldap_base_dnou: AliasesobjectClass: topobjectClass: organizationalUnitobjectClass: domainRelatedObjectassociatedDomain: $sys_default_domaindn: ou=Group,$sys_ldap_base_dnou: GroupobjectClass: topobjectClass: organizationalUnitobjectClass: domainRelatedObjectassociatedDomain: $sys_default_domaindn: ou=cvsGroup,$sys_ldap_base_dnou: cvsGroupobjectClass: topobjectClass: organizationalUnitobjectClass: domainRelatedObjectassociatedDomain: $sys_default_domaindn: cn=Replicator,dc=sourceforge,dc=netcn: Replicatorsn: Replicator the Robotdescription: emptyobjectClass: topobjectClass: personuserPassword: {crypt}x";}

⌨️ 快捷键说明

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