10^x|1024->2^x]
$s=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB');
$e=floor(log($bytes,$convention));
return round($bytes/pow($convention,$e),2).' '.$s[$e];
}
function tftp_sync_package()
{
//global $config;
//sync_package_tftp_files();
//if (pkg_is_service_running('inetd')) {
// sync_package_tftp();
//}
}
function tftp_install_command()
{
global $config;
conf_mount_rw();
config_lock();
if (!is_dir('/tftpboot')) {
// Create the directory
exec("mkdir /tftpboot");
//Set the directory permissions
exec("chmod -R 777 /tftpboot");
}
if (!is_dir('/usr/local/www/packages/')) {
// Create the packages directory
exec("mkdir /usr/local/www/packages/");
}
if (!is_dir('/usr/local/www/packages/tftp')) {
// Create the tftp directory
exec("mkdir /usr/local/www/packages/tftp");
}
if (!is_dir('/root/backup/')) {
// Create the backup directory
exec("mkdir /root/backup/");
}
//rename PHP files from .tmp to .php
exec("cp /tmp/tftp_files.tmp /usr/local/www/packages/tftp/tftp_files.php");
unlink_if_exists("/tmp/tftp_files.tmp");
//prepare inetd.conf for tftp
$filename = "/etc/inetd.conf";
$handle = fopen($filename,"rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
$handle = fopen($filename,"w");
$contents = str_replace("#tftp", "tftp", $contents);
fwrite($handle, $contents);
unset($contents);
fclose($handle);
unset($filename);
// add a TFTP DHCP Option to the DHCP Server
$filename = "/usr/local/www/services_dhcp.php";
$fout = fopen($filename,"r");
$tmp = fread($fout, filesize($filename));
fclose($fout);
//tftp was not found in the string
if (strpos($tmp, "tftp") === false) {
$tmpsearch = "\$pconfig['netmask'] = \$config['dhcpd'][\$if]['netmask'];";
$tmpreplace = "\$pconfig['netmask'] = \$config['dhcpd'][\$if]['netmask'];\n";
$tmpreplace .= "\$pconfig['tftp'] = \$config['dhcpd'][\$if]['options']['tftp-server-name'];";
$tmp = str_replace($tmpsearch, $tmpreplace, $tmp);
unset($tmpsearch, $tmpreplace);
$tmpsearch = "\$config['dhcpd'][\$if]['filename'] = \$_POST['filename'];";
$tmpreplace = "\$config['dhcpd'][\$if]['filename'] = \$_POST['filename'];\n";
$tmpreplace .= " \$config['dhcpd'][\$if]['options']['tftp-server-name'] = \$_POST['tftp'];";
$tmp = str_replace($tmpsearch, $tmpreplace, $tmp);
unset($tmpsearch, $tmpreplace);
$tmpsearch = "function show_netboot_config() {";
$tmpreplace = "function show_tftp_config() {\n";
$tmpreplace .= " document.getElementById(\"showtftpbox\").innerHTML='';\n";
$tmpreplace .= " aodiv = document.getElementById('showtftp');\n";
$tmpreplace .= " aodiv.style.display = \"block\";\n";
$tmpreplace .= "}\n";
$tmpreplace .= "\n";
$tmpreplace .= "function show_netboot_config() {";
$tmp = str_replace($tmpsearch, $tmpreplace, $tmp);
unset($tmpsearch, $tmpreplace);
$tmpsearch = "
Enable Network booting | ";
$tmpreplace .= "";
//$tmpreplace = " \n";
$tmpreplace .= "TFTP server | \n";
$tmpreplace .= " \n";
$tmpreplace .= " \n";
$tmpreplace .= " - Show TFTP configuration\n";
$tmpreplace .= " \n";
$tmpreplace .= " \n";
$tmpreplace .= " \"> \n";
$tmpreplace .= " \n";
$tmpreplace .= " | \n";
$tmpreplace .= "
\n";
$tmpreplace .= "\n";
$tmpreplace .= " \n";
$tmpreplace .= " Enable Network booting | ";
$tmpreplace .= "\n";
$tmp = str_replace($tmpsearch, $tmpreplace, $tmp);
unset($tmpsearch, $tmpreplace);
$fout = fopen($filename,"w");
fwrite($fout, $tmp);
unset($tmp);
fclose($fout);
}
unset($tmp, $filename);
$filename = "/etc/inc/services.inc";
$fout = fopen($filename,"r");
$tmp = fread($fout, filesize($filename));
fclose($fout);
//tftp was not found in the string
if (strpos($tmp, "tftp") === false) {
$tmpsearch = "if (is_array(\$dhcpifconf['ntpserver']) && \$dhcpifconf['ntpserver'][0])";
$tmpreplace = "if (isset(\$dhcpifconf['options']['tftp-server-name'])) {\n";
$tmpreplace .= " \$dhcpdconf .= \" option tftp-server-name \\\"\".\$dhcpifconf['options']['tftp-server-name'].\"\\\";\".\"\\n\";\n";
$tmpreplace .= " }\n";
$tmpreplace .= " \n";
$tmpreplace .= " if (is_array(\$dhcpifconf['ntpserver']) && \$dhcpifconf['ntpserver'][0])";
$tmp = str_replace($tmpsearch, $tmpreplace, $tmp);
unset($tmpsearch, $tmpreplace);
$fout = fopen($filename,"w");
fwrite($fout, $tmp);
fclose($fout);
}
unset($tmp, $filename);
// if backup file exists restore it
$filename = 'tftp.bak.tgz';
//extract a specific directory to /usr/local/freeswitch
if (file_exists('/root/backup/'.$filename)) {
system('cd /; tar xvpfz /root/backup/tftp.bak.tgz');
system('chmod -R 744 /tftpboot/*');
unset($filename);
}
write_rcfile(array(
"file" => "tftp.sh",
"start" => "/usr/sbin/inetd -l",
"stop" => "killall -9 inetd"
)
);
//tftp_sync_package();
$handle = popen("/usr/sbin/inetd", "r");
pclose($handle);
//if (pkg_is_service_running('inetd')) {
// temp_sync_package();
//}
//conf_mount_ro();
//config_unlock();
}
function tftp_deinstall_command()
{
//prepare inetd.conf for tftp
//tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
//pfsense 2.0 conflicting entry
//tftp dgram udp wait root /usr/local/sbin/tftp-proxy -v
$filename = "/etc/inetd.conf";
$handle = fopen($filename,"rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
$handle = fopen($filename,"w");
$contents = str_replace("tftp dgram", "#tftp dgram", $contents);
$contents = str_replace("tftpd -l -s /tftpboot", "/usr/local/sbin/tftp-proxy -v", $contents);
fwrite($handle, $contents);
unset($contents);
fclose($handle);
unset($filename);
exec("killall -9 inetd");
unlink_if_exists("/usr/local/pkg/tftp.xml");
unlink_if_exists("/usr/local/pkg/tftp.inc");
unlink_if_exists("/usr/local/www/packages/tftp/tftp_files.php");
exec("rm -R /usr/local/www/packages/tftp/");
//exec("rm -R /tftpboot");
unlink_if_exists("/usr/local/etc/rc.d/tftp.sh");
unlink_if_exists("/tmp/pkg_mgr_tftp.log");
}
?>