File indexing completed on 2024-04-28 05:45:39

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)