3 # SourceForge: Breaking Down the Barriers to Open Source Development
4 # Copyright 1999-2000 (c) The SourceForge Crew
5 # http://sourceforge.net
10 use POSIX qw(strftime);
12 require ("/usr/share/gforge/lib/include.pl") ;
16 # All of the files that we will be creating
17 my @file_array = ("user_dump", "group_dump", "ssh_dump", "list_dump", "alias_dump", "httpd_conf", "aliases", "dns_sourceforge_net");
19 # Check to make sure that the environment is clean
21 &logme("The file directory doesn't exist: $file_dir");
25 foreach(@file_array) {
26 if (-f $file_dir.$_) {
27 &logme("Another Dump File Exists (Overwriting): $_");
35 print("Dumping Table Data\n");
37 # Okay lets dump and configure all the tables now.
39 my ($query, $c, @tmp_array);
41 ###################################
42 # First the users Information.
43 ###################################
44 print("Dumping users Data: ");
46 $query = "select unix_uid, unix_status, user_name, shell, unix_pw, realname from users where unix_status != \"N\"";
47 $c = $dbh->prepare($query);
50 while(my ($id, $status, $username, $shell, $passwd, $realname) = $c->fetchrow()) {
52 push @tmp_array, "$id:$status:$username:$shell:$passwd:$realname\n";
55 &done("user_dump", @tmp_array);
59 ###################################
60 # Now Dump the Group Information.
61 ###################################
62 print("Dumping Group Data: ");
64 $query = "select group_id,unix_group_name,status from groups";
65 $c = $dbh->prepare($query);
68 while(my ($group_id, $group_name, $status) = $c->fetchrow()) {
69 $new_query = "select users.user_name AS user_name FROM users,user_group WHERE users.user_id=user_group.user_id AND group_id=$group_id";
70 $d = $dbh->prepare($new_query);
74 while($user_name = $d->fetchrow()) {
75 $user_list .= "$user_name,";
78 $group_list = "$group_name:$status:$group_id:$user_list\n";
79 $group_list =~ s/,$//; # regex out the last comma on the line
81 push @tmp_array, $group_list;
84 &done("group_dump", @tmp_array);
87 ###################################
88 # Dump the SSH authorized_keys Data
89 ###################################
90 print("Dumping SSH Data: ");
92 $query = "SELECT user_name,authorized_keys FROM users WHERE authorized_keys != \"\"";
93 $c = $dbh->prepare($query);
96 while(my ($username, $ssh_key) = $c->fetchrow()) {
98 push @tmp_array, "$username:$ssh_key\n";
101 # Now write out the files
102 &done("ssh_dump", @tmp_array);
106 ###################################
107 # Dump the Mailing list Information
108 ###################################
109 print("Dumping Mailing List Data: ");
111 $query = "SELECT users.user_name,mail_group_list.list_name,mail_group_list.password,mail_group_list.status FROM mail_group_list,users WHERE mail_group_list.list_admin=users.user_id";
112 $c = $dbh->prepare($query);
115 while(my ($list_name, $list_admin, $password, $status) = $c->fetchrow()) {
116 push @tmp_array, "$list_name:$list_admin:$password:$status\n";
119 &done("list_dump", @tmp_array);
122 ###################################
123 # Apache Dump and configuration
124 ###################################
125 print("Dumping httpd.conf Data: ");
126 $query = "SELECT http_domain,unix_group_name,group_name,status FROM groups WHERE unix_box='shell1' AND http_domain LIKE '%.%'";
127 $c = $dbh->prepare($query);
130 @tmp_array = open_array_file("./zones/httpd.conf.zone");
132 while(my ($http_domain,$unix_group_name,$group_name,$status) = $c->fetchrow()) {
133 if ($status eq "A") {
134 push @tmp_array, "\n\n### Host entries for: $group_name\n\n";
135 push @tmp_array, "<Directory \"$grpdir_prefix$unix_group_name/htdocs\">\n";
136 push @tmp_array, " AllowOverride AuthConfig FileInfo\n";
137 push @tmp_array, " Options Indexes Includes\n";
138 push @tmp_array, " Order allow,deny\n";
139 push @tmp_array, " Allow from all\n";
140 push @tmp_array, "</Directory>\n";
141 push @tmp_array, "<Directory \"$grpdir_prefix$unix_group_name/cgi-bin\">\n";
142 push @tmp_array, " AllowOverride AuthConfig FileInfo\n";
143 push @tmp_array, " Options ExecCGI\n";
144 push @tmp_array, " Order allow,deny\n";
145 push @tmp_array, " Allow from all\n";
146 push @tmp_array, "</Directory>\n";
147 push @tmp_array, "<VirtualHost 192.168.4.52>\n";
148 push @tmp_array, " DocumentRoot \"$grpdir_prefix$unix_group_name/htdocs/\"\n";
149 push @tmp_array, " CustomLog $grpdir_prefix$unix_group_name/log/combined_log combined\n";
150 push @tmp_array, " ScriptAlias /cgi-bin/ \"$grpdir_prefix$unix_group_name/cgi-bin/\"\n";
151 push @tmp_array, " Servername $http_domain\n";
152 push @tmp_array, "</VirtualHost>\n";
156 &done("httpd_conf", @tmp_array);
159 ###################################
160 # Dump Project Mail Aliases (virtusertable)
161 ###################################
162 print("Dumping Project Mail Alias Data: ");
163 $query = "SELECT mailaliases.user_name,groups.http_domain,mailaliases.email_forward FROM mailaliases,groups WHERE mailaliases.group_id=groups.group_id";
165 $c = $dbh->prepare($query);
168 while(($username,$domainname,$userlist) = $c->fetchrow()) {
169 push @tmp_array, "$username:$domainname:$userlist\n";
172 # now dump all the normal users stuff
173 $query = "SELECT user_name,email FROM users WHERE status = \"A\" AND email != \"\"";
174 $c = $dbh->prepare($query);
176 while(my ($username, $email) = $c->fetchrow()) {
177 push @tmp_array, "$username:users.sourceforge.net:$username\n";
180 &done("alias_dump", @tmp_array);
183 ###################################
184 # Dump User Mail Aliases (/etc/aliases)
185 ###################################
186 print("Dumping /etc/aliases Data: ");
188 @tmp_array = open_array_file("./zones/aliases.zone");
190 # First lets Dump the Mailing List Info
191 push @tmp_array, "\n\n### Begin Mailing List Aliases ###\n\n";
193 $query = "SELECT list_name from mail_group_list";
194 $c = $dbh->prepare($query);
196 while(my ($list_name) = $c->fetchrow()) {
197 push @tmp_array, sprintf("%-60s%-10s","$list_name\@lists.sourceforge.net:", "\"|/usr/local/mailman/mail/wrapper post $list_name\"\n");
198 push @tmp_array, sprintf("%-60s%-10s","$list_name-admin\@lists.sourceforge.net:", "\"|/usr/local/mailman/mail/wrapper mailowner $list_name\"\n");
199 push @tmp_array, sprintf("%-60s%-10s","$list_name-request\@lists.sourceforge.net:", "\"|/usr/local/mailman/mail/wrapper mailcmd $list_name\"\n");
202 &done("aliases", @tmp_array);
205 ###################################
206 # Dump DNS Information
207 ###################################
208 print("Dumping DNS Zone File Data: ");
210 @tmp_array = open_array_file("./zones/dns.zone");
212 # Update the Serial Number
213 $date_line = $tmp_array[1];
214 $date_line =~ s/\t\t\t/\t/;
216 my ($blah,$date_str,$comments) = split(" ", $date_line);
219 my $serial = substr($date, 8, 2);
220 my $old_day = substr($date, 6, 2);
224 $now_string = strftime "%Y%m%d", localtime;
225 $new_day = substr($now_string, 6, 1);
227 if ($old_day != $new_day) { $serial = "01"; }
229 $new_serial = $now_string.$serial;
231 $tmp_array[1] = " $blah $new_serial $comments";
233 &write_array_file("./zones/dns.zone", @tmp_array); # write the new serial out the zone file
235 $query = "SELECT http_domain,unix_group_name,group_name,unix_box FROM groups WHERE http_domain LIKE '%.%' AND status = 'A'";
236 $c = $dbh->prepare($query);
239 while(my ($http_domain,$unix_group_name,$group_name,$unix_box) = $c->fetchrow()) {
240 ($foo, $foo, $foo, $foo, @addrs) = gethostbyname("$unix_box.sourceforge.net");
241 @blah = unpack('C4', $addrs[0]);
242 $ip = join(".", @blah);
244 push @tmp_array, sprintf("%-24s%-16s",$unix_group_name,"IN\tA\t" . "$ip\n");
245 push @tmp_array, sprintf("%-24s%-28s","", "IN\tMX\t" . "mail1.sourceforge.net.\n");
246 push @tmp_array, sprintf("%-24s%-30s","cvs.".$unix_group_name,"IN\tCNAME\t" . "cvs1.sourceforge.net."."\n\n");
249 &done("dns_sourceforge_net", @tmp_array);
254 sub done { # Done Function for db_parse.pl
255 my ($file_name, @file_array) = @_;
257 write_array_file($file_dir.$file_name, @file_array);
261 sub open_array_file { # File open function, spews the entire file to an array.
262 my $filename = shift(@_);
264 # Now read in the file as a big array
265 open (FD, $filename) || die "Can't open $filename: $!.\n";
273 sub write_array_file { # File write function.
274 my ($file_name, @file_array) = @_;
276 # Write this array out to $filename
277 open(FD, ">$file_name") || die "Can't open $file_name: $!.\n";
278 foreach (@file_array) {