#!/usr/local/bin/perl ################################## # ADDSITE 1.5 # ################################## # By: Graciliano Monteiro Passos # # E-mail: gm@...spam_sux....... # # URL: www.virtuasites.com.br # # # # Created 09/06/2000 14:51h # # # # Copyright 2002 Virtua Sites. # # All rights reserved. # ################################## ######## # VARS # ######## $ip_srv = "200.168.x.x" ; $ns_srv = domain.com' ; $httpd_conf = '/etc/httpd/conf/httpd.conf' ; $httpd_dir = '/home/httpd' ; $httpd_html_dir = "$httpd_dir/html" ; $httpd_log_dir = "$httpd_dir/logs" ; $named_conf = '/etc/named.conf' ; $named_dir = '/var/named' ; ######## # INIT # ######## $|=1; print "ADD SITE 1.5\n\n"; print "Nome do site: "; chop($name = ); print "Domínio do site: "; chop($domain = ); $domain = "\L$domain\E" ; if ( $name !~ /\w/ ) { $name = $domain ;} if ( $domain !~ /^[\w-\.]+\.[\w]+$/i ) { print "** Erro: domínio inválido! <$domain>\n"; exit ; } my ($domain , $domain_cname , $domain_full) = &domain_path($domain) ; $domain_dir = $domain ; if ( $domain_cname !~ /^www$/i ) { $domain_dir = $domain_full ;} print "\nDomain: $domain\n"; print "Cname: $domain_cname\n"; print "OK? " ; my ($dm_is_ok,$dm_is_q) ; chop($dm_is_q = ); $dm_is_q =~ s/\s//gs ; if ($dm_is_q =~ /^(1|y\w*|s\w*|ok|)$/si) { $dm_is_ok = 1 ;} while (! $dm_is_ok) { my ($dm,$dm_cname,$dm_full) ; my $def = (split(/\./,$domain_cname))[-1] . '.' . $domain ; print "\nDomain ($def)? " ; chop($dm = ); $dm =~ s/[^\w\.]//gs ; if ($dm eq '') { $dm = $def ;} $def = 'www' ; print "Cname ($def)? " ; chop($dm_cname = ); $dm_cname =~ s/[^\w\.]//gs ; if ($dm_cname eq '') { $dm_cname = $def ;} $dm_full = "$dm_cname.$dm" ; print "Full Domain: $dm_full? " ; chop($dm_is_q = ) ; $dm_is_q =~ s/\s//gs ; if ($dm_is_q =~ /^(1|y\w*|s\w*|ok)$/si) { $dm_is_ok = 1 ; $domain = $dm ; $domain_cname = $dm_cname ; $domain_full = "$domain_cname.$domain" ; } } print "\n ($domain_cname , $domain , $domain_full)\n" ; ###### # DO # ###### &make_dirs($domain_dir) ; &add_site($domain_dir,$domain_full,$name) ; &add_domain($domain,$domain_cname,$domain_full); &add_httpd ($domain,$domain_full,$domain_dir) ; &kill_hup ; print "\nSite adicionado!\n"; print " Nome: $name\n"; print " Domínio: $domain\n"; exit; ############## # ADD_DOMAIN # ############## sub add_domain { my ($domain , $domain_cname , $domain_full) = @_ ; open (LOG,"$named_conf") ; my $named_log = join '' , ; close (LOG) ; $named_log =~ s/\n[\r \t]*#[^\n]*/\n/gs ; if ( $named_log !~ /zone\s+["']$domain["']\s*{/i ) { open (LOG,">>$named_conf"); print LOG "zone \"$domain\"\{\n"; print LOG " type master;\n"; print LOG " file \"named.$domain\";\n"; print LOG "\};\n"; close (LOG) ; print " ** $named_conf: added zone\n" ; } my $named_var_file = "$named_dir/named.$domain" ; if (-e $named_var_file) { open (LOG,"$named_var_file") ; my $named_log = join '' , ; close (LOG) ; $named_log =~ s/\n[\r \t]*#[^\n]*/\n/gs ; if ( $named_log !~ /$domain_cname\s+IN\s+CNAME\s+$domain./is ) { open (LOG,">>$named_var_file"); if ( $named_log !~ /\r?\n$/s ) { print "\n" ;} print LOG "$domain_cname IN CNAME $domain.\n"; close (LOG) ; print " ** $named_var_file: CNAME $domain_cname\n" ; } } else { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900 ; $mon++ ; if ($mon < 10) { $mon = "0$mon" ;} if ($mday < 10) { $mday = "0$mday" ;} my $id = '01' ; open (LOG,">$named_var_file"); print LOG "\@ IN SOA $domain. root\@$domain. (\n"; print LOG " $year$mon$mday$id ; serial\n"; print LOG " 600 ; refresh\n"; print LOG " 450 ; retry\n"; print LOG " 37800 ; expire\n"; print LOG " 5700 ; default_ttl\n"; print LOG " )\n"; print LOG "\@ IN NS ns.$ns_srv.\n"; print LOG "\@ IN NS ns1.$ns_srv.\n"; print LOG "\@ IN NS ns2.$ns_srv.\n"; print LOG "\@ IN A $ip_srv\n"; print LOG "\@ IN MX 10 mail.$domain.\n"; print LOG "ftp IN CNAME $domain.\n"; print LOG "irc IN CNAME $domain.\n"; print LOG "pop IN CNAME $domain.\n"; print LOG "pop3 IN CNAME $domain.\n"; print LOG "smtp IN CNAME $domain.\n"; print LOG "mail IN CNAME $domain.\n"; print LOG "www IN CNAME $domain.\n"; if ( $domain_cname !~ /^www$/i ) { print LOG "$domain_cname IN CNAME $domain.\n"; } close (LOG) ; print " ** $named_var_file: created!\n" ; } } ############# # ADD_HTTPD # ############# sub add_httpd { my ( $domain , $domain_full , $domain_dir) = @_ ; open (LOG,"$httpd_conf") ; my $httpd_log = join '' , ; close (LOG) ; $httpd_log =~ s/\n[\r \t]*#[^\n]*/\n/gs ; if ( $httpd_log !~ //is ) { open (LOG,">>$httpd_conf"); print LOG "\n\n \n"; print LOG " ServerName $domain_full\n"; print LOG " ServerAdmin webmaster\@$domain\n"; print LOG " NameVirtualHost $ip_srv\n"; print LOG " ServerName $domain_full\n"; print LOG " DocumentRoot $httpd_html_dir/$domain_dir/\n"; print LOG " ErrorLog $httpd_log_dir/$domain_dir/error.log\n"; print LOG " RefererLog $httpd_log_dir/$domain_dir/referer.log\n"; print LOG " TransferLog $httpd_log_dir/$domain_dir/transfer.log\n"; print LOG " AgentLog $httpd_log_dir/$domain_dir/agent.log\n"; print LOG " ScriptAlias /cgi-bin $httpd_html_dir/$domain_dir/cgi-bin/\n"; print LOG " Options ExecCgi\n"; print LOG "\n"; close (LOG) ; print " ** $httpd_conf: added !\n" ; } } ############ # ADD_SITE # ############ sub add_site { my ( $domain_dir , $domain_full , $name ) = @_ ; open (LOG,"$httpd_html_dir/$ns_srv/index.htm"); my @index_log = ; close (LOG) ; open (LOG,">$httpd_html_dir/$ns_srv/index.htm"); foreach my $index_log_i ( @index_log ) { if ($index_log_i =~ "") { print LOG " $name

