Skip to content

Commit ed8e313

Browse files
authored
Merge pull request #85 from wazuh/fix/25115-fim-group-buffer
Allow longer user/group entries in FIM
2 parents 6046ab2 + 03922dc commit ed8e313

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

src/common/syscheck_op/src/syscheck_op.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ char *get_user(int uid) {
125125
int errno;
126126

127127
bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
128-
if (bufsize == -1) {
128+
if (bufsize < 16384) {
129129
bufsize = 16384;
130130
}
131131

@@ -143,7 +143,7 @@ char *get_user(int uid) {
143143
mdebug2("User with uid '%d' not found.\n", uid);
144144
}
145145
else {
146-
mdebug2("Failed getting user_name (%d): '%s'\n", errno, strerror(errno));
146+
mdebug2("Failed getting user_name for uid %d: (%d): '%s'\n", uid, errno, strerror(errno));
147147
}
148148
} else {
149149
os_strdup(pwd.pw_name, user_name);
@@ -162,7 +162,7 @@ char *get_group(int gid) {
162162
int bufsize;
163163

164164
bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
165-
if (bufsize == -1) {
165+
if (bufsize < 16384) {
166166
bufsize = 16384;
167167
}
168168

@@ -174,7 +174,7 @@ char *get_group(int gid) {
174174
if (errno == 0) {
175175
mdebug2("Group with gid '%d' not found.\n", gid);
176176
} else {
177-
mdebug2("Failed getting group_name (%d): '%s'\n", errno, strerror(errno));
177+
mdebug2("Failed getting group_name for gid %d: (%d): '%s'\n", gid, errno, strerror(errno));
178178
}
179179
} else {
180180
os_strdup(grp.gr_name, group_name);

src/common/syscheck_op/tests/unit/tests/test_syscheck_op.c

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ static void test_get_user_error(void **state) {
482482
will_return(__wrap_getpwuid_r, ENOENT);
483483
#endif
484484

485-
expect_string(__wrap__mdebug2, formatted_msg, "Failed getting user_name (2): 'No such file or directory'\n");
485+
expect_string(__wrap__mdebug2, formatted_msg, "Failed getting user_name for uid 1: (2): 'No such file or directory'\n");
486486

487487
user = get_user(1);
488488

@@ -536,6 +536,26 @@ static void test_get_group_no_group(void **state) {
536536

537537
assert_null(output);
538538
}
539+
540+
static void test_get_group_error(void **state) {
541+
const char *output;
542+
543+
errno = ENOENT;
544+
545+
will_return(__wrap_sysconf, 8);
546+
547+
expect_value(__wrap_w_getgrgid, gid, 1000);
548+
will_return(__wrap_w_getgrgid, NULL);
549+
will_return(__wrap_w_getgrgid, NULL); // We don't care about member buffers
550+
will_return(__wrap_w_getgrgid, 0); // Fail
551+
552+
expect_string(__wrap__mdebug2, formatted_msg, "Failed getting group_name for gid 1000: (2): 'No such file or directory'\n");
553+
554+
output = get_group(1000);
555+
556+
assert_null(output);
557+
}
558+
539559
#else
540560
static void test_get_group(void **state) {
541561
assert_string_equal(get_group(0), "");
@@ -3140,6 +3160,7 @@ int main(int argc, char *argv[]) {
31403160
/* get_group tests */
31413161
cmocka_unit_test(test_get_group_success),
31423162
cmocka_unit_test(test_get_group_no_group),
3163+
cmocka_unit_test_teardown(test_get_group_error, teardown_string),
31433164

31443165
/* ag_send_syscheck tests */
31453166
cmocka_unit_test(test_ag_send_syscheck_success),

0 commit comments

Comments
 (0)