view system/accountsservice/musl-fgetspent_r.patch @ 1291:a9335125bc38

lib/popt: upgrade to 1.18
author David Demelier <markand@malikania.fr>
date Tue, 16 Nov 2021 15:11:48 +0100
parents 9987c7d6e9cf
children
line wrap: on
line source

diff --git a/src/daemon.c b/src/daemon.c
index 312394a..e7b3c58 100644
--- src/daemon.c
+++ src/daemon.c
@@ -140,6 +140,28 @@ error_get_type (void)
 #define MAX_LOCAL_USERS 50
 #endif
 
+#ifndef __GLIBC__
+ /* Musl libc does not support fgetspent_r(), write own
+  * wrapper
+  */
+static int fgetspent_r(FILE *fp, struct spwd *spbuf, char *buf, size_t buflen, struct spwd **spbufp) {
+       struct spwd *shadow_entry = fgetspent(fp);
+       if(!shadow_entry)
+               return -1;
+       size_t namplen = strlen(shadow_entry->sp_namp);
+       size_t pwdplen = strlen(shadow_entry->sp_pwdp);
+
+       if(namplen + pwdplen + 2 > buflen)
+               return -1;
+
+       *spbufp = memcpy(spbuf, shadow_entry, sizeof(struct spwd));
+       spbuf->sp_namp = strncpy(buf, shadow_entry->sp_namp, namplen + 1);
+       spbuf->sp_pwdp = strncpy(buf + namplen + 1, shadow_entry->sp_pwdp, pwdplen + 1);
+
+       return 0;
+}
+#endif
+
 static struct passwd *
 entry_generator_fgetpwent (Daemon       *daemon,
                            GHashTable   *users,