summaryrefslogtreecommitdiff
path: root/pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2017-04-14 12:08:51 -0700
committerMichael Forney <mforney@mforney.org>2017-04-14 12:23:06 -0700
commit42568142cd2ae0322e92c348f366108792fc8571 (patch)
tree8b4895b698e691d8083808fba32468e5b22e5f51 /pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch
parent91ef3a50dc331e4aae80ff8821e026bf914cf470 (diff)
openbsd: Update to 6.1
Diffstat (limited to 'pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch')
-rw-r--r--pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch b/pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch
new file mode 100644
index 00000000..a581cdda
--- /dev/null
+++ b/pkg/openbsd/patch/0017-pwcache-Don-t-use-fixed-buffer-sizes.patch
@@ -0,0 +1,96 @@
+From 145b2b78355f1024c1bb2c179ca2b947dded7921 Mon Sep 17 00:00:00 2001
+From: Michael Forney <mforney@mforney.org>
+Date: Fri, 14 Apr 2017 11:25:01 -0700
+Subject: [PATCH] pwcache: Don't use fixed buffer sizes
+
+---
+ lib/libc/gen/pwcache.c | 37 +++++++++++++++++++------------------
+ 1 file changed, 19 insertions(+), 18 deletions(-)
+
+diff --git a/lib/libc/gen/pwcache.c b/lib/libc/gen/pwcache.c
+index 743cad456..fa5a22f4d 100644
+--- a/lib/libc/gen/pwcache.c
++++ b/lib/libc/gen/pwcache.c
+@@ -33,6 +33,7 @@
+ #include <grp.h>
+ #include <pwd.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
+
+ #define NCACHE 16 /* power of 2 */
+@@ -46,26 +47,26 @@ user_from_uid(uid_t uid, int nouser)
+ static struct ncache {
+ uid_t uid;
+ short noname;
+- char name[_PW_NAME_LEN + 1];
++ char *name;
+ } c_uid[NLINES * NCACHE];
+- char pwbuf[_PW_BUF_LEN];
+- struct passwd pwstore, *pw;
++ static char nbuf[15]; /* 32 bits == 10 digits */
++ struct passwd *pw;
+ struct ncache *cp;
+ unsigned int i;
+
+ for (i = 0; i < NLINES; i++) {
+ cp = &c_uid[IDX(uid, i)];
+- if (!*cp->name) {
++ if (cp->name == NULL) {
+ fillit:
+ cp->uid = uid;
+- pw = NULL;
+- getpwuid_r(uid, &pwstore, pwbuf, sizeof(pwbuf), &pw);
++ pw = getpwuid(uid);
+ if (pw == NULL) {
+- snprintf(cp->name, sizeof(cp->name), "%u", uid);
++ snprintf(nbuf, sizeof(nbuf), "%u", uid);
+ cp->noname = 1;
+- } else {
+- strlcpy(cp->name, pw->pw_name, sizeof(cp->name));
+ }
++ if (cp->name != NULL)
++ free(cp->name);
++ cp->name = strdup(pw ? pw->pw_name : nbuf);
+ }
+ if (cp->uid == uid) {
+ if (nouser && cp->noname)
+@@ -91,26 +92,26 @@ group_from_gid(gid_t gid, int nogroup)
+ static struct ncache {
+ gid_t gid;
+ short noname;
+- char name[_PW_NAME_LEN + 1];
++ char *name;
+ } c_gid[NLINES * NCACHE];
+- char grbuf[_GR_BUF_LEN];
+- struct group grstore, *gr;
++ static char nbuf[15]; /* 32 bits == 10 digits */
++ struct group *gr;
+ struct ncache *cp;
+ unsigned int i;
+
+ for (i = 0; i < NLINES; i++) {
+ cp = &c_gid[IDX(gid, i)];
+- if (!*cp->name) {
++ if (cp->name == NULL) {
+ fillit:
+ cp->gid = gid;
+- gr = NULL;
+- getgrgid_r(gid, &grstore, grbuf, sizeof(grbuf), &gr);
++ gr = getgrgid(gid);
+ if (gr == NULL) {
+- snprintf(cp->name, sizeof(cp->name), "%u", gid);
++ snprintf(nbuf, sizeof(nbuf), "%u", gid);
+ cp->noname = 1;
+- } else {
+- strlcpy(cp->name, gr->gr_name, sizeof(cp->name));
+ }
++ if (cp->name != NULL)
++ free(cp->name);
++ cp->name = strdup(gr ? gr->gr_name : nbuf);
+ }
+ if (cp->gid == gid) {
+ if (nogroup && cp->noname)
+--
+2.12.2
+