File indexing completed on 2024-05-19 13:35:00
0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0002 // SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org> 0003 0004 #include "helper.h" 0005 0006 #include <QDebug> 0007 #include <QFile> 0008 #include <QProcess> 0009 0010 #include <KAuth/HelperSupport> 0011 0012 #include <entries.h> 0013 0014 [[nodiscard]] static bool reloadSystem() 0015 { 0016 const bool ret = QProcess::execute(QStringLiteral("/usr/sbin/sysctl"), {QStringLiteral("--system")}) == 0; 0017 if (!ret) { 0018 qWarning() << "system reload failed"; 0019 } 0020 return ret; 0021 } 0022 0023 [[nodiscard]] static QByteArray head() 0024 { 0025 return QByteArrayLiteral("# This file was auto-generated by kde-inotify-survey. Manual changes will be overwritten.\n"); 0026 } 0027 0028 KAuth::ActionReply INotifySurveyHelper::increaseinstancelimit(const QVariantMap &args) 0029 { 0030 Q_UNUSED(args); 0031 const auto capacity = inotifyCapacity(); 0032 const auto maxCapacity = maximumINotifyCapacity(); 0033 const auto newLimit = qMin(capacity.max_user_instances + instanceStepSize(), maxCapacity.max_user_instances); 0034 if (QFile file(QStringLiteral("/etc/sysctl.d/50-kde-inotify-survey-max_user_instances.conf")); file.open(QFile::WriteOnly | QFile::Truncate)) { 0035 file.write(head()); 0036 file.write(QStringLiteral("fs.inotify.max_user_instances=%1\n").arg(QString::number(newLimit)).toUtf8()); 0037 } else { 0038 qWarning() << "Failed to open file" << file.errorString(); 0039 return KAuth::ActionReply::HelperErrorReply(); 0040 } 0041 if (!reloadSystem()) { 0042 return KAuth::ActionReply::HelperErrorReply(); 0043 } 0044 return KAuth::ActionReply::SuccessReply(); 0045 } 0046 0047 KAuth::ActionReply INotifySurveyHelper::increasewatchlimit(const QVariantMap &args) 0048 { 0049 Q_UNUSED(args); 0050 const auto capacity = inotifyCapacity(); 0051 const auto maxCapacity = maximumINotifyCapacity(); 0052 const auto newLimit = qMin(capacity.max_user_watches + watchStepSize(), maxCapacity.max_user_watches); 0053 if (QFile file(QStringLiteral("/etc/sysctl.d/50-kde-inotify-survey-max_user_watches.conf")); file.open(QFile::WriteOnly | QFile::Truncate)) { 0054 file.write(head()); 0055 file.write(QStringLiteral("fs.inotify.max_user_watches=%1\n").arg(QString::number(newLimit)).toUtf8()); 0056 } else { 0057 qWarning() << "Failed to open file" << file.errorString(); 0058 return KAuth::ActionReply::HelperErrorReply(); 0059 } 0060 if (!reloadSystem()) { 0061 return KAuth::ActionReply::HelperErrorReply(); 0062 } 0063 return KAuth::ActionReply::SuccessReply(); 0064 } 0065 0066 KAUTH_HELPER_MAIN("org.kde.kded.inotify", INotifySurveyHelper)