345 lines
8 KiB
D
345 lines
8 KiB
D
/**
|
|
* D header file for POSIX.
|
|
*
|
|
* Copyright: Copyright Sean Kelly 2005 - 2009.
|
|
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
|
|
* Authors: Sean Kelly, Alex Rønne Petersen
|
|
* Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
|
|
*/
|
|
|
|
/* Copyright Sean Kelly 2005 - 2009.
|
|
* Distributed under the Boost Software License, Version 1.0.
|
|
* (See accompanying file LICENSE or copy at
|
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
*/
|
|
module core.sys.posix.pwd;
|
|
|
|
import core.sys.posix.config;
|
|
public import core.sys.posix.sys.types; // for gid_t, uid_t
|
|
|
|
version (OSX)
|
|
version = Darwin;
|
|
else version (iOS)
|
|
version = Darwin;
|
|
else version (TVOS)
|
|
version = Darwin;
|
|
else version (WatchOS)
|
|
version = Darwin;
|
|
|
|
version (Posix):
|
|
extern (C):
|
|
nothrow:
|
|
@nogc:
|
|
@system:
|
|
|
|
//
|
|
// Required
|
|
//
|
|
/*
|
|
struct passwd
|
|
{
|
|
char* pw_name;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
char* pw_dir;
|
|
char* pw_shell;
|
|
}
|
|
|
|
passwd* getpwnam(const scope char*);
|
|
passwd* getpwuid(uid_t);
|
|
*/
|
|
|
|
version (CRuntime_Glibc)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name;
|
|
char* pw_passwd;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
char* pw_gecos;
|
|
char* pw_dir;
|
|
char* pw_shell;
|
|
}
|
|
}
|
|
else version (Darwin)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name;
|
|
char* pw_passwd;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
time_t pw_change;
|
|
char* pw_class;
|
|
char* pw_gecos;
|
|
char* pw_dir;
|
|
char* pw_shell;
|
|
time_t pw_expire;
|
|
}
|
|
}
|
|
else version (FreeBSD)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name; /* user name */
|
|
char* pw_passwd; /* encrypted password */
|
|
uid_t pw_uid; /* user uid */
|
|
gid_t pw_gid; /* user gid */
|
|
time_t pw_change; /* password change time */
|
|
char* pw_class; /* user access class */
|
|
char* pw_gecos; /* Honeywell login info */
|
|
char* pw_dir; /* home directory */
|
|
char* pw_shell; /* default shell */
|
|
time_t pw_expire; /* account expiration */
|
|
int pw_fields; /* internal: fields filled in */
|
|
}
|
|
}
|
|
else version (NetBSD)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name; /* user name */
|
|
char* pw_passwd; /* encrypted password */
|
|
uid_t pw_uid; /* user uid */
|
|
gid_t pw_gid; /* user gid */
|
|
time_t pw_change; /* password change time */
|
|
char* pw_class; /* user access class */
|
|
char* pw_gecos; /* Honeywell login info */
|
|
char* pw_dir; /* home directory */
|
|
char* pw_shell; /* default shell */
|
|
time_t pw_expire; /* account expiration */
|
|
}
|
|
}
|
|
else version (OpenBSD)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name; /* user name */
|
|
char* pw_passwd; /* encrypted password */
|
|
uid_t pw_uid; /* user uid */
|
|
gid_t pw_gid; /* user gid */
|
|
time_t pw_change; /* password change time */
|
|
char* pw_class; /* user access class */
|
|
char* pw_gecos; /* Honeywell login info */
|
|
char* pw_dir; /* home directory */
|
|
char* pw_shell; /* default shell */
|
|
time_t pw_expire; /* account expiration */
|
|
}
|
|
}
|
|
else version (DragonFlyBSD)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name; /* user name */
|
|
char* pw_passwd; /* encrypted password */
|
|
uid_t pw_uid; /* user uid */
|
|
gid_t pw_gid; /* user gid */
|
|
time_t pw_change; /* password change time */
|
|
char* pw_class; /* user access class */
|
|
char* pw_gecos; /* Honeywell login info */
|
|
char* pw_dir; /* home directory */
|
|
char* pw_shell; /* default shell */
|
|
time_t pw_expire; /* account expiration */
|
|
int pw_fields; /* internal: fields filled in */
|
|
}
|
|
}
|
|
else version (Solaris)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name;
|
|
char* pw_passwd;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
char* pw_age;
|
|
char* pw_comment;
|
|
char* pw_gecos;
|
|
char* pw_dir;
|
|
char* pw_shell;
|
|
}
|
|
}
|
|
else version (CRuntime_Bionic)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name;
|
|
char* pw_passwd;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
char* pw_dir;
|
|
char* pw_shell;
|
|
}
|
|
}
|
|
else version (CRuntime_Musl)
|
|
{
|
|
struct passwd
|
|
{
|
|
char *pw_name;
|
|
char *pw_passwd;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
char *pw_gecos;
|
|
char *pw_dir;
|
|
char *pw_shell;
|
|
}
|
|
}
|
|
else version (CRuntime_UClibc)
|
|
{
|
|
struct passwd
|
|
{
|
|
char* pw_name;
|
|
char* pw_passwd;
|
|
uid_t pw_uid;
|
|
gid_t pw_gid;
|
|
char* pw_gecos;
|
|
char* pw_dir;
|
|
char* pw_shell;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
static assert(false, "Unsupported platform");
|
|
}
|
|
|
|
passwd* getpwnam(const scope char*);
|
|
passwd* getpwuid(uid_t);
|
|
|
|
//
|
|
// Thread-Safe Functions (TSF)
|
|
//
|
|
/*
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
*/
|
|
|
|
version (CRuntime_Glibc)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (Darwin)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (FreeBSD)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (NetBSD)
|
|
{
|
|
int __getpwnam_r50(const scope char*, passwd*, char*, size_t, passwd**);
|
|
alias __getpwnam_r50 getpwnam_r;
|
|
int __getpwuid_r50(uid_t, passwd*, char*, size_t, passwd**);
|
|
alias __getpwuid_r50 getpwuid_r;
|
|
}
|
|
else version (OpenBSD)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (DragonFlyBSD)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (Solaris)
|
|
{
|
|
alias getpwnam_r = __posix_getpwnam_r;
|
|
alias getpwuid_r = __posix_getpwuid_r;
|
|
|
|
// POSIX.1c standard version of the functions
|
|
int __posix_getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int __posix_getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (CRuntime_Bionic)
|
|
{
|
|
}
|
|
else version (CRuntime_Musl)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else version (CRuntime_UClibc)
|
|
{
|
|
int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**);
|
|
int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**);
|
|
}
|
|
else
|
|
{
|
|
static assert(false, "Unsupported platform");
|
|
}
|
|
|
|
//
|
|
// XOpen (XSI)
|
|
//
|
|
/*
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
*/
|
|
|
|
version (CRuntime_Glibc)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (Darwin)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (FreeBSD)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (NetBSD)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (OpenBSD)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (DragonFlyBSD)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (Solaris)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (CRuntime_Bionic)
|
|
{
|
|
void endpwent();
|
|
}
|
|
else version (CRuntime_Musl)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else version (CRuntime_UClibc)
|
|
{
|
|
void endpwent();
|
|
passwd* getpwent();
|
|
void setpwent();
|
|
}
|
|
else
|
|
{
|
|
static assert(false, "Unsupported platform");
|
|
}
|