Auto sync2gitlab import of libuser-0.62-24.el8.src.rpm

This commit is contained in:
James Antill 2022-05-26 10:59:18 -04:00
parent 4779ce3382
commit 31abacbc75
22 changed files with 16334 additions and 1 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/libuser-0.62.tar.xz

View File

@ -0,0 +1,52 @@
From 9317afc8bb7eec656444fc2eecfcd1ea3bfdda82 Mon Sep 17 00:00:00 2001
From: Stephen Gallagher <sgallagh@redhat.com>
Date: Wed, 15 Mar 2017 12:43:03 -0400
Subject: [PATCH] Fix errors with -Werror=format-security
Recent versions of the Fedora build system treat format-security
warnings as errors, resulting in failure to build. This patch
ensures that appropriate format strings are present.
Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
---
modules/files.c | 2 +-
modules/ldap.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules/files.c b/modules/files.c
index 4ef0a57be9f2aad99d82abfae5204009a93e5572..6a7787e28112ba07e0fc44f2887ce1d1540af29e 100644
--- a/modules/files.c
+++ b/modules/files.c
@@ -532,11 +532,11 @@ parse_field(const struct format_specifier *format, GValue *value,
err = NULL;
ret = lu_value_init_set_attr_from_string(value, format->attribute,
string, &err);
if (ret == FALSE) {
g_assert(err != NULL);
- g_warning(lu_strerror(err));
+ g_warning("%s", lu_strerror(err));
lu_error_free(&err);
}
return ret;
}
diff --git a/modules/ldap.c b/modules/ldap.c
index ad10f7394c5735f3180cbab5bc7314301fd83ffc..02e9eb6a0cf10595d730e3dc719f2e848a3491d4 100644
--- a/modules/ldap.c
+++ b/modules/ldap.c
@@ -670,11 +670,11 @@ lu_ldap_lookup(struct lu_module *module,
error = NULL;
ok = lu_value_init_set_attr_from_string
(&value, attr, val, &error);
if (ok == FALSE) {
g_assert(error != NULL);
- g_warning(lu_strerror(error));
+ g_warning("%s", lu_strerror(error));
lu_error_free(&error);
} else {
lu_ent_add_current(ent, attr,
&value);
g_value_unset(&value);
--
2.12.0

View File

@ -0,0 +1,40 @@
From 68e2c532e610e1c91dd10ff176b673d6190adef4 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jakub.hrozek@posteo.se>
Date: Mon, 6 Aug 2018 21:43:53 +0200
Subject: [PATCH] Use 2048-bit keys in tests to avoid issues with modern
systems
---
tests/default_pw_test | 2 +-
tests/ldap_test | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/default_pw_test b/tests/default_pw_test
index 6da406cf3f67cee2084e730361d43c88df83b81c..733c85c090e07c87a9a7ef8b58c5396bf5f91197 100755
--- a/tests/default_pw_test
+++ b/tests/default_pw_test
@@ -30,7 +30,7 @@ rm -rf "$workdir"
mkdir "$workdir"
# Create a SSL key
-/usr/bin/openssl req -newkey rsa:1024 -keyout "$workdir"/key1 -nodes \
+/usr/bin/openssl req -newkey rsa:2048 -keyout "$workdir"/key1 -nodes \
-x509 -days 2 -out "$workdir"/key3 2>/dev/null <<EOF
.
.
diff --git a/tests/ldap_test b/tests/ldap_test
index f82c2795ef283e323f49c8a400d6c628b3a3e331..54609b14d54b2c5638445262e7fb25307ba6db4c 100755
--- a/tests/ldap_test
+++ b/tests/ldap_test
@@ -30,7 +30,7 @@ rm -rf "$workdir"
mkdir "$workdir"
# Create a SSL key
-/usr/bin/openssl req -newkey rsa:1024 -keyout "$workdir"/key1 -nodes \
+/usr/bin/openssl req -newkey rsa:2048 -keyout "$workdir"/key1 -nodes \
-x509 -days 2 -out "$workdir"/key3 2>/dev/null <<EOF
.
.
--
2.14.4

View File

@ -0,0 +1,658 @@
From 72962208c42ea202f1e31f2f3ac1b523cd545b06 Mon Sep 17 00:00:00 2001
From: Steve Grubb <sgrubb@redhat.com>
Date: Fri, 3 Aug 2018 11:33:05 +0200
Subject: [PATCH] Add audit events around user life cycle
---
Makefile.am | 18 ++++++-------
apps/lchage.c | 5 ++++
apps/lchsh.c | 7 +++++
apps/lgroupadd.c | 5 ++++
apps/lgroupdel.c | 6 +++++
apps/lgroupmod.c | 36 +++++++++++++++++++++++++
apps/luseradd.c | 16 +++++++++++
apps/luserdel.c | 17 ++++++++++++
apps/lusermod.c | 38 +++++++++++++++++++++++++-
configure.ac | 17 ++++++++++++
lib/common.c | 66 +++++++++++++++++++++++++++++++++++++++++++++-
lib/user_private.h | 15 +++++++++++
12 files changed, 235 insertions(+), 11 deletions(-)
diff --git a/Makefile.am b/Makefile.am
index 080f97e8cc81a77dd0413c3b6fe7fe8002499393..9f099bd71941a869274a502a3130802731d83c24 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -116,7 +116,7 @@ apps_libapputil_la_LDFLAGS = $(GOBJECT_LIBS) -lpam -lpam_misc $(SELINUX_LIBS)
apps_lchage_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lchage_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_lchage_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_lchage_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_lchfn_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lchfn_LDADD = apps/libapputil.la lib/libuser.la $(LTLIBINTL)
@@ -124,19 +124,19 @@ apps_lchfn_LDFLAGS = $(GMODULE_LIBS) -lpopt
apps_lchsh_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lchsh_LDADD = apps/libapputil.la lib/libuser.la $(LTLIBINTL)
-apps_lchsh_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_lchsh_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_lgroupadd_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lgroupadd_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_lgroupadd_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_lgroupadd_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_lgroupdel_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lgroupdel_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_lgroupdel_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_lgroupdel_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_lgroupmod_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lgroupmod_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_lgroupmod_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_lgroupmod_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_lid_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lid_LDADD = lib/libuser.la $(LTLIBINTL)
@@ -152,15 +152,15 @@ apps_lpasswd_LDFLAGS = $(GMODULE_LIBS) -lpopt
apps_luseradd_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_luseradd_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_luseradd_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_luseradd_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_luserdel_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_luserdel_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_luserdel_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_luserdel_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
apps_lusermod_CPPFLAGS = $(AM_CPPFLAGS) $(LOCALEDIR_CPPFLAGS)
apps_lusermod_LDADD = lib/libuser.la $(LTLIBINTL)
-apps_lusermod_LDFLAGS = $(GMODULE_LIBS) -lpopt
+apps_lusermod_LDFLAGS = $(GMODULE_LIBS) -lpopt $(AUDIT_LIBS)
lib_libuser_la_SOURCES = lib/common.c lib/config.c lib/entity.c lib/error.c \
lib/fs.c lib/getdate.y lib/internal.h lib/misc.c lib/modules.c \
@@ -170,7 +170,7 @@ lib_libuser_la_CPPFLAGS = $(GMODULE_CFLAGS) -Ilib $(LOCALEDIR_CPPFLAGS) \
-DMODULEDIR='"$(pkglibdir)"' -DNSCD='"$(NSCD)"' \
-DSYSCONFDIR='"$(sysconfdir)"'
lib_libuser_la_LDFLAGS = $(GMODULE_LIBS) $(CRYPT_LIBS) $(SELINUX_LIBS) \
- -version-info 6:2:5
+ $(AUDIT_LIBS) -version-info 6:2:5
lib_libuser_la_LIBADD = $(LTLIBINTL)
modules_libuser_files_la_SOURCES = modules/files.c
diff --git a/apps/lchage.c b/apps/lchage.c
index bad296ccf0755dd6781b1a2e6397dccb1f7dbd12..1a4f04883062cb11f15a2e34d37e127fef2a374e 100644
--- a/apps/lchage.c
+++ b/apps/lchage.c
@@ -29,6 +29,7 @@
#include <popt.h>
#include <glib.h>
#include "../lib/user.h"
+#include "../lib/user_private.h"
#include "apputil.h"
#define INVALID_LONG LONG_MIN
@@ -239,8 +240,12 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Failed to modify aging information for %s: "
"%s\n"), user, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT, "change-age", user,
+ AUDIT_NO_ID, 0);
return 3;
}
+ lu_audit_logger(AUDIT_USER_MGMT, "change-age", user,
+ AUDIT_NO_ID, 1);
lu_nscd_flush_cache(LU_NSCD_CACHE_PASSWD);
}
diff --git a/apps/lchsh.c b/apps/lchsh.c
index 7c8a9246d4548a7f6fbacce91cdfdf4372799943..555ed2ea7b0d5a90bf37a7f23c398b382ac45a38 100644
--- a/apps/lchsh.c
+++ b/apps/lchsh.c
@@ -26,6 +26,7 @@
#include <string.h>
#include <unistd.h>
#include "../lib/user.h"
+#include "../lib/user_private.h"
#include "apputil.h"
int
@@ -120,6 +121,8 @@ main(int argc, const char **argv)
NULL, &error) == FALSE) {
fprintf(stderr, _("Shell not changed: %s\n"),
lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT, "change-shell", user,
+ AUDIT_NO_ID, 0);
return 1;
}
/* Modify the in-memory structure's shell attribute. */
@@ -132,9 +135,13 @@ main(int argc, const char **argv)
if (lu_user_modify(ctx, ent, &error)) {
g_print(_("Shell changed.\n"));
lu_nscd_flush_cache(LU_NSCD_CACHE_PASSWD);
+ lu_audit_logger(AUDIT_USER_MGMT, "change-shell", user,
+ AUDIT_NO_ID, 1);
} else {
fprintf(stderr, _("Shell not changed: %s\n"),
lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT, "change-shell", user,
+ AUDIT_NO_ID, 0);
return 1;
}
}
diff --git a/apps/lgroupadd.c b/apps/lgroupadd.c
index d73ee864adac9e5dbc7d98392190db225d116143..3fa2a1df5ac5838ef256541c07ae6028e4f6a80b 100644
--- a/apps/lgroupadd.c
+++ b/apps/lgroupadd.c
@@ -118,6 +118,8 @@ main(int argc, const char **argv)
if (lu_group_add(ctx, ent, &error) == FALSE) {
fprintf(stderr, _("Group creation failed: %s\n"),
lu_strerror(error));
+ lu_audit_logger(AUDIT_ADD_GROUP, "add-group", name,
+ AUDIT_NO_ID, 0);
return 2;
}
@@ -127,5 +129,8 @@ main(int argc, const char **argv)
lu_end(ctx);
+ lu_audit_logger(AUDIT_ADD_GROUP, "add-group", name,
+ AUDIT_NO_ID, 1);
+
return 0;
}
diff --git a/apps/lgroupdel.c b/apps/lgroupdel.c
index e0fd6c6d42f55eef82f0790f551721972c129b5f..c5ccbed95cb834719cd109a81e6f979bb737dc71 100644
--- a/apps/lgroupdel.c
+++ b/apps/lgroupdel.c
@@ -24,6 +24,7 @@
#include <locale.h>
#include <popt.h>
#include "../lib/user.h"
+#include "../lib/user_private.h"
#include "apputil.h"
int
@@ -90,6 +91,8 @@ main(int argc, const char **argv)
if (lu_group_delete(ctx, ent, &error) == FALSE) {
fprintf(stderr, _("Group %s could not be deleted: %s\n"),
group, lu_strerror(error));
+ lu_audit_logger(AUDIT_DEL_GROUP, "delete-group", group,
+ AUDIT_NO_ID, 0);
return 3;
}
@@ -99,5 +102,8 @@ main(int argc, const char **argv)
lu_end(ctx);
+ lu_audit_logger(AUDIT_DEL_GROUP, "delete-group", group,
+ AUDIT_NO_ID, 1);
+
return 0;
}
diff --git a/apps/lgroupmod.c b/apps/lgroupmod.c
index 21170e06f37370d7b2f2d936048ae7abf24fd181..0ad0ae4f39d32435b4668ef15ec678d8ea319e5c 100644
--- a/apps/lgroupmod.c
+++ b/apps/lgroupmod.c
@@ -138,8 +138,14 @@ main(int argc, const char **argv)
== FALSE) {
fprintf(stderr, _("Failed to set password for group "
"%s: %s\n"), group, lu_strerror(error));
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-passwd", group,
+ AUDIT_NO_ID, 0);
return 4;
}
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-passwd", group,
+ AUDIT_NO_ID, 1);
}
if (cryptedUserPassword) {
@@ -147,8 +153,14 @@ main(int argc, const char **argv)
&error) == FALSE) {
fprintf(stderr, _("Failed to set password for group "
"%s: %s\n"), group, lu_strerror(error));
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-passwd", group,
+ AUDIT_NO_ID, 0);
return 5;
}
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-passwd", group,
+ AUDIT_NO_ID, 1);
}
if (lock) {
@@ -156,8 +168,14 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Group %s could not be locked: %s\n"), group,
lu_strerror(error));
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-lock", group,
+ AUDIT_NO_ID, 0);
return 6;
}
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-lock", group,
+ AUDIT_NO_ID, 1);
}
if (unlock) {
@@ -165,8 +183,14 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Group %s could not be unlocked: %s\n"),
group, lu_strerror(error));
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-lock", group,
+ AUDIT_NO_ID, 0);
return 7;
}
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-lock", group,
+ AUDIT_NO_ID, 1);
}
change = gid || addAdmins || remAdmins || addMembers || remMembers;
@@ -241,8 +265,14 @@ main(int argc, const char **argv)
if (change && lu_group_modify(ctx, ent, &error) == FALSE) {
fprintf(stderr, _("Group %s could not be modified: %s\n"),
group, lu_strerror(error));
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-members", group,
+ AUDIT_NO_ID, 0);
return 8;
}
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-members", group,
+ AUDIT_NO_ID, 1);
if (gidNumber != LU_VALUE_INVALID_ID) {
users = lu_users_enumerate_by_group_full(ctx, gid, &error);
@@ -256,8 +286,14 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Group %s could not be modified: %s\n"),
group, lu_strerror(error));
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-id", group,
+ AUDIT_NO_ID, 0);
return 8;
}
+ lu_audit_logger(AUDIT_GRP_MGMT,
+ "changing-group-id", group,
+ AUDIT_NO_ID, 1);
}
lu_ent_free(ent);
diff --git a/apps/luseradd.c b/apps/luseradd.c
index 7839183c00f892ad50f77f5aed6ada07cd3c125b..9d7f4f10a9c6f849e551f017f05c2e67e4a56259 100644
--- a/apps/luseradd.c
+++ b/apps/luseradd.c
@@ -210,8 +210,12 @@ main(int argc, const char **argv)
lu_error_free(&error);
}
lu_end(ctx);
+ lu_audit_logger(AUDIT_ADD_GROUP, "add-group", name,
+ AUDIT_NO_ID, 0);
return 1;
}
+ lu_audit_logger(AUDIT_ADD_GROUP, "add-group", name,
+ AUDIT_NO_ID, 1);
}
/* Retrieve the group ID. */
@@ -259,9 +263,13 @@ main(int argc, const char **argv)
if (lu_user_add(ctx, ent, &error) == FALSE) {
fprintf(stderr, _("Account creation failed: %s.\n"),
lu_strerror(error));
+ lu_audit_logger(AUDIT_ADD_USER, "add-user", name,
+ AUDIT_NO_ID, 0);
+
return 3;
}
lu_nscd_flush_cache(LU_NSCD_CACHE_PASSWD);
+ lu_audit_logger(AUDIT_ADD_USER, "add-user", name, AUDIT_NO_ID, 1);
/* If we don't have the the don't-create-home flag, create the user's
* home directory. */
@@ -282,8 +290,12 @@ main(int argc, const char **argv)
&error) == FALSE) {
fprintf(stderr, _("Error creating %s: %s.\n"),
homeDirectory, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT, "add-home-dir", name,
+ uidNumber, 0);
return 7;
}
+ lu_audit_logger(AUDIT_USER_MGMT, "add-home-dir", name,
+ uidNumber, 1);
/* Create a mail spool for the user. */
if (lu_mail_spool_create(ctx, ent, &error) != TRUE) {
@@ -311,8 +323,12 @@ main(int argc, const char **argv)
fprintf(stderr, _("Error setting password for user "
"%s: %s.\n"), name,
lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK, "updating-password",
+ name, uidNumber, 0);
return 3;
}
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK, "updating-password",
+ name, uidNumber, 1);
}
lu_nscd_flush_cache(LU_NSCD_CACHE_PASSWD);
diff --git a/apps/luserdel.c b/apps/luserdel.c
index 2f39a4ffb8ae47ac5dc3c84270b54a8ca68c7403..7e20fa7ea9bf4082967bc6931a8557936bfda0a2 100644
--- a/apps/luserdel.c
+++ b/apps/luserdel.c
@@ -26,6 +26,7 @@
#include <string.h>
#include <unistd.h>
#include "../lib/user.h"
+#include "../lib/user_private.h"
#include "apputil.h"
int
@@ -93,8 +94,12 @@ main(int argc, const char **argv)
if (lu_user_delete(ctx, ent, &error) == FALSE) {
fprintf(stderr, _("User %s could not be deleted: %s.\n"),
user, lu_strerror(error));
+ lu_audit_logger(AUDIT_DEL_USER, "delete-user", user,
+ AUDIT_NO_ID, 0);
return 3;
}
+ lu_audit_logger(AUDIT_DEL_USER, "delete-user", user,
+ AUDIT_NO_ID, 1);
lu_nscd_flush_cache(LU_NSCD_CACHE_PASSWD);
@@ -126,9 +131,15 @@ main(int argc, const char **argv)
fprintf(stderr, _("Group %s could not be "
"deleted: %s.\n"), tmp,
lu_strerror(error));
+ lu_audit_logger_with_group (AUDIT_DEL_GROUP,
+ "delete-group", user, AUDIT_NO_ID,
+ tmp, 0);
return 7;
}
}
+ lu_audit_logger_with_group (AUDIT_DEL_GROUP,
+ "delete-group", user,
+ AUDIT_NO_ID, tmp, 1);
lu_ent_free(group_ent);
lu_nscd_flush_cache(LU_NSCD_CACHE_GROUP);
}
@@ -138,8 +149,14 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Error removing home directory: %s.\n"),
lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT,
+ "deleting-home-directory", user,
+ AUDIT_NO_ID, 0);
return 9;
}
+ lu_audit_logger(AUDIT_USER_MGMT, "deleting-home-directory", user,
+ AUDIT_NO_ID, 1);
+
/* Delete the user's mail spool. */
if (lu_mail_spool_remove(ctx, ent, &error) != TRUE) {
fprintf(stderr, _("Error removing mail spool: %s"),
diff --git a/apps/lusermod.c b/apps/lusermod.c
index afec147475736f0b814b5e1f30c77064f3915c20..143157f114c93960fb879d9e6e0c1fb914f3ffcb 100644
--- a/apps/lusermod.c
+++ b/apps/lusermod.c
@@ -179,8 +179,13 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Failed to set password for user %s: %s.\n"),
user, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK,
+ "updating-password", user,
+ uidNumber, 0);
return 5;
}
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK, "updating-password",
+ user, uidNumber, 0);
}
/* If we need to change a user's crypted password, try to change it,
@@ -192,8 +197,13 @@ main(int argc, const char **argv)
fprintf(stderr,
_("Failed to set password for user %s: %s.\n"),
user, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK,
+ "updating-password", user,
+ uidNumber, 0);
return 6;
}
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK, "updating-password",
+ user, uidNumber, 0);
}
/* If we need to lock/unlock the user's account, do that. */
@@ -202,16 +212,26 @@ main(int argc, const char **argv)
fprintf(stderr,
_("User %s could not be locked: %s.\n"),
user, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK,
+ "locking-account", user,
+ uidNumber, 0);
return 7;
}
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK, "locking-account",
+ user, uidNumber, 0);
}
if (unlock) {
if (lu_user_unlock(ctx, ent, &error) == FALSE) {
fprintf(stderr,
_("User %s could not be unlocked: %s.\n"),
user, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK,
+ "unlocking-account", user,
+ uidNumber, 0);
return 8;
}
+ lu_audit_logger(AUDIT_USER_CHAUTHTOK, "unlocking-account",
+ user, uidNumber, 0);
}
/* Determine if we actually need to change anything. */
@@ -274,8 +294,13 @@ main(int argc, const char **argv)
if (change && (lu_user_modify(ctx, ent, &error) == FALSE)) {
fprintf(stderr, _("User %s could not be modified: %s.\n"),
user, lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT,
+ "modify-account", user,
+ uidNumber, 0);
return 9;
}
+ lu_audit_logger(AUDIT_USER_MGMT, "modify-account",
+ user, uidNumber, 1);
lu_nscd_flush_cache(LU_NSCD_CACHE_PASSWD);
/* If the user's name changed, we need to update supplemental
@@ -322,12 +347,19 @@ main(int argc, const char **argv)
}
}
/* Save the changes to the group. */
- if (lu_group_modify(ctx, group, &error) == FALSE)
+ if (lu_group_modify(ctx, group, &error) == FALSE) {
fprintf(stderr, _("Group %s could not be "
"modified: %s.\n"),
lu_ent_get_first_string(group,
LU_GROUPNAME),
lu_strerror(error));
+ lu_audit_logger_with_group(AUDIT_USER_MGMT,
+ "update-member-in-group", user, uidNumber,
+ lu_ent_get_first_string(group, LU_GROUPNAME),0);
+ } else
+ lu_audit_logger_with_group(AUDIT_USER_MGMT,
+ "update-member-in-group", user, uidNumber,
+ lu_ent_get_first_string(group, LU_GROUPNAME),1);
lu_ent_free(group);
}
g_ptr_array_free(groups, TRUE);
@@ -353,8 +385,12 @@ main(int argc, const char **argv)
fprintf(stderr, _("Error moving %s to %s: %s.\n"),
oldHomeDirectory, homeDirectory,
lu_strerror(error));
+ lu_audit_logger(AUDIT_USER_MGMT, "moving-home-dir",
+ user, uidNumber, 0);
return 12;
}
+ lu_audit_logger(AUDIT_USER_MGMT, "moving-home-dir",
+ user, uidNumber, 1);
}
g_free(oldHomeDirectory);
diff --git a/configure.ac b/configure.ac
index 3e68b16a1f65ff5e5e3e905c1ffce8993e562176..0bd4a67d4c77fa1b701d74dbeab908a192dbf4d7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -118,6 +118,23 @@ if test "x$selinux" != xno ; then
fi
AC_SUBST(SELINUX_LIBS)
+AC_ARG_WITH(audit,
+AS_HELP_STRING([--with-audit],[log using Linux Audit in addition to syslog]),
+use_audit=$withval,
+use_audit=auto)
+if test x$use_audit != xno ; then
+ AC_SEARCH_LIBS([audit_open], [audit])
+ if test x$ac_cv_search_audit_open = xno ; then
+ if test x$use_audit != xauto ; then
+ AC_MSG_ERROR([requested Linux Audit, but libaudit was not found])
+ fi
+ else
+ AC_DEFINE(WITH_AUDIT,1,[Define if you want to use Linux Audit.])
+ AUDIT_LIBS=-laudit
+ fi
+fi
+AC_SUBST(AUDIT_LIBS)
+
AC_C_CONST
AC_TYPE_UID_T
AC_TYPE_MODE_T
diff --git a/lib/common.c b/lib/common.c
index fc5df7461111908ff3eae59608ce0a51d62e155e..dce7e570ec9c92b56b28f15ab503fb7a641b660e 100644
--- a/lib/common.c
+++ b/lib/common.c
@@ -16,9 +16,10 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <config.h>
+#include "config.h"
#include <glib.h>
#include <string.h>
+#include <stdlib.h>
#include "internal.h"
#include "user_private.h"
@@ -111,3 +112,66 @@ lu_common_sgroup_default(struct lu_module *module,
g_return_val_if_fail(name != NULL, FALSE);
return lu_common_group_default(module, name, is_system, ent, error);
}
+
+#ifdef WITH_AUDIT
+static int audit_fd = 0;
+
+/* result - 1 is "success" and 0 is "failed" */
+void lu_audit_logger(int type, const char *op, const char *name,
+ unsigned int id, unsigned int result)
+{
+ if (audit_fd == 0) {
+ /* First time through */
+ audit_fd = audit_open();
+ if (audit_fd < 0) {
+ /* You get these only when the kernel doesn't have
+ * audit compiled in. */
+ if ( (errno == EINVAL)
+ || (errno == EPROTONOSUPPORT)
+ || (errno == EAFNOSUPPORT))
+ return;
+ fputs("Cannot open audit interface - aborting.\n", stderr);
+ exit(EXIT_FAILURE);
+ }
+ }
+ if (audit_fd < 0)
+ return;
+ audit_log_acct_message(audit_fd, type, NULL, op, name, id,
+ NULL, NULL, NULL, (int) result);
+}
+
+/* result - 1 is "success" and 0 is "failed" */
+void lu_audit_logger_with_group (int type, const char *op, const char *name,
+ unsigned int id, const char *grp, unsigned int result)
+{
+ int len;
+ char enc_group[(LOGIN_NAME_MAX*2)+1], buf[1024];
+
+ if (audit_fd == 0) {
+ /* First time through */
+ audit_fd = audit_open();
+ if (audit_fd < 0) {
+ /* You get these only when the kernel doesn't have
+ * audit compiled in. */
+ if ( (errno == EINVAL)
+ || (errno == EPROTONOSUPPORT)
+ || (errno == EAFNOSUPPORT))
+ return;
+ fputs("Cannot open audit interface - aborting.\n", stderr);
+ exit(EXIT_FAILURE);
+ }
+ }
+ if (audit_fd < 0)
+ return;
+ len = strnlen(grp, sizeof(enc_group)/2);
+ if (audit_value_needs_encoding(grp, len)) {
+ snprintf(buf, sizeof(buf), "%s grp=%s", op,
+ audit_encode_value(enc_group, grp, len));
+ } else {
+ snprintf(buf, sizeof(buf), "%s grp=\"%s\"", op, grp);
+ }
+ audit_log_acct_message(audit_fd, type, NULL, buf, name, id,
+ NULL, NULL, NULL, (int) result);
+}
+#endif
+
diff --git a/lib/user_private.h b/lib/user_private.h
index a4869c138d51519539b6939406cdb0fee23ab7f6..02b813c47ee359db774bb85a2aa7aa12e18d3067 100644
--- a/lib/user_private.h
+++ b/lib/user_private.h
@@ -34,6 +34,9 @@
#ifdef WITH_SELINUX
#include <selinux/selinux.h>
#endif
+#ifdef WITH_AUDIT
+#include <libaudit.h>
+#endif
#include "user.h"
G_BEGIN_DECLS
@@ -357,6 +360,18 @@ id_t lu_get_first_unused_id(struct lu_context *ctx, enum lu_entity_type type,
/* Append a copy of VALUES to DEST */
void lu_util_append_values(GValueArray *dest, GValueArray *values);
+#ifdef WITH_AUDIT
+void lu_audit_logger(int type, const char *op, const char *name,
+ unsigned int id, unsigned int result);
+void lu_audit_logger_with_group(int type, const char *op, const char *name,
+ unsigned int id, const char *grp,
+ unsigned int result);
+#else
+#define lu_audit_logger(a, b, c, d, e)
+#define lu_audit_logger_with_group(a, b, c, d, e, f)
+#endif
+#define AUDIT_NO_ID ((unsigned int) -1)
+
G_END_DECLS
#endif
--
2.17.1

View File

@ -0,0 +1,44 @@
From 11a7ff7eeefe763be9ade949e8f2a4a2d53f6129 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jakub.hrozek@posteo.se>
Date: Mon, 24 Sep 2018 20:51:51 +0200
Subject: [PATCH 4/7] Check negative return of PyList_Size
Merges:
https://pagure.io/libuser/issue/28
In case of an error, PyList_Size can return a negative value. We should
check that case, also to avoid compiler warnings like:
Error: COMPILER_WARNING: [#def41] [warning: defect not occurring in libuser-0.60-9.el7]
libuser-0.62/python/misc.c: scope_hint: In function 'libuser_admin_prompt'
libuser-0.62/python/misc.c:160:12: warning: argument 1 range [9223372036854775808, 18446744073709551615] exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
/usr/include/glib-2.0/glib/glist.h:32: included_from: Included from here.
/usr/include/glib-2.0/glib/ghash.h:33: included_from: Included from here.
/usr/include/glib-2.0/glib.h:50: included_from: Included from here.
libuser-0.62/python/misc.c:25: included_from: Included from here.
/usr/include/glib-2.0/glib/gmem.h:96:10: note: in a call to allocation function 'g_malloc0_n' declared here
---
python/misc.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/python/misc.c b/python/misc.c
index c4ce819bfaeb4296507b504c4647b7676377b631..fcb0ccfebae143fa7c7a43ad60d7e9b231ca8863 100644
--- a/python/misc.c
+++ b/python/misc.c
@@ -137,7 +137,12 @@ libuser_admin_prompt(struct libuser_admin *self, PyObject * args,
return NULL;
}
count = PyList_Size(list);
- if (count > INT_MAX) {
+ if (count < 0) {
+ PyErr_SetString(PyExc_TypeError,
+ "prompt_list has no size; probably not a list");
+ DEBUG_EXIT;
+ return NULL;
+ } else if (count > INT_MAX) {
PyErr_SetString(PyExc_ValueError, "too many prompts");
DEBUG_EXIT;
return NULL;
--
2.14.4

View File

@ -0,0 +1,60 @@
From 7acf0fad0ca468f33f86084f36251df5baf3dc94 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jakub.hrozek@posteo.se>
Date: Wed, 26 Sep 2018 21:01:59 +0200
Subject: [PATCH 5/7] files.c: Init char *name to NULL
Merges:
https://pagure.io/libuser/issue/27
This is mostly to silence coverity warnings. "enum lu_entity_type" has
three values and several places in the code follow logic as:
char *name;
if ent->type == user:
name = foo()
if ent->type == group
name = bar()
g_assert(name != NULL)
it shouldn't be possible for ent->type to be anything else but in the
odd case it is, initializing name to NULL will ensure that name will be
still NULL after the code falls through the conditions and at least the
behaviour is defined.
---
modules/files.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/modules/files.c b/modules/files.c
index 6a7787e28112ba07e0fc44f2887ce1d1540af29e..8c2a282b6448bbfb313b5d4f5eeb28b8240bccd5 100644
--- a/modules/files.c
+++ b/modules/files.c
@@ -1501,7 +1501,7 @@ generic_lock(struct lu_module *module, const char *file_suffix, int field,
struct lu_ent *ent, enum lock_op op, struct lu_error **error)
{
struct editing *e;
- char *value, *new_value, *name;
+ char *value, *new_value, *name = NULL;
gboolean commit = FALSE, ret = FALSE;
/* Get the name which keys the entries of interest in the file. */
@@ -1561,7 +1561,7 @@ generic_is_locked(struct lu_module *module, const char *file_suffix,
int field, struct lu_ent *ent, struct lu_error **error)
{
char *filename;
- char *value, *name;
+ char *value, *name = NULL;
int fd;
gboolean ret = FALSE;
@@ -1752,7 +1752,7 @@ generic_setpass(struct lu_module *module, const char *file_suffix, int field,
struct lu_error **error)
{
struct editing *e;
- char *value, *name;
+ char *value, *name = NULL;
gboolean ret = FALSE;
/* Get the name of this account. */
--
2.14.4

View File

@ -0,0 +1,56 @@
From 8da7fc83aa3e9fd868c6a8da9261b72dae7d29e7 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jakub.hrozek@posteo.se>
Date: Wed, 26 Sep 2018 21:38:02 +0200
Subject: [PATCH 6/7] merge_ent_array_duplicates: Only use values if valid
Merges:
https://pagure.io/libuser/issue/22
Don't attempt to dereference a NULL pointer
---
lib/user.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/lib/user.c b/lib/user.c
index ad2bb099c7d12bd91188e69f188c64953b1d9748..2500565a544bb33a5e08d9807a794a42c819a2d2 100644
--- a/lib/user.c
+++ b/lib/user.c
@@ -691,10 +691,13 @@ merge_ent_array_duplicates(GPtrArray *array)
while (attributes != NULL) {
attr = (const char *)attributes->data;
values = lu_ent_get_current(current, attr);
- for (j = 0; j < values->n_values; j++) {
- value = g_value_array_get_nth(values,
- j);
- lu_ent_add_current(saved, attr, value);
+ if (values != NULL) {
+ for (j = 0; j < values->n_values; j++) {
+ value = g_value_array_get_nth(
+ values,
+ j);
+ lu_ent_add_current(saved, attr, value);
+ }
}
attributes = g_list_next(attributes);
}
@@ -705,10 +708,13 @@ merge_ent_array_duplicates(GPtrArray *array)
while (attributes != NULL) {
attr = (const char *)attributes->data;
values = lu_ent_get(current, attr);
- for (j = 0; j < values->n_values; j++) {
- value = g_value_array_get_nth(values,
- j);
- lu_ent_add(saved, attr, value);
+ if (values != NULL) {
+ for (j = 0; j < values->n_values; j++) {
+ value = g_value_array_get_nth(
+ values,
+ j);
+ lu_ent_add(saved, attr, value);
+ }
}
attributes = g_list_next(attributes);
}
--
2.14.4

View File

@ -0,0 +1,33 @@
From e5536845298b6672a16e5866a823fcf6562c6cf3 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jakub.hrozek@posteo.se>
Date: Wed, 26 Sep 2018 21:15:38 +0200
Subject: [PATCH 7/7] editing_open: close fd after we've established its
validity
Merges:
https://pagure.io/libuser/issue/26
The code used to first close(fd) and only then check if it's != -1.
Reverse the logic so that the fd is only closed if valid.
---
modules/files.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/modules/files.c b/modules/files.c
index 8c2a282b6448bbfb313b5d4f5eeb28b8240bccd5..b8bf8a60e5810c0b705bd91efbdf9e27e851cd2b 100644
--- a/modules/files.c
+++ b/modules/files.c
@@ -387,9 +387,9 @@ editing_open(struct lu_module *module, const char *file_suffix,
backup_name = g_strconcat(e->filename, "-", NULL);
fd = open_and_copy_file(e->filename, backup_name, FALSE, error);
g_free (backup_name);
- close(fd);
if (fd == -1)
goto err_fscreate;
+ close(fd);
e->new_filename = g_strconcat(e->filename, "+", NULL);
e->new_fd = open_and_copy_file(e->filename, e->new_filename, TRUE,
--
2.14.4

View File

@ -0,0 +1,48 @@
From c6a4e9f596c976f71894269e3168567e6118236c Mon Sep 17 00:00:00 2001
From: Steve Grubb <sgrubb@redhat.com>
Date: Wed, 5 Jun 2019 22:16:51 +0200
Subject: [PATCH] lgroupmod: Emit AUDIT_GRP_CHAUTHTOK, not AUDIT_GRP_MGMT when
changing group password
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1670997
---
apps/lgroupmod.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/apps/lgroupmod.c b/apps/lgroupmod.c
index 0ad0ae4..20be85f 100644
--- a/apps/lgroupmod.c
+++ b/apps/lgroupmod.c
@@ -138,12 +138,12 @@ main(int argc, const char **argv)
== FALSE) {
fprintf(stderr, _("Failed to set password for group "
"%s: %s\n"), group, lu_strerror(error));
- lu_audit_logger(AUDIT_GRP_MGMT,
+ lu_audit_logger(AUDIT_GRP_CHAUTHTOK,
"changing-group-passwd", group,
AUDIT_NO_ID, 0);
return 4;
}
- lu_audit_logger(AUDIT_GRP_MGMT,
+ lu_audit_logger(AUDIT_GRP_CHAUTHTOK,
"changing-group-passwd", group,
AUDIT_NO_ID, 1);
}
@@ -153,12 +153,12 @@ main(int argc, const char **argv)
&error) == FALSE) {
fprintf(stderr, _("Failed to set password for group "
"%s: %s\n"), group, lu_strerror(error));
- lu_audit_logger(AUDIT_GRP_MGMT,
+ lu_audit_logger(AUDIT_GRP_CHAUTHTOK,
"changing-group-passwd", group,
AUDIT_NO_ID, 0);
return 5;
}
- lu_audit_logger(AUDIT_GRP_MGMT,
+ lu_audit_logger(AUDIT_GRP_CHAUTHTOK,
"changing-group-passwd", group,
AUDIT_NO_ID, 1);
}
--
2.20.1

1
EMPTY
View File

@ -1 +0,0 @@

1440
libuser-0_62-de.po Normal file

File diff suppressed because it is too large Load Diff

1428
libuser-0_62-es.po Normal file

File diff suppressed because it is too large Load Diff

1439
libuser-0_62-fr.po Normal file

File diff suppressed because it is too large Load Diff

1429
libuser-0_62-it.po Normal file

File diff suppressed because it is too large Load Diff

1422
libuser-0_62-jp.po Normal file

File diff suppressed because it is too large Load Diff

1417
libuser-0_62-ko.po Normal file

File diff suppressed because it is too large Load Diff

1429
libuser-0_62-pt_BR.po Normal file

File diff suppressed because it is too large Load Diff

1435
libuser-0_62-ru.po Normal file

File diff suppressed because it is too large Load Diff

1418
libuser-0_62-zh-Hans.po Normal file

File diff suppressed because it is too large Load Diff

1417
libuser-0_62-zh-Hant.po Normal file

File diff suppressed because it is too large Load Diff

1067
libuser.spec Normal file

File diff suppressed because it is too large Load Diff

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (libuser-0.62.tar.xz) = bc2f68456eae5912ac236192e97a3d66d5fa782520eff48d44d391c1ade590e001d821d7a93499e2391d0310cf03f60e4411f045f6ee3301af4e174d9ddc8450