summaryrefslogtreecommitdiff
path: root/kpov_judge/tasks/rename_grep_network/task.py
diff options
context:
space:
mode:
Diffstat (limited to 'kpov_judge/tasks/rename_grep_network/task.py')
-rw-r--r--kpov_judge/tasks/rename_grep_network/task.py282
1 files changed, 0 insertions, 282 deletions
diff --git a/kpov_judge/tasks/rename_grep_network/task.py b/kpov_judge/tasks/rename_grep_network/task.py
deleted file mode 100644
index 4d81313..0000000
--- a/kpov_judge/tasks/rename_grep_network/task.py
+++ /dev/null
@@ -1,282 +0,0 @@
-# TODO:
-# - check if everything is filled in (computers, params, preparation)
-# - improve scoring
-# - test
-# - switch to a real SSH/SFTP client to properly handle filenames
-
-instructions = {
- 'si': """
-<pre>Ustvari dva navidezna računalnika s slikama diskov
-- SimpleArbiterExam s sliko diska simpleArbiterDhcp in
-SmallStudent s slikama diska student-entrance3
-in smallstudent-personal.
-
-Drugi razdelek na sliki smallstudent-personal priklopi na imenik {mntdir}
-
-Na SimpleArbiterExam se lahko prijaviš z uporabniškim imenom tester in geslom test.
-Na SmallStudentExam se lahko prijaviš kot root z geslom kaboom.
-
-Poskrbi, da bo SmallStudent s SimpleArbiter dostopen na naslovu {testip}.
-
-Na SmallStudent ustvari uporabnika {testuser} z geslom {passwd}.
-
-Na smallstudent-personal je nekje skrita
-datoteka, ki vsebuje niz {magicstr}.
-Skopiraj jo v domači imenik {testuser} in preimenuj tako, da vse znake 'O' v imenu zamenjaš z 'I'.
-Pazi, da nobena druga datoteka v domačem imeniku v svojem imenu ne bo vsebovala "I".
-
-Poskrbi, da bo lastnik {testuser}, skupina pa naj ostane nespremenjena.
-Brati naj jo ima pravico samo lastnik, pisati lastnik in skupina, poganjati nihče.</pre>
-""",
- 'en': '''
-''',
-}
-
-instructions = {'si': 'Potrpite.', 'en': 'Have patience.'}
-
-computers = {
- 'SimpleArbiter': {
- 'disks': [
- {
- 'name': 'simpleArbiterEntrance',
- },
- ],
- 'network_interfaces': [
- {
- 'network': 'net1',
- },
- {
- 'network': 'net2',
- },
- ],
- 'flavor': 'm1.tiny',
- 'config_drive': False,
- },
- 'SmallStudent': {
- 'disks': [
- {
- 'name': 'student-entrance4',
- # 'parts': [{'dev': 'sda1', 'path': '/'}],
- },
- {
- 'name': 'smallstudent-personal',
- 'parts': [{'dev': 'sdb1', 'path': '/media'}, {'dev': 'sdb2', 'path': '/mnt'}]
- }
- ],
- 'network_interfaces': [
- {
- 'network': 'net2',
- },
- ],
- 'flavor': 'm1.tiny',
- 'config_drive': False,
- }
-}
-
-networks = {
- 'net1': {
- 'public': True,
- },
- 'net2': {
- 'public': False,
- }
-}
-
-params_meta = {
- 'testip': {
- 'descriptions': {
- 'si': 'IP SmallStudent',
- 'en': 'IP SmallStudent',
- },
- 'w': False,
- 'public': True,
- 'type': 'IP',
- 'generated': True,
- },
- 'testuser': {
- 'descriptions': {
- 'si': 'Uporabnik na SmallStudent',
- 'en': 'Username on SmallStudent',
- },
- 'w': False,
- 'public': True,
- 'type': 'username',
- 'generated': True,
- },
- 'passwd': {
- 'descriptions': {
- 'si': 'Geslo na SmallStudent',
- 'en': 'Password on SmallStudent',
- },
- 'w': False,
- 'public': True,
- 'type': None,
- 'generated': True,
-
- },
- 'mntdir': {
- 'descriptions': {
- 'si': 'imenik za priklop diska',
- 'en': 'mountpoint',
- },
- 'w': False,
- 'public': True,
- 'type': 'dirname',
- 'generated': True,
- },
- 'magicstr' : {
- 'descriptions': {
- 'si': 'Niz v iskani datoteki',
- 'en': 'String in the file you need to find',
- },
- 'w': False,
- 'public': True,
- 'type': None,
- 'generated': True,
-
- },
- 'rndseed': {
- 'descriptions': {
- 'si': 'random seed za skrito datoteko',
- 'en': 'random seed for hiding the file',
- },
- 'w': False,
- 'public': False,
- 'type': None,
- 'generated': True,
- },
-}
-
-def task(testip, testuser, passwd, mntdir, magicstr):
- return kpov_util.ssh_test(testip, testuser, passwd, (
- ('home_ls', 'ls ~/'),
- ('dst_file_contents', 'cat ~/*I*.txt'),
- ('dst_ls', 'ls -l ~/*I*.txt'),
- ('mnt', 'mount'),
- ))
-
-def gen_params(user_id, params_meta):
- import random
- params = dict()
- r = random.Random(user_id)
- params['testip'] = kpov_util.IPv4_addr_gen(r,
- network = '10.94.80.0/19', n_generated=1)[0]
- params['testuser'] = kpov_util.default_generators['username'](r)
- params['passwd'] = kpov_util.alnum_gen(r, 8)
- params['magicstr'] = "".join([r.choice("qwerztlpoQWERTPOL") for i in range(10)])
- params['mntdir'] = "/" + kpov_util.default_generators['filename'](r)
- params['rndseed'] = kpov_util.alnum_gen(r, 8)
- return params
-
-
-def task_check(results, params):
- import os
- import re
- hints = []
- score = 0
- if results['ssh'] is not True:
- hints += ['ssh failed: ' + results['ssh']]
- hidden_contents = params['magicstr']
- r = random.Random(params['rndseed'])
- dstfile = "".join([r.choice("qQoOp") for i in range(64)]) + "I.txt"
- dstfile = dstfile.replace('O', 'I')
- for i in range(1000):
- start = "".join([r.choice(["po", "p0", "no", "ko", "fo", "qo"]) for i in range(20)])
- mid = "".join([r.choice("uiasdfghjkyxcvbnm1234567890ASDFGHJKYZXCVBNM") for i in range(60)])
- end = r.choice(["lz", "1z", "Iz", "iz", "l2", "I2", "12"])
- #if start[:2] == "po" and end == "lz":
- # start = "po"
- # mid = "kaka"
- x = start + mid + end
- hidden_contents += x + "\r\n"
- expected_contents = hidden_contents
- #expected_contents = re.sub(r"^po.*lz\r$",
- # r"pokakalz\r",
- # hidden_contents,
- # re.MULTILINE)
- if results["dst_file_contents"] == expected_contents:
- score += 3
- else:
- diff_pos = (0, "")
- for i, c in enumerate(results["dst_file_contents"]):
- if len(expected_contents) < i or c != expected_contents[i]:
- start = max(0, i-10)
- end = min(len(expected_contents), len(results["dst_file_contents"]), i+20)
- diff_pos = (i, results["dst_file_contents"][start:end])
- break
- hints += ["wrong file contents\n" + str(diff_pos[1])]
- params['dstfile'] = dstfile
- expected_dst_ls = "-rw--w---- 1 {testuser} bilbo .*{dstfile}".format(**params)
- if re.match(expected_dst_ls, results["dst_ls"]):
- score += 2
- else:
- hints += ["missing file or wrong user/permissions\n" + results["dst_ls"] + "\n" + expected_dst_ls]
- if results["home_ls"].find(params['dstfile']) > -1:
- score += 2
- expected_mnts = [
- "/dev/sdb2 on {mntdir} type ext4".format(**params),
- "sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)",
- "proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)",
- "udev on /dev type devtmpfs (rw,nosuid,relatime",
- "/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)",]
- if all([results["mnt"].find(expected_mnt) > -1 for expected_mnt in expected_mnts]):
- score += 3
- else:
- hints += ["missing or wrong mount\n"]
- return score, hints
-
-
-def prepare_disks(templates, task_params, global_params):
- import random
- import os
-
- # first create the file contents to make it easyer to check.
- hidden_contents = task_params['magicstr']
- r = random.Random(task_params['rndseed'])
- dstfile = "".join([r.choice("qQoOp") for i in range(64)]) + "I.txt"
- for i in range(1000):
- x = "".join([r.choice(["po", "p0", "no", "ko", "fo", "qo"]) for i in range(20)])
- x += "".join([r.choice("uiasdfghjkyxcvbnm1234567890ASDFGHJKYZXCVBNM") for i in range(60)])
- x += r.choice(["lz", "1z", "Iz", "iz", "l2", "I2", "12"])
- hidden_contents += x + "\n"
-
- # create hidden file
- dir_list = ['Qlipper', 'Thunar', 'blender', 'autostart', 'kazam', 'mc', 'netsurf', 'pulse', 'qupzilla', 'radare2', 'teamviewer', 'texstudio', 'vlc']
- ending_list = ['rc', '.conf', '', '.txt']
- start_list = ['net', 'dev', 'doc', 'lib', 'time', 'conf']
- for i in range(20):
- start_list.append("".join([r.choice("qQoOp") for i in range(64)]) + "O")
- r.shuffle(dir_list)
- file_letters = ["mod", "co"]
-
- d = templates['smallstudent-personal']
- d.mkdir('/mnt/.hideme')
- d.mkdir('/media/.hideme')
- for potential_dir in dir_list:
- try:
- potential_dir1 = os.path.join('/mnt/.hideme', potential_dir)
- potential_dir2 = os.path.join('/media/.hideme', potential_dir)
- d.mkdir(potential_dir1)
- d.chown(1001, 1001, potential_dir1)
- d.mkdir(potential_dir2)
- d.chown(1001, 1001, potential_dir2)
- except:
- pass
- rndstr2 = dstfile
- for i in range(r.randint(2, 20)):
- hidden_file_name1 = os.path.join(potential_dir1,
- rndstr2)
- hidden_file_name2 = os.path.join(potential_dir2,
- rndstr2)
- d.write(hidden_file_name1, hidden_contents)
- d.chown(1001, 1001, hidden_file_name1)
- file_letters = ["stamp", "", "dev", "re"]
- hidden_contents = "".join([r.choice("asdfghjkyxcvbnm1234567890 \n") for j in range(10000)])
- d.write(hidden_file_name2, hidden_contents)
- d.chown(1001, 1001, hidden_file_name2)
- rndstr2 = r.choice(start_list) + \
- r.choice(file_letters) + r.choice(ending_list)
- file_letters = file_letters + ["mod", "co"]
- # TODO create some additional files
-
- # write_default_config(templates['simpleArbiterDhcpGW'], global_params)