3 # $Id: registerd,v 1.1 2000-03-01 08:15:10 ivan Exp $
6 use vars qw(# $freeside_bin $freeside_test
9 $datasrc $user $pass $x
11 # $cgi $username $name $email $user_pw $crypt_pw $dbh $sth
15 #use CGI::Carp qw(fatalsToBrowser);
21 #$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
22 #$ENV{'SHELL'} = '/bin/sh';
23 #$ENV{'IFS'} = " \t\n";
26 #$ENV{'BASH_ENV'} = '';
28 #$freeside_bin = '/home/freeside/bin/';
29 #$freeside_test = '/home/freeside/test/';
30 $freeside_conf = '/usr/local/etc/freeside/';
32 $mysql_data = "/var/lib/mysql";
34 $datasrc = 'DBI:mysql:http_auth';
38 #my(@pw_set)= ( 'a'..'z', 'A'..'Z', '0'..'9', '(', ')', '#', '!', '.', ',' );
39 #my(@pw_set)= ( 'a'..'z', 'A'..'Z', '0'..'9' );
40 @pw_set = ( 'a'..'z', '0'..'9' );
41 @saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
43 die "not running as system user freeside"
44 unless $> == scalar(getpwnam('freeside'))
46 $dbh = DBI->connect( $datasrc, $user, $pass, {
47 'AutoCommit' => 'true',
48 } ) or die "DBI->connect error: $DBI::errstr\n";
49 $x = $DBI::errstr; #silly; to avoid "used only once" warning
55 $SIG{QUIT} = 'IGNORE';
56 $SIG{TERM} = 'IGNORE';
57 $SIG{TSTP} = 'IGNORE';
58 $SIG{PIPE} = 'IGNORE';
60 $sth = $dbh->prepare("LOCK TABLES mysql_auth WRITE");
61 $sth->execute or die $sth->errstr;
64 'SELECT * FROM mysql_auth WHERE status = "unconfigured"'
66 $sth->execute or die $sth->errstr;
67 my $pending = $sth->fetchall_arrayref( {} );
70 'UPDATE mysql_auth SET status = "locked" WHERE status = "unconfigured"'
72 $sth->execute or die $sth->errstr;
74 $sth = $dbh->prepare("UNLOCK TABLES");
75 $sth->execute or die $sth->errstr;
79 foreach my $row ( @{$pending} ) {
81 my $username = $row->{'username'};
83 my $user_pw = join('',map($pw_set[ int(rand $#pw_set) ], (0..7) ) );
85 crypt($user_pw,$saltset[int(rand(64))].$saltset[int(rand(64))]);
87 system("/usr/bin/mysqladmin --user=$user --password=$pass ".
88 "create demo_$username >/dev/null");
90 system "cp $mysql_data/demo_template/* $mysql_data/demo_$username";
92 mkdir "${freeside_conf}conf.DBI:mysql:demo_$username", 0755;
93 system "cp -r ${freeside_conf}conf.DBI:mysql:demo_template/* ".
94 "${freeside_conf}conf.DBI:mysql:demo_$username";
96 mkdir "${freeside_conf}counters.DBI:mysql:demo_$username", 0755;
97 system "cp ${freeside_conf}counters.DBI:mysql:demo_template/* ".
98 "${freeside_conf}counters.DBI:mysql:demo_$username";
101 open(SECRETS, ">${freeside_conf}secrets.$username")
102 or die "Can\'t open ${freeside_conf}secrets.demo_$username: $!";
103 chmod 0600, "${freeside_conf}secrets.$username";
104 print SECRETS "DBI:mysql:demo_$username\nfreeside\nmaelcolm\n";
107 open(MAPSECRETS, ">>${freeside_conf}mapsecrets")
108 or die "Can\'t open ${freeside_conf}mapsecrets: $!";
109 print MAPSECRETS "$username secrets.demo_$username\n";
118 $SIG{HUP} = 'DEFAULT';
119 $SIG{INT} = 'DEFAULT';
120 $SIG{QUIT} = 'DEFAULT';
121 $SIG{TERM} = 'DEFAULT';
122 $SIG{TSTP} = 'DEFAULT';
123 $SIG{PIPE} = 'DEFAULT';
129 $sth = $dbh->prepare("INSERT INTO mysql_auth VALUES (". join(", ",
130 $dbh->quote($username),
131 $dbh->quote($crypt_pw),
132 $dbh->quote('freeside'),
135 $sth->execute or &idiot("Username in use: ". $sth->errstr);
137 $dbh->disconnect or die $dbh->errstr;
143 open(ADDRESS, ">${freeside_conf}conf.DBI:mysql:$username/address")
144 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/address: $!";
146 Internet Service Provider, Inc.
153 open(DOMAIN, ">${freeside_conf}conf.DBI:mysql:$username/domain")
154 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/domain: $!";
155 print DOMAIN "this-is-an-example-domain.tld\n";
158 open(HOME, ">${freeside_conf}conf.DBI:mysql:$username/home")
159 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/home: $!";
160 print HOME "/home\n";
163 open(INVOICE_FROM, ">${freeside_conf}conf.DBI:mysql:$username/invoice_from")
164 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/invoice_from: $!";
165 print INVOICE_FROM "$email\n";
168 open(LPR, ">${freeside_conf}conf.DBI:mysql:$username/lpr")
169 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/lpr: $!";
170 print LPR "cat >/dev/null\n";
173 mkdir "${freeside_conf}conf.DBI:mysql:$username/registries", 0755;
174 mkdir "${freeside_conf}conf.DBI:mysql:$username/registries/internic", 0755;
175 open(FROM, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/from")
176 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/from: $!";
177 print FROM "$email\n";
179 open(NAMESERVERS, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/nameservers")
180 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/nameservers: $!";
181 print NAMESERVERS <<END;
182 10.0.0.1 ns1.this-is-an-example-domain.tld
183 10.0.0.2 ns2.this-is-an-example-domain.tld
184 10.0.0.3 ns3.this-is-an-example-domain.tld
187 open(TECH_CONTACT, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/tech_contact")
188 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/tech_contact: $!";
189 print TECH_CONTACT "EXAMPLE-INTERNIC-HANDLE\n";
191 system ("cp", "${freeside_conf}.domain-template.txt",
192 "${freeside_conf}conf.DBI:mysql:$username/registries/internic/template"
194 open(TO, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/to")
195 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/to: $!";
199 open(SHELLS, ">${freeside_conf}conf.DBI:mysql:$username/shells")
200 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/shells: $!";
214 open(SMTPMACHINE, ">${freeside_conf}conf.DBI:mysql:$username/smtpmachine")
215 or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/smtpmachine: $!";
216 print SMTPMACHINE "localhost\n";
220 mkdir("/usr/local/etc/freeside/counters.DBI:mysql:$username",0755)
221 or die "Can't create counter spooldir: $!";
223 system("${freeside_bin}fs-setup.webdemo", "$username");
224 system("${freeside_test}cgi-test",
225 "http://freeside.sisd.com/", $username, $user_pw);
229 $ENV{SMTPHOSTS} = "localhost";
230 $ENV{MAILADDRESS} = 'ivan@sisd.com';
231 $header = Mail::Header->new( [
232 'From: ivan@sisd.com',
234 'Cc: ivan-fsreg@sisd.com',
235 'Sender: ivan@sisd.com',
236 'Reply-To: ivan@sisd.com',
237 'Date: '. time2str("%a, %d %b %Y %X %z", time),
238 'Subject: Freeside demo information',
240 $msg = Mail::Internet->new(
243 "Hello $name <$email>,\n",
245 "Your sample Freeside database has been setup.\n",
247 "Point your web browswer at http://freeside.sisd.com/ and use the following\n",
248 "authentication information:\n",
250 "Username: $username\n",
251 "Password: $user_pw\n",
253 "You may wish to subscribe to the Freeside mailing list - send a blank\n",
254 "message to ivan-freeside-subscribe\@sisd.com.\n",
257 "Ivan Kohler <ivan\@sisd.com>\n",
258 "20 4,16 \* \* \* saytime\n",
261 $msg->smtpsend or die "Can\'t send registration email!";
267 print $cgi->header, <<END;
270 <TITLE>Registration error</TITLE>
272 <BODY BGCOLOR="#FFFFFF">
274 <H4>Registration error</H4>
277 <P>Hit the <I>Back</I> button in your web browser, correct this mistake,
278 and submit the form again.