Hi Jan, Got. Thanks for your help.You are very professional. Best regards. Yuan
On 2015/5/22 22:16, Jan Stancek wrote: > > > > ----- Original Message ----- >> From: "Yuan Sun" <sunyu...@huawei.com> >> To: jstan...@redhat.com >> Cc: ltp-list@lists.sourceforge.net >> Sent: Thursday, 21 May, 2015 12:31:58 PM >> Subject: [PATCH V2] Add userns01 testcase to verify user namespace. >> >> Signed-off-by: Yuan Sun <sunyu...@huawei.com> >> --- >> testcases/kernel/containers/userns01/Makefile | 26 +++++++ >> testcases/kernel/containers/userns01/userns01.c | 90 >> ++++++++++++++++++++++ >> .../kernel/containers/userns01/userns_helper.h | 37 +++++++++ >> 3 files changed, 153 insertions(+) >> create mode 100644 testcases/kernel/containers/userns01/Makefile >> create mode 100644 testcases/kernel/containers/userns01/userns01.c >> create mode 100644 testcases/kernel/containers/userns01/userns_helper.h > I added it to .gitignore and container runtest file, slightly fixed > commit message, made GPL license look the same in both files and pushed. > > Thank you, > Jan > >> diff --git a/testcases/kernel/containers/userns01/Makefile >> b/testcases/kernel/containers/userns01/Makefile >> new file mode 100644 >> index 0000000..9f67216 >> --- /dev/null >> +++ b/testcases/kernel/containers/userns01/Makefile >> @@ -0,0 +1,26 @@ >> +############################################################################### >> +# >> ## >> +# Copyright (c) Huawei Technologies Co., Ltd., 2015 >> ## >> +# >> ## >> +# This program is free software; you can redistribute it and#or modify >> ## >> +# it under the terms of the GNU General Public License as published by >> ## >> +# the Free Software Foundation; either version 2 of the License, or >> ## >> +# (at your option) any later version. >> ## >> +# >> ## >> +# This program is distributed in the hope that it will be useful, but >> ## >> +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY >> ## >> +# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License >> ## >> +# for more details. >> ## >> +# >> ## >> +# You should have received a copy of the GNU General Public License >> ## >> +# along with this program. >> ## >> +############################################################################### >> + >> +top_srcdir ?= ../../../.. >> + >> +include $(top_srcdir)/include/mk/testcases.mk >> +include $(abs_srcdir)/../Makefile.inc >> + >> +LDLIBS := -lclone -lltp >> + >> +include $(top_srcdir)/include/mk/generic_leaf_target.mk >> diff --git a/testcases/kernel/containers/userns01/userns01.c >> b/testcases/kernel/containers/userns01/userns01.c >> new file mode 100644 >> index 0000000..c6022b5 >> --- /dev/null >> +++ b/testcases/kernel/containers/userns01/userns01.c >> @@ -0,0 +1,90 @@ >> +/* >> +* Copyright (c) Huawei Technologies Co., Ltd., 2015 >> +* This program is free software; you can redistribute it and/or modify it >> +* under the terms of the GNU General Public License as published by the Free >> +* Software Foundation; either version 2 of the License, or (at your option) >> +* any later version. This program is distributed in the hope that it will be >> +* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of >> +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General >> +* Public License for more details. You should have received a copy of the >> GNU >> +* General Public License along with this program. >> +* >> +* >> +* Verify that: >> +* If a user ID has no mapping inside the namespace, user ID and group >> +* ID will be the value defined in the file /proc/sys/kernel/overflowuid, >> 65534. >> +*/ >> + >> +#define _GNU_SOURCE >> +#include <sys/wait.h> >> +#include <assert.h> >> +#include <stdio.h> >> +#include <stdlib.h> >> +#include <unistd.h> >> +#include <string.h> >> +#include <errno.h> >> +#include "test.h" >> +#include "libclone.h" >> +#include "userns_helper.h" >> +#define OVERFLOWUIDPATH "/proc/sys/kernel/overflowuid" >> + >> +char *TCID = "user_namespace1"; >> +int TST_TOTAL = 1; >> + >> +char fullpath[BUFSIZ]; >> +long overflowuid; >> + >> +/* >> + * child_fn1() - Inside a new user namespace >> + */ >> +static int child_fn1(void *arg) >> +{ >> + int exit_val; >> + int uid, gid; >> + >> + uid = geteuid(); >> + gid = getegid(); >> + >> + tst_resm(TINFO, "USERNS test is running in a new user namespace."); >> + if (uid == overflowuid && gid == overflowuid) { >> + printf("Got expected uid and gid\n"); >> + exit_val = 0; >> + } else { >> + printf("Got unexpected result of uid=%d gid=%d\n", uid, gid); >> + exit_val = 1; >> + } >> + >> + return exit_val; >> +} >> + >> +static void setup(void) >> +{ >> + check_newuser(); >> + SAFE_FILE_SCANF(NULL, OVERFLOWUIDPATH, "%ld", &overflowuid); >> +} >> + >> +int main(int argc, char *argv[]) >> +{ >> + int status; >> + >> + tst_parse_opts(argc, argv, NULL, NULL); >> + setup(); >> + >> + TEST(do_clone_unshare_test(T_CLONE, CLONE_NEWUSER, child_fn1, NULL)); >> + >> + if (TEST_RETURN == -1) >> + tst_brkm(TFAIL | TTERRNO, NULL, "clone failed"); >> + else if ((wait(&status)) == -1) >> + tst_brkm(TWARN | TERRNO, NULL, "wait failed"); >> + >> + if (WIFEXITED(status) && WEXITSTATUS(status) != 0) >> + tst_resm(TFAIL, "child exited abnormally"); >> + else if (WIFSIGNALED(status)) { >> + tst_resm(TFAIL, "child was killed with signal = %d", >> + WTERMSIG(status)); >> + } >> + >> + tst_resm(TPASS, "the uid and the gid are right inside the container"); >> + tst_exit(); >> +} >> + >> diff --git a/testcases/kernel/containers/userns01/userns_helper.h >> b/testcases/kernel/containers/userns01/userns_helper.h >> new file mode 100644 >> index 0000000..3fb7288 >> --- /dev/null >> +++ b/testcases/kernel/containers/userns01/userns_helper.h >> @@ -0,0 +1,37 @@ >> +/* >> +* Copyright (c) Huawei Technologies Co., Ltd., 2015 >> +* This program is free software; you can redistribute it and/or modify >> +* it under the terms of the GNU General Public License as published by >> +* the Free Software Foundation; either version 2 of the License, or >> +* (at your option) any later version. >> +* >> +* This program is distributed in the hope that it will be useful, >> +* but WITHOUT ANY WARRANTY; without even the implied warranty of >> +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See >> +* the GNU General Public License for more details. >> +*/ >> + >> +#include "../libclone/libclone.h" >> +#include "test.h" >> +#include "safe_macros.h" >> + >> +static int dummy_child(void *v) >> +{ >> + (void) v; >> + return 0; >> +} >> + >> +static int check_newuser(void) >> +{ >> + int pid, status; >> + >> + if (tst_kvercmp(3, 8, 0) < 0) >> + tst_brkm(TCONF, NULL, "CLONE_NEWUSER not supported"); >> + >> + pid = do_clone_unshare_test(T_CLONE, CLONE_NEWUSER, dummy_child, NULL); >> + if (pid == -1) >> + tst_brkm(TCONF | TERRNO, NULL, "CLONE_NEWUSER not supported"); >> + SAFE_WAIT(NULL, &status); >> + >> + return 0; >> +} >> -- >> 1.9.1 >> >> > . > ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Ltp-list mailing list Ltp-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ltp-list