blob: 723cd2e52efc0d339c4c0aac8259dd4b08b13556 [file] [log] [blame]
Andrew Geissler82c905d2020-04-13 13:39:40 -05001From ef9580ea1e2f1e57af3c7dcb0ec392ba8dbb5c8d Mon Sep 17 00:00:00 2001
2From: Alex Kiernan <alex.kiernan@gmail.com>
3Date: Tue, 10 Mar 2020 11:05:20 +0000
4Subject: [PATCH] Handle missing gshadow
5
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---
12 src/shared/group-record-nss.c | 20 ++++++++++++++++++++
13 src/shared/group-record-nss.h | 4 ++++
14 src/shared/userdb.c | 6 ++++++
15 3 files changed, 30 insertions(+)
16
Andrew Geissler635e0e42020-08-21 15:58:33 -050017Index: systemd-stable/src/shared/group-record-nss.c
18===================================================================
19--- systemd-stable.orig/src/shared/group-record-nss.c
20+++ systemd-stable/src/shared/group-record-nss.c
Andrew Geissler82c905d2020-04-13 13:39:40 -050021@@ -19,8 +19,10 @@ int nss_group_to_group_record(
22 if (isempty(grp->gr_name))
23 return -EINVAL;
24
25+#if ENABLE_GSHADOW
26 if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name))
27 return -EINVAL;
28+#endif
29
30 g = group_record_new();
31 if (!g)
32@@ -36,6 +38,7 @@ int nss_group_to_group_record(
33
34 g->gid = grp->gr_gid;
35
36+#if ENABLE_GSHADOW
37 if (sgrp) {
38 if (hashed_password_valid(sgrp->sg_passwd)) {
39 g->hashed_password = strv_new(sgrp->sg_passwd);
40@@ -51,6 +54,7 @@ int nss_group_to_group_record(
41 if (!g->administrators)
42 return -ENOMEM;
43 }
44+#endif
45
46 r = json_build(&g->json, JSON_BUILD_OBJECT(
47 JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)),
Andrew Geissler635e0e42020-08-21 15:58:33 -050048@@ -76,6 +80,7 @@ int nss_sgrp_for_group(const struct grou
Andrew Geissler82c905d2020-04-13 13:39:40 -050049 assert(ret_sgrp);
50 assert(ret_buffer);
51
52+#if ENABLE_GSHADOW
53 for (;;) {
54 _cleanup_free_ char *buf = NULL;
55 struct sgrp sgrp, *result;
Andrew Geissler635e0e42020-08-21 15:58:33 -050056@@ -104,6 +109,9 @@ int nss_sgrp_for_group(const struct grou
Andrew Geissler82c905d2020-04-13 13:39:40 -050057 buflen *= 2;
58 buf = mfree(buf);
59 }
60+#else
61+ return -ESRCH;
62+#endif
63 }
64
Andrew Geissler635e0e42020-08-21 15:58:33 -050065 int nss_group_record_by_name(
66@@ -115,7 +123,9 @@ int nss_group_record_by_name(
Andrew Geissler82c905d2020-04-13 13:39:40 -050067 struct group grp, *result;
68 bool incomplete = false;
69 size_t buflen = 4096;
70+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -050071 struct sgrp sgrp, *sresult = NULL;
Andrew Geissler82c905d2020-04-13 13:39:40 -050072+#endif
73 int r;
74
75 assert(name);
Andrew Geissler635e0e42020-08-21 15:58:33 -050076@@ -145,6 +155,7 @@ int nss_group_record_by_name(
Andrew Geissler82c905d2020-04-13 13:39:40 -050077 buf = mfree(buf);
78 }
79
80+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -050081 if (with_shadow) {
82 r = nss_sgrp_for_group(result, &sgrp, &sbuf);
83 if (r < 0) {
84@@ -156,6 +167,9 @@ int nss_group_record_by_name(
85 incomplete = true;
Andrew Geissler82c905d2020-04-13 13:39:40 -050086
Andrew Geissler635e0e42020-08-21 15:58:33 -050087 r = nss_group_to_group_record(result, sresult, ret);
Andrew Geissler82c905d2020-04-13 13:39:40 -050088+#else
89+ r = nss_group_to_group_record(result, NULL, ret);
90+#endif
91 if (r < 0)
92 return r;
93
Andrew Geissler635e0e42020-08-21 15:58:33 -050094@@ -172,7 +186,9 @@ int nss_group_record_by_gid(
Andrew Geissler82c905d2020-04-13 13:39:40 -050095 struct group grp, *result;
96 bool incomplete = false;
97 size_t buflen = 4096;
98+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -050099 struct sgrp sgrp, *sresult = NULL;
Andrew Geissler82c905d2020-04-13 13:39:40 -0500100+#endif
101 int r;
102
103 assert(ret);
Andrew Geissler635e0e42020-08-21 15:58:33 -0500104@@ -200,6 +216,7 @@ int nss_group_record_by_gid(
Andrew Geissler82c905d2020-04-13 13:39:40 -0500105 buf = mfree(buf);
106 }
107
108+#if ENABLE_GSHADOW
Andrew Geissler635e0e42020-08-21 15:58:33 -0500109 if (with_shadow) {
110 r = nss_sgrp_for_group(result, &sgrp, &sbuf);
111 if (r < 0) {
112@@ -211,6 +228,9 @@ int nss_group_record_by_gid(
113 incomplete = true;
Andrew Geissler82c905d2020-04-13 13:39:40 -0500114
Andrew Geissler635e0e42020-08-21 15:58:33 -0500115 r = nss_group_to_group_record(result, sresult, ret);
Andrew Geissler82c905d2020-04-13 13:39:40 -0500116+#else
117+ r = nss_group_to_group_record(result, NULL, ret);
118+#endif
119 if (r < 0)
120 return r;
121
Andrew Geissler635e0e42020-08-21 15:58:33 -0500122Index: systemd-stable/src/shared/group-record-nss.h
123===================================================================
124--- systemd-stable.orig/src/shared/group-record-nss.h
125+++ systemd-stable/src/shared/group-record-nss.h
Andrew Geissler82c905d2020-04-13 13:39:40 -0500126@@ -2,7 +2,11 @@
127 #pragma once
128
129 #include <grp.h>
130+#if ENABLE_GSHADOW
131 #include <gshadow.h>
132+#else
133+struct sgrp;
134+#endif
135
136 #include "group-record.h"
137
Andrew Geissler635e0e42020-08-21 15:58:33 -0500138Index: systemd-stable/src/shared/userdb.c
139===================================================================
140--- systemd-stable.orig/src/shared/userdb.c
141+++ systemd-stable/src/shared/userdb.c
142@@ -930,13 +930,16 @@ int groupdb_iterator_get(UserDBIterator
Andrew Geissler82c905d2020-04-13 13:39:40 -0500143 if (gr) {
144 _cleanup_free_ char *buffer = NULL;
145 bool incomplete = false;
146+#if ENABLE_GSHADOW
147 struct sgrp sgrp;
148+#endif
149
150 if (streq_ptr(gr->gr_name, "root"))
151 iterator->synthesize_root = false;
152 if (gr->gr_gid == GID_NOBODY)
153 iterator->synthesize_nobody = false;
154
155+#if ENABLE_GSHADOW
156 r = nss_sgrp_for_group(gr, &sgrp, &buffer);
157 if (r < 0) {
158 log_debug_errno(r, "Failed to acquire shadow entry for group %s, ignoring: %m", gr->gr_name);
Andrew Geissler635e0e42020-08-21 15:58:33 -0500159@@ -944,6 +947,9 @@ int groupdb_iterator_get(UserDBIterator
Andrew Geissler82c905d2020-04-13 13:39:40 -0500160 }
161
162 r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret);
163+#else
164+ r = nss_group_to_group_record(gr, NULL, ret);
165+#endif
166 if (r < 0)
167 return r;
168