X-Git-Url: http://git.ipfire.org/?p=people%2Fpmueller%2Fipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fsamba.cgi;h=13a7a8254895562e1eba35813e7ed1694d807bc2;hp=066f9d069457925fbcb823ad94442484070e2b29;hb=eadc8af30a855a89f718353696f6aa167f87462d;hpb=32f77a0b3bdd47d4300cc6c76b5d4aed411167e8
diff --git a/html/cgi-bin/samba.cgi b/html/cgi-bin/samba.cgi
index 066f9d0694..13a7a82548 100644
--- a/html/cgi-bin/samba.cgi
+++ b/html/cgi-bin/samba.cgi
@@ -1,15 +1,28 @@
#!/usr/bin/perl
-#
-# IPFire CGIs
-#
-# This code is distributed under the terms of the GPL
-#
-# (c) The IPFire Team
+###############################################################################
+# #
+# IPFire.org - A linux based firewall #
+# Copyright (C) 2007 Michael Tremer & Christian Schmidt #
+# #
+# This program is free software: you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation, either version 3 of the License, or #
+# (at your option) any later version. #
+# #
+# This program is distributed in the hope that it will be useful, #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+# GNU General Public License for more details. #
+# #
+# You should have received a copy of the GNU General Public License #
+# along with this program. If not, see . #
+# #
+###############################################################################
use strict;
# enable only the following on debugging purpose
-use warnings;
-use CGI::Carp 'fatalsToBrowser';
+#use warnings;
+#use CGI::Carp 'fatalsToBrowser';
require '/var/ipfire/general-functions.pl';
require "${General::swroot}/lang.pl";
@@ -20,68 +33,82 @@ my %cgisettings = ();
my %checked = ();
my %netsettings = ();
my %ovpnsettings = ();
+my %color = ();
+my %mainsettings = ();
my $message = "";
my $errormessage = "";
-my $defaultoption= "[Share]\npath = /var/samba/share1\ncomment = Share - Public Access\nbrowseable = yes\nwriteable = yes\ncreate mask = 0777\ndirectory mask = 0777\nguest ok = yes\npublic = yes\nforce user = samba";
+
+my @Logs = qx(ls /var/log/samba/);
+my $Log =$Lang::tr{'no log selected'};
+
+my $Status = qx(/usr/local/bin/sambactrl smbstatus);
+$Status=~s/\n/
/g;
+
my $userentry = "";
my @user = ();
my @userline = ();
-my @proto = ();
+my $userfile = "${General::swroot}/samba/private/smbpasswd";
my %selected= () ;
-my $userfile = "/var/ipfire/samba/private/smbpasswd";
+
+my $defaultoption= "[Share]\npath = /var/ipfire/samba/share1\ncomment = Share - Public Access\nbrowseable = yes\nwriteable = yes\ncreate mask = 0777\ndirectory mask = 0777\npublic = yes\nforce user = samba";
+my $defaultprinter= "[Printer]\ncomment = Printer public\npath = /var/spool/cups\nprinting = sysvn\nprintcap = lpstat\npublic = yes\nwritable = no\nprintable = yes";
+my %printer = ();
+my %shares = ();
+
&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
&General::readhash("${General::swroot}/ovpn/settings", \%ovpnsettings);
+&General::readhash("${General::swroot}/main/settings", \%mainsettings);
+&General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
+
+my @ovpnnetwork = split(/\//,$ovpnsettings{'DOVPN_SUBNET'});
+my @ovpnip = split(/\./,$ovpnnetwork[0]);
+$ovpnip[3]=$ovpnip[3]+1;
############################################################################################################################
############################################# Samba Dienste fr Statusberprfung ##########################################
-my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd','Winbind Daemon' => 'winbindd');
+my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd');
+#my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd','Winbind Daemon' => 'winbindd');
&Header::showhttpheaders();
-############################################################################################################################
-#################################### Initialisierung von Samba Sharess fr die Verarbeitung ################################
-
-my @Zeilen= ();
-my @Shares= ();
-my $shareentry = "";
-my $shareconfigentry = "";
-my @shareconfigline = ();
-my $shareoption = '';
-my @shares = ();
-my @shareline = ();
-my $sharefile = "/var/ipfire/samba/shares";
-my $EOF = qx(cat $sharefile | wc -l);
-my $Status = qx(/usr/local/bin/sambactrl smbstatus);
-
-@shares = `grep -n '^\\[' $sharefile`;
-foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
-
############################################################################################################################
#################################### Initialisierung von Samba Variablen fr global Settings ###############################
$sambasettings{'WORKGRP'} = 'homeip.net';
-$sambasettings{'NETBIOSNAME'} = 'IPFIRE';
-$sambasettings{'SRVSTRING'} = 'Samba Server running on IPFire 2.0';
+$sambasettings{'NETBIOSNAME'} = 'IPFire';
+$sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.7';
$sambasettings{'INTERFACES'} = '';
$sambasettings{'SECURITY'} = 'share';
-$sambasettings{'OSLEVEL'} = '65';
+$sambasettings{'OSLEVEL'} = '33';
$sambasettings{'GREEN'} = 'on';
$sambasettings{'BLUE'} = 'off';
$sambasettings{'ORANGE'} = 'off';
$sambasettings{'VPN'} = 'off';
-$sambasettings{'WINSSRV'} = "$netsettings{'GREEN_NETADDRESS'}";
-$sambasettings{'WINSSUPPORT'} = 'off';
+$sambasettings{'WINSSRV'} = '';
+$sambasettings{'WINSSUPPORT'} = 'on';
+$sambasettings{'REMOTEANNOUNCE'} = '';
+$sambasettings{'REMOTESYNC'} = '';
$sambasettings{'PASSWORDSYNC'} = 'off';
-$sambasettings{'OTHERINTERFACES'} = '';
+$sambasettings{'OTHERINTERFACES'} = '127.0.0.1';
$sambasettings{'GUESTACCOUNT'} = 'samba';
$sambasettings{'MAPTOGUEST'} = 'Never';
+$sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2';
+$sambasettings{'SYSLOGLEVEL'} = '1';
+$sambasettings{'SYSLOGONLY'} = 'on';
+$sambasettings{'DOSCHARSET'} = 'CP850';
+$sambasettings{'UNIXCHARSET'} = 'UTF8';
+$sambasettings{'DISPLAYCHARSET'} = 'CP850';
+$sambasettings{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE';
+$sambasettings{'WIDELINKS'} = 'on';
+$sambasettings{'UNIXEXTENSION'} = 'off';
### Values that have to be initialized
-$cgisettings{'ACTION'} = '';
+$sambasettings{'ACTION'} = '';
+### Samba CUPS Variablen
+$sambasettings{'LOADPRINTERS'} = 'Yes';
+$sambasettings{'PRINTING'} = 'cups';
+$sambasettings{'PRINTCAPNAME'} = 'cups';
+my $LOGLINES = '50';
################################################## Samba PDC Variablen #####################################################
@@ -96,208 +123,114 @@ my $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`;
&General::readhash("${General::swroot}/samba/settings", \%sambasettings);
&Header::getcgihash(\%sambasettings);
-&Header::openpage('Samba', 1, '');
-&Header::openbigbox('100%', 'left', '', $errormessage);
-
-############################################################################################################################
-############################################# Samba Rootskript aufrufe fr SU-Actions ######################################
+sub refreshpage{&Header::openbox( 'Waiting', 1, "" );print "
$Lang::tr{'pagerefresh'}";&Header::closebox();}
-if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system("/usr/local/bin/sambactrl smbuserdisable $sambasettings{'NAME'}");}
-if ($sambasettings{'ACTION'} eq 'smbuserenable'){system("/usr/local/bin/sambactrl smbuserenable $sambasettings{'NAME'}");}
-if ($sambasettings{'ACTION'} eq 'smbuseradd'){system("/usr/local/bin/sambactrl smbuseradd $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");}
-if ($sambasettings{'ACTION'} eq 'smbpcadd'){system("/usr/local/bin/sambactrl smbpcadd $sambasettings{'PCNAME'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");}
-if ($sambasettings{'ACTION'} eq 'smbchangepw'){system("/usr/local/bin/sambactrl smbchangepw $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'}");}
-if ($sambasettings{'ACTION'} eq 'smbrestart'){system("/usr/local/bin/sambactrl smbrestart");}
-if ($sambasettings{'ACTION'} eq 'smbstart'){system("/usr/local/bin/sambactrl smbstart");}
-if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");}
-if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");}
-if ($sambasettings{'ACTION'} eq 'globalreset'){system("/usr/local/bin/sambactrl smbglobalreset");}
+if (($sambasettings{'WIDELINKS'} eq 'on') & ($sambasettings{'UNIXEXTENSION'} eq 'on'))
+ {$errormessage = "$errormessage
Don't enable 'Wide links' and 'Unix extension' at the same time"; }
-# smbsafeconf is directly called by the if clause
-
-if ($sambasettings{'ACTION'} eq 'sharesreset')
-{
-system('/usr/local/bin/sambactrl smbsharesreset');
- @Zeilen = ();
- @Shares = ();
- $shareentry = "";
- @shares = ();
- @shareline = ();
- $EOF = qx(cat $sharefile | wc -l);
-
- @shares = `grep -n '^\\[' $sharefile`;
- foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
-}
+&Header::openpage('Samba', 1, '');
+&Header::openbigbox('100%', 'left', '', $errormessage);
############################################################################################################################
-########################################### Samba Benutzer oder PC l�chen #################################################
-
-if ($sambasettings{'ACTION'} eq 'userdelete' && $sambasettings{'NAME'} =~ /\$/)
-{
-system("/usr/local/bin/sambactrl smbpcdelete $sambasettings{'NAME'}");
-}
-elsif ($sambasettings{'ACTION'} eq 'userdelete')
-{
-system("/usr/local/bin/sambactrl smbuserdelete $sambasettings{'NAME'}");
-}
+############################################# Samba Rootskript aufrufe fr SU-Actions #######################################
+
+if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system("/usr/local/bin/sambactrl smbuserdisable $sambasettings{'NAME'}");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbuserenable'){system("/usr/local/bin/sambactrl smbuserenable $sambasettings{'NAME'}");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbuseradd'){system("/usr/local/bin/sambactrl smbuseradd $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbpcadd'){system("/usr/local/bin/sambactrl smbpcadd $sambasettings{'PCNAME'} $sambasettings{'GROUP'} $sambasettings{'SHELL'}");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbchangepw'){system("/usr/local/bin/sambactrl smbchangepw $sambasettings{'USERNAME'} $sambasettings{'PASSWORD'}");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbrestart'){system("/usr/local/bin/sambactrl smbrestart");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbstart'){system("/usr/local/bin/sambactrl smbstart");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbstop'){system("/usr/local/bin/sambactrl smbstop");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'smbreload'){system("/usr/local/bin/sambactrl smbreload");refreshpage();}
+if ($sambasettings{'ACTION'} eq 'globalresetyes')
+ {
+ system("/usr/local/bin/sambactrl smbglobalreset");
+ $sambasettings{'WORKGRP'} = 'homeip.net';
+ $sambasettings{'NETBIOSNAME'} = 'IPFire';
+ $sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.0';
+ $sambasettings{'INTERFACES'} = '';
+ $sambasettings{'SECURITY'} = 'share';
+ $sambasettings{'OSLEVEL'} = '65';
+ $sambasettings{'GREEN'} = 'on';
+ $sambasettings{'BLUE'} = 'off';
+ $sambasettings{'ORANGE'} = 'off';
+ $sambasettings{'VPN'} = 'off';
+ $sambasettings{'WINSSRV'} = '';
+ $sambasettings{'WINSSUPPORT'} = 'on';
+ $sambasettings{'REMOTEANNOUNCE'} = '';
+ $sambasettings{'REMOTESYNC'} = '';
+ $sambasettings{'PASSWORDSYNC'} = 'off';
+ $sambasettings{'OTHERINTERFACES'} = '127.0.0.1';
+ $sambasettings{'GUESTACCOUNT'} = 'samba';
+ $sambasettings{'MAPTOGUEST'} = 'Never';
+ $sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2';
+ $sambasettings{'SYSLOGLEVEL'} = '1';
+ $sambasettings{'SYSLOGONLY'} = 'on';
+ $sambasettings{'DOSCHARSET'} = 'CP850';
+ $sambasettings{'UNIXCHARSET'} = 'UTF8';
+ $sambasettings{'DISPLAYCHARSET'} = 'CP850';
+### Samba CUPS Variablen
+ $sambasettings{'LOADPRINTERS'} = 'Yes';
+ $sambasettings{'PRINTING'} = 'cups';
+ $sambasettings{'PRINTCAPNAME'} = 'cups';
+ $sambasettings{'PRINTERNAME'} = 'Printer';
+### Values that have to be initialized
+ $sambasettings{'WIDELINKS'} = 'on';
+ $sambasettings{'UNIXEXTENSION'} = 'off';
+ $sambasettings{'ACTION'} = '';
+ $sambasettings{'LOCALMASTER'} = 'off';
+ $sambasettings{'DOMAINMASTER'} = 'off';
+ $sambasettings{'PREFERREDMASTER'} = 'off';
+ $sambasettings{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE';
+ $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`;
+ system("/usr/local/bin/sambactrl smbreload");
+ refreshpage();
+ }
############################################################################################################################
-############################################## Samba Share neu anlegen #####################################################
+################################################ Sicherheitsabfrage für den Reset ##########################################
-if ($sambasettings{'ACTION'} eq 'smbshareadd')
-{
- my $emptyline= "";
- open (FILE, ">>${General::swroot}/samba/shares") or die "Can't save the shares settings: $!";
- flock (FILE, 2);
-
-print FILE <
+
+ $Lang::tr{'resetglobals'}
+ |
|
+ |
+
+
END
;
-close FILE;
-system("/usr/local/bin/sambactrl smbsafeconf");
-
- @Zeilen = ();
- @Shares = ();
- $shareentry = "";
- @shares = ();
- @shareline = ();
- $EOF = qx(cat $sharefile | wc -l);
-
- @shares = `grep -n '^\\[' $sharefile`;
- foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
}
-############################################################################################################################
-################################################## Samba Share l�chen #####################################################
-
-if ($sambasettings{'ACTION'} eq 'smbsharedel')
-{
-my $sharebody = '';
-my $sharehead = '';
-my $sharetext = '';
-my $sharename = "$sambasettings{'NAME'}";
-chomp $sharename;
-$sharename=~s/\s//g;
-
-for(my $i = 0; $i <= $#Shares; $i++)
- {
- chomp $Shares[$i];
- $Shares[$i]=~s/\s//g;
- if ( "$Shares[$i]" eq "$sharename" )
- {
- my $Zeilenbegin = $Zeilen[$i]-2;
- my $Zeilenende = $EOF-$Zeilen[$i+1]+1;
- my $Zeilenende2 = $Zeilenende-1;
-
- if ( $Zeilen[$i] eq $Zeilen[$#Shares] )
- {
- $sharehead = qx(head -$Zeilenbegin $sharefile);
- $sharetext = $sharehead;
- }
- elsif ($Zeilen[$i] eq 1 )
- {
- $sharehead = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
- $sharetext = $sharehead;
- }
- else
- {
- $sharehead = qx(head -$Zeilenbegin $sharefile);$sharebody = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
- $sharetext = "$sharehead\n$sharebody";
- }
- }
- }
-
-open (FILE, ">${General::swroot}/samba/shares") or die "Can't delete the share settings: $!";
-flock (FILE, 2);
-print FILE <
+
+ $Lang::tr{'resetshares'}
+ |
|
+ |
+
+
END
;
-close FILE;
-system("/usr/local/bin/sambactrl smbsafeconf");
-
- @Zeilen = ();
- @Shares = ();
- $shareentry = "";
- @shares = ();
- @shareline = ();
- $EOF = qx(cat $sharefile | wc -l);
-
- @shares = `grep -n '^\\[' $sharefile`;
- foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
-}
-############################################################################################################################
-################################################## Sambashare �dern #######################################################
-
-if ($sambasettings{'ACTION'} eq 'smbsharechange')
-{
-my $sharebody = '';
-my $sharehead = '';
-my $sharename = "$sambasettings{'NAME'}";
-my $sharetext = '';
-$sharename=~s/\s//g;
+ }
-for(my $i = 0; $i <= $#Shares; $i++)
- {
- chomp $Shares[$i];
- $Shares[$i]=~s/\s//g;
- if ( "$Shares[$i]" eq "$sharename" )
- {
- my $Zeilenbegin = $Zeilen[$i]-2;
- my $Zeilenende = $EOF-$Zeilen[$i+1]+1;
- my $Zeilenende2 = $Zeilenende-1;
-
- if ( $Zeilen[$i] eq $Zeilen[$#Shares] )
- {
- $sharehead = qx(head -$Zeilenbegin $sharefile);
- $sharetext = $sharehead;
- }
- elsif ($Zeilen[$i] eq 1 )
- {
- $sharehead = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
- $sharetext = $sharehead;
- }
- else
- {
- $sharehead = qx(head -$Zeilenbegin $sharefile);$sharebody = qx(tail -$Zeilenende $sharefile | head -$Zeilenende2);
- $sharetext = "$sharehead\n$sharebody";
- }
- }
- }
-
-open (FILE, ">${General::swroot}/samba/shares") or die "Can't delete the share settings: $!";
-flock (FILE, 2);
-print FILE <${General::swroot}/samba/pdc") or die "Can't save the pdc settings: $!";
- flock (FILE, 2);
- print FILE <>${General::swroot}/samba/global") or die "Can't save the global cups settings: $!";
+ flock (FILE, 2);
+ print FILE <${General::swroot}/samba/pdc") or die "Can't save the pdc settings: $!";
+ flock (FILE, 2);
+ chomp $sambasettings{'PDCOPTIONS'};
+ $sambasettings{'PDCOPTIONS'} =~ s/\r\n/\n/gi;
+ $sambasettings{'PDCOPTIONS'} =~ s/^\n//gi;
+ $sambasettings{'PDCOPTIONS'} =~ s/^\r//gi;
+ $sambasettings{'PDCOPTIONS'} =~ s/^.\n//gi;
+ $sambasettings{'PDCOPTIONS'} =~ s/^.\r//gi;
+ print FILE <$errormessage\n";
- print " \n";
- &Header::closebox();
- }
+if ($errormessage)
+ {
+ &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
+ print "$errormessage\n";
+ print " \n";
+ &Header::closebox();
+ }
############################################################################################################################
########################################## Aktivieren von Checkboxen und Dropdowns #########################################
+$checked{'SYSLOGONLY'}{'off'} = '';
+$checked{'SYSLOGONLY'}{'on'} = '';
+$checked{'SYSLOGONLY'}{$sambasettings{'SYSLOGONLY'}} = "checked='checked'";
$checked{'WINSSUPPORT'}{'off'} = '';
$checked{'WINSSUPPORT'}{'on'} = '';
$checked{'WINSSUPPORT'}{$sambasettings{'WINSSUPPORT'}} = "checked='checked'";
@@ -414,6 +394,12 @@ $checked{'DOMAINMASTER'}{$sambasettings{'DOMAINMASTER'}} = "checked='checked'";
$checked{'PREFERREDMASTER'}{'off'} = '';
$checked{'PREFERREDMASTER'}{'on'} = '';
$checked{'PREFERREDMASTER'}{$sambasettings{'PREFERREDMASTER'}} = "checked='checked'";
+$checked{'WIDELINKS'}{'off'} = '';
+$checked{'WIDELINKS'}{'on'} = '';
+$checked{'WIDELINKS'}{$sambasettings{'WIDELINKS'}} = "checked='checked'";
+$checked{'UNIXEXTENSION'}{'off'} = '';
+$checked{'UNIXEXTENSION'}{'on'} = '';
+$checked{'UNIXEXTENSION'}{$sambasettings{'UNIXEXTENSION'}} = "checked='checked'";
$checked{'GREEN'}{'off'} = '';
$checked{'GREEN'}{'on'} = '';
$checked{'GREEN'}{$sambasettings{'GREEN'}} = "checked='checked'";
@@ -433,20 +419,19 @@ $selected{'SECURITY'}{$sambasettings{'SECURITY'}} = "selected='selected'";
############################################################################################################################
################################### Aufbau der HTML Seite fr globale Sambaeinstellungen ###################################
-&Header::openbox('100%', 'center', 'Samba');
+&Header::openbox('100%', 'center', $Lang::tr{'samba'});
print <
-
+
+
END
;
if ( $message ne "" )
{
- print "$message";
+ print " |
$message";
}
print <
| |
-Alle Dienste |
+$Lang::tr{'all services'} |
END
;
@@ -454,40 +439,39 @@ END
my $key = '';
foreach $key (sort keys %servicenames)
{
- print "$key";
+ print " |
$key | ";
my $shortname = $servicenames{$key};
my $status = &isrunning($shortname);
- print "$status";
- print <
-END
-;
+ print "$status
";
}
print <
|
- |
-
-
+
+
+