summaryrefslogtreecommitdiffstats
path: root/tools/regression/pjdfstest
diff options
context:
space:
mode:
Diffstat (limited to 'tools/regression/pjdfstest')
-rw-r--r--tools/regression/pjdfstest/Makefile2
-rw-r--r--tools/regression/pjdfstest/pjdfstest.c65
-rw-r--r--tools/regression/pjdfstest/tests/misc.sh4
3 files changed, 67 insertions, 4 deletions
diff --git a/tools/regression/pjdfstest/Makefile b/tools/regression/pjdfstest/Makefile
index ca789fe..eca598f 100644
--- a/tools/regression/pjdfstest/Makefile
+++ b/tools/regression/pjdfstest/Makefile
@@ -6,7 +6,7 @@ ${PROG}: ${PROG}.c
@OSTYPE=`uname`; \
CFLAGS=-D__OS_$${OSTYPE}__; \
if [ $$OSTYPE = "FreeBSD" ]; then \
- CFLAGS="$$CFLAGS -DHAS_LCHMOD -DHAS_CHFLAGS -DHAS_FCHFLAGS -DHAS_LCHFLAGS -DHAS_FREEBSD_ACL"; \
+ CFLAGS="$$CFLAGS -DHAS_LCHMOD -DHAS_CHFLAGS -DHAS_FCHFLAGS -DHAS_CHFLAGSAT -DHAS_LCHFLAGS -DHAS_FREEBSD_ACL -DHAS_BINDAT -DHAS_CONNECTAT"; \
elif [ $$OSTYPE = "SunOS" ]; then \
CFLAGS="$$CFLAGS -DHAS_TRUNCATE64 -DHAS_STAT64"; \
CFLAGS="$$CFLAGS -lsocket"; \
diff --git a/tools/regression/pjdfstest/pjdfstest.c b/tools/regression/pjdfstest/pjdfstest.c
index c08fafd..fd19084 100644
--- a/tools/regression/pjdfstest/pjdfstest.c
+++ b/tools/regression/pjdfstest/pjdfstest.c
@@ -82,7 +82,13 @@ enum action {
ACTION_MKNOD,
ACTION_MKNODAT,
ACTION_BIND,
+#ifdef HAS_BINDAT
+ ACTION_BINDAT,
+#endif
ACTION_CONNECT,
+#ifdef HAS_CONNECTAT
+ ACTION_CONNECTAT,
+#endif
ACTION_CHMOD,
ACTION_FCHMOD,
#ifdef HAS_LCHMOD
@@ -99,6 +105,9 @@ enum action {
#ifdef HAS_FCHFLAGS
ACTION_FCHFLAGS,
#endif
+#ifdef HAS_CHFLAGSAT
+ ACTION_CHFLAGSAT,
+#endif
#ifdef HAS_LCHFLAGS
ACTION_LCHFLAGS,
#endif
@@ -154,7 +163,13 @@ static struct syscall_desc syscalls[] = {
{ "mknod", ACTION_MKNOD, { TYPE_STRING, TYPE_STRING, TYPE_NUMBER, TYPE_NUMBER, TYPE_NUMBER, TYPE_NONE} },
{ "mknodat", ACTION_MKNODAT, { TYPE_DESCRIPTOR, TYPE_STRING, TYPE_STRING, TYPE_NUMBER, TYPE_NUMBER, TYPE_NUMBER, TYPE_NONE} },
{ "bind", ACTION_BIND, { TYPE_STRING, TYPE_NONE } },
+#ifdef HAS_BINDAT
+ { "bindat", ACTION_BINDAT, { TYPE_DESCRIPTOR, TYPE_STRING, TYPE_NONE } },
+#endif
{ "connect", ACTION_CONNECT, { TYPE_STRING, TYPE_NONE } },
+#ifdef HAS_CONNECTAT
+ { "connectat", ACTION_CONNECTAT, { TYPE_DESCRIPTOR, TYPE_STRING, TYPE_NONE } },
+#endif
{ "chmod", ACTION_CHMOD, { TYPE_STRING, TYPE_NUMBER, TYPE_NONE } },
{ "fchmod", ACTION_FCHMOD, { TYPE_DESCRIPTOR, TYPE_NUMBER, TYPE_NONE } },
#ifdef HAS_LCHMOD
@@ -171,6 +186,9 @@ static struct syscall_desc syscalls[] = {
#ifdef HAS_FCHFLAGS
{ "fchflags", ACTION_FCHFLAGS, { TYPE_DESCRIPTOR, TYPE_STRING, TYPE_NONE } },
#endif
+#ifdef HAS_CHFLAGSAT
+ { "chflagsat", ACTION_CHFLAGSAT, { TYPE_DESCRIPTOR, TYPE_STRING, TYPE_STRING, TYPE_STRING, TYPE_NONE } },
+#endif
#ifdef HAS_LCHFLAGS
{ "lchflags", ACTION_LCHFLAGS, { TYPE_STRING, TYPE_STRING, TYPE_NONE } },
#endif
@@ -294,6 +312,11 @@ static struct flag linkat_flags[] = {
{ 0, NULL }
};
+static struct flag chflagsat_flags[] = {
+ { AT_SYMLINK_NOFOLLOW, "AT_SYMLINK_NOFOLLOW" },
+ { 0, NULL }
+};
+
static struct flag fchmodat_flags[] = {
{ AT_SYMLINK_NOFOLLOW, "AT_SYMLINK_NOFOLLOW" },
{ 0, NULL }
@@ -732,6 +755,22 @@ call_syscall(struct syscall_desc *scall, char *argv[])
rval = bind(rval, (struct sockaddr *)&sunx, sizeof(sunx));
break;
}
+#ifdef HAS_BINDAT
+ case ACTION_BINDAT:
+ {
+ struct sockaddr_un sunx;
+
+ sunx.sun_family = AF_UNIX;
+ strncpy(sunx.sun_path, STR(1), sizeof(sunx.sun_path) - 1);
+ sunx.sun_path[sizeof(sunx.sun_path) - 1] = '\0';
+ rval = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (rval < 0)
+ break;
+ rval = bindat(NUM(0), rval, (struct sockaddr *)&sunx,
+ sizeof(sunx));
+ break;
+ }
+#endif
case ACTION_CONNECT:
{
struct sockaddr_un sunx;
@@ -745,6 +784,22 @@ call_syscall(struct syscall_desc *scall, char *argv[])
rval = connect(rval, (struct sockaddr *)&sunx, sizeof(sunx));
break;
}
+#ifdef HAS_CONNECTAT
+ case ACTION_CONNECTAT:
+ {
+ struct sockaddr_un sunx;
+
+ sunx.sun_family = AF_UNIX;
+ strncpy(sunx.sun_path, STR(1), sizeof(sunx.sun_path) - 1);
+ sunx.sun_path[sizeof(sunx.sun_path) - 1] = '\0';
+ rval = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (rval < 0)
+ break;
+ rval = connectat(NUM(0), rval, (struct sockaddr *)&sunx,
+ sizeof(sunx));
+ break;
+ }
+#endif
case ACTION_CHMOD:
rval = chmod(STR(0), (mode_t)NUM(1));
break;
@@ -785,9 +840,17 @@ call_syscall(struct syscall_desc *scall, char *argv[])
(unsigned long)str2flags(chflags_flags, STR(1)));
break;
#endif
+#ifdef HAS_CHFLAGSAT
+ case ACTION_CHFLAGSAT:
+ rval = chflagsat(NUM(0), STR(1),
+ (unsigned long)str2flags(chflags_flags, STR(2)),
+ (int)str2flags(chflagsat_flags, STR(3)));
+ break;
+#endif
#ifdef HAS_LCHFLAGS
case ACTION_LCHFLAGS:
- rval = lchflags(STR(0), (int)str2flags(chflags_flags, STR(1)));
+ rval = lchflags(STR(0),
+ (unsigned long)str2flags(chflags_flags, STR(1)));
break;
#endif
case ACTION_TRUNCATE:
diff --git a/tools/regression/pjdfstest/tests/misc.sh b/tools/regression/pjdfstest/tests/misc.sh
index 0d3ce35..8978b5f 100644
--- a/tools/regression/pjdfstest/tests/misc.sh
+++ b/tools/regression/pjdfstest/tests/misc.sh
@@ -89,7 +89,7 @@ todo()
namegen()
{
- echo "pjdfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5`"
+ echo "pjdfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | awk '{print $NF}'`"
}
namegen_len()
@@ -98,7 +98,7 @@ namegen_len()
name=""
while :; do
- namepart="`dd if=/dev/urandom bs=64 count=1 2>/dev/null | openssl md5`"
+ namepart="`dd if=/dev/urandom bs=64 count=1 2>/dev/null | openssl md5 | awk '{print $NF}'`"
name="${name}${namepart}"
curlen=`printf "%s" "${name}" | wc -c`
[ ${curlen} -lt ${len} ] || break
OpenPOWER on IntegriCloud