1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 typedef struct DynamicUser DynamicUser
;
6 typedef struct DynamicCreds
{
7 /* A combination of a dynamic user and group */
14 /* Note that this object always allocates a pair of user and group under the same name, even if one of them isn't
15 * used. This means, if you want to allocate a group and user pair, and they might have two different names, then you
16 * need to allocated two of these objects. DynamicCreds below makes that easy. */
21 /* An AF_UNIX socket pair that contains a datagram containing both the numeric ID assigned, as well as a lock
22 * file fd locking the user ID we picked. */
23 int storage_socket
[2];
28 int dynamic_user_serialize(Manager
*m
, FILE *f
, FDSet
*fds
);
29 int dynamic_user_serialize_one(DynamicUser
*d
, const char *key
, FILE *f
, FDSet
*fds
);
30 void dynamic_user_deserialize_one(Manager
*m
, const char *value
, FDSet
*fds
, DynamicUser
**ret
);
31 DynamicUser
* dynamic_user_free(DynamicUser
*d
);
32 void dynamic_user_vacuum(Manager
*m
, bool close_user
);
34 int dynamic_user_current(DynamicUser
*d
, uid_t
*ret
);
35 int dynamic_user_lookup_uid(Manager
*m
, uid_t uid
, char **ret
);
36 int dynamic_user_lookup_name(Manager
*m
, const char *name
, uid_t
*ret
);
38 int dynamic_creds_make(Manager
*m
, const char *user
, const char *group
, DynamicCreds
**ret
);
39 int dynamic_creds_realize(DynamicCreds
*creds
, char **suggested_paths
, uid_t
*uid
, gid_t
*gid
);
41 DynamicCreds
*dynamic_creds_unref(DynamicCreds
*creds
);
42 DynamicCreds
*dynamic_creds_destroy(DynamicCreds
*creds
);
43 void dynamic_creds_done(DynamicCreds
*creds
);
44 void dynamic_creds_close(DynamicCreds
*creds
);
46 DEFINE_TRIVIAL_CLEANUP_FUNC(DynamicCreds
*, dynamic_creds_unref
);
47 DEFINE_TRIVIAL_CLEANUP_FUNC(DynamicCreds
*, dynamic_creds_destroy
);
49 DynamicUser
*dynamic_user_ref(DynamicUser
*user
);