aboutsummaryrefslogtreecommitdiff
path: root/contrib/openbsm/test/bsm/generate.c
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2008-12-31 11:12:24 +0000
committerRobert Watson <rwatson@FreeBSD.org>2008-12-31 11:12:24 +0000
commit7a0a89d2cb29ee2c383600fa59e42d714a6dcbcb (patch)
tree1be031d8331a1b0a29a40e1493c5707f3b6ce3e7 /contrib/openbsm/test/bsm/generate.c
parentf1c0a78d995be6c104328276eccf5abc564cde61 (diff)
parent980b6e45aaf200a759c883374991028300774958 (diff)
Notes
Diffstat (limited to 'contrib/openbsm/test/bsm/generate.c')
-rw-r--r--contrib/openbsm/test/bsm/generate.c132
1 files changed, 128 insertions, 4 deletions
diff --git a/contrib/openbsm/test/bsm/generate.c b/contrib/openbsm/test/bsm/generate.c
index d066246b161c6..249e8858d0349 100644
--- a/contrib/openbsm/test/bsm/generate.c
+++ b/contrib/openbsm/test/bsm/generate.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2006-2007 Robert N. M. Watson
+ * Copyright (c) 2008 Apple Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -23,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $P4: //depot/projects/trustedbsd/openbsm/test/bsm/generate.c#9 $
+ * $P4: //depot/projects/trustedbsd/openbsm/test/bsm/generate.c#12 $
*/
/*
@@ -553,7 +554,7 @@ generate_process64ex_record(const char *directory, const char *record_filename,
free(buf);
}
-static char return32_status = 0xd7;
+static char return32_status = EINVAL;
static uint32_t return32_ret = 0x12345678;
static void
@@ -561,7 +562,8 @@ generate_return32_token(const char *directory, const char *token_filename)
{
token_t *return32_token;
- return32_token = au_to_return32(return32_status, return32_ret);
+ return32_token = au_to_return32(au_errno_to_bsm(return32_status),
+ return32_ret);
if (return32_token == NULL)
err(EX_UNAVAILABLE, "au_to_return32");
write_token(directory, token_filename, return32_token);
@@ -572,7 +574,8 @@ generate_return32_record(const char *directory, const char *record_filename)
{
token_t *return32_token;
- return32_token = au_to_return32(return32_status, return32_ret);
+ return32_token = au_to_return32(au_errno_to_bsm(return32_status),
+ return32_ret);
if (return32_token == NULL)
err(EX_UNAVAILABLE, "au_to_return32");
write_record(directory, record_filename, return32_token, AUE_NULL);
@@ -913,6 +916,124 @@ generate_zonename_record(const char *directory, const char *record_filename)
write_record(directory, record_filename, zonename_token, AUE_NULL);
}
+static u_short socketex_domain = AF_INET;
+static u_short socketex_type = SOCK_STREAM;
+static struct sockaddr_in socketex_laddr, socketex_raddr;
+
+static void
+generate_socketex_token(const char *directory, const char *token_filename)
+{
+ token_t *socketex_token;
+
+ bzero(&socketex_laddr, sizeof(socketex_laddr));
+ socketex_laddr.sin_family = AF_INET;
+ socketex_laddr.sin_len = sizeof(socketex_laddr);
+ socketex_laddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ bzero(&socketex_raddr, sizeof(socketex_raddr));
+ socketex_raddr.sin_family = AF_INET;
+ socketex_raddr.sin_len = sizeof(socketex_raddr);
+ socketex_raddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ socketex_token = au_to_socket_ex(socketex_domain, socketex_type,
+ (struct sockaddr *)&socketex_laddr,
+ (struct sockaddr *)&socketex_raddr);
+ if (socketex_token == NULL)
+ err(EX_UNAVAILABLE, "au_to_socket_ex");
+ write_token(directory, token_filename, socketex_token);
+}
+
+static void
+generate_socketex_record(const char *directory, const char *record_filename)
+{
+ token_t *socketex_token;
+
+ bzero(&socketex_laddr, sizeof(socketex_laddr));
+ socketex_laddr.sin_family = AF_INET;
+ socketex_laddr.sin_len = sizeof(socketex_laddr);
+ socketex_laddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ bzero(&socketex_raddr, sizeof(socketex_raddr));
+ socketex_raddr.sin_family = AF_INET;
+ socketex_raddr.sin_len = sizeof(socketex_raddr);
+ socketex_raddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ socketex_token = au_to_socket_ex(socketex_domain, socketex_type,
+ (struct sockaddr *)&socketex_laddr,
+ (struct sockaddr *)&socketex_raddr);
+ if (socketex_token == NULL)
+ err(EX_UNAVAILABLE, "au_to_socket_ex");
+ write_record(directory, record_filename, socketex_token, AUE_NULL);
+}
+
+/*
+ * Generate a series of error-number specific return tokens in records.
+ */
+static void
+generate_error_record(const char *directory, const char *filename, int error)
+{
+ char pathname[PATH_MAX];
+ token_t *return32_token;
+
+ return32_token = au_to_return32(au_errno_to_bsm(error), -1);
+ if (return32_token == NULL)
+ err(EX_UNAVAILABLE, "au_to_return32");
+ (void)snprintf(pathname, PATH_MAX, "%s_record", filename);
+ write_record(directory, pathname, return32_token, AUE_NULL);
+}
+
+/*
+ * Not all the error numbers, just a few present on all platforms for now.
+ */
+const struct {
+ int error_number;
+ const char *error_name;
+} error_list[] = {
+ { EPERM, "EPERM" },
+ { ENOENT, "ENOENT" },
+ { ESRCH, "ESRCH" },
+ { EINTR, "EINTR" },
+ { EIO, "EIO" },
+ { ENXIO, "ENXIO" },
+ { E2BIG, "E2BIG" },
+ { ENOEXEC, "ENOEXEC" },
+ { EBADF, "EBADF" },
+ { ECHILD, "ECHILD" },
+ { EDEADLK, "EDEADLK" },
+ { ENOMEM, "ENOMEM" },
+ { EACCES, "EACCES" },
+ { EFAULT, "EFAULT" },
+ { ENOTBLK, "ENOTBLK" },
+ { EBUSY, "EBUSY" },
+ { EEXIST, "EEXIST" },
+ { EXDEV, "EXDEV" },
+ { ENODEV, "ENODEV" },
+ { ENOTDIR, "ENOTDIR" },
+ { EISDIR, "EISDIR" },
+ { EINVAL, "EINVAL" },
+ { ENFILE, "ENFILE" },
+ { EMFILE, "EMFILE" },
+ { ENOTTY, "ENOTTY" },
+ { ETXTBSY, "ETXTBSY" },
+ { EFBIG, "EFBIG" },
+ { ENOSPC, "ENOSPC" },
+ { ESPIPE, "ESPIPE" },
+ { EROFS, "EROFS" },
+ { EMLINK, "EMLINK" },
+ { EPIPE, "EPIPE" }
+};
+const int error_list_count = sizeof(error_list)/sizeof(error_list[0]);
+
+static void
+do_error_records(const char *directory)
+{
+ int i;
+
+ for (i = 0; i < error_list_count; i++)
+ generate_error_record(directory, error_list[i].error_name,
+ error_list[i].error_number);
+}
+
int
main(int argc, char *argv[])
{
@@ -980,6 +1101,7 @@ main(int argc, char *argv[])
generate_groups_token(directory, "groups_token");
generate_attr32_token(directory, "attr32_token");
generate_zonename_token(directory, "zonename_token");
+ generate_socketex_token(directory, "socketex_token");
}
if (do_records) {
@@ -1015,6 +1137,8 @@ main(int argc, char *argv[])
generate_groups_record(directory, "groups_record");
generate_attr32_record(directory, "attr32_record");
generate_zonename_record(directory, "zonename_record");
+ generate_socketex_record(directory, "socketex_record");
+ do_error_records(directory);
}
return (0);