From 630497dbc07971f6edc5b0cab4651ceef2ec662e Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Fri, 25 Oct 2013 18:44:20 -0700 Subject: libudev-util.c: Fix sysconf variable for util_lookup_group Signed-off-by: Michael Forney --- src/libudev/libudev-util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c index 522a984c3b..337514a13d 100644 --- a/src/libudev/libudev-util.c +++ b/src/libudev/libudev-util.c @@ -108,7 +108,7 @@ gid_t util_lookup_group(struct udev *udev, const char *group) struct group grbuf; struct group *gr; gid_t gid = 0; - size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX); + size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX); char *buf = NULL; if (streq(group, "root")) -- cgit v1.2.3-54-g00ecf From b49b09e046df217335dca68bc787b6b9d10bce44 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Sat, 26 Oct 2013 01:12:51 +0000 Subject: libudev-util.c: Handle -1 return from sysconf(_SC_GET{PW,GR}_R_SIZE_MAX) POSIX says: Note that sysconf(_SC_GETGR_R_SIZE_MAX) may return -1 if there is no hard limit on the size of the buffer needed to store all the groups returned. The example from POSIX uses a default buffer size of 1024 in that case. Signed-off-by: Michael Forney --- src/libudev/libudev-util.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c index 337514a13d..ae5e285ec0 100644 --- a/src/libudev/libudev-util.c +++ b/src/libudev/libudev-util.c @@ -84,8 +84,11 @@ uid_t util_lookup_user(struct udev *udev, const char *user) struct passwd *pw; uid_t uid; size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX); - char *buf = alloca(buflen); + char *buf; + if (buflen == -1) + buflen = 1024; + buf = alloca(buflen); if (streq(user, "root")) return 0; uid = strtoul(user, &endptr, 10); @@ -111,6 +114,8 @@ gid_t util_lookup_group(struct udev *udev, const char *group) size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX); char *buf = NULL; + if (buflen == -1) + buflen = 1024; if (streq(group, "root")) return 0; gid = strtoul(group, &endptr, 10); -- cgit v1.2.3-54-g00ecf