1 /** 2 * D header file for POSIX. 3 * 4 * Copyright: Copyright Sean Kelly 2005 - 2009. 5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). 6 * Authors: Sean Kelly, Alex Rønne Petersen 7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition 8 */ 9 10 /* Copyright Sean Kelly 2005 - 2009. 11 * Distributed under the Boost Software License, Version 1.0. 12 * (See accompanying file LICENSE or copy at 13 * http://www.boost.org/LICENSE_1_0.txt) 14 */ 15 module core.sys.posix.pwd; 16 17 import core.sys.posix.config; 18 public import core.sys.posix.sys.types; // for gid_t, uid_t 19 20 version (OSX) 21 version = Darwin; 22 else version (iOS) 23 version = Darwin; 24 else version (TVOS) 25 version = Darwin; 26 else version (WatchOS) 27 version = Darwin; 28 29 version (Posix): 30 extern (C): 31 nothrow: 32 @nogc: 33 34 // 35 // Required 36 // 37 /* 38 struct passwd 39 { 40 char* pw_name; 41 uid_t pw_uid; 42 gid_t pw_gid; 43 char* pw_dir; 44 char* pw_shell; 45 } 46 47 passwd* getpwnam(const scope char*); 48 passwd* getpwuid(uid_t); 49 */ 50 51 version (CRuntime_Glibc) 52 { 53 struct passwd 54 { 55 char* pw_name; 56 char* pw_passwd; 57 uid_t pw_uid; 58 gid_t pw_gid; 59 char* pw_gecos; 60 char* pw_dir; 61 char* pw_shell; 62 } 63 } 64 else version (Darwin) 65 { 66 struct passwd 67 { 68 char* pw_name; 69 char* pw_passwd; 70 uid_t pw_uid; 71 gid_t pw_gid; 72 time_t pw_change; 73 char* pw_class; 74 char* pw_gecos; 75 char* pw_dir; 76 char* pw_shell; 77 time_t pw_expire; 78 } 79 } 80 else version (FreeBSD) 81 { 82 struct passwd 83 { 84 char* pw_name; /* user name */ 85 char* pw_passwd; /* encrypted password */ 86 uid_t pw_uid; /* user uid */ 87 gid_t pw_gid; /* user gid */ 88 time_t pw_change; /* password change time */ 89 char* pw_class; /* user access class */ 90 char* pw_gecos; /* Honeywell login info */ 91 char* pw_dir; /* home directory */ 92 char* pw_shell; /* default shell */ 93 time_t pw_expire; /* account expiration */ 94 int pw_fields; /* internal: fields filled in */ 95 } 96 } 97 else version (NetBSD) 98 { 99 struct passwd 100 { 101 char* pw_name; /* user name */ 102 char* pw_passwd; /* encrypted password */ 103 uid_t pw_uid; /* user uid */ 104 gid_t pw_gid; /* user gid */ 105 time_t pw_change; /* password change time */ 106 char* pw_class; /* user access class */ 107 char* pw_gecos; /* Honeywell login info */ 108 char* pw_dir; /* home directory */ 109 char* pw_shell; /* default shell */ 110 time_t pw_expire; /* account expiration */ 111 } 112 } 113 else version (OpenBSD) 114 { 115 struct passwd 116 { 117 char* pw_name; /* user name */ 118 char* pw_passwd; /* encrypted password */ 119 uid_t pw_uid; /* user uid */ 120 gid_t pw_gid; /* user gid */ 121 time_t pw_change; /* password change time */ 122 char* pw_class; /* user access class */ 123 char* pw_gecos; /* Honeywell login info */ 124 char* pw_dir; /* home directory */ 125 char* pw_shell; /* default shell */ 126 time_t pw_expire; /* account expiration */ 127 } 128 } 129 else version (DragonFlyBSD) 130 { 131 struct passwd 132 { 133 char* pw_name; /* user name */ 134 char* pw_passwd; /* encrypted password */ 135 uid_t pw_uid; /* user uid */ 136 gid_t pw_gid; /* user gid */ 137 time_t pw_change; /* password change time */ 138 char* pw_class; /* user access class */ 139 char* pw_gecos; /* Honeywell login info */ 140 char* pw_dir; /* home directory */ 141 char* pw_shell; /* default shell */ 142 time_t pw_expire; /* account expiration */ 143 int pw_fields; /* internal: fields filled in */ 144 } 145 } 146 else version (Solaris) 147 { 148 struct passwd 149 { 150 char* pw_name; 151 char* pw_passwd; 152 uid_t pw_uid; 153 gid_t pw_gid; 154 char* pw_age; 155 char* pw_comment; 156 char* pw_gecos; 157 char* pw_dir; 158 char* pw_shell; 159 } 160 } 161 else version (CRuntime_Bionic) 162 { 163 struct passwd 164 { 165 char* pw_name; 166 char* pw_passwd; 167 uid_t pw_uid; 168 gid_t pw_gid; 169 char* pw_dir; 170 char* pw_shell; 171 } 172 } 173 else version (CRuntime_Musl) 174 { 175 struct passwd 176 { 177 char *pw_name; 178 char *pw_passwd; 179 uid_t pw_uid; 180 gid_t pw_gid; 181 char *pw_gecos; 182 char *pw_dir; 183 char *pw_shell; 184 } 185 } 186 else version (CRuntime_UClibc) 187 { 188 struct passwd 189 { 190 char* pw_name; 191 char* pw_passwd; 192 uid_t pw_uid; 193 gid_t pw_gid; 194 char* pw_gecos; 195 char* pw_dir; 196 char* pw_shell; 197 } 198 } 199 else 200 { 201 static assert(false, "Unsupported platform"); 202 } 203 204 passwd* getpwnam(const scope char*); 205 passwd* getpwuid(uid_t); 206 207 // 208 // Thread-Safe Functions (TSF) 209 // 210 /* 211 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 212 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 213 */ 214 215 version (CRuntime_Glibc) 216 { 217 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 218 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 219 } 220 else version (Darwin) 221 { 222 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 223 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 224 } 225 else version (FreeBSD) 226 { 227 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 228 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 229 } 230 else version (NetBSD) 231 { 232 int __getpwnam_r50(const scope char*, passwd*, char*, size_t, passwd**); 233 alias __getpwnam_r50 getpwnam_r; 234 int __getpwuid_r50(uid_t, passwd*, char*, size_t, passwd**); 235 alias __getpwuid_r50 getpwuid_r; 236 } 237 else version (OpenBSD) 238 { 239 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 240 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 241 } 242 else version (DragonFlyBSD) 243 { 244 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 245 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 246 } 247 else version (Solaris) 248 { 249 alias getpwnam_r = __posix_getpwnam_r; 250 alias getpwuid_r = __posix_getpwuid_r; 251 252 // POSIX.1c standard version of the functions 253 int __posix_getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 254 int __posix_getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 255 } 256 else version (CRuntime_Bionic) 257 { 258 } 259 else version (CRuntime_Musl) 260 { 261 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 262 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 263 } 264 else version (CRuntime_UClibc) 265 { 266 int getpwnam_r(const scope char*, passwd*, char*, size_t, passwd**); 267 int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); 268 } 269 else 270 { 271 static assert(false, "Unsupported platform"); 272 } 273 274 // 275 // XOpen (XSI) 276 // 277 /* 278 void endpwent(); 279 passwd* getpwent(); 280 void setpwent(); 281 */ 282 283 version (CRuntime_Glibc) 284 { 285 void endpwent(); 286 passwd* getpwent(); 287 void setpwent(); 288 } 289 else version (Darwin) 290 { 291 void endpwent(); 292 passwd* getpwent(); 293 void setpwent(); 294 } 295 else version (FreeBSD) 296 { 297 void endpwent(); 298 passwd* getpwent(); 299 void setpwent(); 300 } 301 else version (NetBSD) 302 { 303 void endpwent(); 304 passwd* getpwent(); 305 void setpwent(); 306 } 307 else version (OpenBSD) 308 { 309 void endpwent(); 310 passwd* getpwent(); 311 void setpwent(); 312 } 313 else version (DragonFlyBSD) 314 { 315 void endpwent(); 316 passwd* getpwent(); 317 void setpwent(); 318 } 319 else version (Solaris) 320 { 321 void endpwent(); 322 passwd* getpwent(); 323 void setpwent(); 324 } 325 else version (CRuntime_Bionic) 326 { 327 void endpwent(); 328 } 329 else version (CRuntime_Musl) 330 { 331 void endpwent(); 332 passwd* getpwent(); 333 void setpwent(); 334 } 335 else version (CRuntime_UClibc) 336 { 337 void endpwent(); 338 passwd* getpwent(); 339 void setpwent(); 340 } 341 else 342 { 343 static assert(false, "Unsupported platform"); 344 }