1251875Speter/* Licensed to the Apache Software Foundation (ASF) under one or more 2251875Speter * contributor license agreements. See the NOTICE file distributed with 3251875Speter * this work for additional information regarding copyright ownership. 4251875Speter * The ASF licenses this file to You under the Apache License, Version 2.0 5251875Speter * (the "License"); you may not use this file except in compliance with 6251875Speter * the License. You may obtain a copy of the License at 7251875Speter * 8251875Speter * http://www.apache.org/licenses/LICENSE-2.0 9251875Speter * 10251875Speter * Unless required by applicable law or agreed to in writing, software 11251875Speter * distributed under the License is distributed on an "AS IS" BASIS, 12251875Speter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13251875Speter * See the License for the specific language governing permissions and 14251875Speter * limitations under the License. 15251875Speter */ 16251875Speter 17251875Speter#ifndef APR_USER_H 18251875Speter#define APR_USER_H 19251875Speter 20251875Speter/** 21251875Speter * @file apr_user.h 22251875Speter * @brief APR User ID Services 23251875Speter */ 24251875Speter 25251875Speter#include "apr.h" 26251875Speter#include "apr_errno.h" 27251875Speter#include "apr_pools.h" 28251875Speter 29251875Speter#ifdef __cplusplus 30251875Speterextern "C" { 31251875Speter#endif /* __cplusplus */ 32251875Speter 33251875Speter/** 34251875Speter * @defgroup apr_user User and Group ID Services 35251875Speter * @ingroup APR 36251875Speter * @{ 37251875Speter */ 38251875Speter 39251875Speter/** 40251875Speter * Structure for determining user ownership. 41251875Speter */ 42251875Speter#ifdef WIN32 43251875Spetertypedef PSID apr_uid_t; 44251875Speter#else 45251875Spetertypedef uid_t apr_uid_t; 46251875Speter#endif 47251875Speter 48251875Speter/** 49251875Speter * Structure for determining group ownership. 50251875Speter */ 51251875Speter#ifdef WIN32 52251875Spetertypedef PSID apr_gid_t; 53251875Speter#else 54251875Spetertypedef gid_t apr_gid_t; 55251875Speter#endif 56251875Speter 57251875Speter#if APR_HAS_USER 58251875Speter 59251875Speter/** 60251875Speter * Get the userid (and groupid) of the calling process 61251875Speter * @param userid Returns the user id 62251875Speter * @param groupid Returns the user's group id 63251875Speter * @param p The pool from which to allocate working space 64251875Speter * @remark This function is available only if APR_HAS_USER is defined. 65251875Speter */ 66251875SpeterAPR_DECLARE(apr_status_t) apr_uid_current(apr_uid_t *userid, 67251875Speter apr_gid_t *groupid, 68251875Speter apr_pool_t *p); 69251875Speter 70251875Speter/** 71251875Speter * Get the user name for a specified userid 72251875Speter * @param username Pointer to new string containing user name (on output) 73251875Speter * @param userid The userid 74251875Speter * @param p The pool from which to allocate the string 75251875Speter * @remark This function is available only if APR_HAS_USER is defined. 76251875Speter */ 77251875SpeterAPR_DECLARE(apr_status_t) apr_uid_name_get(char **username, apr_uid_t userid, 78251875Speter apr_pool_t *p); 79251875Speter 80251875Speter/** 81251875Speter * Get the userid (and groupid) for the specified username 82251875Speter * @param userid Returns the user id 83251875Speter * @param groupid Returns the user's group id 84266735Speter * @param username The username to look up 85251875Speter * @param p The pool from which to allocate working space 86251875Speter * @remark This function is available only if APR_HAS_USER is defined. 87251875Speter */ 88251875SpeterAPR_DECLARE(apr_status_t) apr_uid_get(apr_uid_t *userid, apr_gid_t *groupid, 89251875Speter const char *username, apr_pool_t *p); 90251875Speter 91251875Speter/** 92251875Speter * Get the home directory for the named user 93251875Speter * @param dirname Pointer to new string containing directory name (on output) 94251875Speter * @param username The named user 95251875Speter * @param p The pool from which to allocate the string 96251875Speter * @remark This function is available only if APR_HAS_USER is defined. 97251875Speter */ 98251875SpeterAPR_DECLARE(apr_status_t) apr_uid_homepath_get(char **dirname, 99251875Speter const char *username, 100251875Speter apr_pool_t *p); 101251875Speter 102251875Speter/** 103251875Speter * Compare two user identifiers for equality. 104251875Speter * @param left One uid to test 105251875Speter * @param right Another uid to test 106266735Speter * @return APR_SUCCESS if the apr_uid_t structures identify the same user, 107251875Speter * APR_EMISMATCH if not, APR_BADARG if an apr_uid_t is invalid. 108251875Speter * @remark This function is available only if APR_HAS_USER is defined. 109251875Speter */ 110251875Speter#if defined(WIN32) 111251875SpeterAPR_DECLARE(apr_status_t) apr_uid_compare(apr_uid_t left, apr_uid_t right); 112251875Speter#else 113251875Speter#define apr_uid_compare(left,right) (((left) == (right)) ? APR_SUCCESS : APR_EMISMATCH) 114251875Speter#endif 115251875Speter 116251875Speter/** 117251875Speter * Get the group name for a specified groupid 118251875Speter * @param groupname Pointer to new string containing group name (on output) 119251875Speter * @param groupid The groupid 120251875Speter * @param p The pool from which to allocate the string 121251875Speter * @remark This function is available only if APR_HAS_USER is defined. 122251875Speter */ 123251875SpeterAPR_DECLARE(apr_status_t) apr_gid_name_get(char **groupname, 124251875Speter apr_gid_t groupid, apr_pool_t *p); 125251875Speter 126251875Speter/** 127251875Speter * Get the groupid for a specified group name 128251875Speter * @param groupid Pointer to the group id (on output) 129251875Speter * @param groupname The group name to look up 130251875Speter * @param p The pool from which to allocate the string 131251875Speter * @remark This function is available only if APR_HAS_USER is defined. 132251875Speter */ 133251875SpeterAPR_DECLARE(apr_status_t) apr_gid_get(apr_gid_t *groupid, 134251875Speter const char *groupname, apr_pool_t *p); 135251875Speter 136251875Speter/** 137251875Speter * Compare two group identifiers for equality. 138251875Speter * @param left One gid to test 139251875Speter * @param right Another gid to test 140266735Speter * @return APR_SUCCESS if the apr_gid_t structures identify the same group, 141251875Speter * APR_EMISMATCH if not, APR_BADARG if an apr_gid_t is invalid. 142251875Speter * @remark This function is available only if APR_HAS_USER is defined. 143251875Speter */ 144251875Speter#if defined(WIN32) 145251875SpeterAPR_DECLARE(apr_status_t) apr_gid_compare(apr_gid_t left, apr_gid_t right); 146251875Speter#else 147251875Speter#define apr_gid_compare(left,right) (((left) == (right)) ? APR_SUCCESS : APR_EMISMATCH) 148251875Speter#endif 149251875Speter 150251875Speter#endif /* ! APR_HAS_USER */ 151251875Speter 152251875Speter/** @} */ 153251875Speter 154251875Speter#ifdef __cplusplus 155251875Speter} 156251875Speter#endif 157251875Speter 158251875Speter#endif /* ! APR_USER_H */ 159