Prior to this change, no user shell can be specified in the user records passed into a container via --bind-user=. This new option allows users to: 1. When false (the default), continue to specify no user shell for each bound user record, resulting in the use of the container's default shell for bound users. 2. When true, include each host user's shell in the corresponding user record passed into a container (via --bind-user=). 3. When an absolute path, set that path as the user shell for each user record passed into a container (via --bind-user=). This does not change the existing behavior, but allows users to opt-in to either copy the shells specified by the host user records or override the shell explicitly by path.
30 lines
948 B
C
30 lines
948 B
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include "forward.h"
|
|
|
|
typedef struct CustomMount CustomMount;
|
|
|
|
typedef struct BindUserData {
|
|
/* The host's user/group records */
|
|
UserRecord *host_user;
|
|
GroupRecord *host_group;
|
|
|
|
/* The mapped records to place into the container */
|
|
UserRecord *payload_user;
|
|
GroupRecord *payload_group;
|
|
} BindUserData;
|
|
|
|
typedef struct BindUserContext {
|
|
BindUserData *data;
|
|
size_t n_data;
|
|
} BindUserContext;
|
|
|
|
BindUserContext* bind_user_context_free(BindUserContext *c);
|
|
|
|
DEFINE_TRIVIAL_CLEANUP_FUNC(BindUserContext*, bind_user_context_free);
|
|
|
|
int bind_user_prepare(const char *directory, char **bind_user, const char *bind_user_shell, bool bind_user_shell_copy, uid_t uid_shift, uid_t uid_range, CustomMount **custom_mounts, size_t *n_custom_mounts, BindUserContext **ret);
|
|
|
|
int bind_user_setup(const BindUserContext *c, const char *root);
|