Port rpmostree-passwd-util to C++

Prep for using https://cxx.rs/
This commit is contained in:
Colin Walters 2020-12-18 21:49:43 +00:00 committed by OpenShift Merge Robot
parent b78de32d21
commit 15836d988a
2 changed files with 32 additions and 34 deletions

View File

@ -25,7 +25,7 @@ librpmostreepriv_la_SOURCES = \
src/libpriv/rpmostree-util.c \ src/libpriv/rpmostree-util.c \
src/libpriv/rpmostree-util.h \ src/libpriv/rpmostree-util.h \
src/libpriv/rpmostree-types.h \ src/libpriv/rpmostree-types.h \
src/libpriv/rpmostree-passwd-util.c \ src/libpriv/rpmostree-passwd-util.cxx \
src/libpriv/rpmostree-passwd-util.h \ src/libpriv/rpmostree-passwd-util.h \
src/libpriv/rpmostree-refts.h \ src/libpriv/rpmostree-refts.h \
src/libpriv/rpmostree-refts.c \ src/libpriv/rpmostree-refts.c \

View File

@ -134,7 +134,7 @@ dir_contains_gid (int rootfs_fd,
static void static void
conv_passwd_ent_free (void *vptr) conv_passwd_ent_free (void *vptr)
{ {
struct conv_passwd_ent *ptr = vptr; auto ptr = static_cast<struct conv_passwd_ent *>(vptr);
g_free (ptr->name); g_free (ptr->name);
g_free (ptr->pw_gecos); g_free (ptr->pw_gecos);
@ -181,7 +181,7 @@ compare_passwd_ents (gconstpointer a, gconstpointer b)
static void static void
conv_group_ent_free (void *vptr) conv_group_ent_free (void *vptr)
{ {
struct conv_group_ent *ptr = vptr; auto ptr = static_cast<struct conv_group_ent *>(vptr);
g_free (ptr->name); g_free (ptr->name);
g_free (ptr); g_free (ptr);
@ -190,7 +190,7 @@ conv_group_ent_free (void *vptr)
static void static void
sysuser_ent_free (void *vptr) sysuser_ent_free (void *vptr)
{ {
struct sysuser_ent *ptr = vptr; auto ptr = static_cast<struct sysuser_ent *>(vptr);
g_free (ptr->name); g_free (ptr->name);
g_free (ptr->id); g_free (ptr->id);
g_free (ptr->gecos); g_free (ptr->gecos);
@ -266,7 +266,7 @@ rpmostree_passwdents2sysusers (GPtrArray *passwd_ents,
for (int counter = 0; counter < passwd_ents->len; counter++) for (int counter = 0; counter < passwd_ents->len; counter++)
{ {
struct conv_passwd_ent *convent = passwd_ents->pdata[counter]; auto convent = static_cast<struct conv_passwd_ent *>(passwd_ents->pdata[counter]);
struct sysuser_ent *sysent = g_new (struct sysuser_ent, 1); struct sysuser_ent *sysent = g_new (struct sysuser_ent, 1);
/* Systemd-sysusers also supports uid:gid format. That case was used /* Systemd-sysusers also supports uid:gid format. That case was used
@ -283,14 +283,14 @@ rpmostree_passwdents2sysusers (GPtrArray *passwd_ents,
sysent->gecos = (g_str_equal (convent->pw_gecos, "")) ? NULL : sysent->gecos = (g_str_equal (convent->pw_gecos, "")) ? NULL :
g_strdup_printf ("\"%s\"", convent->pw_gecos); g_strdup_printf ("\"%s\"", convent->pw_gecos);
sysent->dir = (g_str_equal (convent->pw_dir, ""))? NULL : sysent->dir = (g_str_equal (convent->pw_dir, ""))? NULL :
g_steal_pointer (&convent->pw_dir); util::move_nullify (convent->pw_dir);
sysent->shell = g_steal_pointer (&convent->pw_shell); sysent->shell = util::move_nullify (convent->pw_shell);
g_ptr_array_add (sysusers_array, sysent); g_ptr_array_add (sysusers_array, sysent);
} }
/* Do the assignment at the end if the sysusers_table was not initialized */ /* Do the assignment at the end if the sysusers_table was not initialized */
if (*out_sysusers_entries == NULL) if (*out_sysusers_entries == NULL)
*out_sysusers_entries = g_steal_pointer (&sysusers_array); *out_sysusers_entries = util::move_nullify (sysusers_array);
return TRUE; return TRUE;
} }
@ -306,11 +306,11 @@ rpmostree_groupents2sysusers (GPtrArray *group_ents,
for (int counter = 0; counter < group_ents->len; counter++) for (int counter = 0; counter < group_ents->len; counter++)
{ {
struct conv_group_ent *convent = group_ents->pdata[counter]; auto convent = static_cast<struct conv_group_ent *>(group_ents->pdata[counter]);
struct sysuser_ent *sysent = g_new (struct sysuser_ent, 1); struct sysuser_ent *sysent = g_new (struct sysuser_ent, 1);
sysent->type = "g"; sysent->type = "g";
sysent->name = g_steal_pointer (&convent->name); sysent->name = util::move_nullify (convent->name);
sysent->id = g_strdup_printf ("%u", convent->gid); sysent->id = g_strdup_printf ("%u", convent->gid);
sysent->gecos = NULL; sysent->gecos = NULL;
sysent->dir = NULL; sysent->dir = NULL;
@ -320,7 +320,7 @@ rpmostree_groupents2sysusers (GPtrArray *group_ents,
} }
/* Do the assignment at the end if the sysusers_array was not initialized */ /* Do the assignment at the end if the sysusers_array was not initialized */
if (*out_sysusers_entries == NULL) if (*out_sysusers_entries == NULL)
*out_sysusers_entries = g_steal_pointer (&sysusers_array); *out_sysusers_entries = util::move_nullify (sysusers_array);
return TRUE; return TRUE;
} }
@ -336,7 +336,7 @@ rpmostree_passwd_sysusers2char (GPtrArray *sysusers_entries,
g_ptr_array_sort (sysusers_entries, compare_sysuser_ents); g_ptr_array_sort (sysusers_entries, compare_sysuser_ents);
for (int counter = 0; counter < sysusers_entries->len; counter++) for (int counter = 0; counter < sysusers_entries->len; counter++)
{ {
struct sysuser_ent *sysent = sysusers_entries->pdata[counter]; auto sysent = static_cast<struct sysuser_ent *>(sysusers_entries->pdata[counter]);
const char *shell = sysent->shell ?: "-"; const char *shell = sysent->shell ?: "-";
const char *gecos = sysent->gecos ?: "-"; const char *gecos = sysent->gecos ?: "-";
const char *dir = sysent->dir ?: "-"; const char *dir = sysent->dir ?: "-";
@ -409,7 +409,7 @@ rpmostree_check_passwd_groups (gboolean passwd,
for (iter = ents; iter; iter = iter->next) for (iter = ents; iter; iter = iter->next)
if (passwd) if (passwd)
{ {
const char *name = iter->data; auto name = static_cast<const char *>(iter->data);
JsonNode *val = json_object_get_member (ents_obj, name); JsonNode *val = json_object_get_member (ents_obj, name);
JsonNodeType child_type = json_node_get_node_type (val); JsonNodeType child_type = json_node_get_node_type (val);
gint64 uid = 0; gint64 uid = 0;
@ -445,13 +445,13 @@ rpmostree_check_passwd_groups (gboolean passwd,
} }
else else
{ {
const char *name = iter->data; auto name = static_cast<const char *>(iter->data);
gint64 gid = 0; gint64 gid = 0;
if (!_rpmostree_jsonutil_object_require_int_member (ents_obj, name, &gid, error)) if (!_rpmostree_jsonutil_object_require_int_member (ents_obj, name, &gid, error))
return FALSE; return FALSE;
struct conv_group_ent *convent = g_new (struct conv_group_ent, 1); auto convent = static_cast<struct conv_group_ent *>(g_new (struct conv_group_ent, 1));
convent->name = g_strdup (name); convent->name = g_strdup (name);
convent->gid = gid; convent->gid = gid;
g_ptr_array_add (old_ents, convent); g_ptr_array_add (old_ents, convent);
@ -540,11 +540,9 @@ rpmostree_check_passwd_groups (gboolean passwd,
while ((oiter < old_ents->len) && (niter < new_ents->len)) while ((oiter < old_ents->len) && (niter < new_ents->len))
if (passwd) if (passwd)
{ {
struct conv_passwd_ent *odata = old_ents->pdata[oiter]; auto odata = static_cast<struct conv_passwd_ent *>(old_ents->pdata[oiter]);
struct conv_passwd_ent *ndata = new_ents->pdata[niter]; auto ndata = static_cast<struct conv_passwd_ent *>(new_ents->pdata[niter]);
int cmp = 0; int cmp = g_strcmp0 (odata->name, ndata->name);
cmp = g_strcmp0 (odata->name, ndata->name);
if (cmp == 0) if (cmp == 0)
{ {
@ -591,8 +589,8 @@ rpmostree_check_passwd_groups (gboolean passwd,
} }
else else
{ {
struct conv_group_ent *odata = old_ents->pdata[oiter]; auto odata = static_cast<struct conv_group_ent *>(old_ents->pdata[oiter]);
struct conv_group_ent *ndata = new_ents->pdata[niter]; auto ndata = static_cast<struct conv_group_ent *>(new_ents->pdata[niter]);
int cmp = 0; int cmp = 0;
cmp = g_strcmp0 (odata->name, ndata->name); cmp = g_strcmp0 (odata->name, ndata->name);
@ -644,14 +642,14 @@ rpmostree_check_passwd_groups (gboolean passwd,
{ {
if (oiter < old_ents->len) if (oiter < old_ents->len)
{ {
struct conv_passwd_ent *odata = old_ents->pdata[oiter]; auto odata = static_cast<struct conv_passwd_ent *>(old_ents->pdata[oiter]);
return glnx_throw (error, "User missing from new passwd file: %s", odata->name); return glnx_throw (error, "User missing from new passwd file: %s", odata->name);
} }
while (niter < new_ents->len) while (niter < new_ents->len)
{ {
struct conv_passwd_ent *ndata = new_ents->pdata[niter]; auto ndata = static_cast<struct conv_passwd_ent *>(new_ents->pdata[niter]);
g_print ("New passwd entry: %s\n", ndata->name); g_print ("New passwd entry: %s\n", ndata->name);
++niter; ++niter;
@ -661,14 +659,14 @@ rpmostree_check_passwd_groups (gboolean passwd,
{ {
if (oiter < old_ents->len) if (oiter < old_ents->len)
{ {
struct conv_group_ent *odata = old_ents->pdata[oiter]; auto odata = static_cast<struct conv_group_ent *>(old_ents->pdata[oiter]);
return glnx_throw (error, "Group missing from new group file: %s", odata->name); return glnx_throw (error, "Group missing from new group file: %s", odata->name);
} }
while (niter < new_ents->len) while (niter < new_ents->len)
{ {
struct conv_group_ent *ndata = new_ents->pdata[niter]; auto ndata = static_cast<struct conv_group_ent *>(new_ents->pdata[niter]);
g_print ("New group entry: %s\n", ndata->name); g_print ("New group entry: %s\n", ndata->name);
++niter; ++niter;
@ -727,7 +725,7 @@ open_file_stream_read_at (int dfd,
return FALSE; return FALSE;
FILE *ret = fdopen (fd, "r"); FILE *ret = fdopen (fd, "r");
if (!ret) if (!ret)
return glnx_null_throw_errno_prefix (error, "fdopen"); return (FILE*)glnx_null_throw_errno_prefix (error, "fdopen");
/* fdopen() steals ownership of fd */ /* fdopen() steals ownership of fd */
fd = -1; fd = -1;
return ret; return ret;
@ -745,10 +743,10 @@ open_file_stream_write_at (int dfd,
*/ */
glnx_autofd int fd = openat (dfd, path, O_WRONLY | O_CREAT | O_CLOEXEC | O_NOCTTY, 0664); glnx_autofd int fd = openat (dfd, path, O_WRONLY | O_CREAT | O_CLOEXEC | O_NOCTTY, 0664);
if (fd < 0) if (fd < 0)
return glnx_null_throw_errno_prefix (error, "openat(%s)", path); return (FILE*)glnx_null_throw_errno_prefix (error, "openat(%s)", path);
FILE *ret = fdopen (fd, mode); FILE *ret = fdopen (fd, mode);
if (!ret) if (!ret)
return glnx_null_throw_errno_prefix (error, "fdopen"); return (FILE*)glnx_null_throw_errno_prefix (error, "fdopen");
/* fdopen() steals ownership of fd */ /* fdopen() steals ownership of fd */
fd = -1; fd = -1;
return ret; return ret;
@ -890,7 +888,7 @@ _rpmostree_gfile2stdio (GFile *source,
if (!src_stream) if (!src_stream)
return glnx_throw_errno_prefix (error, "fmemopen"); return glnx_throw_errno_prefix (error, "fmemopen");
*ret_src_stream = g_steal_pointer (&src_stream); *ret_src_stream = util::move_nullify (src_stream);
return TRUE; return TRUE;
} }
@ -1245,7 +1243,7 @@ rpmostree_passwd_prepare_rpm_layering (int rootfs_dfd,
if (!glnx_file_copy_at (AT_FDCWD, if (!glnx_file_copy_at (AT_FDCWD,
glnx_strjoina (merge_passwd_dir, "/", file), NULL, glnx_strjoina (merge_passwd_dir, "/", file), NULL,
rootfs_dfd, usrlibfiletmp, rootfs_dfd, usrlibfiletmp,
GLNX_FILE_COPY_OVERWRITE | GLNX_FILE_COPY_NOXATTRS, static_cast<GLnxFileCopyFlags>(GLNX_FILE_COPY_OVERWRITE | GLNX_FILE_COPY_NOXATTRS),
cancellable, error)) cancellable, error))
return FALSE; return FALSE;
@ -1351,19 +1349,19 @@ rpmostree_passwddb_open (int rootfs, GCancellable *cancellable, GError **error)
if (!add_groups_to_hash (rootfs, "usr/lib/group", ret->groups, error)) if (!add_groups_to_hash (rootfs, "usr/lib/group", ret->groups, error))
return NULL; return NULL;
return g_steal_pointer (&ret); return util::move_nullify (ret);
} }
const char * const char *
rpmostree_passwddb_lookup_user (RpmOstreePasswdDB *db, uid_t uid) rpmostree_passwddb_lookup_user (RpmOstreePasswdDB *db, uid_t uid)
{ {
return g_hash_table_lookup (db->users, GUINT_TO_POINTER (uid)); return static_cast<const char*>(g_hash_table_lookup (db->users, GUINT_TO_POINTER (uid)));
} }
const char * const char *
rpmostree_passwddb_lookup_group (RpmOstreePasswdDB *db, gid_t gid) rpmostree_passwddb_lookup_group (RpmOstreePasswdDB *db, gid_t gid)
{ {
return g_hash_table_lookup (db->groups, GUINT_TO_POINTER (gid)); return static_cast<const char*>(g_hash_table_lookup (db->groups, GUINT_TO_POINTER (gid)));
} }
void void