\n"; } print LOG "$index_log_i"; } close (LOG) ; print " ** $httpd_html_dir/$ns_srv/index.htm: Link added!\n" ; my $index_fl = "$httpd_html_dir/$domain_dir/index.htm" ; if (! -e $index_fl) { open (LOG,">$index_fl"); print LOG "\n"; print LOG "\n"; print LOG "$name\n"; print LOG "\n"; print LOG "\n"; print LOG "

 

\n"; print LOG "

$name

\n"; print LOG "\n"; print LOG "\n"; close (LOG) ; print " ** $index_fl: index created!\n" ; } } ############ # KILL_HUP # ############ sub kill_hup { open (CMD,"|killall -HUP named"); close (CMD) ; open (CMD,"|killall -HUP httpd"); close (CMD) ; print " ** HUP!\n" ; } ############# # MAKE_DIRS # ############# sub make_dirs { my ( $domain_dir ) = @_ ; $dir_path = "$httpd_html_dir/$domain_dir" ; $log_path = "$httpd_log_dir/$domain_dir" ; mkdir($dir_path , 0755) if (! -e $dir_path) ; mkdir($log_path , 0755) if (! -e $log_path) ; print " ** $dir_path: dir created!\n" ; print " ** $log_path: dir created!\n" ; } ############### # DOMAIN_PATH # ############### sub domain_path { my ( $domain ) = @_ ; $domain = "\L$domain\E" ; $domain =~ s/^\s+//g ; $domain =~ s/\s+$//g ; my $countrys = ' af al dz as ad ao ai aq ag ar am aw au at az bs bh bd bb by be bz bj bm bt bo ba bw bv br io bn bg bf bi kh cm ca cv ky cf td cl cn cx cc co km cg cd ck cr ci hr cu cy cz dk dj dm do tp ec eg sv gq er ee et fk fo fj fi fr fx gf pf tf ga gm ge de gh gi gr gl gd gp gu gt gn gw gy ht hm va hn hk hu is in id ir iq ie il it jm jp jo kz ke ki kp kr kw kg la lv lb ls lr ly li lt lu mo mk mg mw my mv ml mt mh mq mr mu yt mx fm md mc mn ms ma mz mm na nr np nl an nc nz ni ne ng nu nf mp no om pk pw pa pg py pe ph pn pl pt pr qa re ro ru rw kn lc vc ws sm st sa sn sc sl sg sk si sb so za gs es lk sh pm sd sr sj sz se ch sy tw tj tz th tg tk to tt tn tr tm tc tv ug uk ae gb us um uy uz vu ve vn vg vi wf eh ye yu zm zw ' ; my $sufixs = ' com net org mil gov edu co ' ; my @subs = split(/\./ , $domain) ; my ($domain_base,$domain_cname) ; if ( $#subs < 1) { $domain_base = $domain ; $domain_cname = "www" ; } elsif ( $countrys =~ / $subs[-1] /i ) { if ( $sufixs =~ / $subs[-2] / ) { $domain_base = join (".", @subs[($#subs-2)..$#subs]) ; $domain_cname = join (".", @subs[0..($#subs-3)]) ; if (@subs[0] !~ /^www$/i && $#subs <= 2) { $domain_cname = "www" ;} } else { $domain_base = join (".", @subs[($#subs-1)..$#subs]) ; $domain_cname = join (".", @subs[0..($#subs-2)]) ; if ( @subs[0] !~ /^www$/i && $#subs <= 1 ) { $domain_cname = "www" ;} } } else { $domain_base = join (".", @subs[($#subs-1)..$#subs]) ; $domain_cname = join (".", @subs[0..($#subs-2)]) ; if ( @subs[0] !~ /^www$/i && $#subs <= 1 ) { $domain_cname = "www" ;} } my $domain_full = "$domain_cname.$domain_base" ; if ( wantarray ) { return( $domain_base , $domain_cname , $domain_full ) ;} else { return( $domain_full ) ;} } ####### # END # #######