Apache HTTPD
framework
httpd-2.4.62
srclib
apr
user
unix
groupinfo.c
Go to the documentation of this file.
1
/* Licensed to the Apache Software Foundation (ASF) under one or more
2
* contributor license agreements. See the NOTICE file distributed with
3
* this work for additional information regarding copyright ownership.
4
* The ASF licenses this file to You under the Apache License, Version 2.0
5
* (the "License"); you may not use this file except in compliance with
6
* the License. You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
#include "
apr_strings.h
"
18
#include "
apr_portable.h
"
19
#include "
apr_user.h
"
20
#include "apr_private.h"
21
#ifdef HAVE_GRP_H
22
#include <grp.h>
23
#endif
24
#if APR_HAVE_SYS_TYPES_H
25
#include <sys/types.h>
26
#endif
27
#if APR_HAVE_UNISTD_H
28
#include <unistd.h>
/* for _POSIX_THREAD_SAFE_FUNCTIONS */
29
#endif
30
31
#define GRBUF_SIZE 8192
32
33
APR_DECLARE
(
apr_status_t
)
apr_gid_name_get
(
char
**
groupname
,
apr_gid_t
groupid
,
34
apr_pool_t
*
p
)
35
{
36
struct
group *
gr
;
37
38
#if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRGID_R)
39
struct
group
grp
;
40
char
grbuf
[
GRBUF_SIZE
];
41
apr_status_t
rv;
42
43
/* See comment in getpwnam_safe on error handling. */
44
rv =
getgrgid_r
(
groupid
, &
grp
,
grbuf
,
sizeof
(
grbuf
), &
gr
);
45
if
(rv) {
46
return
rv;
47
}
48
if
(
gr
==
NULL
) {
49
return
APR_ENOENT
;
50
}
51
#else
52
errno
= 0;
53
if
((
gr
=
getgrgid
(
groupid
)) ==
NULL
) {
54
return
errno
?
errno
:
APR_ENOENT
;
55
}
56
#endif
57
*
groupname
=
apr_pstrdup
(
p
,
gr
->gr_name);
58
return
APR_SUCCESS
;
59
}
60
61
APR_DECLARE
(
apr_status_t
)
apr_gid_get
(
apr_gid_t
*
groupid
,
62
const
char
*
groupname
,
apr_pool_t
*
p
)
63
{
64
struct
group *
gr
;
65
66
#if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(HAVE_GETGRNAM_R)
67
struct
group
grp
;
68
char
grbuf
[
GRBUF_SIZE
];
69
apr_status_t
rv;
70
71
/* See comment in getpwnam_safe on error handling. */
72
rv =
getgrnam_r
(
groupname
, &
grp
,
grbuf
,
sizeof
(
grbuf
), &
gr
);
73
if
(rv) {
74
return
rv;
75
}
76
if
(
gr
==
NULL
) {
77
return
APR_ENOENT
;
78
}
79
#else
80
errno
= 0;
81
if
((
gr
=
getgrnam
(
groupname
)) ==
NULL
) {
82
return
errno
?
errno
:
APR_ENOENT
;
83
}
84
#endif
85
*
groupid
=
gr
->gr_gid;
86
return
APR_SUCCESS
;
87
}
apr_portable.h
APR Portability Routines.
apr_strings.h
APR Strings library.
apr_user.h
APR User ID Services.
APR_ENOENT
#define APR_ENOENT
Definition
apr_errno.h:662
APR_DECLARE
const void apr_status_t(*) apr_status_t(* APR_DECLARE)(void) apr_pool_pre_cleanup_register(apr_pool_t *p
Definition
apr_pools.h:646
size
apr_size_t size
Definition
apr_allocator.h:115
APR_SUCCESS
#define APR_SUCCESS
Definition
apr_errno.h:225
apr_status_t
int apr_status_t
Definition
apr_errno.h:44
groupname
const char * groupname
Definition
apr_thread_proc.h:580
apr_gid_t
gid_t apr_gid_t
Definition
apr_user.h:54
p
apr_pool_t * p
Definition
md_event.c:32
NULL
return NULL
Definition
mod_so.c:359
apr_pool_t
Definition
apr_pools.c:562
GRBUF_SIZE
#define GRBUF_SIZE
Definition
groupinfo.c:31
Generated by
1.9.8