Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8054f5e2 authored by Chris Göllner's avatar Chris Göllner Committed by Gerrit Code Review
Browse files

Merge "Revert "adb: Do not use fs_config unless we are root (try 2)."" into main

parents aedc0d0b e2fbaed9
Loading
Loading
Loading
Loading
+0 −64
Original line number Diff line number Diff line
@@ -289,9 +289,6 @@
  {
   "name" : "fs_write_atomic_int"
  },
  {
   "name" : "get_fs_config"
  },
  {
   "name" : "hashmapCreate"
  },
@@ -1276,27 +1273,6 @@
   "return_type" : "_ZTIi",
   "source_file" : "system/core/libcutils/include/cutils/fs.h"
  },
  {
   "function_name" : "get_fs_config",
   "linker_set_key" : "get_fs_config",
   "parameters" :
   [
    {
     "referenced_type" : "_ZTIPKc"
    },
    {
     "referenced_type" : "_ZTIb"
    },
    {
     "referenced_type" : "_ZTIPKc"
    },
    {
     "referenced_type" : "_ZTIP9fs_config"
    }
   ],
   "return_type" : "_ZTIb",
   "source_file" : "system/core/libcutils/include/private/fs_config.h"
  },
  {
   "function_name" : "hashmapCreate",
   "linker_set_key" : "hashmapCreate",
@@ -2414,15 +2390,6 @@
   "size" : 8,
   "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
  },
  {
   "alignment" : 8,
   "linker_set_key" : "_ZTIP9fs_config",
   "name" : "fs_config *",
   "referenced_type" : "_ZTI9fs_config",
   "self_type" : "_ZTIP9fs_config",
   "size" : 8,
   "source_file" : "system/core/libcutils/include/private/fs_config.h"
  },
  {
   "alignment" : 8,
   "linker_set_key" : "_ZTIP9str_parms",
@@ -2717,37 +2684,6 @@
   "self_type" : "_ZTI5cnode",
   "size" : 40,
   "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
  },
  {
   "alignment" : 8,
   "fields" :
   [
    {
     "field_name" : "uid",
     "referenced_type" : "_ZTIj"
    },
    {
     "field_name" : "gid",
     "field_offset" : 32,
     "referenced_type" : "_ZTIj"
    },
    {
     "field_name" : "mode",
     "field_offset" : 64,
     "referenced_type" : "_ZTIj"
    },
    {
     "field_name" : "capabilities",
     "field_offset" : 128,
     "referenced_type" : "_ZTIm"
    }
   ],
   "linker_set_key" : "_ZTI9fs_config",
   "name" : "fs_config",
   "referenced_type" : "_ZTI9fs_config",
   "self_type" : "_ZTI9fs_config",
   "size" : 24,
   "source_file" : "system/core/libcutils/include/private/fs_config.h"
  }
 ],
 "rvalue_reference_types" : []
+0 −64
Original line number Diff line number Diff line
@@ -299,9 +299,6 @@
  {
   "name" : "fs_write_atomic_int"
  },
  {
   "name" : "get_fs_config"
  },
  {
   "name" : "hashmapCreate"
  },
@@ -1286,27 +1283,6 @@
   "return_type" : "_ZTIi",
   "source_file" : "system/core/libcutils/include/cutils/fs.h"
  },
  {
   "function_name" : "get_fs_config",
   "linker_set_key" : "get_fs_config",
   "parameters" :
   [
    {
     "referenced_type" : "_ZTIPKc"
    },
    {
     "referenced_type" : "_ZTIb"
    },
    {
     "referenced_type" : "_ZTIPKc"
    },
    {
     "referenced_type" : "_ZTIP9fs_config"
    }
   ],
   "return_type" : "_ZTIb",
   "source_file" : "system/core/libcutils/include/private/fs_config.h"
  },
  {
   "function_name" : "hashmapCreate",
   "linker_set_key" : "hashmapCreate",
@@ -2424,15 +2400,6 @@
   "size" : 4,
   "source_file" : "system/core/libcutils/include/cutils/hashmap.h"
  },
  {
   "alignment" : 4,
   "linker_set_key" : "_ZTIP9fs_config",
   "name" : "fs_config *",
   "referenced_type" : "_ZTI9fs_config",
   "self_type" : "_ZTIP9fs_config",
   "size" : 4,
   "source_file" : "system/core/libcutils/include/private/fs_config.h"
  },
  {
   "alignment" : 4,
   "linker_set_key" : "_ZTIP9str_parms",
@@ -2727,37 +2694,6 @@
   "self_type" : "_ZTI5cnode",
   "size" : 20,
   "source_file" : "system/core/libcutils/include/cutils/config_utils.h"
  },
  {
   "alignment" : 8,
   "fields" :
   [
    {
     "field_name" : "uid",
     "referenced_type" : "_ZTIj"
    },
    {
     "field_name" : "gid",
     "field_offset" : 32,
     "referenced_type" : "_ZTIj"
    },
    {
     "field_name" : "mode",
     "field_offset" : 64,
     "referenced_type" : "_ZTIt"
    },
    {
     "field_name" : "capabilities",
     "field_offset" : 128,
     "referenced_type" : "_ZTIy"
    }
   ],
   "linker_set_key" : "_ZTI9fs_config",
   "name" : "fs_config",
   "referenced_type" : "_ZTI9fs_config",
   "self_type" : "_ZTI9fs_config",
   "size" : 24,
   "source_file" : "system/core/libcutils/include/private/fs_config.h"
  }
 ],
 "rvalue_reference_types" : []
