mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-20 10:34:30 +00:00
samba: fixes and improvements
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
598bcb6fbb
commit
dbdd482e61
@ -24,6 +24,7 @@ import configparser
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
import stat
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
import augeas
|
import augeas
|
||||||
@ -93,6 +94,11 @@ def parse_arguments():
|
|||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def _close_share(share_name):
|
||||||
|
"""Disconnect all samba users who are connected to the share."""
|
||||||
|
subprocess.check_call(['smbcontrol', 'smbd', 'close-share', share_name])
|
||||||
|
|
||||||
|
|
||||||
def _conf_command(parameters, **kwargs):
|
def _conf_command(parameters, **kwargs):
|
||||||
"""Run samba configuration registry command."""
|
"""Run samba configuration registry command."""
|
||||||
subprocess.check_call(['net', 'conf'] + parameters, **kwargs)
|
subprocess.check_call(['net', 'conf'] + parameters, **kwargs)
|
||||||
@ -103,6 +109,8 @@ def _create_share(mount_point, windows_filesystem=False):
|
|||||||
open_share_path = os.path.join(mount_point, SHARES_PATH, 'open_share')
|
open_share_path = os.path.join(mount_point, SHARES_PATH, 'open_share')
|
||||||
os.makedirs(open_share_path, exist_ok=True)
|
os.makedirs(open_share_path, exist_ok=True)
|
||||||
|
|
||||||
|
_make_mounts_readable_by_others(mount_point)
|
||||||
|
|
||||||
# FAT and NTFS partitions don't support chown and chmod
|
# FAT and NTFS partitions don't support chown and chmod
|
||||||
if not windows_filesystem:
|
if not windows_filesystem:
|
||||||
shutil.chown(open_share_path, group='sambashare')
|
shutil.chown(open_share_path, group='sambashare')
|
||||||
@ -112,6 +120,15 @@ def _create_share(mount_point, windows_filesystem=False):
|
|||||||
_define_open_share(share_name, open_share_path, windows_filesystem)
|
_define_open_share(share_name, open_share_path, windows_filesystem)
|
||||||
|
|
||||||
|
|
||||||
|
def _create_share_name(mount_point):
|
||||||
|
"""Create a share name."""
|
||||||
|
share_name = os.path.basename(mount_point)
|
||||||
|
if not share_name:
|
||||||
|
share_name = 'disk'
|
||||||
|
|
||||||
|
return share_name
|
||||||
|
|
||||||
|
|
||||||
def _define_open_share(name, path, windows_filesystem=False):
|
def _define_open_share(name, path, windows_filesystem=False):
|
||||||
"""Define an open samba share."""
|
"""Define an open samba share."""
|
||||||
try:
|
try:
|
||||||
@ -124,20 +141,10 @@ def _define_open_share(name, path, windows_filesystem=False):
|
|||||||
_conf_command(['setparm', name, 'inherit permissions', 'yes'])
|
_conf_command(['setparm', name, 'inherit permissions', 'yes'])
|
||||||
|
|
||||||
|
|
||||||
def _create_share_name(mount_point):
|
|
||||||
"""Create a share name."""
|
|
||||||
share_name = os.path.basename(mount_point)
|
|
||||||
if not share_name:
|
|
||||||
share_name = "disk"
|
|
||||||
|
|
||||||
return share_name
|
|
||||||
|
|
||||||
|
|
||||||
def _get_shares():
|
def _get_shares():
|
||||||
"""Get shares"""
|
"""Get shares."""
|
||||||
shares = []
|
shares = []
|
||||||
command = ['net', 'conf', 'list']
|
output = subprocess.check_output(['net', 'conf', 'list'])
|
||||||
output = subprocess.check_output(command)
|
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read_string(output.decode())
|
config.read_string(output.decode())
|
||||||
for name in config.sections():
|
for name in config.sections():
|
||||||
@ -148,6 +155,13 @@ def _get_shares():
|
|||||||
return shares
|
return shares
|
||||||
|
|
||||||
|
|
||||||
|
def _make_mounts_readable_by_others(mount_point):
|
||||||
|
"""Make mounted devices readable/traversible by others."""
|
||||||
|
dirname = os.path.dirname(mount_point)
|
||||||
|
stats = os.stat(dirname)
|
||||||
|
os.chmod(dirname, stats.st_mode | stat.S_IROTH | stat.S_IXOTH)
|
||||||
|
|
||||||
|
|
||||||
def _use_config_file(conf_file):
|
def _use_config_file(conf_file):
|
||||||
"""Set samba configuration file location."""
|
"""Set samba configuration file location."""
|
||||||
aug = augeas.Augeas(
|
aug = augeas.Augeas(
|
||||||
@ -182,13 +196,12 @@ def subcommand_delete_share(arguments):
|
|||||||
shares = _get_shares()
|
shares = _get_shares()
|
||||||
for share in shares:
|
for share in shares:
|
||||||
if share['mount_point'] == mount_point:
|
if share['mount_point'] == mount_point:
|
||||||
|
_close_share(share['name'])
|
||||||
_conf_command(['delshare', share['name']])
|
_conf_command(['delshare', share['name']])
|
||||||
# restart samba to disconnect all users
|
|
||||||
action_utils.service_restart('smbd')
|
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
'Mount path "{0}" is not shared.'.format(mount_point))
|
'Mount point "{0}" is not shared.'.format(mount_point))
|
||||||
|
|
||||||
|
|
||||||
def subcommand_get_shares(_):
|
def subcommand_get_shares(_):
|
||||||
@ -197,7 +210,7 @@ def subcommand_get_shares(_):
|
|||||||
|
|
||||||
|
|
||||||
def subcommand_setup(_):
|
def subcommand_setup(_):
|
||||||
"""Configure samba. Use custom samba config file."""
|
"""Configure samba, use custom samba config file."""
|
||||||
with open(CONF_PATH, 'w') as file_handle:
|
with open(CONF_PATH, 'w') as file_handle:
|
||||||
file_handle.write(CONF)
|
file_handle.write(CONF)
|
||||||
_use_config_file(CONF_PATH)
|
_use_config_file(CONF_PATH)
|
||||||
|
|||||||
7
debian/copyright
vendored
7
debian/copyright
vendored
@ -172,6 +172,13 @@ Copyright: Thomas B. (https://github.com/thomascube)
|
|||||||
Comment: https://raw.githubusercontent.com/roundcube/roundcubemail/master/skins/elastic/images/logo.svg
|
Comment: https://raw.githubusercontent.com/roundcube/roundcubemail/master/skins/elastic/images/logo.svg
|
||||||
License: CC-BY-SA-3.0
|
License: CC-BY-SA-3.0
|
||||||
|
|
||||||
|
Files: static/themes/default/icons/samba.png
|
||||||
|
static/themes/default/icons/samba.svg
|
||||||
|
Copyright: None
|
||||||
|
Comment: 2010 Samba Team
|
||||||
|
https://commons.wikimedia.org/wiki/File:Samba_logo_2010.svg
|
||||||
|
License: public-domain
|
||||||
|
|
||||||
Files: static/themes/default/icons/searx.png
|
Files: static/themes/default/icons/searx.png
|
||||||
static/themes/default/icons/searx.svg
|
static/themes/default/icons/searx.svg
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|||||||
@ -41,11 +41,11 @@ managed_packages = ['samba']
|
|||||||
|
|
||||||
name = _('Samba')
|
name = _('Samba')
|
||||||
|
|
||||||
short_description = _('Samba File Sharing')
|
short_description = _('File Sharing')
|
||||||
|
|
||||||
description = [
|
description = [
|
||||||
_('Samba allows to share files and folders between computers in your '
|
_('Samba allows to share files and folders between FreedomBox and '
|
||||||
'local network.'),
|
'other computers in your local network.'),
|
||||||
format_lazy(
|
format_lazy(
|
||||||
_('After installation, you can choose which disks to use for sharing. '
|
_('After installation, you can choose which disks to use for sharing. '
|
||||||
'Enabled {hostname} shares are open to everyone in your local '
|
'Enabled {hostname} shares are open to everyone in your local '
|
||||||
|
|||||||
@ -35,11 +35,11 @@
|
|||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
|
|
||||||
{% if is_enabled %}
|
{% if is_enabled %}
|
||||||
<h3>{% trans "Select devices for sharing:" %}</h3>
|
<h3>{% trans "Select disks for sharing" %}</h3>
|
||||||
<p>
|
<p>
|
||||||
{% blocktrans trimmed %}
|
{% blocktrans trimmed %}
|
||||||
NB! Selecting device does not share the whole disk, only the folder
|
NB! Only the directory FreedomBox/shares/open_share will be shared on
|
||||||
FreedomBox/shares/open_share will be shared on that disk.
|
selected disks. The directory will be created if it doesn't exist.
|
||||||
{% endblocktrans %}
|
{% endblocktrans %}
|
||||||
</p>
|
</p>
|
||||||
<table class="table table-bordered table-condensed table-striped">
|
<table class="table table-bordered table-condensed table-striped">
|
||||||
@ -71,7 +71,10 @@
|
|||||||
<input type="hidden" value="{{ disk.filesystem_type }}"
|
<input type="hidden" value="{{ disk.filesystem_type }}"
|
||||||
name="filesystem_type">
|
name="filesystem_type">
|
||||||
<input type="checkbox" value="{{ disk.mount_point }}"
|
<input type="checkbox" value="{{ disk.mount_point }}"
|
||||||
name="mount_point" autocomplete="off"/>
|
name="mount_point" autocomplete="off"
|
||||||
|
{% if disk.filesystem_type == 'vfat' %}
|
||||||
|
title='{% trans "vfat partitions are not supported" %}' disabled
|
||||||
|
{% endif %}/>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
@ -102,11 +105,9 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if unavailable_shares %}
|
{% if unavailable_shares %}
|
||||||
<h3>Shares configured but the disk is not available:</h3>
|
<h3>{% trans "Shares configured but the disk is not available" %}</h3>
|
||||||
<p>
|
<p>
|
||||||
{% blocktrans trimmed %}
|
{% trans "If the disk is plugged back in, sharing will be automatically enabled." %}
|
||||||
If the disk is plugged back in, sharing will be automatically enabled.
|
|
||||||
{% endblocktrans %}
|
|
||||||
</p>
|
</p>
|
||||||
<table class="table table-bordered table-condensed table-striped">
|
<table class="table table-bordered table-condensed table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
|||||||
@ -36,6 +36,7 @@ class SambaAppView(views.AppView):
|
|||||||
"""Samba sharing basic configuration."""
|
"""Samba sharing basic configuration."""
|
||||||
name = samba.name
|
name = samba.name
|
||||||
description = samba.description
|
description = samba.description
|
||||||
|
diagnostics_module_name = 'samba'
|
||||||
app_id = 'samba'
|
app_id = 'samba'
|
||||||
template_name = 'samba.html'
|
template_name = 'samba.html'
|
||||||
|
|
||||||
|
|||||||
BIN
static/themes/default/icons/samba.png
Normal file
BIN
static/themes/default/icons/samba.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.5 KiB |
88
static/themes/default/icons/samba.svg
Normal file
88
static/themes/default/icons/samba.svg
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.1"
|
||||||
|
width="512"
|
||||||
|
height="512"
|
||||||
|
style="font-size:158px;font-family:DesignSystemC-700;fill:url(#linearGradient8)"
|
||||||
|
id="svg2"
|
||||||
|
sodipodi:docname="samba.svg"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1020"
|
||||||
|
id="namedview13"
|
||||||
|
showgrid="false"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:zoom="2"
|
||||||
|
inkscape:cx="211.38382"
|
||||||
|
inkscape:cy="310.44925"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="31"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<metadata
|
||||||
|
id="metadata4">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs6">
|
||||||
|
<linearGradient
|
||||||
|
x1="331.94678"
|
||||||
|
y1="12"
|
||||||
|
x2="331.94678"
|
||||||
|
y2="123"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
id="linearGradient8">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#99a29b;stop-opacity:1"
|
||||||
|
offset="0"
|
||||||
|
id="stop10" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#738777;stop-opacity:1"
|
||||||
|
offset="1"
|
||||||
|
id="stop12" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#linearGradient8"
|
||||||
|
id="linearGradient27"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="331.94678"
|
||||||
|
y1="12"
|
||||||
|
x2="331.94678"
|
||||||
|
y2="123"
|
||||||
|
gradientTransform="matrix(3.5127656,0,0,3.1903866,-2.0368349,35.78584)" />
|
||||||
|
</defs>
|
||||||
|
<path
|
||||||
|
d="M 454.62268,39.375 V 69.88308 H 101.86774 c -19.240578,0 -33.397888,4.37836 -42.51178,13.0681 -9.113951,8.69024 -13.641139,22.03378 -13.641139,40.13778 v 148.28697 c 0,5.56095 1.371946,9.71908 4.17141,12.46243 2.799448,2.66927 7.15311,3.98801 13.063095,3.98798 H 377.12229 c 9.3551,0 15.90694,1.91725 19.64953,5.78257 4.05375,3.86557 6.03729,10.42331 6.03759,19.64082 v 21.03662 c 0,9.19035 -1.99594,15.68718 -6.03759,19.54111 -3.73139,3.85404 -10.32213,5.78258 -19.64953,5.78258 H 56.03357 V 328.50378 L -0.5,395.50188 56.03357,462.5 v -31.10627 h 356.65547 c 24.34224,0 42.36791,-5.456 53.899,-16.45042 11.53034,-10.99435 17.23411,-27.9418 17.2345,-50.84679 v -87.23713 c -3.5e-4,-21.08287 -5.30405,-36.73884 -15.91722,-46.85881 -10.61385,-10.40078 -27.10211,-15.55312 -49.50803,-15.55312 H 152.41508 c -9.01732,0 -15.60745,-1.92821 -19.64954,-5.78257 -4.04229,-3.85399 -6.03757,-10.35034 -6.03757,-19.54113 v -20.93693 c 0,-9.19046 1.99528,-15.78635 6.03757,-19.64079 4.04209,-3.85392 10.63222,-5.78234 19.64954,-5.78257 h 302.2076 v 30.50805 l 56.53357,-66.8984 z"
|
||||||
|
id="path14"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="fill:url(#linearGradient27);stroke-width:3.34769773" />
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.5 KiB |
Loading…
x
Reference in New Issue
Block a user