From nobody Sat Jun 26 22:45:43 2021 X-Original-To: ports-bugs@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id AA7A111F6339 for ; Sat, 26 Jun 2021 22:45:43 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4GC8934LwNz3tC7 for ; Sat, 26 Jun 2021 22:45:43 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org (kenobi.freebsd.org [IPv6:2610:1c1:1:606c::50:1d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7AC2026D59 for ; Sat, 26 Jun 2021 22:45:43 +0000 (UTC) (envelope-from bugzilla-noreply@freebsd.org) Received: from kenobi.freebsd.org ([127.0.1.5]) by kenobi.freebsd.org (8.15.2/8.15.2) with ESMTP id 15QMjhgI055836 for ; Sat, 26 Jun 2021 22:45:43 GMT (envelope-from bugzilla-noreply@freebsd.org) Received: (from www@localhost) by kenobi.freebsd.org (8.15.2/8.15.2/Submit) id 15QMjhnB055835 for ports-bugs@FreeBSD.org; Sat, 26 Jun 2021 22:45:43 GMT (envelope-from bugzilla-noreply@freebsd.org) X-Authentication-Warning: kenobi.freebsd.org: www set sender to bugzilla-noreply@freebsd.org using -f From: bugzilla-noreply@freebsd.org To: ports-bugs@FreeBSD.org Subject: [Bug 249445] sysutils/accountsservice: Update to 0.6.55 Date: Sat, 26 Jun 2021 22:45:43 +0000 X-Bugzilla-Reason: AssignedTo X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: Ports & Packages X-Bugzilla-Component: Individual Port(s) X-Bugzilla-Version: Latest X-Bugzilla-Keywords: X-Bugzilla-Severity: Affects Only Me X-Bugzilla-Who: david@dcrosstech.com X-Bugzilla-Status: Open X-Bugzilla-Resolution: X-Bugzilla-Priority: --- X-Bugzilla-Assigned-To: ports-bugs@FreeBSD.org X-Bugzilla-Flags: maintainer-feedback- X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: https://bugs.freebsd.org/bugzilla/ Auto-Submitted: auto-generated List-Id: Ports bug reports List-Archive: https://lists.freebsd.org/archives/freebsd-ports-bugs List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-ports-bugs@freebsd.org X-BeenThere: freebsd-ports-bugs@freebsd.org MIME-Version: 1.0 X-ThisMailContainsUnwantedMimeParts: N https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D249445 david@dcrosstech.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |david@dcrosstech.com --- Comment #12 from david@dcrosstech.com --- I have been hitting this issue myself, and I think the bug exists in 2 plac= es.=20 1 in accountservice/src/daemon.c: daemon.c:197 > /* First iteration */ > if (*state =3D=3D NULL) { > GHashTable *shadow_users =3D NULL; > FILE *fp; > #ifdef HAVE_SHADOW_H > struct spwd *shadow_entry; >=20 > fp =3D fopen (PATH_SHADOW, "r"); > if (fp =3D=3D NULL) { > g_warning ("Unable to open %s: %s", PATH_SHADOW, = g_strerror (errno)); > return NULL; > } >=20 > shadow_users =3D g_hash_table_new_full (g_str_hash, g_str= _equal, g_free, g_free); >=20 > do { > int ret =3D 0; >=20 > shadow_entry_buffers =3D g_malloc0 (sizeof (*shad= ow_entry_buffers)); >=20 > ret =3D fgetspent_r (fp, &shadow_entry_buffers->s= pbuf, shadow_entry_buffers->buf, sizeof (shadow_entry_buffers->buf), &shado= w_entry); > if (ret =3D=3D 0) { > g_hash_table_insert (shadow_users, g_strd= up (shadow_entry->sp_namp), shadow_entry_buffers); > } else { > g_free (shadow_entry_buffers); >=20 > if (errno !=3D EINTR) { > break; > } > } > } while (shadow_entry !=3D NULL); >=20 > fclose (fp); >=20 > if (g_hash_table_size (shadow_users) =3D=3D 0) { > g_clear_pointer (&shadow_users, g_hash_table_unre= f); > return NULL; > } > #endif >=20 > fp =3D fopen (PATH_PASSWD, "r"); > if (fp =3D=3D NULL) { > g_clear_pointer (&shadow_users, g_hash_table_unre= f); > g_warning ("Unable to open %s: %s", PATH_PASSWD, = g_strerror (errno)); > return NULL; > } >=20 > generator_state =3D g_malloc0 (sizeof (*generator_state)); > generator_state->fp =3D fp; > generator_state->users =3D shadow_users; >=20 > *state =3D generator_state; > } >=20 > /* Every iteration */ > generator_state =3D *state; >=20 > if (g_hash_table_size (users) < MAX_LOCAL_USERS) { > pwent =3D fgetpwent (generator_state->fp); > if (pwent !=3D NULL) { > #ifdef HAVE_SHADOW_H > shadow_entry_buffers =3D g_hash_table_lookup (gen= erator_state->users, pwent->pw_name); >=20 > if (shadow_entry_buffers !=3D NULL) { > *spent =3D &shadow_entry_buffers->spbuf; > } > return pwent; > #else > if (!generator_state->users || g_hash_table_looku= p (generator_state->users, pwent->pw_name)) > return pwent; > #endif > } > } Note that my reading of the code is that it pulls all of /etc/shadow into memory (and does it extremely hamfistedly), and then uses that to prune /etc/passwd in such a way that users that aren't in /etc/shadow don't even = show up: > if (!generator_state->users || g_hash_table_lookup (generator_state->u= sers, pwent->pw_name)) > return pwent; So generator_state-> users has to be non-null, AND it has to have a user by that name in it... but in the first iteration generator_state->users is set= to shadow_users (L246), however shadow_users is set L210 (inside the #ifdef block), and populated in that block, what WE get is the initial value (NULL= ), L199.... Therefore that check NEVER passes, and we never have ANY users. So I fixed that by removing the if conditional and always returned pwent. This however did not fix it. In experimenting I would swap out JUST account-daemon (or whatever it is called), and hit gdm. THIS worked.... and later I discovered that there is libaccountservice at play here, I think t= here is a *second* bug lurking in there. I did a git diff between the two versi= ons that we upgraded and .. a lot changed.=20=20 I am not done investigating yet, but I figured more eyes will help. I hope this helps. --=20 You are receiving this mail because: You are the assignee for the bug.=