+14 −31
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ static const struct fs_path_config android_dirs[] = {
    { 00751, AID_ROOT,         AID_SHELL,        0, "vendor/bin" },
    { 00751, AID_ROOT,         AID_SHELL,        0, "vendor/apex/*/bin" },
    { 00755, AID_ROOT,         AID_SHELL,        0, "vendor" },
    {},
    { 00755, AID_ROOT,         AID_ROOT,         0, 0 },
        // clang-format on
};
#ifndef __ANDROID_VNDK__
@@ -228,7 +228,7 @@ static const struct fs_path_config android_files[] = {
    { 00755, AID_ROOT,      AID_SHELL,     0, "vendor/bin/*" },
    { 00755, AID_ROOT,      AID_SHELL,     0, "vendor/apex/*bin/*" },
    { 00755, AID_ROOT,      AID_SHELL,     0, "vendor/xbin/*" },
    {},
    { 00644, AID_ROOT,      AID_ROOT,      0, 0 },
        // clang-format on
};
#ifndef __ANDROID_VNDK__
@@ -318,8 +318,8 @@ static bool fs_config_cmp(bool dir, const char* prefix, size_t len, const char*
auto __for_testing_only__fs_config_cmp = fs_config_cmp;
#endif

bool get_fs_config(const char* path, bool dir, const char* target_out_path,
                   struct fs_config* fs_conf) {
void fs_config(const char* path, int dir, const char* target_out_path, unsigned* uid, unsigned* gid,
               unsigned* mode, uint64_t* capabilities) {
    const struct fs_path_config* pc;
    size_t which, plen;

@@ -362,11 +362,11 @@ bool get_fs_config(const char* path, bool dir, const char* target_out_path,
            if (fs_config_cmp(dir, prefix, len, path, plen)) {
                free(prefix);
                close(fd);
                fs_conf->uid = header.uid;
                fs_conf->gid = header.gid;
                fs_conf->mode = header.mode;
                fs_conf->capabilities = header.capabilities;
                return true;
                *uid = header.uid;
                *gid = header.gid;
                *mode = (*mode & (~07777)) | header.mode;
                *capabilities = header.capabilities;
                return;
            }
            free(prefix);
        }
@@ -375,28 +375,11 @@ bool get_fs_config(const char* path, bool dir, const char* target_out_path,

    for (pc = dir ? android_dirs : android_files; pc->prefix; pc++) {
        if (fs_config_cmp(dir, pc->prefix, strlen(pc->prefix), path, plen)) {
            fs_conf->uid = pc->uid;
            fs_conf->gid = pc->gid;
            fs_conf->mode = pc->mode;
            fs_conf->capabilities = pc->capabilities;
            return true;
        }
    }
    return false;
            break;
        }

void fs_config(const char* path, int dir, const char* target_out_path, unsigned* uid, unsigned* gid,
               unsigned* mode, uint64_t* capabilities) {
    struct fs_config conf;
    if (get_fs_config(path, dir, target_out_path, &conf)) {
        *uid = conf.uid;
        *gid = conf.gid;
        *mode = (*mode & S_IFMT) | conf.mode;
        *capabilities = conf.capabilities;
    } else {
        *uid = AID_ROOT;
        *gid = AID_ROOT;
        *mode = (*mode & S_IFMT) | (dir ? 0755 : 0644);
        *capabilities = 0;
    }
    *uid = pc->uid;
    *gid = pc->gid;
    *mode = (*mode & (~07777)) | pc->mode;
    *capabilities = pc->capabilities;
}
+10 −23
Original line number Diff line number Diff line
@@ -21,11 +21,8 @@

#pragma once

#include <fcntl.h>
#include <stdbool.h>
#include <stdint.h>
#include <sys/cdefs.h>
#include <unistd.h>

#include <linux/capability.h>

@@ -33,27 +30,17 @@

__BEGIN_DECLS

/* This API is deprecated. New users should call get_fs_config. */
void fs_config(const char* path, int dir, const char* target_out_path, unsigned* uid, unsigned* gid,
               unsigned* mode, uint64_t* capabilities);

struct fs_config {
  uid_t uid;
  gid_t gid;
  mode_t mode;
  uint64_t capabilities;
};

/*
 * If a file system configuration was found for the specified path, store it to *conf.
 * Returns whether a file system configuration was found.
 *
 * dir: Whether path refers to a directory.
 * target_out_path: Path to the base directory to read the file system configuration from, or a null
 * pointer to use the root directory as the base. Host code should pass $ANDROID_PRODUCT_OUT or
 * equivalent, and device code should pass a null pointer.
 * Used in:
 *  build/tools/fs_config/fs_config.c
 *  build/tools/fs_get_stats/fs_get_stats.c
 *  system/extras/ext4_utils/make_ext4fs_main.c
 *  external/squashfs-tools/squashfs-tools/android.c
 *  system/core/cpio/mkbootfs.c
 *  system/core/adb/file_sync_service.cpp
 *  system/extras/ext4_utils/canned_fs_config.c
 */
bool get_fs_config(const char* path, bool dir, const char* target_out_path,
                   struct fs_config* conf);
void fs_config(const char* path, int dir, const char* target_out_path, unsigned* uid, unsigned* gid,
               unsigned* mode, uint64_t* capabilities);

__END_DECLS