|
From: Jiri J. <jja...@re...> - 2014-09-23 09:45:24
|
From: Miroslav Vadkerti <mva...@re...>
This patch makes it possible to optionally set user
or group or both. To skip the setting pass empty string,
i.e. "".
This change is backward compatible with previous binary
usage in the syscall bucket.
Signed-off-by: Miroslav Vadkerti <mva...@re...>
---
audit-test/utils/bin/do_chown.c | 32 ++++++++++++++++++++++++--------
audit-test/utils/bin/do_lchown.c | 34 +++++++++++++++++++++++++---------
2 files changed, 49 insertions(+), 17 deletions(-)
diff --git a/audit-test/utils/bin/do_chown.c b/audit-test/utils/bin/do_chown.c
index 01b4b1e..54ff5b6 100644
--- a/audit-test/utils/bin/do_chown.c
+++ b/audit-test/utils/bin/do_chown.c
@@ -15,26 +15,42 @@
#include "includes.h"
#include <pwd.h>
+#include <grp.h>
int main(int argc, char **argv)
{
int exitval, result;
+ gid_t gid = -1;
+ uid_t uid = -1;
struct passwd *pw;
+ struct group *grp;
- if (argc != 3) {
- fprintf(stderr, "Usage:\n%s <path> <owner>\n", argv[0]);
- return TEST_ERROR;
+ if (argc != 3 && argc != 4) {
+ fprintf(stderr, "Usage:\n%s <path> <owner> [<group>]\n", argv[0]);
+ return TEST_ERROR;
}
- pw = getpwnam(argv[2]);
- if (!pw) {
- perror("do_chown: getpwnam");
- return TEST_ERROR;
+ if(strcmp(argv[2],"")) {
+ pw = getpwnam(argv[2]);
+ if (!pw) {
+ perror("do_chown: getpwnam");
+ return TEST_ERROR;
+ }
+ uid = pw->pw_uid;
+ }
+
+ if(argc == 4 && strcmp(argv[3],"")) {
+ grp = getgrnam(argv[3]);
+ if(!grp) {
+ perror("do_chown: getgrnam");
+ return TEST_ERROR;
+ }
+ gid = grp->gr_gid;
}
/* use syscall() to force chown over chown32 */
errno = 0;
- exitval = syscall(__NR_chown, argv[1], pw->pw_uid, -1);
+ exitval = syscall(__NR_chown, argv[1], uid, gid);
result = exitval < 0;
printf("%d %d %d\n", result, result ? errno : exitval, getpid());
diff --git a/audit-test/utils/bin/do_lchown.c b/audit-test/utils/bin/do_lchown.c
index da4be54..ab19662 100644
--- a/audit-test/utils/bin/do_lchown.c
+++ b/audit-test/utils/bin/do_lchown.c
@@ -15,28 +15,44 @@
#include "includes.h"
#include <pwd.h>
+#include <grp.h>
int main(int argc, char **argv)
{
int exitval, result;
+ gid_t gid = -1;
+ uid_t uid = -1;
struct passwd *pw;
+ struct group *grp;
- if (argc != 3) {
- fprintf(stderr, "Usage:\n%s <path> <owner>\n", argv[0]);
- return TEST_ERROR;
+ if (argc != 3 && argc != 4) {
+ fprintf(stderr, "Usage:\n%s <path> <owner> [<group>]\n", argv[0]);
+ return TEST_ERROR;
}
- pw = getpwnam(argv[2]);
- if (!pw) {
- perror("do_lchown: getpwnam");
- return TEST_ERROR;
+ if(strcmp(argv[2],"")) {
+ pw = getpwnam(argv[2]);
+ if (!pw) {
+ perror("do_lchown: getpwnam");
+ return TEST_ERROR;
+ }
+ uid = pw->pw_uid;
+ }
+
+ if(argc == 4 && strcmp(argv[3],"")) {
+ grp = getgrnam(argv[3]);
+ if(!grp) {
+ perror("do_lchown: getgrnam");
+ return TEST_ERROR;
+ }
+ gid = grp->gr_gid;
}
- /* use syscall() to force lchown over lchown32 */
errno = 0;
- exitval = syscall(__NR_lchown, argv[1], pw->pw_uid, -1);
+ exitval = syscall(__NR_lchown, argv[1], uid, gid);
result = exitval < 0;
printf("%d %d %d\n", result, result ? errno : exitval, getpid());
return result;
+
}
--
1.8.3.1
|