@@ -106,12 +106,16 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re
106106 }
107107}
108108
109- int nss_group_record_by_name (const char * name , GroupRecord * * ret ) {
109+ int nss_group_record_by_name (
110+ const char * name ,
111+ bool with_shadow ,
112+ GroupRecord * * ret ) {
113+
110114 _cleanup_free_ char * buf = NULL , * sbuf = NULL ;
111115 struct group grp , * result ;
112116 bool incomplete = false;
113117 size_t buflen = 4096 ;
114- struct sgrp sgrp ;
118+ struct sgrp sgrp , * sresult = NULL ;
115119 int r ;
116120
117121 assert (name );
@@ -141,26 +145,34 @@ int nss_group_record_by_name(const char *name, GroupRecord **ret) {
141145 buf = mfree (buf );
142146 }
143147
144- r = nss_sgrp_for_group (result , & sgrp , & sbuf );
145- if (r < 0 ) {
146- log_debug_errno (r , "Failed to do shadow lookup for group %s, ignoring: %m" , result -> gr_name );
147- incomplete = ERRNO_IS_PRIVILEGE (r );
148- }
149-
150- r = nss_group_to_group_record (result , r >= 0 ? & sgrp : NULL , ret );
148+ if (with_shadow ) {
149+ r = nss_sgrp_for_group (result , & sgrp , & sbuf );
150+ if (r < 0 ) {
151+ log_debug_errno (r , "Failed to do shadow lookup for group %s, ignoring: %m" , result -> gr_name );
152+ incomplete = ERRNO_IS_PRIVILEGE (r );
153+ } else
154+ sresult = & sgrp ;
155+ } else
156+ incomplete = true;
157+
158+ r = nss_group_to_group_record (result , sresult , ret );
151159 if (r < 0 )
152160 return r ;
153161
154162 (* ret )-> incomplete = incomplete ;
155163 return 0 ;
156164}
157165
158- int nss_group_record_by_gid (gid_t gid , GroupRecord * * ret ) {
166+ int nss_group_record_by_gid (
167+ gid_t gid ,
168+ bool with_shadow ,
169+ GroupRecord * * ret ) {
170+
159171 _cleanup_free_ char * buf = NULL , * sbuf = NULL ;
160172 struct group grp , * result ;
161173 bool incomplete = false;
162174 size_t buflen = 4096 ;
163- struct sgrp sgrp ;
175+ struct sgrp sgrp , * sresult = NULL ;
164176 int r ;
165177
166178 assert (ret );
@@ -188,13 +200,17 @@ int nss_group_record_by_gid(gid_t gid, GroupRecord **ret) {
188200 buf = mfree (buf );
189201 }
190202
191- r = nss_sgrp_for_group (result , & sgrp , & sbuf );
192- if (r < 0 ) {
193- log_debug_errno (r , "Failed to do shadow lookup for group %s, ignoring: %m" , result -> gr_name );
194- incomplete = ERRNO_IS_PRIVILEGE (r );
195- }
196-
197- r = nss_group_to_group_record (result , r >= 0 ? & sgrp : NULL , ret );
203+ if (with_shadow ) {
204+ r = nss_sgrp_for_group (result , & sgrp , & sbuf );
205+ if (r < 0 ) {
206+ log_debug_errno (r , "Failed to do shadow lookup for group %s, ignoring: %m" , result -> gr_name );
207+ incomplete = ERRNO_IS_PRIVILEGE (r );
208+ } else
209+ sresult = & sgrp ;
210+ } else
211+ incomplete = true;
212+
213+ r = nss_group_to_group_record (result , sresult , ret );
198214 if (r < 0 )
199215 return r ;
200216
0 commit comments