mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] fix errno not being set to ERANGE by getgr, getpw, and getspnam
@ 2017-06-06 16:21 Rudolph Pereira
  2017-06-09  0:00 ` Rich Felker
  0 siblings, 1 reply; 6+ messages in thread
From: Rudolph Pereira @ 2017-06-06 16:21 UTC (permalink / raw)
  To: musl


[-- Attachment #1.1: Type: text/plain, Size: 465 bytes --]

Hi,

currently, the getgr, getpw, and getspnam functions in musl return ERANGE
when the allocated buffer is not large enough, but do not set errno to the
same value. This causes issues with utilities, for example the "shadow"
utilities (useradd/mod, groupmod, etc.) which assume this behaviour (which
at least gnu libc exhibits) and leads to groups having a small limit on the
number of members.

The attached patch, against 1.1.16, corrects this.

Cheers,
Rudolph

[-- Attachment #1.2: Type: text/html, Size: 579 bytes --]

[-- Attachment #2: 1100-getX-errno.patch --]
[-- Type: text/x-patch, Size: 1120 bytes --]

--- musl-1.1.16.orig/src/passwd/getgr_r.c
+++ musl-1.1.16/src/passwd/getgr_r.c
@@ -1,5 +1,6 @@
 #include "pwf.h"
 #include <pthread.h>
+#include <errno.h>
 
 #define FIX(x) (gr->gr_##x = gr->gr_##x-line+buf)
 
@@ -19,6 +20,7 @@
 	if (*res && size < len + (nmem+1)*sizeof(char *) + 32) {
 		*res = 0;
 		rv = ERANGE;
+		errno = ERANGE;
 	}
 	if (*res) {
 		buf += (16-(uintptr_t)buf)%16;
--- musl-1.1.16.orig/src/passwd/getpw_r.c
+++ musl-1.1.16/src/passwd/getpw_r.c
@@ -1,5 +1,6 @@
 #include "pwf.h"
 #include <pthread.h>
+#include <errno.h>
 
 #define FIX(x) (pw->pw_##x = pw->pw_##x-line+buf)
 
@@ -16,6 +17,7 @@
 	if (*res && size < len) {
 		*res = 0;
 		rv = ERANGE;
+		errno = ERANGE;
 	}
 	if (*res) {
 		memcpy(buf, line, len);
--- musl-1.1.16.orig/src/passwd/getspnam_r.c
+++ musl-1.1.16/src/passwd/getspnam_r.c
@@ -3,6 +3,7 @@
 #include <sys/stat.h>
 #include <ctype.h>
 #include <pthread.h>
+#include <errno.h>
 #include "pwf.h"
 
 /* This implementation support Openwall-style TCB passwords in place of
@@ -104,6 +105,7 @@
 		}
 		if (buf[k-1] != '\n') {
 			rv = ERANGE;
+			errno = ERANGE;
 			break;
 		}

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-06-15 17:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-06 16:21 [PATCH] fix errno not being set to ERANGE by getgr, getpw, and getspnam Rudolph Pereira
2017-06-09  0:00 ` Rich Felker
2017-06-11 16:59   ` Rudolph Pereira
2017-06-15  0:05     ` Rich Felker
2017-06-15 12:18       ` Rudolph Pereira
2017-06-15 17:04         ` Rich Felker

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).