mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-01 10:34:16 +00:00
nixos/samba, kdePackages.kdenetwork-filesharing: wire up usershares (#355031)
This commit is contained in:
commit
d55ce387db
@ -101,6 +101,19 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
usershares = {
|
||||
enable = lib.mkEnableOption "user-configurable Samba shares";
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "samba";
|
||||
description = ''
|
||||
Name of the group members of which will be allowed to create usershares.
|
||||
|
||||
The group will be created automatically.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
nsswins = lib.mkEnableOption ''
|
||||
WINS NSS (Name Service Switch) plug-in.
|
||||
|
||||
@ -308,5 +321,22 @@ in
|
||||
restartTriggers = [ configFile ];
|
||||
};
|
||||
})
|
||||
|
||||
(lib.mkIf (cfg.enable && cfg.usershares.enable) {
|
||||
users.groups.${cfg.usershares.group} = {};
|
||||
|
||||
systemd.tmpfiles.settings."50-samba-usershares"."/var/lib/samba/usershares".d = {
|
||||
user = "root";
|
||||
group = cfg.usershares.group;
|
||||
mode = "1775"; # sticky so users can't delete others' shares
|
||||
};
|
||||
|
||||
# set some reasonable defaults
|
||||
services.samba.settings.global = lib.mkDefault {
|
||||
"usershare path" = "/var/lib/samba/usershares";
|
||||
"usershare max shares" = 100; # high enough to be considered ~unlimited
|
||||
"usershare allow guests" = true;
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
||||
|
@ -1,14 +1,34 @@
|
||||
{
|
||||
lib,
|
||||
mkKdeDerivation,
|
||||
substituteAll,
|
||||
samba,
|
||||
shadow,
|
||||
qtdeclarative,
|
||||
}:
|
||||
mkKdeDerivation {
|
||||
pname = "kdenetwork-filesharing";
|
||||
|
||||
patches = [ ./smbd-path.patch ];
|
||||
patches = [
|
||||
(substituteAll {
|
||||
src = ./dependency-paths.patch;
|
||||
inherit samba;
|
||||
usermod = lib.getExe' shadow "usermod";
|
||||
})
|
||||
|
||||
# Provide a better looking and more NixOS specific Samba hint
|
||||
# Proposed upstream: https://invent.kde.org/network/kdenetwork-filesharing/-/merge_requests/56
|
||||
./samba-hint.patch
|
||||
];
|
||||
|
||||
extraBuildInputs = [ qtdeclarative ];
|
||||
|
||||
# We can't actually install samba via PackageKit, so let's not confuse users any more than we have to
|
||||
extraCmakeFlags = [ "-DSAMBA_INSTALL=OFF" ];
|
||||
|
||||
# Hardcoded as QStrings, which are UTF-16 so Nix can't pick these up automatically
|
||||
postFixup = ''
|
||||
mkdir -p $out/nix-support
|
||||
echo "${samba} ${shadow}" > $out/nix-support/depends
|
||||
'';
|
||||
}
|
||||
|
71
pkgs/kde/gear/kdenetwork-filesharing/dependency-paths.patch
Normal file
71
pkgs/kde/gear/kdenetwork-filesharing/dependency-paths.patch
Normal file
@ -0,0 +1,71 @@
|
||||
diff --git a/samba/filepropertiesplugin/authhelper.cpp b/samba/filepropertiesplugin/authhelper.cpp
|
||||
index 6cbbd90..ae1d696 100644
|
||||
--- a/samba/filepropertiesplugin/authhelper.cpp
|
||||
+++ b/samba/filepropertiesplugin/authhelper.cpp
|
||||
@@ -49,7 +49,7 @@ ActionReply AuthHelper::isuserknown(const QVariantMap &args)
|
||||
}
|
||||
|
||||
QProcess p;
|
||||
- const auto program = QStringLiteral("pdbedit");
|
||||
+ const auto program = QStringLiteral("@samba@/bin/pdbedit");
|
||||
const auto arguments = QStringList({QStringLiteral("--debuglevel=0"), QStringLiteral("--user"), username });
|
||||
p.setProgram(program);
|
||||
p.setArguments(arguments);
|
||||
@@ -88,7 +88,7 @@ ActionReply AuthHelper::createuser(const QVariantMap &args)
|
||||
}
|
||||
|
||||
QProcess p;
|
||||
- p.setProgram(QStringLiteral("smbpasswd"));
|
||||
+ p.setProgram(QStringLiteral("@samba@/bin/smbpasswd"));
|
||||
p.setArguments({
|
||||
QStringLiteral("-L"), /* local mode */
|
||||
QStringLiteral("-s"), /* read from stdin */
|
||||
@@ -152,7 +152,7 @@ ActionReply AuthHelper::addtogroup(const QVariantMap &args)
|
||||
QStringLiteral("-m"),
|
||||
QStringLiteral("{%1}").arg(user.value()) });
|
||||
#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
|
||||
- p.setProgram(QStringLiteral("/usr/sbin/usermod"));
|
||||
+ p.setProgram(QStringLiteral("@usermod@"));
|
||||
p.setArguments({
|
||||
QStringLiteral("--append"),
|
||||
QStringLiteral("--groups"),
|
||||
diff --git a/samba/filepropertiesplugin/groupmanager.cpp b/samba/filepropertiesplugin/groupmanager.cpp
|
||||
index a2ba851..d54f6ce 100644
|
||||
--- a/samba/filepropertiesplugin/groupmanager.cpp
|
||||
+++ b/samba/filepropertiesplugin/groupmanager.cpp
|
||||
@@ -18,7 +18,7 @@ GroupManager::GroupManager(QObject *parent)
|
||||
{
|
||||
metaObject()->invokeMethod(this, [this] {
|
||||
auto proc = new QProcess;
|
||||
- proc->setProgram(QStringLiteral("testparm"));
|
||||
+ proc->setProgram(QStringLiteral("@samba@/bin/testparm"));
|
||||
proc->setArguments({QStringLiteral("--debuglevel=0"),
|
||||
QStringLiteral("--suppress-prompt"),
|
||||
QStringLiteral("--verbose"),
|
||||
diff --git a/samba/filepropertiesplugin/sambausershareplugin.cpp b/samba/filepropertiesplugin/sambausershareplugin.cpp
|
||||
index 4f6642e..86ea121 100644
|
||||
--- a/samba/filepropertiesplugin/sambausershareplugin.cpp
|
||||
+++ b/samba/filepropertiesplugin/sambausershareplugin.cpp
|
||||
@@ -112,7 +112,8 @@ SambaUserSharePlugin::SambaUserSharePlugin(QObject *parent)
|
||||
bool SambaUserSharePlugin::isSambaInstalled()
|
||||
{
|
||||
return QFile::exists(QStringLiteral("/usr/sbin/smbd"))
|
||||
- || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"));
|
||||
+ || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"))
|
||||
+ || QFile::exists(QStringLiteral("/run/current-system/sw/bin/smbd"));
|
||||
}
|
||||
|
||||
void SambaUserSharePlugin::showSambaStatus()
|
||||
diff --git a/samba/filepropertiesplugin/usermanager.cpp b/samba/filepropertiesplugin/usermanager.cpp
|
||||
index 29238ce..ff20fcb 100644
|
||||
--- a/samba/filepropertiesplugin/usermanager.cpp
|
||||
+++ b/samba/filepropertiesplugin/usermanager.cpp
|
||||
@@ -138,7 +138,7 @@ bool UserManager::canManageSamba() const
|
||||
void UserManager::load()
|
||||
{
|
||||
auto proc = new QProcess(this);
|
||||
- proc->setProgram(QStringLiteral("testparm"));
|
||||
+ proc->setProgram(QStringLiteral("@samba@/bin/testparm"));
|
||||
proc->setArguments({
|
||||
QStringLiteral("--debuglevel=0"),
|
||||
QStringLiteral("--suppress-prompt"),
|
35
pkgs/kde/gear/kdenetwork-filesharing/samba-hint.patch
Normal file
35
pkgs/kde/gear/kdenetwork-filesharing/samba-hint.patch
Normal file
@ -0,0 +1,35 @@
|
||||
diff --git a/samba/filepropertiesplugin/qml/MissingSambaPage.qml b/samba/filepropertiesplugin/qml/MissingSambaPage.qml
|
||||
index 327c4a7..9e2eba7 100644
|
||||
--- a/samba/filepropertiesplugin/qml/MissingSambaPage.qml
|
||||
+++ b/samba/filepropertiesplugin/qml/MissingSambaPage.qml
|
||||
@@ -6,20 +6,17 @@
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.5 as QQC2
|
||||
import QtQuick.Layouts 1.14
|
||||
-import org.kde.kirigami 2.4 as Kirigami
|
||||
-import org.kde.filesharing.samba 1.0 as Samba
|
||||
+import org.kde.kirigami as Kirigami
|
||||
|
||||
// When built without packagekit we cannot do auto-installation.
|
||||
-ColumnLayout {
|
||||
- QQC2.Label {
|
||||
- Layout.alignment: Qt.AlignHCenter
|
||||
- Layout.fillWidth: true
|
||||
- text: xi18nc("@info", "The <application>Samba</application> file sharing service must be installed before folders can be shared.")
|
||||
- explanation: i18n("Because this distro does not include PackageKit, we cannot show you a nice \"Install it\" button, and you will have to use your package manager to install the <command>samba</command> server package manually.")
|
||||
- wrapMode: Text.Wrap
|
||||
- }
|
||||
- Item {
|
||||
- Layout.alignment: Qt.AlignHCenter
|
||||
- Layout.fillHeight: true // space everything up
|
||||
+Item {
|
||||
+ Kirigami.PlaceholderMessage {
|
||||
+ anchors.centerIn: parent
|
||||
+ width: parent.width - (Kirigami.Units.largeSpacing * 4)
|
||||
+
|
||||
+ icon.name: "dialog-error"
|
||||
+
|
||||
+ text: xi18nc("@info", "File sharing service unavailable")
|
||||
+ explanation: i18n("Please enable the `services.samba.enable` and `services.samba.usershares.enable` options in your NixOS configuration.")
|
||||
}
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
diff --git a/samba/filepropertiesplugin/sambausershareplugin.cpp b/samba/filepropertiesplugin/sambausershareplugin.cpp
|
||||
index d5c8d77..11c45d4 100644
|
||||
--- a/samba/filepropertiesplugin/sambausershareplugin.cpp
|
||||
+++ b/samba/filepropertiesplugin/sambausershareplugin.cpp
|
||||
@@ -112,7 +112,8 @@ SambaUserSharePlugin::SambaUserSharePlugin(QObject *parent)
|
||||
bool SambaUserSharePlugin::isSambaInstalled()
|
||||
{
|
||||
return QFile::exists(QStringLiteral("/usr/sbin/smbd"))
|
||||
- || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"));
|
||||
+ || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"))
|
||||
+ || QFile::exists(QStringLiteral("/run/current-system/sw/bin/smbd"));
|
||||
}
|
||||
|
||||
void SambaUserSharePlugin::showSambaStatus()
|
Loading…
Reference in New Issue
Block a user