4 'require tools.widgets as widgets';
9 L
.resolveDefault(fs
.stat('/sbin/block'), null),
10 L
.resolveDefault(fs
.stat('/etc/config/fstab'), null),
11 L
.resolveDefault(fs
.stat('/usr/sbin/nmbd'), {}),
12 L
.resolveDefault(fs
.stat('/usr/sbin/samba'), {}),
13 L
.resolveDefault(fs
.stat('/usr/sbin/winbindd'), {}),
14 L
.resolveDefault(fs
.exec('/usr/sbin/smbd', ['-V']), null),
17 render: function(stats
) {
21 m
= new form
.Map('samba4', _('Network Shares'));
23 if (stats
[5] && stats
[5].code
=== 0) {
24 v
= stats
[5].stdout
.trim();
26 s
= m
.section(form
.TypedSection
, 'samba', 'Samba ' + v
);
29 s
.tab('general', _('General Settings'));
30 s
.tab('template', _('Edit Template'));
32 s
.taboption('general', widgets
.NetworkSelect
, 'interface', _('Interface'),
33 _('Listen only on the given interface or, if unspecified, on lan'));
35 o
= s
.taboption('general', form
.Value
, 'workgroup', _('Workgroup'));
36 o
.placeholder
= 'WORKGROUP';
38 o
= s
.taboption('general', form
.Value
, 'description', _('Description'));
39 o
.placeholder
= 'Samba4 on OpenWrt';
41 s
.taboption('general', form
.Flag
, 'disable_async_io', _('Force synchronous I/O'),
42 _('On lower-end devices may increase speeds, by forceing synchronous I/O instead of the default asynchronous.'));
44 o
= s
.taboption('general', form
.Flag
, 'macos', _('Enable macOS compatible shares'),
45 _('Enables Apple\'s AAPL extension globally and adds macOS compatibility options to all shares.'));
47 if (stats
[2].type
=== 'file') {
48 s
.taboption('general', form
.Flag
, 'disable_netbios', _('Disable Netbios'))
50 if (stats
[3].type
=== 'file') {
51 s
.taboption('general', form
.Flag
, 'disable_ad_dc', _('Disable Active Directory Domain Controller'))
53 if (stats
[4].type
=== 'file') {
54 s
.taboption('general', form
.Flag
, 'disable_winbind', _('Disable Winbind'))
57 o
= s
.taboption('template', form
.TextValue
, '_tmpl',
58 _('Edit the template that is used for generating the samba configuration.'),
59 _("This is the content of the file '/etc/samba/smb.conf.template' from which your samba configuration will be generated. \
60 Values enclosed by pipe symbols ('|') should not be changed. They get their values from the 'General Settings' tab."));
62 o
.cfgvalue = function(section_id
) {
63 return fs
.trimmed('/etc/samba/smb.conf.template');
65 o
.write = function(section_id
, formvalue
) {
66 return fs
.write('/etc/samba/smb.conf.template', formvalue
.trim().replace(/\r\n/g
, '\n') + '\n');
70 s
= m
.section(form
.TableSection
, 'sambashare', _('Shared Directories'),
71 _('Please add directories to share. Each directory refers to a folder on a mounted device.'));
75 s
.option(form
.Value
, 'name', _('Name'));
76 o
= s
.option(form
.Value
, 'path', _('Path'));
77 if (stats
[0] && stats
[1]) {
78 o
.titleref
= L
.url('admin', 'system', 'mounts');
81 o
= s
.option(form
.Flag
, 'browseable', _('Browse-able'));
86 o
= s
.option(form
.Flag
, 'read_only', _('Read-only'));
91 s
.option(form
.Flag
, 'force_root', _('Force Root'));
93 o
= s
.option(form
.Value
, 'users', _('Allowed users'));
96 o
= s
.option(form
.Flag
, 'guest_ok', _('Allow guests'));
101 o
= s
.option(form
.Flag
, 'guest_only', _('Guests only'));
106 o
= s
.option(form
.Flag
, 'inherit_owner', _('Inherit owner'));
111 o
= s
.option(form
.Value
, 'create_mask', _('Create mask'));
114 o
.placeholder
= '0666';
116 o
= s
.option(form
.Value
, 'dir_mask', _('Directory mask'));
119 o
.placeholder
= '0777';
121 o
= s
.option(form
.Value
, 'vfs_objects', _('Vfs objects'));
124 s
.option(form
.Flag
, 'timemachine', _('Apple Time-machine share'));
126 o
= s
.option(form
.Value
, 'timemachine_maxsize', _('Time-machine size in GB'));