xref: /illumos-gate/usr/src/cmd/smbsrv/test-crypt/utils.c (revision 4f0ce1da2aeae875aeb13640b681d0ad37a3036b)
1*4f0ce1daSGordon Ross /*
2*4f0ce1daSGordon Ross  * This file and its contents are supplied under the terms of the
3*4f0ce1daSGordon Ross  * Common Development and Distribution License ("CDDL"), version 1.0.
4*4f0ce1daSGordon Ross  * You may only use this file in accordance with the terms of version
5*4f0ce1daSGordon Ross  * 1.0 of the CDDL.
6*4f0ce1daSGordon Ross  *
7*4f0ce1daSGordon Ross  * A full copy of the text of the CDDL should have accompanied this
8*4f0ce1daSGordon Ross  * source.  A copy of the CDDL is also available via the Internet at
9*4f0ce1daSGordon Ross  * http://www.illumos.org/license/CDDL.
10*4f0ce1daSGordon Ross  */
11*4f0ce1daSGordon Ross 
12*4f0ce1daSGordon Ross /*
13*4f0ce1daSGordon Ross  * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
14*4f0ce1daSGordon Ross  */
15*4f0ce1daSGordon Ross 
16*4f0ce1daSGordon Ross #include <stdio.h>
17*4f0ce1daSGordon Ross #include <strings.h>
18*4f0ce1daSGordon Ross #include <sys/cmn_err.h>
19*4f0ce1daSGordon Ross #include <sys/varargs.h>
20*4f0ce1daSGordon Ross 
21*4f0ce1daSGordon Ross #include "utils.h"
22*4f0ce1daSGordon Ross 
23*4f0ce1daSGordon Ross void
hexdump(const uchar_t * buf,int len)24*4f0ce1daSGordon Ross hexdump(const uchar_t *buf, int len)
25*4f0ce1daSGordon Ross {
26*4f0ce1daSGordon Ross 	int idx;
27*4f0ce1daSGordon Ross 	char ascii[24];
28*4f0ce1daSGordon Ross 	char *pa = ascii;
29*4f0ce1daSGordon Ross 
30*4f0ce1daSGordon Ross 	bzero(ascii, sizeof (ascii));
31*4f0ce1daSGordon Ross 
32*4f0ce1daSGordon Ross 	idx = 0;
33*4f0ce1daSGordon Ross 	while (len--) {
34*4f0ce1daSGordon Ross 		if ((idx & 15) == 0) {
35*4f0ce1daSGordon Ross 			printf("%04X: ", idx);
36*4f0ce1daSGordon Ross 			pa = ascii;
37*4f0ce1daSGordon Ross 		}
38*4f0ce1daSGordon Ross 		if (*buf > ' ' && *buf <= '~')
39*4f0ce1daSGordon Ross 			*pa++ = *buf;
40*4f0ce1daSGordon Ross 		else
41*4f0ce1daSGordon Ross 			*pa++ = '.';
42*4f0ce1daSGordon Ross 		printf("%02x ", *buf++);
43*4f0ce1daSGordon Ross 
44*4f0ce1daSGordon Ross 		idx++;
45*4f0ce1daSGordon Ross 		if ((idx & 3) == 0) {
46*4f0ce1daSGordon Ross 			*pa++ = ' ';
47*4f0ce1daSGordon Ross 			(void) putchar(' ');
48*4f0ce1daSGordon Ross 		}
49*4f0ce1daSGordon Ross 		if ((idx & 15) == 0) {
50*4f0ce1daSGordon Ross 			*pa = '\0';
51*4f0ce1daSGordon Ross 			printf("%s\n", ascii);
52*4f0ce1daSGordon Ross 		}
53*4f0ce1daSGordon Ross 	}
54*4f0ce1daSGordon Ross 
55*4f0ce1daSGordon Ross 	if ((idx & 15) != 0) {
56*4f0ce1daSGordon Ross 		*pa = '\0';
57*4f0ce1daSGordon Ross 		/* column align the last ascii row */
58*4f0ce1daSGordon Ross 		while ((idx & 15) != 0) {
59*4f0ce1daSGordon Ross 			if ((idx & 3) == 0)
60*4f0ce1daSGordon Ross 				(void) putchar(' ');
61*4f0ce1daSGordon Ross 			printf("   ");
62*4f0ce1daSGordon Ross 			idx++;
63*4f0ce1daSGordon Ross 		}
64*4f0ce1daSGordon Ross 		printf("%s\n", ascii);
65*4f0ce1daSGordon Ross 	}
66*4f0ce1daSGordon Ross }
67*4f0ce1daSGordon Ross 
68*4f0ce1daSGordon Ross /*
69*4f0ce1daSGordon Ross  * Provide a real function (one that prints something) to replace
70*4f0ce1daSGordon Ross  * the stub in libfakekernel.  This prints cmn_err() messages.
71*4f0ce1daSGordon Ross  */
72*4f0ce1daSGordon Ross void
fakekernel_putlog(char * msg,size_t len,int flags)73*4f0ce1daSGordon Ross fakekernel_putlog(char *msg, size_t len, int flags)
74*4f0ce1daSGordon Ross {
75*4f0ce1daSGordon Ross 
76*4f0ce1daSGordon Ross 	(void) fwrite(msg, 1, len, stdout);
77*4f0ce1daSGordon Ross 	(void) fflush(stdout);
78*4f0ce1daSGordon Ross }
79*4f0ce1daSGordon Ross 
80*4f0ce1daSGordon Ross /*
81*4f0ce1daSGordon Ross  * Build a UIO for the input or output buffer
82*4f0ce1daSGordon Ross  * Arbitrarily splits into 2 segs for testing uio.
83*4f0ce1daSGordon Ross  */
84*4f0ce1daSGordon Ross void
make_uio(void * buf,size_t buflen,uio_t * uio,iovec_t * iov,int iovmax)85*4f0ce1daSGordon Ross make_uio(void *buf, size_t buflen, uio_t *uio, iovec_t *iov, int iovmax)
86*4f0ce1daSGordon Ross {
87*4f0ce1daSGordon Ross 	size_t maxseg = 512;
88*4f0ce1daSGordon Ross 	size_t tlen;
89*4f0ce1daSGordon Ross 	int i;
90*4f0ce1daSGordon Ross 
91*4f0ce1daSGordon Ross 	bzero(uio, sizeof (*uio));
92*4f0ce1daSGordon Ross 	uio->uio_resid = buflen;
93*4f0ce1daSGordon Ross 	uio->uio_segflg = UIO_SYSSPACE;
94*4f0ce1daSGordon Ross 
95*4f0ce1daSGordon Ross 	for (i = 0; i < iovmax; i++) {
96*4f0ce1daSGordon Ross 		if (buflen <= 0)
97*4f0ce1daSGordon Ross 			break;
98*4f0ce1daSGordon Ross 		tlen = buflen;
99*4f0ce1daSGordon Ross 		if (tlen > maxseg)
100*4f0ce1daSGordon Ross 			tlen = maxseg;
101*4f0ce1daSGordon Ross 		iov[i].iov_base = buf;
102*4f0ce1daSGordon Ross 		iov[i].iov_len = tlen;
103*4f0ce1daSGordon Ross 		buf += tlen;
104*4f0ce1daSGordon Ross 		buflen -= tlen;
105*4f0ce1daSGordon Ross 	}
106*4f0ce1daSGordon Ross 
107*4f0ce1daSGordon Ross 	uio->uio_iov = iov;
108*4f0ce1daSGordon Ross 	uio->uio_iovcnt = i;
109*4f0ce1daSGordon Ross }
110