I.MX6 su.c 测试

/*************************************************************************
 *                        I.MX6 su.c 测试
 * 说明:
 *     今天突然想分析一下su的源代码,看一下其工作机制。
 *
 *                                       2016-8-10 深圳 南山平山村 曾剑锋
 ************************************************************************/

一、su源代码修改:
    /*
    **
    ** Copyright 2008, The Android Open Source Project
    **
    ** Licensed under the Apache License, Version 2.0 (the "License");
    ** you may not use this file except in compliance with the License.
    ** You may obtain a copy of the License at
    **
    **     http://www.apache.org/licenses/LICENSE-2.0
    **
    ** Unless required by applicable law or agreed to in writing, software
    ** distributed under the License is distributed on an "AS IS" BASIS,
    ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    ** See the License for the specific language governing permissions and
    ** limitations under the License.
    */

    #define LOG_TAG "su"

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <errno.h>

    #include <unistd.h>
    #include <time.h>

    #include <pwd.h>

    #include <private/android_filesystem_config.h>

    /*
     * SU can be given a specific command to exec. UID _must_ be
     * specified for this (ie argc => 3).
     *
     * Usage:
     * su 1000
     * su 1000 ls -l
     */
    int main(int argc, char **argv)
    {
        struct passwd *pw;
        int uid, gid, myuid;

        /* Until we have something better, only root and the shell can use su. */
        myuid = getuid();
        // if (myuid != AID_ROOT && myuid != AID_SHELL) {
        //     fprintf(stderr,"su: uid %d not allowed to su\n", myuid);
        //     // return 1;
        // }

        if(argc < 2) {
            uid = gid = 0;
        } else {
            pw = getpwnam(argv[1]);

            if(pw == 0) {
                uid = gid = atoi(argv[1]);
            } else {
                uid = pw->pw_uid;
                gid = pw->pw_gid;
            }
        }

        // if(setgid(gid) || setuid(uid)) {
        //     fprintf(stderr,"su: permission denied\n");
        //     return 1;
        // }

        /* User specified command for exec. */
        if (argc == 3 ) {
            if (execlp(argv[2], argv[2], NULL) < 0) {
                fprintf(stderr, "su: exec failed for %s Error:%s\n", argv[2],
                        strerror(errno));
                return -errno;
            }
        } else if (argc > 3) {
            /* Copy the rest of the args from main. */
            char *exec_args[argc - 1];
            memset(exec_args, 0, sizeof(exec_args));
            memcpy(exec_args, &argv[2], sizeof(exec_args));
            if (execvp(argv[2], exec_args) < 0) {
                fprintf(stderr, "su: exec failed for %s Error:%s\n", argv[2],
                        strerror(errno));
                return -errno;
            }
        }

        /* Default exec shell. */
        execlp("/system/bin/sh", "sh", NULL);

        fprintf(stderr, "su: exec failed\n");
        return 1;
    }

二、权限:
    chmod 4775 /system/xbin/su 

三、调用:
    private static String cmdList[] = {
        "su 0 netcfg can0 down",
        "su 0 ip link set can0 type can bitrate 1000000 triple-sampling on",
        "su 0 netcfg can0 up",
    };

 

时间: 2024-09-29 11:13:46

I.MX6 su.c 测试的相关文章

I.MX6 2014 u-boot 测试修改

/************************************************************************* * I.MX6 2014 u-boot 测试修改 * 说明: * 为了能够测试是否Parallel LCD在u-boot这个版本上的是否可行,做了如下 * 修改. * * 2016-8-26 深圳 南山平山村 曾剑锋 ******************************************************************

向百度说Hello world并获得回应

1. 让浏览器打开www.baidu.com, 并等待页面加载完 毕: Default.Navigate("http://www.baidu.com"); Default.Ready(); 2. 选择搜索框: 选择框位置有点不对, 但不影响使用. 得到搜索框#kw, 然后用同样方式得到 "百度一下"按钮#su. 3. 输入关键词, 搜索: Default.SelectSingleNode("#kw").Attr("value"

Ubuntu下用docker安装redis镜像和使用redis容器分享

Ubuntu下用docker安装redis镜像和使用redis容器分享   1. 安装Ubuntu 2. 用Putty登录Ubuntu Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-40-generic x86_64)  * Documentation:  https://help.ubuntu.com/   System information as of Wed Dec 31 06:41:16 UTC 2014   System load: 

I.MX6 32G SD卡测试

/*********************************************************************** * I.MX6 32G SD卡测试 * 说明: * 这是刘涛测试32G卡的情况. * * 2016-10-17 深圳 南山平山村 曾剑锋 **********************************************************************/ 一.参考文档: [solved] couldn't mount beca

I.MX6 Android 5 root

/********************************************************************************* * I.MX6 Android 5 root * 说明: * 学习一下Android 5的root方式. * * 2017-11-1 深圳 南山平山村 曾剑锋 ********************************************************************************/ 一.参考文

Python实现测试磁盘性能的方法_python

本文实例讲述了Python实现测试磁盘性能的方法.分享给大家供大家参考.具体如下: 该代码做了如下工作: create 300000 files (512B to 1536B) with data from /dev/urandom rewrite 30000 random files and change the size read 30000 sequential files read 30000 random files delete all files sync and drop cac

kali linux web渗透测试学习笔记

    kali linux web渗透测试学习笔记 metasploit使用方法: 启动: 第一步:启用Postgresql服务.service postgresql start 第二步:启用metasploit服务.service matasploit start 第三步:启动框架.msfconsole 一个ASP站点的sql注入 测试数字型注入点 1.网址:asp?ID+13,后面加',看看是什么数据库,然后输入1=1,1=2,得到数据库是microsoft acess 2.转用sqlma

Linux禁止非WHEEL用户使用SU命令

        通常情况下,一般用户通过执行"su -"命令.输入正确的root密码,可以登录为root用户来对系统进行管理员级别的配置.        但是,为了更进一步加强系统的安全性,有必要建立一个管理员的 组,只允许这个组的用户来执行"su -"命令登录为root用户,而让其他组的用户即使执行"su -".输入了正确的root密码,也无法登录为root用户.在UNIX和Linux下,这个组的名称通常为"wheel".

CRP多语言编译/测试插件使用之基础环境

引言 最近CRP上线了多言编译/测试插件,作为开发者,我想使用CRP对我的项目进行持续集成,那么如何顺利的完成编译/测试我的项目呢,CRP提供的编译/测试的环境是什么,支持的指令有哪些呢,本文将详细介绍多语言编译/测试插件的基础环境. 什么是CRP的插件 CRP的插件是工作流中的的节点的任务的具体实现方式,比如编译/测试任务是由多语言编译/测试插件具体实现的. 常用指令(可以在crp编译/测试任务输入框内直接输入) apt-get update && apg-get install -y