3 # Convert SQL user database to LDIF format (for SourceForge LDAP schema)
5 # by pfalcon@users.sourceforge.net 2000-10-17
7 # ./sql2ldif.pl : Dump only top-level ou map
8 # ./sql2ldif.pl --full : Dump full database (ouch!)
14 require("/usr/lib/gforge/lib/include.pl"); # Include all the predefined functions
15 $chroot="/var/lib/gforge/chroot";
18 $dbh ||= DBI->connect("DBI:Pg:dbname=$sys_dbname","$sys_dbuser","$sys_dbpasswd");
19 die "Cannot connect to database: $!" if ( ! $dbh );
22 # Dump user entries (ou=People)
25 # We give user maximum of privileges assigned to one by groups ;-(
28 nss_passwd.login,gecos,shell,nss_shadow.passwd,uid,gid,email
30 nss_passwd,nss_shadow,mta_users
32 nss_passwd.login=mta_users.login AND nss_passwd.login=nss_shadow.login
33 GROUP BY nss_passwd.login,gecos,shell,nss_shadow.passwd,uid,gid,email";
36 my $rel = $dbh->prepare($query);
40 while(my ($username, $realname, $shell, $pw, $uid, $gid, $email) = $rel->fetchrow()) {
41 if (!$realname) { $realname='?'; }
42 $realname=~tr#\x80-\xff#?#; # it should be UTF-8 encoded, we just drop non-ascii chars
45 print "dn: uid=$username,ou=People,$sys_ldap_base_dn
54 userPassword: {crypt}$pw
65 replace: homeDirectory
66 homeDirectory: $chroot/home/users/$username
71 replace: debGforgeForwardEmail
72 debGforgeForwardEmail: $email \n\n
78 # Dump group entries (ou=Group)
81 my $query = "SELECT gid,name FROM nss_groups";
83 my $rel = $dbh->prepare($query);
86 while(my ($gid, $groupname) = $rel->fetchrow()) {
87 my $query = "SELECT user_name FROM nss_usergroups
90 my $rel = $dbh->prepare($query);
93 print "dn: cn=$groupname,ou=Group,$sys_ldap_base_dn
99 userPassword: {crypt}x
105 replace: memberUid\n";
107 while(my ($username) = $rel->fetchrow()) {
108 print "memberUid: $username\n";
114 # Dump mailing-lists entries (ou=mailingList)
117 $query = "SELECT list_name,
130 $rel = $dbh->prepare($query);
133 while(my ($listname, $post, $owner, $request, $admin, $bounces, $confirm, $join, $leave, $subscribe, $unsubscribe) = $rel->fetchrow()) {
135 print "dn: cn=$listname,ou=mailingList,$sys_ldap_base_dn
143 replace: debGforgeListPostAddress
144 debGforgeListPostAddress: \"$post\"
146 replace: debGforgeListOwnerAddress
147 debGforgeListOwnerAddress: \"$owner\"
149 replace: debGforgeListRequestAddress
150 debGforgeListRequestAddress: \"$request\"
152 replace: debGforgeListAdminAddress
153 debGforgeListAdminAddress: \"$admin\"
155 replace: debGforgeListBouncesAddress
156 debGforgeListBouncesAddress: \"$bounces\"
158 replace: debGforgeListConfirmAddress
159 debGforgeListConfirmAddress: \"$confirm\"
161 replace: debGforgeListJoinAddress
162 debGforgeListJoinAddress: \"$join\"
164 replace: debGforgeListLeaveAddress
165 debGforgeListLeaveAddress: \"$leave\"
167 replace: debGforgeListSubscribeAddress
168 debGforgeListSubscribeAddress: \"$subscribe\"
170 replace: debGforgeListUnsubscribeAddress
171 debGforgeListUnsubscribeAddress: \"$unsubscribe\"
182 my $dc=$sys_ldap_base_dn;
185 print "dn: ou=Hosts,$sys_ldap_base_dn
188 objectClass: organizationalUnit
189 objectClass: domainRelatedObject
190 associatedDomain: $sys_default_domain
192 dn: ou=People,$sys_ldap_base_dn
195 objectClass: organizationalUnit
196 objectClass: domainRelatedObject
197 associatedDomain: $sys_default_domain
199 dn: ou=Aliases,$sys_ldap_base_dn
202 objectClass: organizationalUnit
203 objectClass: domainRelatedObject
204 associatedDomain: $sys_default_domain
206 dn: ou=Group,$sys_ldap_base_dn
209 objectClass: organizationalUnit
210 objectClass: domainRelatedObject
211 associatedDomain: $sys_default_domain
213 dn: ou=cvsGroup,$sys_ldap_base_dn
216 objectClass: organizationalUnit
217 objectClass: domainRelatedObject
218 associatedDomain: $sys_default_domain
220 dn: ou=mailingList,$sys_ldap_base_dn
223 objectClass: organizationalUnit
224 objectClass: domainRelatedObject
225 associatedDomain: $sys_lists_host
227 dn: uid=dummy,ou=People,$sys_ldap_base_dn
231 objectClass: posixAccount
233 objectClass: shadowAccount
234 objectClass: debGforgeAccount
235 userPassword: {crypt}x
236 shadowLastChange: 10879
239 loginShell: /bin/false
240 debGforgeCvsShell: /bin/false
241 uidNumber: $dummy_uid
242 gidNumber: $dummy_uid
243 homeDirectory: $chroot/home/users/dummy