summaryrefslogtreecommitdiff
path: root/src/tools/tools_util.h
blob: a83c8eea0cfab4481a9655c6af55af72dea6e8ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
    Authors:
        Jakub Hrozek <jhrozek@redhat.com>
        Simo Sorce <ssorce@redhat.com>

    Copyright (C) 2009 Red Hat

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


#ifndef __TOOLS_UTIL_H__
#define __TOOLS_UTIL_H__

#include <popt.h>

#include "util/util.h"

#define SSSD_PIDFILE ""PID_PATH"/sssd.pid"
#define MAX_PID_LENGTH 10

#define BAD_POPT_PARAMS(pc, msg, val, label) do { \
        usage(pc, msg);                           \
        val = EXIT_FAILURE;                       \
        goto label;                               \
} while(0)

#define CHECK_ROOT(val, prg_name) do { \
    val = getuid(); \
    if (val != 0) { \
        DEBUG(1, ("Running under %d, must be root\n", val)); \
        ERROR("%1$s must be run as root\n", prg_name); \
        val = EXIT_FAILURE; \
        goto fini; \
    } \
} while(0)

struct tools_ctx {
    struct confdb_ctx *confdb;
    struct sysdb_ctx *sysdb;

    struct sss_names_ctx *snctx;
    struct sss_domain_info *local;

    struct ops_ctx *octx;

    bool transaction_done;
    int error;
};

int init_sss_tools(struct tools_ctx **_tctx);

void usage(poptContext pc, const char *error);

int set_locale(void);


int parse_name_domain(struct tools_ctx *tctx,
                      const char *fullname);

int id_in_range(uint32_t id,
                struct sss_domain_info *dom);

int parse_groups(TALLOC_CTX *mem_ctx,
                 const char *optstr,
                 char ***_out);

int parse_group_name_domain(struct tools_ctx *tctx,
                            char **groups);

int check_group_names(struct tools_ctx *tctx,
                      char **grouplist,
                      char **badgroup);

int create_homedir(const char *skeldir,
                   const char *homedir,
                   uid_t uid,
                   gid_t gid,
                   mode_t default_umask);

int create_mail_spool(TALLOC_CTX *mem_ctx,
                      const char *username,
                      const char *maildir,
                      uid_t uid, gid_t gid);

int remove_homedir(TALLOC_CTX *mem_ctx,
                   const char *homedir,
                   const char *maildir,
                   const char *username,
                   uid_t uid, bool force);

int run_userdel_cmd(struct tools_ctx *tctx);

errno_t signal_sssd(int signum);

errno_t sss_memcache_invalidate(const char *mc_filename);

/* from files.c */
int remove_tree(const char *root);

int copy_tree(const char *src_root,
              const char *dst_root,
              uid_t uid, gid_t gid);

/* from nscd.c */
enum nscd_db {
    NSCD_DB_PASSWD,
    NSCD_DB_GROUP
};

int flush_nscd_cache(enum nscd_db flush_db);

/* from selinux.c */
int selinux_file_context(const char *dst_name);
int reset_selinux_file_context(void);
int set_seuser(const char *login_name, const char *seuser_name);
int del_seuser(const char *login_name);

#endif  /* __TOOLS_UTIL_H__ */