]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/samba.cgi
samba: Add GUI functionality to join a domain.
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / samba.cgi
index 4d9091448494a84671a878adc6a8731ed557a479..b9bf9f3f3933974dd7310e34ec9090b00753fb20 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2005-2013  IPFire Team  <info@ipfire.org>                     #
 #                                                                             #
 # 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        #
@@ -67,8 +67,7 @@ $ovpnip[3]=$ovpnip[3]+1;
 ############################################################################################################################
 ############################################# Samba Dienste fr Statusberprfung ##########################################
 
-my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd');
-#my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd','Winbind Daemon' => 'winbindd');
+my %servicenames = ('SMB Daemon' => 'smbd', 'NetBIOS Nameserver' => 'nmbd', 'Winbind Daemon' => 'winbindd');
 
 &Header::showhttpheaders();
 
@@ -77,7 +76,7 @@ my %servicenames = ('SMB Daemon' => 'smbd','NetBIOS Nameserver' => 'nmbd');
 
 $sambasettings{'WORKGRP'} = 'homeip.net';
 $sambasettings{'NETBIOSNAME'} = 'IPFire';
-$sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.5';
+$sambasettings{'SRVSTRING'} = 'Samba running on IPFire 2.x';
 $sambasettings{'INTERFACES'} = '';
 $sambasettings{'SECURITY'} = 'share';
 $sambasettings{'OSLEVEL'} = '33';
@@ -92,16 +91,17 @@ $sambasettings{'REMOTESYNC'} = '';
 $sambasettings{'PASSWORDSYNC'} = 'off';
 $sambasettings{'OTHERINTERFACES'} = '127.0.0.1';
 $sambasettings{'GUESTACCOUNT'} = 'samba';
-$sambasettings{'MAPTOGUEST'} = 'Never';
+$sambasettings{'MAPTOGUEST'} = 'Bad User';
 $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{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=819200 SO_SNDBUF=819200 SO_KEEPALIVE';
 $sambasettings{'WIDELINKS'} = 'on';
 $sambasettings{'UNIXEXTENSION'} = 'off';
+$sambasettings{'SMB2'} = 'off';
 ### Values that have to be initialized
 $sambasettings{'ACTION'} = '';
 ### Samba CUPS Variablen
@@ -148,7 +148,7 @@ 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{'SRVSTRING'} = 'Samba running on IPFire 2.x';
        $sambasettings{'INTERFACES'} = '';
        $sambasettings{'SECURITY'} = 'share';
        $sambasettings{'OSLEVEL'} = '65';
@@ -163,7 +163,7 @@ if ($sambasettings{'ACTION'} eq 'globalresetyes')
        $sambasettings{'PASSWORDSYNC'} = 'off';
        $sambasettings{'OTHERINTERFACES'} = '127.0.0.1';
        $sambasettings{'GUESTACCOUNT'} = 'samba';
-       $sambasettings{'MAPTOGUEST'} = 'Never';
+       $sambasettings{'MAPTOGUEST'} = 'Bad User';
        $sambasettings{'LOGLEVEL'} = '3 passdb:5 auth:5 winbind:2';
        $sambasettings{'SYSLOGLEVEL'} = '1';
        $sambasettings{'SYSLOGONLY'} = 'on';
@@ -182,12 +182,19 @@ if ($sambasettings{'ACTION'} eq 'globalresetyes')
        $sambasettings{'LOCALMASTER'} = 'off';
        $sambasettings{'DOMAINMASTER'} = 'off';
        $sambasettings{'PREFERREDMASTER'} = 'off';
-       $sambasettings{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 SO_KEEPALIVE';
+       $sambasettings{'SOCKETOPTIONS'} = 'TCP_NODELAY SO_RCVBUF=819200 SO_SNDBUF=819200 SO_KEEPALIVE';
+       $sambasettings{'WIDELINKS'} = 'on';
+       $sambasettings{'UNIXEXTENSION'} = 'off';
+       $sambasettings{'SMB2'} = 'off';
        $PDCOPTIONS = `cat ${General::swroot}/samba/pdc`;
        system("/usr/local/bin/sambactrl smbreload");
        refreshpage();
        }
 
+if ($sambasettings{'ACTION'} eq 'join') {
+       $message .= &joindomain($sambasettings{'USERNAME'}, $sambasettings{'PASSWORD'});
+}
+
 ############################################################################################################################
 ################################################ Sicherheitsabfrage für den Reset ##########################################
 
@@ -272,11 +279,19 @@ print FILE <<END
 netbios name = $sambasettings{'NETBIOSNAME'}
 server string = $sambasettings{'SRVSTRING'}
 workgroup = $sambasettings{'WORKGRP'}
+realm = $mainsettings{'DOMAINNAME'}
 passdb backend = smbpasswd
 
 wide links = $sambasettings{'WIDELINKS'}
 unix extensions = $sambasettings{'UNIXEXTENSION'}
+END
+;
+
+if ($sambasettings{'SMB2'} eq 'on'){
+       print FILE "max protocol = smb2\n";
+}
 
+print FILE <<END
 keep alive = 30
 os level = $sambasettings{'OSLEVEL'}
 fstype = NTFS
@@ -304,6 +319,11 @@ username level = 1
 wins support = $sambasettings{'WINSSUPPORT'}
 wins server = $sambasettings{'WINSSRV'}
 
+winbind separator = +
+winbind uid = 10000-20000
+winbind gid = 10000-20000
+winbind use default domain = yes
+
 log file       = /var/log/samba/samba-log.%m
 lock directory = /var/lock/samba
 pid directory  = /var/run/
@@ -373,6 +393,15 @@ if ($errormessage)
        &Header::closebox();
        }
 
