diff --git a/chsrc.c b/chsrc.c index e192138..91a8d86 100644 --- a/chsrc.c +++ b/chsrc.c @@ -846,6 +846,8 @@ os_ubuntu_getsrc(char* option) void os_ubuntu_setsrc (char* option) { + ensure_root(); + int index = 0; if (NULL!=option) { @@ -879,8 +881,7 @@ os_ubuntu_setsrc (char* option) "-ports/@\'< /etc/apt/sources.list.bak | cat > /etc/apt/sources.list"); } - chsrc_logcmd(cmd); - system(cmd); + chsrc_runcmd(cmd); // char* rm = "rm -rf /etc/apt/source.list.bak"; // system(rm); diff --git a/chsrc.h b/chsrc.h index fade0b0..795ecec 100644 --- a/chsrc.h +++ b/chsrc.h @@ -261,6 +261,29 @@ chsrc_say_thanks (source_info* source) } + +void +ensure_root () +{ + char* euid = getenv("$EUID"); + if (NULL==euid) { + FILE* fp = popen("id -u", "r"); + char buf[10] = {0}; + fgets(buf, 10, fp); + fclose(fp); + if (0!=atoi(buf)) goto not_root; + else return; + } else { + if (0!=atoi(euid)) goto not_root; + else return; + } +not_root: + xy_error("chsrc: 请在命令前使用 sudo 来保证必要的权限"); + exit(1); +} + + + /* Target Info */ typedef struct { void (*setfn)(char* option);