blob: c5960a0d600b5877559765135a1edd67399a705d [file] [log] [blame]
Andrew Geissler706d5aa2021-02-12 15:55:30 -06001From ef9580ea1e2f1e57af3c7dcb0ec392ba8dbb5c8d Mon Sep 17 00:00:00 2001
Andrew Geissler82c905d2020-04-13 13:39:40 -05002From: Alex Kiernan <alex.kiernan@gmail.com>
3Date: Tue, 10 Mar 2020 11:05:20 +0000
Andrew Geissler706d5aa2021-02-12 15:55:30 -06004Subject: [PATCH] Handle missing gshadow
Andrew Geissler82c905d2020-04-13 13:39:40 -05005
6gshadow usage is now present in the userdb code. Mask all uses of it to
7allow compilation on musl
8
9Upstream-Status: Inappropriate [musl specific]
10Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
11---
Andrew Geissler706d5aa2021-02-12 15:55:30 -060012 src/shared/group-record-nss.c | 20 ++++++++++++++++++++
13 src/shared/group-record-nss.h | 4 ++++
14 src/shared/userdb.c | 6 ++++++
Andrew Geissler82c905d2020-04-13 13:39:40 -050015 3 files changed, 30 insertions(+)
16
Andrew Geissler706d5aa2021-02-12 15:55:30 -060017--- a/src/shared/group-record-nss.c
18+++ b/src/shared/group-record-nss.c
19@@ -19,8 +19,10 @@ int nss_group_to_group_record(
Andrew Geissler82c905d2020-04-13 13:39:40 -050020 if (isempty(grp->gr_name))
21 return -EINVAL;
22
23+#if ENABLE_GSHADOW
24 if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name))
25 return -EINVAL;
26+#endif
27
28 g = group_record_new();
29 if (!g)
Andrew Geissler706d5aa2021-02-12 15:55:30 -060030@@ -36,6 +38,7 @@ int nss_group_to_group_record(
Andrew Geissler82c905d2020-04-13 13:39:40 -050031
32 g->gid = grp->gr_gid;
33
34+#if ENABLE_GSHADOW
35 if (sgrp) {
Andrew Geissler706d5aa2021-02-12 15:55:30 -060036 if (looks_like_hashed_password(sgrp->sg_passwd)) {
Andrew Geissler82c905d2020-04-13 13:39:40 -050037 g->hashed_password = strv_new(sgrp->sg_passwd);
Andrew Geissler706d5aa2021-02-12 15:55:30 -060038@@ -51,6 +54,7 @@ int nss_group_to_group_record(
39 if (!g->administrators)
40 return -ENOMEM;
Andrew Geissler82c905d2020-04-13 13:39:40 -050041 }
42+#endif
43
44 r = json_build(&g->json, JSON_BUILD_OBJECT(
45 JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)),
Andrew Geissler706d5aa2021-02-12 15:55:30 -060046@@ -76,6 +80,7 @@ int nss_sgrp_for_group(const struct grou
Andrew Geissler82c905d2020-04-13 13:39:40 -050047 assert(ret_sgrp);
48 assert(ret_buffer);
49
50+#if ENABLE_GSHADOW
51 for (;;) {
52 _cleanup_free_ char *buf = NULL;
53 struct sgrp sgrp, *result;
Andrew Geissler706d5aa2021-02-12 15:55:30 -060054@@ -104,6 +109,9 @@ int nss_sgrp_for_group(const struct grou
Andrew Geissler82c905d2020-04-13 13:39:40 -050055 buflen *= 2;
56 buf = mfree(buf);
57 }
58+#else
59+ return -ESRCH;
60+#endif
61 }
62
Andrew Geissler635e0e42020-08-21 15:58:33 -050063 int nss_group_record_by_name(
Andrew Geissler706d5aa2021-02-12 15:55:30 -060064@@ -115,7 +123,9 @@ int nss_group_record_by_name(
Andrew Geissler82c905d2020-04-13 13:39:40 -050065 struct group grp, *result;
66 bool incomplete = false;
67 size_t buflen = 4096;
68+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -050069 struct sgrp sgrp, *sresult = NULL;
Andrew Geissler82c905d2020-04-13 13:39:40 -050070+#endif
71 int r;
72
73 assert(name);
Andrew Geissler706d5aa2021-02-12 15:55:30 -060074@@ -145,6 +155,7 @@ int nss_group_record_by_name(
Andrew Geissler82c905d2020-04-13 13:39:40 -050075 buf = mfree(buf);
76 }
77
78+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -050079 if (with_shadow) {
80 r = nss_sgrp_for_group(result, &sgrp, &sbuf);
81 if (r < 0) {
Andrew Geissler706d5aa2021-02-12 15:55:30 -060082@@ -156,6 +167,9 @@ int nss_group_record_by_name(
Andrew Geissler635e0e42020-08-21 15:58:33 -050083 incomplete = true;
Andrew Geissler82c905d2020-04-13 13:39:40 -050084
Andrew Geissler635e0e42020-08-21 15:58:33 -050085 r = nss_group_to_group_record(result, sresult, ret);
Andrew Geissler82c905d2020-04-13 13:39:40 -050086+#else
87+ r = nss_group_to_group_record(result, NULL, ret);
88+#endif
89 if (r < 0)
90 return r;
91
Andrew Geissler706d5aa2021-02-12 15:55:30 -060092@@ -172,7 +186,9 @@ int nss_group_record_by_gid(
Andrew Geissler82c905d2020-04-13 13:39:40 -050093 struct group grp, *result;
94 bool incomplete = false;
95 size_t buflen = 4096;
96+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -050097 struct sgrp sgrp, *sresult = NULL;
Andrew Geissler82c905d2020-04-13 13:39:40 -050098+#endif
99 int r;
100
101 assert(ret);
Andrew Geissler706d5aa2021-02-12 15:55:30 -0600102@@ -200,6 +216,7 @@ int nss_group_record_by_gid(
Andrew Geissler82c905d2020-04-13 13:39:40 -0500103 buf = mfree(buf);
104 }
105
106+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -0500107 if (with_shadow) {
108 r = nss_sgrp_for_group(result, &sgrp, &sbuf);
109 if (r < 0) {
Andrew Geissler706d5aa2021-02-12 15:55:30 -0600110@@ -211,6 +228,9 @@ int nss_group_record_by_gid(
Andrew Geissler635e0e42020-08-21 15:58:33 -0500111 incomplete = true;
Andrew Geissler82c905d2020-04-13 13:39:40 -0500112
Andrew Geissler635e0e42020-08-21 15:58:33 -0500113 r = nss_group_to_group_record(result, sresult, ret);
Andrew Geissler82c905d2020-04-13 13:39:40 -0500114+#else
115+ r = nss_group_to_group_record(result, NULL, ret);
116+#endif
117 if (r < 0)
118 return r;
119
Andrew Geissler706d5aa2021-02-12 15:55:30 -0600120--- a/src/shared/group-record-nss.h
121+++ b/src/shared/group-record-nss.h
Andrew Geissler82c905d2020-04-13 13:39:40 -0500122@@ -2,7 +2,11 @@
123 #pragma once
124
125 #include <grp.h>
126+#if ENABLE_GSHADOW
127 #include <gshadow.h>
128+#else
129+struct sgrp;
130+#endif
131
Andrew Geissler706d5aa2021-02-12 15:55:30 -0600132 #include "group-record.h"
133
Andrew Geisslerc3d88e42020-10-02 09:45:00 -0500134--- a/src/shared/userdb.c
135+++ b/src/shared/userdb.c
Andrew Geissler706d5aa2021-02-12 15:55:30 -0600136@@ -930,13 +930,16 @@ int groupdb_iterator_get(UserDBIterator
Andrew Geissler82c905d2020-04-13 13:39:40 -0500137 if (gr) {
138 _cleanup_free_ char *buffer = NULL;
139 bool incomplete = false;
140+#if ENABLE_GSHADOW
141 struct sgrp sgrp;
142+#endif
143
144 if (streq_ptr(gr->gr_name, "root"))
145 iterator->synthesize_root = false;
146 if (gr->gr_gid == GID_NOBODY)
147 iterator->synthesize_nobody = false;
148
149+#if ENABLE_GSHADOW
150 r = nss_sgrp_for_group(gr, &sgrp, &buffer);
151 if (r < 0) {
152 log_debug_errno(r, "Failed to acquire shadow entry for group %s, ignoring: %m", gr->gr_name);
Andrew Geissler706d5aa2021-02-12 15:55:30 -0600153@@ -944,6 +947,9 @@ int groupdb_iterator_get(UserDBIterator
Andrew Geissler82c905d2020-04-13 13:39:40 -0500154 }
155
156 r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret);
157+#else
158+ r = nss_group_to_group_record(gr, NULL, ret);
159+#endif
160 if (r < 0)
161 return r;
162