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

Commit 3792e6cf authored by William Roberts's avatar William Roberts
Browse files

init: switch from android_ids to getpwnam



Start to move users of android_filesystem_config.h to use the
standard grp and pwd interface functions.

Advantages:
  * one copy of android_ids in libc, removing it from init objects.
  * immediately starts oem_xxx users and groups in rc.
  * future will support _named_ oem ids via backend improvements.

Change-Id: Ib1ae1e0cbdcaaf60deb3759681a6030b615c069c
Bug: 27999086
Signed-off-by: default avatarWilliam Roberts <william.c.roberts@intel.com>
parent adf1cded
Loading
Loading
Loading
Loading
+8 −21
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <errno.h>
#include <time.h>
#include <ftw.h>
#include <pwd.h>

#include <selinux/label.h>
#include <selinux/android.h>
@@ -39,38 +40,24 @@
#include <cutils/sockets.h>
#include <android-base/stringprintf.h>

#include <private/android_filesystem_config.h>

#include "init.h"
#include "log.h"
#include "property_service.h"
#include "util.h"

/*
 * android_name_to_id - returns the integer uid/gid associated with the given
 * name, or UINT_MAX on error.
 */
static unsigned int android_name_to_id(const char *name)
{
    const struct android_id_info *info = android_ids;
    unsigned int n;

    for (n = 0; n < android_id_count; n++) {
        if (!strcmp(info[n].name, name))
            return info[n].aid;
    }

    return UINT_MAX;
}

static unsigned int do_decode_uid(const char *s)
{
    unsigned int v;

    if (!s || *s == '\0')
        return UINT_MAX;
    if (isalpha(s[0]))
        return android_name_to_id(s);

    if (isalpha(s[0])) {
        struct passwd* pwd = getpwnam(s);
        if (!pwd)
            return UINT_MAX;
        return pwd->pw_uid;
    }

    errno = 0;
    v = (unsigned int) strtoul(s, 0, 0);