@@ -104,7 +104,9 @@ jobs:
104104 build, prefix, integration = [output / name for name in ('build', 'prefix', 'integration-shared')]
105105 for directory in (build, prefix, integration):
106106 directory.mkdir()
107- command = Commands(output)
107+ runner_commands = output / 'runner'
108+ runner_commands.mkdir()
109+ command = Commands(runner_commands)
108110 provider = output.parent / 'prerequisites/provider'
109111 compiler, cc = os.environ['V3_CXX'], os.environ['V3_CC']
110112 toolchain = Path(os.environ['V3_PACKAGE_TOOLCHAIN'])
@@ -116,6 +118,7 @@ jobs:
116118 LDFLAGS='-Wl,-rpath,' + str(provider / 'lib'))
117119 receipt = dict(kind='diagnostic-only; not complete package validation', tls='no', linkage='shared',
118120 trace_mode='bounded memory; stderr emitted after all suite fixtures stop',
121+ runner_context=dict(uid=os.getuid(), euid=os.geteuid(), gid=os.getgid(), egid=os.getegid(), cwd=str(checkout)),
119122 revision=command(['git', 'rev-parse', 'HEAD'], checkout, env).strip(),
120123 compiler=command([compiler, '--version'], checkout, env),
121124 provider_header_sha256=hashlib.sha256((provider / 'include/openssl/opensslv.h').read_bytes()).hexdigest())
@@ -161,6 +164,44 @@ jobs:
161164 receipt['source_archive'] = dict(**expected, artifact_zip_sha256=zip_digest,
162165 archive_sha256=selected['sha256'], source_root=str(source), overlay=overlay,
163166 provenance='verified original archive plus explicit diagnostic overlay; not immutable release proof')
167+ receipt['status'] = 'archive overlay ready; privileged execution pending'
168+ except Exception as error:
169+ receipt.update(status='diagnostic failed', error=str(error))
170+ raise
171+ finally:
172+ (output / 'diagnostic.json').write_text(json.dumps(receipt, indent=2) + '\n')
173+ PY_DIAGNOSTIC
174+ diagnostic_script="$RUNNER_TEMP/package-evidence/header-deadline-build.py"
175+ cat > "$diagnostic_script" <<'PY_PRIVILEGED'
176+ import importlib.util, json, os, shlex, sys
177+ from pathlib import Path
178+ checkout = Path.cwd().resolve()
179+ sys.path.insert(0, str(checkout / 'scripts/lib'))
180+ import package_matrix as matrix
181+ from package_commands import Commands, runtime_environment
182+ from package_integration import compile_probe
183+ spec = importlib.util.spec_from_file_location('audit', checkout / 'scripts/audit-v3-installed-package.py')
184+ audit = importlib.util.module_from_spec(spec)
185+ spec.loader.exec_module(audit)
186+ output = Path(os.environ['RUNNER_TEMP']) / 'package-evidence/header-deadline-diagnostic'
187+ receipt = json.loads((output / 'diagnostic.json').read_text())
188+ source = Path(receipt['source_archive']['source_root'])
189+ build, prefix, integration = [output / name for name in ('build', 'prefix', 'integration-shared')]
190+ provider = output.parent / 'prerequisites/provider'
191+ os.environ['PATH'] = str(provider / 'bin') + os.pathsep + os.environ['PATH']
192+ compiler, cc = os.environ['V3_CXX'], os.environ['V3_CC']
193+ toolchain = Path(os.environ['V3_PACKAGE_TOOLCHAIN'])
194+ env = audit.clean_environment()
195+ env.update(CXX=compiler, CC=cc, CXXFLAGS='-O0 -g', CPPFLAGS='-DHTTPSERVER_DIAG_HEADER_DEADLINE',
196+ LDFLAGS='-Wl,-rpath,' + str(provider / 'lib'))
197+ command = Commands(output)
198+ receipt['privileged_context'] = dict(uid=os.getuid(), euid=os.geteuid(), gid=os.getgid(), egid=os.getegid(),
199+ cwd=str(checkout), compiler=compiler, cc=cc, toolchain=str(toolchain), provider_prefix=str(provider),
200+ path=env['PATH'], git_safe_directory=os.environ['GIT_CONFIG_VALUE_0'],
201+ build_environment={key: env.get(key) for key in ('CXX', 'CC', 'CPPFLAGS', 'CXXFLAGS', 'LDFLAGS')})
202+ try:
203+ assert os.geteuid() == 0, 'diagnostic build/test must match the original root execution'
204+ assert not any(key in os.environ for key in ('GH_TOKEN', 'GITHUB_TOKEN'))
164205 command(['bash', source / 'configure', '--enable-v3-tls=no', '--disable-examples', '--prefix=' + str(prefix)], build, env)
165206 command(['make', '-j2'], build, env)
166207 command(['make', 'install'], build, env)
@@ -180,17 +221,33 @@ jobs:
180221 graph = audit.dependency_graph([str(executable)])
181222 matrix.check_linkage(graph, 'shared', prefix)
182223 receipt['dependencies'] = graph
183- result = command([str(executable)], source / 'test', runtime, timeout=180, allow_failure=True)
224+ launch = ('import json,os,sys; assert os.geteuid() == 0; '
225+ 'assert not any(key in os.environ for key in ("GH_TOKEN", "GITHUB_TOKEN")); '
226+ 'context=dict(uid=os.getuid(),euid=os.geteuid(),gid=os.getgid(),egid=os.getegid(),cwd=os.getcwd(),'
227+ 'runtime={key:os.environ.get(key) for key in ("PATH","DYLD_LIBRARY_PATH","LD_LIBRARY_PATH","V3_PACKAGE_TOOLCHAIN")}); '
228+ 'print("V3_DIAGNOSTIC_CONTEXT " + json.dumps(context),flush=True); '
229+ 'os.execvpe(sys.argv[1],sys.argv[1:],os.environ)')
230+ result = command([sys.executable, '-c', launch, str(executable)], source / 'test', runtime, timeout=180, allow_failure=True)
184231 print(result, end='', flush=True)
185232 receipt['exit'] = command.records[-1]['exit']
233+ contexts = [line.removeprefix('V3_DIAGNOSTIC_CONTEXT ') for line in result.splitlines()
234+ if line.startswith('V3_DIAGNOSTIC_CONTEXT ')]
235+ assert len(contexts) == 1
236+ receipt['test_execution_context'] = json.loads(contexts[0])
237+ assert receipt['test_execution_context']['euid'] == 0
186238 receipt['suite'] = matrix.suite_result(result, receipt['exit'])
187239 receipt['status'] = 'diagnostic suite passed; full matrix not run'
188240 except Exception as error:
189241 receipt.update(status='diagnostic failed', error=str(error))
190242 raise
191243 finally:
192244 (output / 'diagnostic.json').write_text(json.dumps(receipt, indent=2) + '\n')
193- PY_DIAGNOSTIC
245+ PY_PRIVILEGED
246+ diagnostic_python=$(command -v python3)
247+ env -u GH_TOKEN -u GITHUB_TOKEN sudo env "PATH=$PATH" \
248+ GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=safe.directory "GIT_CONFIG_VALUE_0=$PWD" \
249+ "RUNNER_TEMP=$RUNNER_TEMP" "V3_CXX=$V3_CXX" "V3_CC=$V3_CC" "V3_PACKAGE_TOOLCHAIN=$V3_PACKAGE_TOOLCHAIN" \
250+ "$diagnostic_python" "$diagnostic_script"
194251 - name : Make privileged proof readable by artifact upload
195252 if : always()
196253 run : |
0 commit comments