diff options
| author | Robert Watson <rwatson@FreeBSD.org> | 2008-12-31 11:12:24 +0000 |
|---|---|---|
| committer | Robert Watson <rwatson@FreeBSD.org> | 2008-12-31 11:12:24 +0000 |
| commit | 7a0a89d2cb29ee2c383600fa59e42d714a6dcbcb (patch) | |
| tree | 1be031d8331a1b0a29a40e1493c5707f3b6ce3e7 /contrib/openbsm/test/bsm/generate.c | |
| parent | f1c0a78d995be6c104328276eccf5abc564cde61 (diff) | |
| parent | 980b6e45aaf200a759c883374991028300774958 (diff) | |
Notes
Diffstat (limited to 'contrib/openbsm/test/bsm/generate.c')
| -rw-r--r-- | contrib/openbsm/test/bsm/generate.c | 132 |
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); |
