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

Commit 83b65486 authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru
Browse files

Merge commit 'remotes/korg/cupcake' into merge

Conflicts:
	init/devices.c
	libpixelflinger/Android.mk
parents 4a4c9f6f e037fd7e
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -859,8 +859,20 @@ int adb_main(int is_daemon)
    property_get("ro.kernel.qemu", value, "");
    if (strcmp(value, "1") != 0) {
        property_get("ro.secure", value, "");
        if (strcmp(value, "1") == 0)
        if (strcmp(value, "1") == 0) {
            // don't run as root if ro.secure is set...
            secure = 1;

            // ... except we allow running as root in userdebug builds if the 
            // service.adb.root property has been set by the "adb root" command
            property_get("ro.debuggable", value, "");
            if (strcmp(value, "1") == 0) {
                property_get("service.adb.root", value, "");
                if (strcmp(value, "1") == 0) {
                    secure = 0;
                }
            }
        }
    }

    /* don't listen on port 5037 if we are running in secure mode */
@@ -872,8 +884,10 @@ int adb_main(int is_daemon)
        ** AID_INPUT to diagnose input issues (getevent)
        ** AID_INET to diagnose network issues (netcfg, ping)
        ** AID_GRAPHICS to access the frame buffer
        ** AID_NET_BT and AID_NET_BT_ADMIN to diagnose bluetooth (hcidump)
        */
        gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS };
        gid_t groups[] = { AID_ADB, AID_LOG, AID_INPUT, AID_INET, AID_GRAPHICS,
                           AID_NET_BT, AID_NET_BT_ADMIN };
        setgroups(sizeof(groups)/sizeof(groups[0]), groups);

        /* then switch user and group to "shell" */
@@ -1080,4 +1094,3 @@ int main(int argc, char **argv)
    return adb_main(0);
#endif
}
+12 −0
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ void help()
        "  adb get-serialno             - prints: <serial-number>\n"
        "  adb status-window            - continuously print device status for a specified device\n"
        "  adb remount                  - remounts the /system partition on the device read-write\n"
        "  adb root                     - restarts adb with root permissions\n"
        "\n"
        "networking:\n"
        "  adb ppp <tty> [parameters]   - Run PPP over USB.\n"
@@ -914,6 +915,17 @@ top:
        return 1;
    }

    if(!strcmp(argv[0], "root")) {
        int fd = adb_connect("root:");
        if(fd >= 0) {
            read_and_dump(fd);
            adb_close(fd);
            return 0;
        }
        fprintf(stderr,"error: %s\n", adb_error());
        return 1;
    }

    if(!strcmp(argv[0], "bugreport")) {
        if (argc != 1) {
            return 1;
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
#include <fcntl.h>
#include <errno.h>
#include <sys/socket.h>
#include <utils/logger.h>
#include <cutils/logger.h>
#include "sysdeps.h"
#include "adb.h"

+30 −0
Original line number Diff line number Diff line
@@ -103,6 +103,34 @@ static void recover_service(int s, void *cookie)
    adb_close(fd);
}

void restart_root_service(int fd, void *cookie)
{
    char buf[100];
    char value[PROPERTY_VALUE_MAX];

    if (getuid() == 0) {
        snprintf(buf, sizeof(buf), "adbd is already running as root\n");
        writex(fd, buf, strlen(buf));
        adb_close(fd);
    } else {
        property_get("ro.debuggable", value, "");
        if (strcmp(value, "1") != 0) {
            snprintf(buf, sizeof(buf), "adbd cannot run as root in production builds\n");
            writex(fd, buf, strlen(buf));
            return;
        }

        property_set("service.adb.root", "1");
        snprintf(buf, sizeof(buf), "restarting adbd as root\n");
        writex(fd, buf, strlen(buf));
        adb_close(fd);

        // quit, and init will restart us as root
        sleep(1);
        exit(1);
    }
}

#endif

#if 0
@@ -289,6 +317,8 @@ int service_to_fd(const char *name)
        ret = create_service_thread(file_sync_service, NULL);
    } else if(!strncmp(name, "remount:", 8)) {
        ret = create_service_thread(remount_service, NULL);
    } else if(!strncmp(name, "root:", 5)) {
        ret = create_service_thread(restart_root_service, NULL);
#endif
#if 0
    } else if(!strncmp(name, "echo:", 5)){
+2 −1
Original line number Diff line number Diff line
@@ -292,7 +292,8 @@ static int find_usb_device(const char *base,
                        }
                    }

                    register_device_callback(devname, local_ep_in, local_ep_out, i, serial, zero_mask);
                    register_device_callback(devname, local_ep_in, local_ep_out,
                            interface->bInterfaceNumber, serial, zero_mask);

                    found_device = 1;
                    break;
Loading