X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=html%2Fcgi-bin%2Fsamba.cgi;h=b49c0bc990381c192989eafbd9f3a5bd0135c49d;hb=889329363f2d2adad0292008b2d223352d4bfe2a;hp=05be43f203dc2d2c8508685767929506d5a05404;hpb=1ee8bf5d7ffd66528922412c95d126e5d50812b0;p=ipfire-2.x.git
diff --git a/html/cgi-bin/samba.cgi b/html/cgi-bin/samba.cgi
index 05be43f203..b49c0bc990 100644
--- a/html/cgi-bin/samba.cgi
+++ b/html/cgi-bin/samba.cgi
@@ -5,7 +5,6 @@
# This code is distributed under the terms of the GPL
#
# (c) The IPFire Team
-#
use strict;
# enable only the following on debugging purpose
@@ -17,39 +16,60 @@ require "${General::swroot}/lang.pl";
require "${General::swroot}/header.pl";
my %sambasettings = ();
+my %cgisettings = ();
my %checked = ();
my %netsettings = ();
my %ovpnsettings = ();
my $message = "";
my $errormessage = "";
-my $shareentry = "";
-my @shares = ();
-my @shareline = ();
-my $shareconfigentry = "";
-my @sharesconfig = ();
-my @shareconfigline = ();
+my @Logs = qx(ls /var/log/samba/);
+my $Log =$Lang::tr{'no log selected'};
+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 $userentry = "";
my @user = ();
my @userline = ();
my @proto = ();
my %selected= () ;
-my $sharefile = "/var/ipfire/samba/shares";
my $userfile = "/var/ipfire/samba/private/smbpasswd";
&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
&General::readhash("${General::swroot}/ovpn/settings", \%ovpnsettings);
-my %servicenames =
-(
- 'SMB Daemon' => 'smbd',
- 'NetBIOS Nameserver' => 'nmbd',
- 'Winbind Daemon' => 'winbindd'
-);
+############################################################################################################################
+############################################# Samba Dienste fr Statusberprfung ##########################################
+
+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);
+$Status=~s/\n/
/g;
+
+@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.0';
$sambasettings{'INTERFACES'} = '';
$sambasettings{'SECURITY'} = 'share';
$sambasettings{'OSLEVEL'} = '65';
@@ -57,14 +77,28 @@ $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{'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{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE';
### Values that have to be initialized
$sambasettings{'ACTION'} = '';
+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);
@@ -73,16 +107,112 @@ $sambasettings{'ACTION'} = '';
&Header::openbigbox('100%', 'left', '', $errormessage);
############################################################################################################################
+############################################# Samba Rootskript aufrufe fr 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 '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 'smbreload'){system("/usr/local/bin/sambactrl smbreload");}
+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{'PASSWORDSYNC'} = 'off';
+ $sambasettings{'OTHERINTERFACES'} = '127.0.0.1';
+ $sambasettings{'GUESTACCOUNT'} = 'samba';
+ $sambasettings{'MAPTOGUEST'} = 'Never';
+ $sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2';
+### Values that have to be initialized
+ $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");
+ }
+
+# smbsafeconf is directly called by the if clause
+
+if ($sambasettings{'ACTION'} eq 'sharesresetyes')
+{
+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]);
+ }
+ system("/usr/local/bin/sambactrl smbreload");
+}
+
+############################################################################################################################
+################################################ Sicherheitsabfrage für den Reset ##########################################
+
+if ($sambasettings{'ACTION'} eq 'globalreset')
+ {
+ print <
+
+ $Lang::tr{'resetglobals'}
+ |
|
+ |
+
+
+END
+;
+}
+
+if ($sambasettings{'ACTION'} eq 'sharesreset')
+ {
+ print <
+
+ $Lang::tr{'resetshares'}
+ |
|
+ |
+
+
+END
+;
+ }
+
############################################################################################################################
+########################################### Samba Benutzer oder PC l�chen #################################################
-if ($sambasettings{'ACTION'} eq 'smbuserdisable'){system('/usr/local/bin/sambactrl 1 $sambasettings{"NAME"}');}
-if ($sambasettings{'ACTION'} eq 'smbuserenable'){system('/usr/local/bin/sambactrl 2 $sambasettings{"NAME"}');}
-if ($sambasettings{'ACTION'} eq 'smbuserdelete'){system('/usr/local/bin/sambactrl 3 $sambasettings{"NAME"}');}
-if ($sambasettings{'ACTION'} eq 'smbuseradd'){system('/usr/local/bin/sambactrl 4 $username $password');}
-if ($sambasettings{'ACTION'} eq 'smbchangepw'){system('/usr/local/bin/sambactrl 5 $username $password');}
-if ($sambasettings{'ACTION'} eq 'smbsharechange'){system('/usr/local/bin/sambactrl 7 $sambasettings{"SHARENAME"} $sambasettings{"SHAREOPTION"}');}
-if ($sambasettings{'ACTION'} eq 'smbstart'){system('/usr/local/bin/sambactrl 8');}
-if ($sambasettings{'ACTION'} eq 'smbstop'){system('/usr/local/bin/sambactrl 9');}
+if ($sambasettings{'ACTION'} eq 'userdelete'){system("/usr/local/bin/sambactrl smbuserdelete $sambasettings{'NAME'}");}
############################################################################################################################
############################################## Samba Share neu anlegen #####################################################
@@ -90,7 +220,6 @@ if ($sambasettings{'ACTION'} eq 'smbstop'){system('/usr/local/bin/sambactrl 9');
if ($sambasettings{'ACTION'} eq 'smbshareadd')
{
my $emptyline= "";
- system('/usr/local/bin/sambactrl 6');
open (FILE, ">>${General::swroot}/samba/shares") or die "Can't save the shares settings: $!";
flock (FILE, 2);
@@ -100,72 +229,241 @@ $emptyline
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]);
+ }
+system("/usr/local/bin/sambactrl smbreload");
}
############################################################################################################################
+################################################## 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 <${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/pdc") or die "Can't save the pdc settings: $!";
+ flock (FILE, 2);
+ print FILE <
-
-END
-;
- if ( $message ne "" ) {
- print "$message";
- }
-print <Alle Dienste | |
-
-END
-;
- my $key = '';
- foreach $key (sort keys %servicenames)
- {
- print "$key";
- my $shortname = $servicenames{$key};
- my $status = &isrunning($shortname);
- print "$status | ";
- print <
-END
-;
- }
- 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 <
+
+
+
+