summaryrefslogtreecommitdiffstats
path: root/libmisc/cleanup_user.c
blob: 26675c6539c8076d5f2e8f7d21560a11fd82ef0f (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
/*
 * SPDX-FileCopyrightText: 2008       , Nicolas François
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <config.h>

#include <assert.h>
#include <stdio.h>

#include "defines.h"
#include "pwio.h"
#include "shadowio.h"
#include "prototypes.h"
#include "shadowlog.h"

/*
 * cleanup_report_add_user - Report failure to add an user to the system
 *
 * It should be registered when it is decided to add an user to the system.
 */
void cleanup_report_add_user (void *user_name)
{
	const char *name = (const char *)user_name;

	SYSLOG ((LOG_ERR, "failed to add user %s", name));
#ifdef WITH_AUDIT
	audit_logger (AUDIT_ADD_USER, log_get_progname(),
	              "",
	              name, AUDIT_NO_ID,
	              SHADOW_AUDIT_FAILURE);
#endif
}

void cleanup_report_mod_passwd (void *cleanup_info)
{
	const struct cleanup_info_mod *info;
	info = (const struct cleanup_info_mod *)cleanup_info;

	SYSLOG ((LOG_ERR,
	         "failed to change %s (%s)",
	         pw_dbname (),
	         info->action));
#ifdef WITH_AUDIT
	audit_logger (AUDIT_USER_ACCT, log_get_progname(),
	              info->audit_msg,
	              info->name, AUDIT_NO_ID,
	              SHADOW_AUDIT_FAILURE);
#endif
}

/*
 * cleanup_report_add_user_passwd - Report failure to add an user to
 * /etc/passwd
 *
 * It should be registered when it is decided to add an user to the
 * /etc/passwd database.
 */
void cleanup_report_add_user_passwd (void *user_name)
{
	const char *name = (const char *)user_name;

	SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, pw_dbname ()));
#ifdef WITH_AUDIT
	audit_logger (AUDIT_ADD_USER, log_get_progname(),
	              "adding user to /etc/passwd",
	              name, AUDIT_NO_ID,
	              SHADOW_AUDIT_FAILURE);
#endif
}

/*
 * cleanup_report_add_user_shadow - Report failure to add an user to
 * /etc/shadow
 *
 * It should be registered when it is decided to add an user to the
 * /etc/shadow database.
 */
void cleanup_report_add_user_shadow (void *user_name)
{
	const char *name = (const char *)user_name;

	SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, spw_dbname ()));
#ifdef WITH_AUDIT
	audit_logger (AUDIT_ADD_USER, log_get_progname(),
	              "adding user to /etc/shadow",
	              name, AUDIT_NO_ID,
	              SHADOW_AUDIT_FAILURE);
#endif
}

/*
 * cleanup_unlock_passwd - Unlock the /etc/passwd database
 *
 * It should be registered after the passwd database is successfully locked.
 */
void cleanup_unlock_passwd (unused void *arg)
{
	if (pw_unlock () == 0) {
		fprintf (log_get_logfd(),
		         _("%s: failed to unlock %s\n"),
		         log_get_progname(), pw_dbname ());
		SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
#ifdef WITH_AUDIT
		audit_logger_message ("unlocking passwd file",
		                      SHADOW_AUDIT_FAILURE);
#endif
	}
}

/*
 * cleanup_unlock_shadow - Unlock the /etc/shadow database
 *
 * It should be registered after the shadow database is successfully locked.
 */
void cleanup_unlock_shadow (unused void *arg)
{
	if (spw_unlock () == 0) {
		fprintf (log_get_logfd(),
		         _("%s: failed to unlock %s\n"),
		         log_get_progname(), spw_dbname ());
		SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
#ifdef WITH_AUDIT
		audit_logger_message ("unlocking shadow file",
		                      SHADOW_AUDIT_FAILURE);
#endif
	}
}