+if ($message) {
+       $message = &Header::cleanhtml($message);
+       $message =~ s/\n/<br>/g;
+
+       &Header::openbox('100%', 'left', $Lang::tr{'messages'});
+       print "$message\n";
+       &Header::closebox();
+}
+
 ############################################################################################################################
 ########################################## Aktivieren von Checkboxen und Dropdowns #########################################
 
@@ -400,6 +429,9 @@ $checked{'WIDELINKS'}{$sambasettings{'WIDELINKS'}} = "checked='checked'";
 $checked{'UNIXEXTENSION'}{'off'} = '';
 $checked{'UNIXEXTENSION'}{'on'} = '';
 $checked{'UNIXEXTENSION'}{$sambasettings{'UNIXEXTENSION'}} = "checked='checked'";
+$checked{'SMB2'}{'off'} = '';
+$checked{'SMB2'}{'on'} = '';
+$checked{'SMB2'}{$sambasettings{'SMB2'}} = "checked='checked'";
 $checked{'GREEN'}{'off'} = '';
 $checked{'GREEN'}{'on'} = '';
 $checked{'GREEN'}{$sambasettings{'GREEN'}} = "checked='checked'";
@@ -413,6 +445,9 @@ $checked{'VPN'}{'off'} = '';
 $checked{'VPN'}{'on'} = '';
 $checked{'VPN'}{$sambasettings{'VPN'}} = "checked='checked'";
 
+if ( $sambasettings{'MAPTOGUEST'} eq "Never" ) {
+       $sambasettings{'MAPTOGUEST'}="Bad User";
+}
 $selected{'MAPTOGUEST'}{$sambasettings{'MAPTOGUEST'}} = "selected='selected'";
 $selected{'SECURITY'}{$sambasettings{'SECURITY'}} = "selected='selected'";
 
@@ -423,14 +458,6 @@ $selected{'SECURITY'}{$sambasettings{'SECURITY'}} = "selected='selected'";
 print <<END
 <br />
 <table width='95%' cellspacing='0'>
-END
-;
-if ( $message ne "" )
-       {
-       print "<tr><td colspan='3' align='left'><font color='red'>$message</font>";
-       }
-
-print <<END
 <tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'all services'}</b></td></tr>
 </table><table width='95%' cellspacing='0'>
 END
@@ -504,6 +531,8 @@ print <<END
                                                                                                                                                                                        <input type='radio' name='WIDELINKS' value='off' $checked{'WIDELINKS'}{'off'} /> off</td></tr>
 <tr><td align='left' width='40%'>Unix extension</td><td align='left'>on <input type='radio' name='UNIXEXTENSION' value='on' $checked{'UNIXEXTENSION'}{'on'} />/
                                                                                                                                                                                        <input type='radio' name='UNIXEXTENSION' value='off' $checked{'UNIXEXTENSION'}{'off'} /> off</td></tr>
+<tr><td align='left' width='40%'>SMB2 $Lang::tr{'protocol'}</td><td align='left'>on <input type='radio' name='SMB2' value='on' $checked{'SMB2'}{'on'} />/
+                                                                                                                                                                                       <input type='radio' name='SMB2' value='off' $checked{'SMB2'}{'off'} /> off</td></tr>
 <tr><td align='left'><br /></td><td></td></tr>
 <tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'security options'}</b></td></tr>
 <tr><td align='left' width='40%'>$Lang::tr{'security'}</td><td align='left'><select name='SECURITY' style="width: 165px">
