X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fsamba.cgi;h=13a7a8254895562e1eba35813e7ed1694d807bc2;hp=e71466a9140c7a3846fddc3b076698225bf63be7;hb=4594712a1777fdd03b51491cf82bd06d45c16472;hpb=14cc7eac2ecc5ec2cb3c97fa734a3fe9a88f53f5
diff --git a/html/cgi-bin/samba.cgi b/html/cgi-bin/samba.cgi
index e71466a914..13a7a82548 100644
--- a/html/cgi-bin/samba.cgi
+++ b/html/cgi-bin/samba.cgi
@@ -1,256 +1,236 @@
#!/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";
require "${General::swroot}/header.pl";
my %sambasettings = ();
+my %cgisettings = ();
my %checked = ();
my %netsettings = ();
my %ovpnsettings = ();
+my %color = ();
+my %mainsettings = ();
my $message = "";
my $errormessage = "";
-my $shareconfigentry = "";
-my @sharesconfig = ();
-my @shareconfigline = ();
-my $shareoption = '';
-my $defaultoption= "[Share]\npath = /shares/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 für Statusüberprüfung ##########################################
+############################################# 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 für die Verarbeitung ################################
-
-my @Zeilen= ();
-my @Shares= ();
-my $shareentry = "";
-my @shares = ();
-my @shareline = ();
-my $sharefile = "/var/ipfire/samba/shares";
-my $EOF = qx(cat $sharefile | wc -l);
-
-@shares = `grep -n '^\\[' $sharefile`;
-foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
-
-############################################################################################################################
-#################################### Initialisierung von Samba Variablen für global Settings ###############################
+#################################### 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{'OTHERINTERFACES'} = '';
+$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{'BINDINTERFACESONLY'} = 'True';
+$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
$sambasettings{'ACTION'} = '';
+### Samba CUPS Variablen
+$sambasettings{'LOADPRINTERS'} = 'Yes';
+$sambasettings{'PRINTING'} = 'cups';
+$sambasettings{'PRINTCAPNAME'} = 'cups';
+my $LOGLINES = '50';
+
+################################################## Samba PDC Variablen #####################################################
+
+$sambasettings{'LOCALMASTER'} = 'off';
+$sambasettings{'DOMAINMASTER'} = 'off';
+$sambasettings{'PREFERREDMASTER'} = 'off';
+my $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`;
+
+
+############################################################################################################################
&General::readhash("${General::swroot}/samba/settings", \%sambasettings);
&Header::getcgihash(\%sambasettings);
+sub refreshpage{&Header::openbox( 'Waiting', 1, "" );print "
$Lang::tr{'pagerefresh'}";&Header::closebox();}
+
+if (($sambasettings{'WIDELINKS'} eq 'on') & ($sambasettings{'UNIXEXTENSION'} eq 'on'))
+ {$errormessage = "$errormessage
Don't enable 'Wide links' and 'Unix extension' at the same time"; }
+
&Header::openpage('Samba', 1, '');
&Header::openbigbox('100%', 'left', '', $errormessage);
############################################################################################################################
-############################################# Samba Rootskript aufrufe für SU-Actions ######################################
-
-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 'smbuserdelete'){system('/usr/local/bin/sambactrl smbuserdelete $sambasettings{"NAME"}');}
-if ($sambasettings{'ACTION'} eq 'smbuseradd'){system('/usr/local/bin/sambactrl smbuseradd $username $password');}
-if ($sambasettings{'ACTION'} eq 'smbchangepw'){system('/usr/local/bin/sambactrl smbchangepw $username $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');}
-# smbsharechange is directly called by the if clause
+############################################# 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 #####################################################
-
-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 smbsharechange');
-
- @Zeilen = ();
- @Shares = ();
- @shares = `grep -n '^\\[' $sharefile`;
- foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
}
-############################################################################################################################
-################################################## Samba Share löschen #####################################################
-
-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 smbsharechange');
+ }
-@Zeilen = ();
-@Shares = ();
-@shares = `grep -n '^\\[' $sharefile`;
-foreach $shareentry (@shares)
- {
- @shareline = split( /\:/, $shareentry );
- push(@Zeilen,$shareline[0]);push(@Shares,$shareline[1]);
- }
-}
############################################################################################################################
-################################################## Sambashare ändern #######################################################
+########################################### Samba Benutzer oder PC l�chen #################################################
-if ($sambasettings{'ACTION'} eq 'smbsharechange')
-{
-my $sharebody = '';
-my $sharehead = '';
-my $sharename = "$sambasettings{'NAME'}";
-my $sharetext = '';
-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 <${General::swroot}/samba/global") or die "Can't save the global 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{'WINSSUPPORT'}{$sambasettings{'WINSSUPPORT'}} = "checked='checked' ";
-$checked{'GREEN'}{$sambasettings{'GREEN'}} = "checked='checked' ";
-$checked{'BLUE'}{$sambasettings{'BLUE'}} = "checked='checked' ";
-$checked{'ORANGE'}{$sambasettings{'ORANGE'}} = "checked='checked' ";
-$checked{'VPN'}{$sambasettings{'VPN'}} = "checked='checked' ";
+$checked{'SYSLOGONLY'}{'off'} = '';
+$checked{'SYSLOGONLY'}{'on'} = '';
+$checked{'SYSLOGONLY'}{$sambasettings{'SYSLOGONLY'}} = "checked='checked'";
+$checked{'WINSSUPPORT'}{'off'} = '';
+$checked{'WINSSUPPORT'}{'on'} = '';
+$checked{'WINSSUPPORT'}{$sambasettings{'WINSSUPPORT'}} = "checked='checked'";
+$checked{'PASSWORDSYNC'}{'off'} = '';
+$checked{'PASSWORDSYNC'}{'on'} = '';
+$checked{'PASSWORDSYNC'}{$sambasettings{'PASSWORDSYNC'}} = "checked='checked'";
+$checked{'LOCALMASTER'}{'off'} = '';
+$checked{'LOCALMASTER'}{'on'} = '';
+$checked{'LOCALMASTER'}{$sambasettings{'LOCALMASTER'}} = "checked='checked'";
+$checked{'DOMAINMASTER'}{'off'} = '';
+$checked{'DOMAINMASTER'}{'on'} = '';
+$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'";
+$checked{'BLUE'}{'off'} = '';
+$checked{'BLUE'}{'on'} = '';
+$checked{'BLUE'}{$sambasettings{'BLUE'}} = "checked='checked'";
+$checked{'ORANGE'}{'off'} = '';
+$checked{'ORANGE'}{'on'} = '';
+$checked{'ORANGE'}{$sambasettings{'ORANGE'}} = "checked='checked'";
+$checked{'VPN'}{'off'} = '';
+$checked{'VPN'}{'on'} = '';
+$checked{'VPN'}{$sambasettings{'VPN'}} = "checked='checked'";
$selected{'MAPTOGUEST'}{$sambasettings{'MAPTOGUEST'}} = "selected='selected'";
$selected{'SECURITY'}{$sambasettings{'SECURITY'}} = "selected='selected'";
############################################################################################################################
-################################### Aufbau der HTML Seite für globale Sambaeinstellungen ###################################
+################################### Aufbau der HTML Seite fr globale Sambaeinstellungen ###################################
+
+&Header::openbox('100%', 'center', $Lang::tr{'samba'});
+print <
+
+END
+;
+if ( $message ne "" )
+ {
+ print "$message";
+ }
+
+print <$Lang::tr{'all services'} | |
+
+END
+;
+
+my $key = '';
+foreach $key (sort keys %servicenames)
+ {
+ print "$key | ";
+ my $shortname = $servicenames{$key};
+ my $status = &isrunning($shortname);
+ print "$status
";
+ }
+
+print <
+
+
+
+