Date: Fri, 13 Mar 2009 00:19:28 GMT From: Stacey Son <sson@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 159140 for review Message-ID: <200903130019.n2D0JSQA093900@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=159140 Change 159140 by sson@sson_amd64 on 2009/03/13 00:18:47 Add support for parsing and printing AUT_SOCKINET128 tokens. Affected files ... .. //depot/projects/trustedbsd/openbsm/bsm/libbsm.h#45 edit .. //depot/projects/trustedbsd/openbsm/libbsm/bsm_io.c#62 edit Differences ... ==== //depot/projects/trustedbsd/openbsm/bsm/libbsm.h#45 (text+ko) ==== @@ -26,7 +26,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $P4: //depot/projects/trustedbsd/openbsm/bsm/libbsm.h#44 $ + * $P4: //depot/projects/trustedbsd/openbsm/bsm/libbsm.h#45 $ */ #ifndef _LIBBSM_H_ @@ -565,6 +565,12 @@ typedef struct { u_int16_t family; u_int16_t port; + u_int32_t addr[4]; +} au_socketinet_ex32_t; + +typedef struct { + u_int16_t family; + u_int16_t port; u_int32_t addr; } au_socketinet32_t; @@ -722,7 +728,7 @@ au_seq_t seq; au_socket_t socket; au_socket_ex32_t socket_ex32; - au_socketinet32_t sockinet32; + au_socketinet_ex32_t sockinet_ex32; au_socketunix_t sockunix; au_subject32_t subj32; au_subject32ex_t subj32_ex; ==== //depot/projects/trustedbsd/openbsm/libbsm/bsm_io.c#62 (text+ko) ==== @@ -32,7 +32,7 @@ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * - * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_io.c#61 $ + * $P4: //depot/projects/trustedbsd/openbsm/libbsm/bsm_io.c#62 $ */ #include <sys/types.h> @@ -365,6 +365,10 @@ fprintf(fp, "/>"); break; + case AUT_SOCKINET128: + fprintf(fp, "/>"); + break; + case AUT_SUBJECT32: fprintf(fp, "/>"); break; @@ -529,13 +533,16 @@ break; case AUT_SOCKINET32: - fprintf(fp, "<old_socket"); + fprintf(fp, "<socket-inet "); break; case AUT_SOCKUNIX: - fprintf(fp, "<old_socket"); + fprintf(fp, "<socket-unix "); break; + case AUT_SOCKINET128: + fprintf(fp, "<socket-inet6 "); + case AUT_SUBJECT32: fprintf(fp, "<subject "); break; @@ -3067,18 +3074,18 @@ { int err = 0; - READ_TOKEN_U_INT16(buf, len, tok->tt.sockinet32.family, tok->len, + READ_TOKEN_U_INT16(buf, len, tok->tt.sockinet_ex32.family, tok->len, err); if (err) return (-1); - READ_TOKEN_BYTES(buf, len, &tok->tt.sockinet32.port, + READ_TOKEN_BYTES(buf, len, &tok->tt.sockinet_ex32.port, sizeof(uint16_t), tok->len, err); if (err) return (-1); - READ_TOKEN_BYTES(buf, len, &tok->tt.sockinet32.addr, - sizeof(tok->tt.sockinet32.addr), tok->len, err); + READ_TOKEN_BYTES(buf, len, &tok->tt.sockinet_ex32.addr, + sizeof(tok->tt.sockinet_ex32.addr[0]), tok->len, err); if (err) return (-1); @@ -3093,22 +3100,77 @@ print_tok_type(fp, tok->id, "socket-inet", raw, xml); if (xml) { open_attr(fp, "type"); - print_2_bytes(fp, tok->tt.sockinet32.family, "%u"); + print_2_bytes(fp, tok->tt.sockinet_ex32.family, "%u"); + close_attr(fp); + open_attr(fp, "port"); + print_2_bytes(fp, ntohs(tok->tt.sockinet_ex32.port), "%u"); + close_attr(fp); + open_attr(fp, "addr"); + print_ip_address(fp, tok->tt.sockinet_ex32.addr[0]); + close_attr(fp); + close_tag(fp, tok->id); + } else { + print_delim(fp, del); + print_2_bytes(fp, tok->tt.sockinet_ex32.family, "%u"); + print_delim(fp, del); + print_2_bytes(fp, ntohs(tok->tt.sockinet_ex32.port), "%u"); + print_delim(fp, del); + print_ip_address(fp, tok->tt.sockinet_ex32.addr[0]); + } +} + +/* + * socket family 2 bytes + * local port 2 bytes + * socket address 16 bytes + */ +static int +fetch_sock_inet128_tok(tokenstr_t *tok, u_char *buf, int len) +{ + int err = 0; + + READ_TOKEN_U_INT16(buf, len, tok->tt.sockinet_ex32.family, tok->len, + err); + if (err) + return (-1); + + READ_TOKEN_BYTES(buf, len, &tok->tt.sockinet_ex32.port, + sizeof(uint16_t), tok->len, err); + if (err) + return (-1); + + READ_TOKEN_BYTES(buf, len, &tok->tt.sockinet_ex32.addr, + sizeof(tok->tt.sockinet_ex32.addr), tok->len, err); + if (err) + return (-1); + + return (0); +} + +static void +print_sock_inet128_tok(FILE *fp, tokenstr_t *tok, char *del, char raw, + __unused char sfrm, int xml) +{ + + print_tok_type(fp, tok->id, "socket-inet6", raw, xml); + if (xml) { + open_attr(fp, "type"); + print_2_bytes(fp, tok->tt.sockinet_ex32.family, "%u"); close_attr(fp); open_attr(fp, "port"); - print_2_bytes(fp, ntohs(tok->tt.sockinet32.port), "%u"); + print_2_bytes(fp, ntohs(tok->tt.sockinet_ex32.port), "%u"); close_attr(fp); open_attr(fp, "addr"); - print_ip_address(fp, tok->tt.sockinet32.addr); + print_ip_ex_address(fp, AU_IPv6, tok->tt.sockinet_ex32.addr); close_attr(fp); close_tag(fp, tok->id); } else { print_delim(fp, del); - print_2_bytes(fp, tok->tt.sockinet32.family, "%u"); + print_2_bytes(fp, tok->tt.sockinet_ex32.family, "%u"); print_delim(fp, del); - print_2_bytes(fp, ntohs(tok->tt.sockinet32.port), "%u"); + print_2_bytes(fp, ntohs(tok->tt.sockinet_ex32.port), "%u"); print_delim(fp, del); - print_ip_address(fp, tok->tt.sockinet32.addr); + print_ip_ex_address(fp, AU_IPv6, tok->tt.sockinet_ex32.addr); } } @@ -4057,6 +4119,9 @@ case AUT_SOCKUNIX: return (fetch_sock_unix_tok(tok, buf, len)); + case AUT_SOCKINET128: + return (fetch_sock_inet128_tok(tok, buf, len)); + case AUT_SUBJECT32: return (fetch_subject32_tok(tok, buf, len)); @@ -4226,6 +4291,10 @@ print_sock_unix_tok(outfp, tok, del, raw, sfrm, AU_PLAIN); return; + case AUT_SOCKINET128: + print_sock_inet128_tok(outfp, tok, del, raw, sfrm, AU_PLAIN); + return; + case AUT_SUBJECT32: print_subject32_tok(outfp, tok, del, raw, sfrm, AU_PLAIN); return;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903130019.n2D0JSQA093900>