PERFORCE change 159140 for review
Stacey Son
sson at FreeBSD.org
Thu Mar 12 17:19:30 PDT 2009
http://perforce.freebsd.org/chv.cgi?CH=159140
Change 159140 by sson at 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;
More information about the p4-projects
mailing list