libc/grp: Added stubbed implementations of getgrgid, getgrgid_r, getgrnam, getgrnam_r, and initgroups. These functions are essentially stubs pretending that NuttX supported groups and that the only configured group in the system was 'root' with gid 0. The intend is not to provide meaningful new features, but to ease porting of foreign source code to NuttX.
This commit is contained in:
parent
0050172108
commit
1af4c94391
90
include/grp.h
Normal file
90
include/grp.h
Normal file
@ -0,0 +1,90 @@
|
||||
/****************************************************************************
|
||||
* include/grp.h
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __INCLUDE_GRP_H
|
||||
#define __INCLUDE_GRP_H
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
#include <nuttx/compiler.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Type Definitions
|
||||
****************************************************************************/
|
||||
|
||||
struct group
|
||||
{
|
||||
FAR char *gr_name;
|
||||
FAR char *gr_passwd;
|
||||
gid_t gr_gid;
|
||||
FAR char **gr_mem;
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
#undef EXTERN
|
||||
#if defined(__cplusplus)
|
||||
#define EXTERN extern "C"
|
||||
extern "C"
|
||||
{
|
||||
#else
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
FAR struct group *getgrnam(FAR const char *name);
|
||||
FAR struct group *getgrgid(gid_t gid);
|
||||
int getgrnam_r(FAR const char *name, FAR struct group *grp, FAR char *buf,
|
||||
size_t buflen, FAR struct group **result);
|
||||
int getgrgid_r(gid_t gid, FAR struct group *grp, FAR char *buf, size_t buflen,
|
||||
FAR struct group **result);
|
||||
int initgroups(FAR const char *user, gid_t group);
|
||||
|
||||
#undef EXTERN
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __INCLUDE_GRP_H */
|
@ -59,6 +59,7 @@ include dirent/Make.defs
|
||||
include dlfcn/Make.defs
|
||||
include endian/Make.defs
|
||||
include fixedmath/Make.defs
|
||||
include grp/Make.defs
|
||||
include hex2bin/Make.defs
|
||||
include inttypes/Make.defs
|
||||
include libgen/Make.defs
|
||||
|
@ -36,6 +36,7 @@ we have:
|
||||
locale - locale.h
|
||||
lzf - lzf.h
|
||||
fixedmath - fixedmath.h
|
||||
grp - grp.h
|
||||
inttypes - inttypes.h
|
||||
machine - Various architecture-specific implementations.
|
||||
math - math.h
|
||||
|
44
libs/libc/grp/Make.defs
Normal file
44
libs/libc/grp/Make.defs
Normal file
@ -0,0 +1,44 @@
|
||||
############################################################################
|
||||
# libs/libc/grp/Make.defs
|
||||
#
|
||||
# Copyright (C) 2011-2012, 2019 Gregory Nutt. All rights reserved.
|
||||
# Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
#
|
||||
# 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
# COPYRIGHT OWNER 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.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
# Add the grp C files to the build
|
||||
|
||||
CSRCS += lib_getgrgid.c lib_getgrgidr.c lib_getgrnam.c lib_getgrnamr.c
|
||||
CSRCS += lib_grp.c lib_initgroups.c
|
||||
|
||||
# Add the grp directory to the build
|
||||
|
||||
DEPPATH += --dep-path grp
|
||||
VPATH += :grp
|
77
libs/libc/grp/lib_getgrgid.c
Normal file
77
libs/libc/grp/lib_getgrgid.c
Normal file
@ -0,0 +1,77 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_getgrgid.c
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <grp.h>
|
||||
|
||||
#include "grp/lib_grp.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: getgrgid
|
||||
*
|
||||
* Description:
|
||||
* The getgrgid() function searches the group database for an entry with
|
||||
* a matching gid.
|
||||
*
|
||||
* Input Parameters:
|
||||
* gid - The gid to return a group structure for
|
||||
*
|
||||
* Returned Value:
|
||||
* A pointer to a statically allocated group structure, or NULL if no
|
||||
* matching entry is found or an error occurs. Applications wishing to
|
||||
* check for error situations should set errno to 0 before calling
|
||||
* getgrgid(). If getgrgid() returns a null pointer and errno is set to
|
||||
* non-zero, an error occurred.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
FAR struct group *getgrgid(gid_t gid)
|
||||
{
|
||||
if (gid != ROOT_GID)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return getgrbuf(ROOT_GID, ROOT_NAME, ROOT_PASSWD);
|
||||
}
|
87
libs/libc/grp/lib_getgrgidr.c
Normal file
87
libs/libc/grp/lib_getgrgidr.c
Normal file
@ -0,0 +1,87 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_getgrgidr.c
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <grp.h>
|
||||
|
||||
#include "grp/lib_grp.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: getgrgid_r
|
||||
*
|
||||
* Description:
|
||||
* The getgrgid_r() function searches the group database for an entry with
|
||||
* a matching gid and stores the retrieved group structure in the space
|
||||
* pointed to by grp.
|
||||
*
|
||||
* Input Parameters:
|
||||
* gid - The gid to return a group structure for.
|
||||
* grp - Pointer to the space to store the retrieved group structure in.
|
||||
* buf - The string fields pointed to by the group struct are stored here.
|
||||
* buflen - The length of buf in bytes.
|
||||
* result - Pointer to the resulting group struct, or NULL in case of fail.
|
||||
*
|
||||
* Returned Value:
|
||||
* On success getgrgid_r returns 0 and sets *result to grp. If no match
|
||||
* is found, 0 is returned and *result is set to NULL. In case of failure
|
||||
* an error number is returned.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int getgrgid_r(gid_t gid, FAR struct group *grp, FAR char *buf, size_t buflen,
|
||||
FAR struct group **result)
|
||||
{
|
||||
if (gid != ROOT_GID)
|
||||
{
|
||||
/* The only known group is 'root', which has a gid of 0. Thus, report
|
||||
* back that no match was found.
|
||||
*/
|
||||
|
||||
*result = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return getgrbuf_r(ROOT_GID, ROOT_NAME, ROOT_PASSWD, grp, buf, buflen,
|
||||
result);
|
||||
}
|
78
libs/libc/grp/lib_getgrnam.c
Normal file
78
libs/libc/grp/lib_getgrnam.c
Normal file
@ -0,0 +1,78 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_getgrnam.c
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <grp.h>
|
||||
|
||||
#include "grp/lib_grp.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: getgrnam
|
||||
*
|
||||
* Description:
|
||||
* The getgrnam() function searches the group database for an entry with
|
||||
* a matching name.
|
||||
*
|
||||
* Input Parameters:
|
||||
* name - The group name to return a group structure for
|
||||
*
|
||||
* Returned Value:
|
||||
* A pointer to a statically allocated group structure, or NULL if no
|
||||
* matching entry is found or an error occurs. Applications wishing to
|
||||
* check for error situations should set errno to 0 before calling
|
||||
* getgrnam(). If getgrnam() returns a null pointer and errno is set to
|
||||
* non-zero, an error occurred.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
FAR struct group *getgrnam(FAR const char *name)
|
||||
{
|
||||
if (strcmp(name, "root"))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return getgrbuf(ROOT_GID, ROOT_NAME, ROOT_PASSWD);
|
||||
}
|
88
libs/libc/grp/lib_getgrnamr.c
Normal file
88
libs/libc/grp/lib_getgrnamr.c
Normal file
@ -0,0 +1,88 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_getgrnamr.c
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <grp.h>
|
||||
|
||||
#include "grp/lib_grp.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: getgrnam_r
|
||||
*
|
||||
* Description:
|
||||
* The getgrnam_r() function searches the group database for an entry with
|
||||
* a matching name and stores the retrieved group structure in the space
|
||||
* pointed to by grp.
|
||||
*
|
||||
* Input Parameters:
|
||||
* name - The name of the group to return a group structure for.
|
||||
* grp - Pointer to the space to store the retrieved group structure in.
|
||||
* buf - The string fields pointed to by the group struct are stored here.
|
||||
* buflen - The length of buf in bytes.
|
||||
* result - Pointer to the resulting group struct, or NULL in case of fail.
|
||||
*
|
||||
* Returned Value:
|
||||
* On success getgrnam_r returns 0 and sets *result to grp. If no match
|
||||
* is found, 0 is returned and *result is set to NULL. In case of failure
|
||||
* an error number is returned.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int getgrnam_r(FAR const char *name, FAR struct group *grp, FAR char *buf,
|
||||
size_t buflen, FAR struct group **result)
|
||||
{
|
||||
if (strcmp(name, ROOT_NAME))
|
||||
{
|
||||
/* The only known group is 'root', which has a gid of 0. Thus, report
|
||||
* back that no match was found.
|
||||
*/
|
||||
|
||||
*result = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return getgrbuf_r(ROOT_GID, ROOT_NAME, ROOT_PASSWD, grp, buf, buflen,
|
||||
result);
|
||||
}
|
186
libs/libc/grp/lib_grp.c
Normal file
186
libs/libc/grp/lib_grp.c
Normal file
@ -0,0 +1,186 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_grp.c
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <grp.h>
|
||||
|
||||
#include "grp/lib_grp.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
static FAR char *g_buf;
|
||||
static FAR struct group *g_grp;
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: getgrbuf
|
||||
*
|
||||
* Description:
|
||||
* libc/grp internal helper function for getgrgid and getgrnam to allocate
|
||||
* and setup a group structure once a matching entry has been found.
|
||||
*
|
||||
* Input Parameters:
|
||||
* gid - Value to set the group structure's gr_gid field to.
|
||||
* name - Value to set the group structure's gr_name field to.
|
||||
* passwd - Value to set the group structure's passwd field to.
|
||||
*
|
||||
* Returned Value:
|
||||
* A pointer to a statically allocated group structure, or NULL if an
|
||||
* error occurs, in which case errno is set appropriately.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
FAR struct group *getgrbuf(gid_t gid, FAR const char *name,
|
||||
FAR const char *passwd)
|
||||
{
|
||||
FAR struct group *result;
|
||||
FAR char *newbuf;
|
||||
size_t buflen;
|
||||
int err;
|
||||
|
||||
buflen = sizeof(FAR char **) + strlen(name) + 1 + strlen(passwd) + 1;
|
||||
|
||||
newbuf = (FAR char *)realloc(g_buf, buflen);
|
||||
|
||||
if (!newbuf)
|
||||
{
|
||||
err = ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
|
||||
g_buf = newbuf;
|
||||
|
||||
if (!g_grp)
|
||||
{
|
||||
g_grp = (FAR struct group *)malloc(sizeof(struct group));
|
||||
}
|
||||
|
||||
if (!g_grp)
|
||||
{
|
||||
err = ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
|
||||
err = getgrbuf_r(gid, name, passwd, g_grp, g_buf, buflen, &result);
|
||||
|
||||
if (err)
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
error:
|
||||
free(g_grp);
|
||||
free(g_buf);
|
||||
g_grp = NULL;
|
||||
g_buf = NULL;
|
||||
set_errno(err);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: getgrbuf_r
|
||||
*
|
||||
* Description:
|
||||
* libc/grp internal helper function for getgrgid_r and getgrnam_r to setup
|
||||
* the caller supplied 'grp' and 'buf' buffers once a matching entry has
|
||||
* been found.
|
||||
*
|
||||
* Input Parameters:
|
||||
* gid - Value to set grp->gr_gid to.
|
||||
* name - Value to set grp->gr_name to.
|
||||
* passwd - Value to set grp->passwd to.
|
||||
* grp - Pointer to the space to store the retrieved group structure in.
|
||||
* buf - String fields pointed to by the group struct are stored here.
|
||||
* buflen - The length of buf in bytes.
|
||||
* result - Pointer to the resulting group struct, or NULL in case of fail.
|
||||
*
|
||||
* Returned Value:
|
||||
* On success getgrgid_r returns 0 and sets *result to grp. In case of
|
||||
* failure an error number is returned.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int getgrbuf_r(gid_t gid, FAR const char *name, FAR const char *passwd,
|
||||
FAR struct group *grp, FAR char *buf, size_t buflen,
|
||||
FAR struct group **result)
|
||||
{
|
||||
size_t reqdlen;
|
||||
size_t padlen;
|
||||
|
||||
/* In 'buf' a NULL pointer value will be stored, which must be naturally
|
||||
* aligned, followed by the null terminated group name string and the null
|
||||
* terminated passwd string 'x' (indicating 'no password'). Make sure
|
||||
* sufficient buffer space was supplied by the caller.
|
||||
*/
|
||||
|
||||
padlen = sizeof(FAR void *) - ((unsigned)buf % sizeof(FAR char *));
|
||||
reqdlen = sizeof(FAR void *) + strlen(name) + 1 + strlen(passwd) + 1;
|
||||
|
||||
if (buflen < padlen + reqdlen)
|
||||
{
|
||||
/* Insufficient buffer space supplied. */
|
||||
|
||||
*result = NULL;
|
||||
return ERANGE;
|
||||
}
|
||||
|
||||
grp->gr_mem = (FAR char **)&buf[padlen];
|
||||
grp->gr_name = &buf[padlen + sizeof(FAR char *)];
|
||||
grp->gr_passwd = &buf[padlen + sizeof(FAR char *) + strlen(name) + 1];
|
||||
|
||||
strcpy(grp->gr_name, name);
|
||||
strcpy(grp->gr_passwd, passwd);
|
||||
grp->gr_gid = gid;
|
||||
*grp->gr_mem = NULL;
|
||||
|
||||
*result = grp;
|
||||
return 0;
|
||||
}
|
82
libs/libc/grp/lib_grp.h
Normal file
82
libs/libc/grp/lib_grp.h
Normal file
@ -0,0 +1,82 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_grp.h
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef __LIBS_LIBC_GRP_LIB_GRP_H
|
||||
#define __LIBS_LIBC_GRP_LIB_GRP_H
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <grp.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
#define ROOT_GID 0
|
||||
#define ROOT_NAME "root"
|
||||
#define ROOT_PASSWD "x"
|
||||
|
||||
/****************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define EXTERN extern "C"
|
||||
extern "C"
|
||||
{
|
||||
#else
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Function Prototypes
|
||||
****************************************************************************/
|
||||
|
||||
FAR struct group *getgrbuf(gid_t gid, FAR const char *name,
|
||||
FAR const char *passwd);
|
||||
int getgrbuf_r(gid_t gid, FAR const char *name, FAR const char *passwd,
|
||||
FAR struct group *grp, FAR char *buf, size_t buflen,
|
||||
FAR struct group **result);
|
||||
|
||||
#undef EXTERN
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __LIBS_LIBC_GRP_LIB_GRP_H */
|
74
libs/libc/grp/lib_initgroups.c
Normal file
74
libs/libc/grp/lib_initgroups.c
Normal file
@ -0,0 +1,74 @@
|
||||
/****************************************************************************
|
||||
* libs/libc/grp/lib_initgroups.c
|
||||
*
|
||||
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
|
||||
* Author: Michael Jung <mijung@gmx.net>
|
||||
*
|
||||
* 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. Neither the name NuttX 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 COPYRIGHT HOLDERS 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
|
||||
* COPYRIGHT OWNER 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <grp.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: initgroups
|
||||
*
|
||||
* Description:
|
||||
* The group database /etc/group is read to determine all groups of which
|
||||
* user is a member. The additional group group is also added to this set,
|
||||
* which is then used to set the supplementary group IDs of the calling
|
||||
* process.
|
||||
*
|
||||
* Input Parameters:
|
||||
* user - Name of the user to query the /etc/group database for.
|
||||
* group - Additional gid to add to the list of group IDs.
|
||||
*
|
||||
* Returned Value:
|
||||
* The initgroups() function returns zero if successful, and -1 in case of
|
||||
* failure, in which case errno is set appropriately.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int initgroups(FAR const char *user, gid_t group)
|
||||
{
|
||||
/* There currently is no support for supplementary group IDs in NuttX.
|
||||
* Thus, just ignore this request silently and report success.
|
||||
*/
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user