File indexing completed on 2024-04-28 17:06:00

0001 /*
0002     SPDX-FileCopyrightText: 2000 Shie Erlich <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2000 Rafi Yanai <krusader@users.sourceforge.net>
0004     SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef KRPERMHANDLER_H
0010 #define KRPERMHANDLER_H
0011 
0012 // QtCore
0013 #include <QHash>
0014 #include <QSet>
0015 #include <QString>
0016 
0017 #include <KIO/Global>
0018 
0019 #include <stdlib.h>
0020 #include <sys/types.h>
0021 #include <time.h>
0022 #include <unistd.h>
0023 
0024 #define NO_PERM 0
0025 #define UNKNOWN_PERM 1
0026 #define ALLOWED_PERM 2
0027 
0028 class KrPermHandler
0029 {
0030 public:
0031     static void init();
0032 
0033     static QString gid2group(gid_t groupId);
0034     static QString uid2user(uid_t userId);
0035 
0036     static char writeable(const QString &perm, gid_t gid, uid_t uid);
0037     static char readable(const QString &perm, gid_t gid, uid_t uid);
0038     static char executable(const QString &perm, gid_t gid, uid_t uid);
0039 
0040     static char ftpWriteable(const QString &fileOwner, const QString &userName, const QString &perm);
0041     static char ftpReadable(const QString &fileOwner, const QString &userName, const QString &perm);
0042     static char ftpExecutable(const QString &fileOwner, const QString &userName, const QString &perm);
0043 
0044     static QString mode2QString(mode_t m);
0045     static QString parseSize(KIO::filesize_t val);
0046 
0047 private:
0048     KrPermHandler()
0049     {
0050     }
0051     static char getLocalPermission(const QString &perm, gid_t gid, uid_t uid, int permOffset, bool ignoreRoot = false);
0052     static char getFtpPermission(const QString &fileOwner, const QString &userName, const QString &perm, int permOffset);
0053 
0054     static QSet<int> currentGroups;
0055     static QHash<int, QString> uidCache;
0056     static QHash<int, QString> gidCache;
0057 };
0058 
0059 #endif