From ed74ad132749aacc6515f52307a4fb9049ed5be0 Mon Sep 17 00:00:00 2001 From: Clara Daia Hilgenberg Daru <cdhd12@inf.ufpr.br> Date: Mon, 29 Aug 2016 10:04:31 -0300 Subject: [PATCH] Create, login as and delete users inside containers, and modify quiet mode Conflicts: test/create_users.sh test/docker/debian/Dockerfile test/docker/opensuse/Dockerfile test/docker/ubuntu/Dockerfile --- .gitignore | 1 + src/linux/get_user_count.cpp | 3 +- test/README.md | 25 +++++++------ test/create_users.sh | 35 ++++++++++++++++++ test/docker/debian/Dockerfile | 7 ++++ test/docker/opensuse/Dockerfile | 16 +++++++- .../opensuse/faketime-0.9.6-4.mga6.x86_64.rpm | Bin 0 -> 38338 bytes test/docker/ubuntu/Dockerfile | 6 +++ test/test.sh | 35 +++++++++++++----- 9 files changed, 104 insertions(+), 24 deletions(-) create mode 100755 test/create_users.sh create mode 100644 test/docker/opensuse/faketime-0.9.6-4.mga6.x86_64.rpm diff --git a/.gitignore b/.gitignore index 511c8416..f515d169 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build/* bin/* test/docker/*/agent/* +test/docker/*/*.sh test/log* diff --git a/src/linux/get_user_count.cpp b/src/linux/get_user_count.cpp index 17e703c9..ec430899 100644 --- a/src/linux/get_user_count.cpp +++ b/src/linux/get_user_count.cpp @@ -426,7 +426,6 @@ static struct user_log * last_modified () { if ((p = (struct utmplist *)malloc(sizeof(struct utmplist))) == NULL) { fprintf(stderr, "ERROR: out of memory\n"); return NULL; - } memcpy(&p->ut, &ut, sizeof(struct utmp)); p->next = utmplist; @@ -576,7 +575,7 @@ int get_user_count () { strftime (yesterday,7,"%y%m%d",timeinfo); yesterday[6] = '\0'; - + for(i = u; i; i = u){ if(!strcmp(i->logout,"999999")){ if(strcmp(i->login,yesterday) <= 0){ diff --git a/test/README.md b/test/README.md index 6ae50d50..7c917774 100644 --- a/test/README.md +++ b/test/README.md @@ -8,7 +8,7 @@ Docker Docker supplies images of main Linux distributions from which one can build their own with a single configuration file `Dockerfile`. It looks like a -virtual machine, but uses the kernel from your currently installed OS. +virtual machine, but uses the kernel of the hosting OS. Running ------- @@ -17,21 +17,22 @@ Running The `test.sh` script, run without arguments, executes these three steps: -* rsync the agent directories and files to a directory inside each distribution -directory - observation: this must be done because docker does not allow -inclusion of directories by relative paths. +* copy the agent directories and files, plus other needed scripts, to a +directory inside each distribution directory - observation: this must be done +because docker does not allow inclusion of directories by relative paths. * build/update all docker images - install requirements, build and compile the -agent +agent, and run other needed scripts * run all docker images - run the agent inside the images, print the JSON generated in execution -Building the images and the agent may take some time and through a lot of output, so you can use the options +Building the images and the agent may take some time and throw a lot of output, +so you can use the options -* `-c` to copy (rsync) the agent into the distribution directories -* `-b [IMAGE_NAME]` to build the docker image specified by IMAGE_NAME or all - of them if none specified -* `-r [IMAGE_NAME]` to run the docker image specified by IMAGE_NAME or all - of them if none specified +* `-c` to copy (rsync) the agent into the distribution directories +* `-b [IMAGE_NAME]` to build the docker image specified by IMAGE_NAME or all + of them if none specified +* `-r [IMAGE_NAME]` to run the docker image specified by IMAGE_NAME or all + of them if none specified * `-q` to run in quiet mode: redirect stdout to log.txt during steps "copy" and "build" @@ -53,7 +54,7 @@ Dockerfiles * Make use of Docker cache when trying stuff: avoid adding instructions before long-standing ones if possible. (For example: once docker executes `RUN apt-get update && apt-get install ...`, the resulting image is cached and -subsequential builds with no changes before that instruction will not execute it +subsequent builds with no changes before that instruction will not execute it again.) * Refer to best practices diff --git a/test/create_users.sh b/test/create_users.sh new file mode 100755 index 00000000..6abc25d7 --- /dev/null +++ b/test/create_users.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +for username in user1 user2 user3 user4 +do +password="" +pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) +useradd -m -p $pass $username +if [ $? -eq 0 ] +then + echo "$username has been added to system!" +else + echo "Failed to add $username!" +fi + +{ +/usr/bin/expect << EOF +spawn login $username +sleep 2 +expect "Password: " +send "\r" +expect "\$ " +send "exit\r" +exit +EOF +} + +userdel $username +if [ $? -eq 0 ] +then + echo "$username has been deleted!" +else + echo "Failed to delete $username!" +fi + +done diff --git a/test/docker/debian/Dockerfile b/test/docker/debian/Dockerfile index 802caf81..4eaff390 100644 --- a/test/docker/debian/Dockerfile +++ b/test/docker/debian/Dockerfile @@ -2,6 +2,8 @@ FROM debian:latest # install requirements RUN apt-get update && apt-get install -y cmake \ + expect \ + faketime \ git \ g++ @@ -15,3 +17,8 @@ RUN /bin/bash -c 'cd home/agent/build ;\ # make RUN /bin/bash -c 'cd home/agent/build ;\ make' + +# create, login as and delete users +COPY create_users.sh home/create_users.sh +RUN /bin/bash -c "cd home ; \ + faketime 'yesterday' ./create_users.sh" diff --git a/test/docker/opensuse/Dockerfile b/test/docker/opensuse/Dockerfile index 0186c2c9..1bc1c2c2 100644 --- a/test/docker/opensuse/Dockerfile +++ b/test/docker/opensuse/Dockerfile @@ -1,7 +1,10 @@ FROM opensuse:latest # install requirements -RUN zypper --non-interactive install cmake \ +COPY faketime-0.9.6-4.mga6.x86_64.rpm home/faketime-0.9.6-4.mga6.x86_64.rpm +RUN zypper --non-interactive --no-gpg-checks install cmake \ + expect \ + /home/faketime-0.9.6-4.mga6.x86_64.rpm \ gcc-c++ # copy agent directory @@ -14,3 +17,14 @@ RUN /bin/bash -c 'cd home/agent/build ; \ # make RUN /bin/bash -c 'cd home/agent/build ; \ make' + +# create /var/log/wtmp +RUN touch /var/log/wtmp +RUN chown root.tty /var/log/wtmp +RUN chmod 664 /var/log/wtmp + + +# create, login as and delete users +COPY create_users.sh home/create_users.sh +RUN /bin/bash -c "cd home ; \ + faketime 'yesterday' ./create_users.sh" diff --git a/test/docker/opensuse/faketime-0.9.6-4.mga6.x86_64.rpm b/test/docker/opensuse/faketime-0.9.6-4.mga6.x86_64.rpm new file mode 100644 index 0000000000000000000000000000000000000000..a2a55a90195b156b6bb17bc96f10a018d38a96d7 GIT binary patch literal 38338 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�S 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 literal 0 HcmV?d00001 diff --git a/test/docker/ubuntu/Dockerfile b/test/docker/ubuntu/Dockerfile index 992f1b2d..a559fbcc 100644 --- a/test/docker/ubuntu/Dockerfile +++ b/test/docker/ubuntu/Dockerfile @@ -3,6 +3,8 @@ FROM ubuntu:latest # install requirements RUN apt-get update && apt-get install -y \ cmake \ + expect \ + faketime \ g++ # copy agent directory @@ -16,3 +18,7 @@ RUN /bin/bash -c 'cd home/agent/build ; \ RUN /bin/bash -c 'cd home/agent/build ; \ make' +# create, login as and delete users +COPY create_users.sh home/create_users.sh +RUN /bin/bash -c "cd home ; \ + faketime 'yesterday' ./create_users.sh" diff --git a/test/test.sh b/test/test.sh index fe40c702..2394c71c 100755 --- a/test/test.sh +++ b/test/test.sh @@ -8,12 +8,14 @@ command -v docker >/dev/null 2>&1 || { echo >&2 "It seems docker is not installe # -c - rsync agent directory into image directory # -b - build only specified image / all images if no argument is provided # -r - run only specified image / all images if no argument is provided -# -q - redirect stdout of rsync and docker build to log.txt file +# -q - redirect stdout of rsync and docker build to specified file / log.txt if +# no argument is provided EXECUTE_ALL=true -RSYNC_AGENT=false +RSYNC=false BUILD_DOCKER_IMAGES=false RUN=false +QUIET_MODE=false # current tested images declare -A IMAGES_LIST=([ubuntu]=1 [debian]=1 [opensuse]=1) @@ -22,7 +24,7 @@ while (($#)) do case "$1" in -c) - RSYNC_AGENT=true + RSYNC=true EXECUTE_ALL=false shift 1 ;; @@ -65,11 +67,18 @@ do -q) QUIET_MODE=true - shift 1 + if [[ "$2" = -* ]] || [[ "$2" = "" ]] + then + # no arguments + shift 1 + else + LOG_FILE_NAME=$2 + shift 2 + fi ;; - \?) - echo "Invalid option: $2" >&2 + \?) + echo "Invalid option: $2" >&2 shift ;; esac @@ -80,7 +89,7 @@ done if ($EXECUTE_ALL) then - RSYNC_AGENT=true + RSYNC=true BUILD_DOCKER_IMAGES=true RUN=true @@ -92,11 +101,16 @@ then # save stdout exec 5<&1 # redirect - exec 1> log.txt + if [ -z "${LOG_FILE_NAME}" ] + then + exec 1> log.txt + else + exec 1> "${LOG_FILE_NAME}" + fi fi # rsync -if ($RSYNC_AGENT) +if ($RSYNC) then printf "**********\n* COPY *\n**********\n\n" @@ -104,6 +118,9 @@ then do printf "Copying to docker/%s/agent\n" "$i" rsync -au ../* docker/"$i"/agent --delete --exclude test --exclude build/* + printf "Copying to docker/%s/create_users.sh\n\n" "$i" + rsync -u create_users.sh docker/"$i"/create_users.sh + done printf "\n" -- GitLab