- avoid parsing permission strings - fix memory leaks, a fix new/free mismatch and a compiler warning - fix that only first updated-package was processed - fix a potential stack overflow if packages.xml is huge - minor refactoring for reducing duplicated code - don't process packages without codePath - fix path for deleting app data (currently unused anyway) - fix file ownership on libs - try not to mess up Android 5.0 app permissions Patch set 4 - make fixing SELinux contexts an option with a check box - add some notes / text to the themes Patch set 6 - decouple "fix permissions" from "fix contexts" Change-Id: Icc77ecc581befc5ce6e419b1f3b8ca189208c234
53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
#include <iostream>
|
|
#include <fstream>
|
|
#include <sstream>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <string.h>
|
|
#include <libgen.h>
|
|
#include <unistd.h>
|
|
#include <sys/stat.h>
|
|
#include <dirent.h>
|
|
#include <errno.h>
|
|
#include "gui/rapidxml.hpp"
|
|
#include "twrp-functions.hpp"
|
|
|
|
using namespace std;
|
|
|
|
class fixPermissions {
|
|
public:
|
|
fixPermissions();
|
|
~fixPermissions();
|
|
int fixPerms(bool enable_debug, bool remove_data_for_missing_apps);
|
|
int fixContexts();
|
|
int fixDataInternalContexts(void);
|
|
|
|
private:
|
|
int pchown(string fn, int puid, int pgid);
|
|
int pchmod(string fn, mode_t mode);
|
|
vector <string> listAllDirectories(string path);
|
|
vector <string> listAllFiles(string path);
|
|
void deletePackages();
|
|
int getPackages(const string& packageFile);
|
|
int fixApps();
|
|
int fixAllFiles(string directory, int uid, int gid, mode_t file_perms);
|
|
int fixDir(const string& dir, int diruid, int dirgid, mode_t dirmode, int fileuid, int filegid, mode_t filemode);
|
|
int fixDataData(string dataDir);
|
|
int restorecon(string entry, struct stat *sb);
|
|
int fixDataDataContexts(void);
|
|
int fixContextsRecursively(string path, int level);
|
|
|
|
struct package {
|
|
string pkgName;
|
|
string codePath;
|
|
string appDir;
|
|
string dDir;
|
|
int gid;
|
|
int uid;
|
|
package *next;
|
|
};
|
|
bool debug;
|
|
bool remove_data;
|
|
package* head;
|
|
};
|