@@ -514,7 +543,6 @@ print <<END
                                                                                                                                                                <option value='server' $selected{'SECURITY'}{'server'}>Server</option>
                                                                                                                                                                </select></td></tr>
 <tr><td align='left' width='40%'>$Lang::tr{'map to guest'}</td><td align='left'><select name='MAPTOGUEST' style="width: 165px">
-                                                                                                                                                                               <option value='Never' $selected{'MAPTOGUEST'}{'Never'}>Never</option>
                                                                                                                                                                                <option value='Bad User' $selected{'MAPTOGUEST'}{'Bad User'}>Bad User</option>
                                                                                                                                                                                <option value='Bad Password' $selected{'MAPTOGUEST'}{'Bad Password'}>Bad Password</option>
                                                                                                                                                                                </select></td></tr>
@@ -620,7 +648,7 @@ if ($sambasettings{'SECURITY'} eq 'user')
                &Header::openbox('100%', 'center', $Lang::tr{'accounting user pdc'});
                }
        print <<END
-       <a name="$Lang::tr{'accounting'}"</a>
+       <a name="$Lang::tr{'accounting'}"></a>
        <br />
        <table width='95%' cellspacing='0'>
        <tr><td colspan='6' align='left'></td></tr>
@@ -798,10 +826,10 @@ END
                <form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'accounting'}'>
                <table width='95%' cellspacing='0'>
                <tr bgcolor='$color{'color20'}'><td colspan='2' align='left'><b>$Lang::tr{'change passwords'}</b></td></tr>
-               <tr><td align='left'>$Lang::tr{'username'}</td><td><input type='text' name='USERNAME' value='$username' size='30' readonly /></td></tr>
+               <tr><td align='left'>$Lang::tr{'username'}</td><td><input type='text' name='USERNAME' value='$username' size='30' readonly='readonly' /></td></tr>
                <tr><td align='left'>$Lang::tr{'password'}</td><td><input type='password' name='PASSWORD' value='$password' size='30' /></td></tr>
                <tr><td colspan='2' align='center'><input type='hidden' name='ACTION' value='smbchangepw' />
-                                                                                                                                                               <input type='image' alt=$Lang::tr{'save'} title=$Lang::tr{'save'} src='/images/media-floppy.png' /></td></tr>
+                       <input type='image' alt='$Lang::tr{'save'}' title='$Lang::tr{'save'}' src='/images/media-floppy.png' /></td></tr>
                </table>
                </form>
 END
@@ -826,7 +854,7 @@ END
                <tr><td align='left'>$Lang::tr{'unix group'}</td><td><input type='text' name='GROUP' value='sambauser' size='30' /></td></tr>
                <tr><td align='left'>$Lang::tr{'unix shell'}</td><td><input type='text' name='SHELL' value='/bin/false' size='30' /></td></tr>
                <tr><td colspan='2' align='center'><input type='hidden' name='ACTION' value='smbuseradd' />
-                                                                                                                                                               <input type='image' alt=$Lang::tr{'save'} title=$Lang::tr{'save'} src='/images/media-floppy.png' /></td></tr>
+                       <input type='image' alt='$Lang::tr{'save'}' title='$Lang::tr{'save'}' src='/images/media-floppy.png' /></td></tr>
                </table>
                </form>
 END
@@ -847,7 +875,7 @@ END
                <tr><td align='left'>$Lang::tr{'unix group'}</td><td><input type='text' name='GROUP' value='sambawks' size='30' /></td></tr>
                <tr><td align='left'>$Lang::tr{'unix shell'}</td><td><input type='text' name='SHELL' value='/bin/false' size='30' /></td></tr>
                <tr><td colspan='2' align='center'><input type='hidden' name='ACTION' value='smbpcadd' />
-                                                                                                                                                               <input type='image' title=$Lang::tr{'save'} alt=$Lang::tr{'save'} src='/images/media-floppy.png' /></td></tr>
+                       <input type='image' alt='$Lang::tr{'save'}' title='$Lang::tr{'save'}' src='/images/media-floppy.png' /></td></tr>
                </table>
                </form>
 END
@@ -857,6 +885,55 @@ END
 &Header::closebox();
 }
 
