passwd-util: adds sorting logic for sysuser_entry
Per tile, added logic for sysusers_sorting. The comparison for each sysuer_ent is like the following: 1: g > u > m for sysent_type and this takes precedence 2: if type matches, we compare the name for sysent using strcmp 3: If both type and name matches, we want to error out because it indicates a duplicate entry Closes: #1519 Approved by: cgwalters
This commit is contained in:
parent
d7dc6fe33c
commit
6facef9733
@ -228,6 +228,31 @@ compare_group_ents (gconstpointer a, gconstpointer b)
|
|||||||
return strcmp ((*sa)->name, (*sb)->name);
|
return strcmp ((*sa)->name, (*sb)->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
compare_sysuser_ents (gconstpointer a, gconstpointer b)
|
||||||
|
{
|
||||||
|
const struct sysuser_ent **sa = (const struct sysuser_ent **)a;
|
||||||
|
const struct sysuser_ent **sb = (const struct sysuser_ent **)b;
|
||||||
|
|
||||||
|
/* g > u > m */
|
||||||
|
if (!g_str_equal ((*sa)->type, (*sb)->type))
|
||||||
|
{
|
||||||
|
gboolean is_group_type = g_str_equal ((*sa)->type, "g") || g_str_equal ((*sa)->type, "g");
|
||||||
|
if (is_group_type)
|
||||||
|
return !strcmp ((*sa)->type, (*sb)->type); /* g is smaller than m and u, we want g > other type here*/
|
||||||
|
|
||||||
|
gboolean is_user_type = g_str_equal ((*sa)->type, "u") || g_str_equal ((*sb)->type, "u");
|
||||||
|
if (is_user_type)
|
||||||
|
return strcmp ((*sa)->type, (*sb)->type); /* u > m */
|
||||||
|
}
|
||||||
|
/* We sort the entry name if type happens to be the same */
|
||||||
|
if (!g_str_equal ((*sa)->name, (*sb)->name))
|
||||||
|
return strcmp ((*sa)->name, (*sb)->name);
|
||||||
|
|
||||||
|
/* This is a collision, when both name and type matches, could error out here */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
rpmostree_passwdents2sysusers (GPtrArray *passwd_ents,
|
rpmostree_passwdents2sysusers (GPtrArray *passwd_ents,
|
||||||
GPtrArray **out_sysusers_entries,
|
GPtrArray **out_sysusers_entries,
|
||||||
@ -306,6 +331,8 @@ rpmostree_passwd_sysusers2char (GPtrArray *sysusers_entries,
|
|||||||
{
|
{
|
||||||
|
|
||||||
GString* sysuser_content = g_string_new (NULL);
|
GString* sysuser_content = g_string_new (NULL);
|
||||||
|
/* We do the sorting before conversion */
|
||||||
|
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];
|
struct sysuser_ent *sysent = sysusers_entries->pdata[counter];
|
||||||
|
Loading…
Reference in New Issue
Block a user