This adds the support for veritytab. The veritytab file contains at most five fields, the first four are mandatory, the last one is optional: - The first field contains the name of the resulting verity volume; its block device is set up /dev/mapper/</filename>. - The second field contains a path to the underlying block data device, or a specification of a block device via UUID= followed by the UUID. - The third field contains a path to the underlying block hash device, or a specification of a block device via UUID= followed by the UUID. - The fourth field is the roothash in hexadecimal. - The fifth field, if present, is a comma-delimited list of options. The following options are recognized only: ignore-corruption, restart-on-corruption, panic-on-corruption, ignore-zero-blocks, check-at-most-once and root-hash-signature. The others options will be implemented later. Also, this adds support for the new kernel verity command line boolean option "veritytab" which enables the read for veritytab, and the new environment variable SYSTEMD_VERITYTAB which sets the path to the file veritytab to read.
97 lines
3.0 KiB
C
97 lines
3.0 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "main-func.h"
|
|
|
|
int generator_open_unit_file(
|
|
const char *dest,
|
|
const char *source,
|
|
const char *name,
|
|
FILE **file);
|
|
|
|
int generator_add_symlink(const char *dir, const char *dst, const char *dep_type, const char *src);
|
|
|
|
int generator_write_fsck_deps(
|
|
FILE *f,
|
|
const char *dir,
|
|
const char *what,
|
|
const char *where,
|
|
const char *type);
|
|
|
|
int generator_write_timeouts(
|
|
const char *dir,
|
|
const char *what,
|
|
const char *where,
|
|
const char *opts,
|
|
char **filtered);
|
|
|
|
int generator_write_blockdev_dependency(
|
|
FILE *f,
|
|
const char *what);
|
|
|
|
int generator_write_cryptsetup_unit_section(
|
|
FILE *f,
|
|
const char *source);
|
|
|
|
int generator_write_cryptsetup_service_section(
|
|
FILE *f,
|
|
const char *name,
|
|
const char *what,
|
|
const char *password,
|
|
const char *options);
|
|
|
|
int generator_write_veritysetup_unit_section(
|
|
FILE *f,
|
|
const char *source);
|
|
|
|
int generator_write_veritysetup_service_section(
|
|
FILE *f,
|
|
const char *name,
|
|
const char *data_what,
|
|
const char *hash_what,
|
|
const char *roothash,
|
|
const char *options);
|
|
|
|
int generator_write_device_deps(
|
|
const char *dir,
|
|
const char *what,
|
|
const char *where,
|
|
const char *opts);
|
|
|
|
int generator_write_initrd_root_device_deps(
|
|
const char *dir,
|
|
const char *what);
|
|
|
|
int generator_hook_up_mkswap(
|
|
const char *dir,
|
|
const char *what);
|
|
int generator_hook_up_mkfs(
|
|
const char *dir,
|
|
const char *what,
|
|
const char *where,
|
|
const char *type);
|
|
int generator_hook_up_growfs(
|
|
const char *dir,
|
|
const char *where,
|
|
const char *target);
|
|
|
|
int generator_enable_remount_fs_service(const char *dir);
|
|
|
|
void log_setup_generator(void);
|
|
|
|
/* Similar to DEFINE_MAIN_FUNCTION, but initializes logging and assigns positional arguments. */
|
|
#define DEFINE_MAIN_GENERATOR_FUNCTION(impl) \
|
|
_DEFINE_MAIN_FUNCTION( \
|
|
({ \
|
|
log_setup_generator(); \
|
|
if (argc > 1 && argc != 4) \
|
|
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), \
|
|
"This program takes zero or three arguments."); \
|
|
}), \
|
|
impl(argc > 1 ? argv[1] : "/tmp", \
|
|
argc > 1 ? argv[2] : "/tmp", \
|
|
argc > 1 ? argv[3] : "/tmp"), \
|
|
r < 0 ? EXIT_FAILURE : EXIT_SUCCESS)
|