user-util.h revision ee104e11e303499a637c5cd8157bd12ad5cc116d
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2d0611ffc9f91c5fc2ddccb93f9a3d17791ae650takashi
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend#pragma once
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend/***
7ec4d5cc4aa574e3191bc5a612e68fd8f25ab7earpluem This file is part of systemd.
5a98f1b67de38575f3903a03fc5120062b814371kess
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend Copyright 2010 Lennart Poettering
4b311579b2c8aebac85fb7cb8ac89e6c37b4bc1asf
50c04f297d76a57ead2fa6b73845f7563b1fc788sf systemd is free software; you can redistribute it and/or modify it
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend under the terms of the GNU Lesser General Public License as published by
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend the Free Software Foundation; either version 2.1 of the License, or
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend (at your option) any later version.
d9b843d090f14405079b4a61a493316cd3f1e5b9minfrin
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend systemd is distributed in the hope that it will be useful, but
8951c7d73bfa2ae5a2c8fe5bd27f3e677be02564noirin WITHOUT ANY WARRANTY; without even the implied warranty of
909ce17e2bd0faef7b1c294f2307f009793fd493nd MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend Lesser General Public License for more details.
0ce5630695a7aa568811a9dd0aceedd685f040dend
a29610af88e278144045bfa1bc63b4a1a4b5ff14trawick You should have received a copy of the GNU Lesser General Public License
65a611af7093423efb91e5794b8887a527d4cf63trawick along with systemd; If not, see <http://www.gnu.org/licenses/>.
42af92a661a06b3cebc88d585aad75064a309d51nd***/
8951c7d73bfa2ae5a2c8fe5bd27f3e677be02564noirin
6fe26506780e73be2a412d758af77fafdf03291and#include <sys/types.h>
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend#include <stdbool.h>
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendbool uid_is_valid(uid_t uid);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendstatic inline bool gid_is_valid(gid_t gid) {
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend return uid_is_valid((uid_t) gid);
43f6cc6aa3312619633538b8978619a48c0ce52eminfrin}
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrinint parse_uid(const char *s, uid_t* ret_uid);
0734f81384d5f2528bb119f89d135043a280d5b2minfrin
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendstatic inline int parse_gid(const char *s, gid_t *ret_gid) {
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend return parse_uid(s, (uid_t*) ret_gid);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend}
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
7906201913b68fe78b9d6a22ab33bf21d82c490eminfrinchar* getlogname_malloc(void);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendchar* getusername_malloc(void);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
05ede5110427cb9dc071cc671d5aaba5d3b88c79ndint get_user_creds(const char **username, uid_t *uid, gid_t *gid, const char **home, const char **shell);
e8b603fa9ccf7b17b11b42df6d8916fd97c2331dndint get_group_creds(const char **groupname, gid_t *gid);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
2f39535ac2206b346dcfbcaf271e3addc901f520rbowenchar* uid_to_name(uid_t uid);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendchar* gid_to_name(gid_t gid);
d6ce05b6521a82cc93da69f7c2116c4a5bc54f8cjim
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendint in_gid(gid_t gid);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendint in_group(const char *name);
2eb7a8afc318286c210a1fbb2ff2ba904471956frjung
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendint get_home_dir(char **ret);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendint get_shell(char **_ret);
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend
03a4ff9ac4c9b8009249010e7c53bb86ff05915andint reset_uid_gid(void);
343a568a3281a6a0a4c562407aef7b0dfc299b98minfrin
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fendint take_etc_passwd_lock(const char *root);
1e367a83311e5243e04d68857d007d04765a48f9chrisd
1e367a83311e5243e04d68857d007d04765a48f9chrisd#define UID_INVALID ((uid_t) -1)
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend#define GID_INVALID ((gid_t) -1)
7d15331eeb5429d7148d13d6fd914a641bf1c000pquerna
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend/* The following macros add 1 when converting things, since UID 0 is a
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend * valid UID, while the pointer NULL is special */
f73f2c2fae0ded6c8273c28d025ba8aa8136a0fend#define PTR_TO_UID(p) ((uid_t) (((uintptr_t) (p))-1))
6c4ef4a72d9897e53365b94103f4bd819fd0d3acnd#define UID_TO_PTR(u) ((void*) (((uintptr_t) (u))+1))
2704de98885368683621b01c8f8f4e4b01557611takashi
2704de98885368683621b01c8f8f4e4b01557611takashi#define PTR_TO_GID(p) ((gid_t) (((uintptr_t) (p))-1))
2704de98885368683621b01c8f8f4e4b01557611takashi#define GID_TO_PTR(u) ((void*) (((uintptr_t) (u))+1))
1e367a83311e5243e04d68857d007d04765a48f9chrisd