+if ($sambasettings{'SECURITY'} eq "ADS") {
+       &Header::openbox('100%', 'center', $Lang::tr{'samba join a domain'});
+
+       my $AD_DOMAINNAME = uc($mainsettings{'DOMAINNAME'});
+
+       print <<END;
+       <form method="POST" action="$ENV{'SCRIPT_NAME'}">
+               <input type="hidden" name="ACTION" value="join">
+
+               <table width="95%">
+                       <tbody>
+                               <tr>
+                                       <td width="40%">
+                                               $Lang::tr{'domain'}
+                                       </td>
+                                       <td>
+                                               $AD_DOMAINNAME
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td width="40%">
+                                               $Lang::tr{'administrator username'}
+                                       </td>
+                                       <td>
+                                               <input type="text" name="USERNAME" size="30">
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td width="40%">
+                                               $Lang::tr{'administrator password'}
+                                       </td>
+                                       <td>
+                                               <input type="password" name="PASSWORD" size="30">
+                                       </td>
+                               </tr>
+                               <tr>
+                                       <td></td>
+                                       <td>
+                                               <input type="submit" value="$Lang::tr{'samba join domain'}">
+                                       </td>
+                               </tr>
+                       </tbody>
+               </table>
+       </form>
+END
+
+       &Header::closebox();
+}
+
 ############################################################################################################################
 ############################################### Verwalten von Freigaben ####################################################
 
@@ -866,29 +943,35 @@ my %shares =  config("${General::swroot}/samba/shares");
 
 
 print <<END
-<a name="$Lang::tr{'manage shares'}"</a>
+<a name="$Lang::tr{'manage shares'}"></a>
 <br />
-<table width='95%' cellspacing='0'>
-<tr><td bgcolor='$color{'color20'}' colspan='3' align='left'><b>$Lang::tr{'manage shares'}</b>
-<tr><td align='left'><u>$Lang::tr{'sharename'}</u></td><td colspan='2' width="5%" align='center'><u>$Lang::tr{'options'}</u></td></tr>
+<table width='95%' cellspacing='0' class='tbl'>
+<tr><th bgcolor='$color{'color20'}' colspan='3' align='left'><b>$Lang::tr{'manage shares'}</b></th></tr>
+<tr><th align='left'><u>$Lang::tr{'sharename'}</u></th><th colspan='2' width="5%" align='center'><u>$Lang::tr{'options'}</u></th></tr>
 END
 ;
 
 my @Shares = keys(%shares);
 my $lines = 0;
-
+my $col="";
 foreach my $shareentry (sort @Shares)
        {
        chomp $shareentry;
-       if ($lines % 2) {print "<tr bgcolor='$color{'color20'}'>";} else {print "<tr bgcolor='$color{'color22'}'>";}
+       if ($lines % 2) {
+               print "<tr>";
+               $col="bgcolor='$color{'color20'}'";
+       } else {
+               print "<tr>";
+               $col="bgcolor='$color{'color22'}'";
+       }
        print <<END
-       <td align='left'>$shareentry</td>
-       <td><form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'manage shares'}'>
+       <td align='left' $col>$shareentry</td>
+       <td $col><form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'manage shares'}'>
                        <input type='hidden' name='NAME' value='$shareentry' />
                        <input type='hidden' name='ACTION' value='sharechange' />
                        <input type='image' alt='$Lang::tr{'edit'}' title='$Lang::tr{'edit'}' src='/images/edit.gif' />
        </form></td>
-       <td><form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'manage shares'}'>
+       <td $col><form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'manage shares'}'>
                        <input type='hidden' name='NAME' value='$shareentry' />
                        <input type='hidden' name='ACTION' value='smbsharedel' />
                        <input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/user-trash.png' />
@@ -1014,7 +1097,7 @@ if ( -e "/var/ipfire/cups/enable")
 
 my @Printers = keys(%printer);
 print <<END
-<a name="$Lang::tr{'manage printers'}"</a>
+<a name="$Lang::tr{'manage printers'}"></a>
 <br />
 <table width='95%' cellspacing='0'>
 <tr><td bgcolor='$color{'color20'}' colspan='3' align='left'><b>$Lang::tr{'manage printers'}</b>
@@ -1154,7 +1237,7 @@ $Log=~s/\n/<br \/>/g;
 &Header::openbox('100%', 'center', $Lang::tr{'log'});
 
 print <<END
-<a name="$Lang::tr{'log view'}"</a>
+<a name="$Lang::tr{'log view'}"></a>
 <br />
 <form method='post' action='$ENV{'SCRIPT_NAME'}#$Lang::tr{'log view'}'>
 <table width='95%' cellspacing='0'>
@@ -1280,3 +1363,13 @@ sub isrunning
                }
        return $status;
        }
+
+sub joindomain {
+       my $username = shift;
+       my $password = shift;
+
+       my @options = ("/usr/local/bin/sambactrl", "join", $username, $password);
+       my $output = qx(@options);
+
+       return $output;
+}