On 29/02/16 12:32, Ramsay Jones wrote: > > > On 29/02/16 10:40, Torsten Bögershausen wrote: >> That compiles OK, thanks. >> >> >> Sorry for high-jacking this thread, but while compiling under CYGWIN, >> found one warning: >> >> LINK git-credential-store.exe >> CC daemon.o >> daemon.c: In function ‘drop_privileges’: >> daemon.c:1136:15: warning: implicit declaration of function ‘initgroups’ [-Wimplicit-function-declaration] >> if (cred && (initgroups(cred->pass->pw_name, cred->gid) || > > Yeah, this has been there for a while - except it depends on which version > of the header files you have. (Some may not see the warning). > > I have 'fixed' this twice before, then updated my installation and > a change to the system headers broke it again! (The headers are > currently 'broken'). So, I got tired of fixing it up and have left > it a while - you never know a new update may fix it! ;-) > > [I personally don't use the git daemon on cygwin, so I don't know > if this a problem in practice.] BTW, I forgot to mention that I have had a patch in my local repo for ages which addresses this issue. However, although this patch fixes the problem for me, with the header files I currently have installed, it would just as easily _introduce_ this warning for those that don't currently see it! ;-) I suppose that I could send a patch which sets NO_INITGROUPS in the Makefile, until the system header files are fixed. What do you think? The correct solution is to fix the <grp.h> header file. I have been a bit reluctant to tackle that, because I'm not familiar with the cygwin project development process. Since Newlib is an upstream project to cygwin, should I go there first/instead? Anyway, I had a quick squint at the header and I think it needs to be changed something like the diff below. (I've also attached the new grp.h file). [Note: I didn't know what to do about _PATH_GROUP, setgrfile(), group_from_gid() and setgroupent(), so I punted on those!] Now, If only we knew someone who could try introducing such a fix to the cygwin project ... ATB, Ramsay Jones -- >8 -- diff --git a/usr/include/grp.h b/grp.h index c3a5a67..f2f1902 100644 --- a/usr/include/grp.h +++ b/grp.h @@ -67,25 +67,27 @@ extern "C" { #ifndef __INSIDE_CYGWIN__ struct group *getgrgid (gid_t); struct group *getgrnam (const char *); +#if defined __POSIX_VISIBLE || defined __BSD_VISIBLE int getgrnam_r (const char *, struct group *, char *, size_t, struct group **); int getgrgid_r (gid_t, struct group *, char *, size_t, struct group **); -#ifndef _POSIX_SOURCE -struct group *getgrent (void); +#endif +#if defined __BSD_VISIBLE || defined _XOPEN_SOURCE_EXTENDED void setgrent (void); +#if __XSI_VISIBLE >= 700 +struct group *getgrent (void); void endgrent (void); +#endif +#endif +#if defined __BSD_VISIBLE +int initgroups (const char *, gid_t); +#endif #ifndef __CYGWIN__ -void setgrfile (const char *); -#endif /* !__CYGWIN__ */ -#ifndef _XOPEN_SOURCE -#ifndef __CYGWIN__ +void setgrfile (const char *); /* 4.3BSD-Reno & Minix */ char *group_from_gid (gid_t, int); -int setgroupent (int); +int setgroupent (int); /* 4.3BSD-Reno & Mac OS X */ #endif /* !__CYGWIN__ */ -int initgroups (const char *, gid_t); -#endif /* !_XOPEN_SOURCE */ -#endif /* !_POSIX_SOURCE */ #endif /* !__INSIDE_CYGWIN__ */ #ifdef __cplusplus
/* $NetBSD: grp.h,v 1.7 1995/04/29 05:30:40 cgd Exp $ */ /*- * Copyright (c) 1989, 1993 * The Regents of the University of California. All rights reserved. * (c) UNIX System Laboratories, Inc. * All or some portions of this file are derived from material licensed * to the University of California by American Telephone and Telegraph * Co. or Unix System Laboratories, Inc. and are reproduced herein with * the permission of UNIX System Laboratories, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)grp.h 8.2 (Berkeley) 1/21/94 */ #ifndef _GRP_H_ #define _GRP_H_ #include <sys/cdefs.h> #include <sys/types.h> #ifdef __CYGWIN__ #include <cygwin/grp.h> #endif #if !defined(_POSIX_SOURCE) && !defined(_XOPEN_SOURCE) #define _PATH_GROUP "/etc/group" #endif struct group { char *gr_name; /* group name */ char *gr_passwd; /* group password */ gid_t gr_gid; /* group id */ char **gr_mem; /* group members */ }; #ifdef __cplusplus extern "C" { #endif #ifndef __INSIDE_CYGWIN__ struct group *getgrgid (gid_t); struct group *getgrnam (const char *); #if defined __POSIX_VISIBLE || defined __BSD_VISIBLE int getgrnam_r (const char *, struct group *, char *, size_t, struct group **); int getgrgid_r (gid_t, struct group *, char *, size_t, struct group **); #endif #if defined __BSD_VISIBLE || defined _XOPEN_SOURCE_EXTENDED void setgrent (void); #if __XSI_VISIBLE >= 700 struct group *getgrent (void); void endgrent (void); #endif #endif #if defined __BSD_VISIBLE int initgroups (const char *, gid_t); #endif #ifndef __CYGWIN__ void setgrfile (const char *); /* 4.3BSD-Reno & Minix */ char *group_from_gid (gid_t, int); int setgroupent (int); /* 4.3BSD-Reno & Mac OS X */ #endif /* !__CYGWIN__ */ #endif /* !__INSIDE_CYGWIN__ */ #ifdef __cplusplus } #endif #endif /* !_GRP_H_ */