1
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
8
* http://www.apache.org/licenses/LICENSE-2.0
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.
17
#include "apr_strings.h"
18
#include "apr_portable.h"
20
#include "apr_private.h"
21
#if APR_HAVE_SYS_TYPES_H
22
#include <sys/types.h>
25
APR_DECLARE(apr_status_t) apr_gid_get(apr_gid_t *gid,
26
const char *groupname, apr_pool_t *p)
35
DWORD domlen = sizeof(anydomain);
39
if (pos = strchr(groupname, '/')) {
40
domain = apr_pstrndup(p, groupname, pos - groupname);
43
else if (pos = strchr(groupname, '\\')) {
44
domain = apr_pstrndup(p, groupname, pos - groupname);
50
/* Get nothing on the first pass ... need to size the sid buffer
52
rv = LookupAccountName(domain, groupname, domain, &sidlen,
53
anydomain, &domlen, &sidtype);
55
/* Give it back on the second pass
57
*gid = apr_palloc(p, sidlen);
58
domlen = sizeof(anydomain);
59
rv = LookupAccountName(domain, groupname, *gid, &sidlen,
60
anydomain, &domlen, &sidtype);
63
return apr_get_os_error();
69
APR_DECLARE(apr_status_t) apr_gid_name_get(char **groupname, apr_gid_t groupid, apr_pool_t *p)
72
*groupname = apr_pstrdup(p, "Administrators");
75
char name[MAX_PATH], domain[MAX_PATH];
76
DWORD cbname = sizeof(name), cbdomain = sizeof(domain);
79
if (!LookupAccountSid(NULL, groupid, name, &cbname, domain, &cbdomain, &type))
80
return apr_get_os_error();
81
if (type != SidTypeGroup && type != SidTypeWellKnownGroup
82
&& type != SidTypeAlias)
84
*groupname = apr_pstrdup(p, name);
89
APR_DECLARE(apr_status_t) apr_gid_compare(apr_gid_t left, apr_gid_t right)
94
if (!IsValidSid(left) || !IsValidSid(right))
96
if (!EqualSid(left, right))