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-10-13 22:36:38

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

I.MX6 2014 u-boot 测试修改

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

homework week04

本周作业内容: 1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. # 复制/etc/skel目录为/home/tuser1 [[email protected] ~]# cp -vr /etc/skel/ /home/tuser1 `/etc/skel/' -> `/home/tuser1' `/etc/skel/.bash_profile' -> `/home/tuser1/.bash_profile' `

RHCE 7.0考题及答案

RHCE7.0 试题详解 RHCSA部分 删除console=ttys0,115200n8这句话在最后加入rd.break 1 2 3 4 5 mount -o remount,rw /sysroot chroot /sysroot passwd #密码 touch /.autorelabel reboot 图形化界面安装: 1 2 3 4 yum –y install xorg* yum –y install gnome* yum –y install glx* startx #or init

I.MX6Q(TQIMX6Q/TQE9)学习笔记——U-Boot移植

其实Freescale的BSP移植文档已经将u-boot的移植步骤讲述的非常详细了,但为了以后方便查阅,还是按照自己的理解记录在这里. 获取源码 根据前一篇文章搭建好LTIB环境后就可以非常方便的导出u-boot源码了.切换到ltib目录,并运行如下指令: [cpp] view plaincopy ./ltib -m prep -p u-boot 该指令执行需要一些时间,指令执行完成后Freescale维护的u-boot-2009.8就会出现在rpm/BUILD目录下. 添加单板 为TQIMX6

安装OpenLDAP

LDAP介绍 LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以根据需要定制.与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的.LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到. 目的: 使用LDAP对用户名密码做统一管理,实现一个帐号登录多个不同系统. Server Config

email

################email#######基本电子邮件发送 电子邮件发送1 .服务器使用SMTP协议将电子邮件提交至TCP端口25,或由本地客户端通过/usr/bin/sendmail程序进行提交.如果该MTA是最终目标位置,邮件将传递至MDA.否则,将使用MX记录在DNS中查找下一个MTA,并使用SMTP进行转发.2 .MDA:"邮件发送代理".MDA将邮件发送至收件人的本地邮件存储位置(默认情况下是/var/spool/mail/user).Postfix提供自己的M

oracle进阶笔记-基础准备-oracel-linux安装

Oracle 11g 在RedHat Linux 5.8_x64平台的安装手册 搭建环境:VM10 + RedHat 5.8_x64 +oracle 11g (grid+db) 步骤简述: 1.在电脑上安装VMware软件 2.创建一个RedHat5.8_x64系统的虚拟机完成系统安装,并配置系统基本的操作环境 3.检测环境是否符合Oracle的最低安装要求,并安装软件包和系统补丁 4.创建用户和组,并设置工作角色分离,修改内核参数设置用户资源控制 5.创建ASM并安装grid 6.安装Orac

linux跳板机配置

1.IP配置############### 跳板机IP:192.168.10.128 Server1IP:192.168.10.133 Server2IP:192.168.10.132 Server3IP:192.168.10.131 2.创建用户############### [[email protected] ~]# useradd jump     要在所有机器上操作. [[email protected] ~]# echo 123456|passwd --stdin jump     

这是三天的linux学习笔记,大神可以指教,别喷我,我新手。

20140825.学习笔记开启新终端    ctrl+shift+n关闭终端    alt+F4扩大终端    ctrl+shift+"+"缩小终端    ctrl+"-"开启新的终端标签    ctrl+shift+t关闭终端标签    ctrl+shift+w标签之间的切换    alt+标签对应的编号切换到真实终端tty3   ctrl+alt+F3tty回到图形     alt+F1或者F7 快捷键设置终端--->编辑--->键盘快捷键 设置终端