aboutsummaryrefslogtreecommitdiffstats
path: root/packet-smb.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-04-29 10:23:04 +0000
committerGuy Harris <guy@alum.mit.edu>2002-04-29 10:23:04 +0000
commitd61cb7942df9bfe2f46415ae5415f6f48db089bd (patch)
treefcea40cfadbbf447e2d92a3cd54f3db81d2f6f17 /packet-smb.c
parentd773807f4f40b5789eea3495eeed2cb0a070ade5 (diff)
There's no need to allocate and fill in an array of sub-authorities and
then later construct the sub-authority string from that array; we can just construct the string as we fetch the sub-authorities. Given that we're doing that, use the cleanup handler to free the string, so that we don't leak memory if we throw an exception when fetching the RID, for example. svn path=/trunk/; revision=5294
Diffstat (limited to 'packet-smb.c')
-rw-r--r--packet-smb.c46
1 files changed, 19 insertions, 27 deletions
diff --git a/packet-smb.c b/packet-smb.c
index 22e714a624..a7db21ffe1 100644
--- a/packet-smb.c
+++ b/packet-smb.c
@@ -3,7 +3,7 @@
* Copyright 1999, Richard Sharpe <rsharpe@ns.aus.com>
* 2001 Rewrite by Ronnie Sahlberg and Guy Harris
*
- * $Id: packet-smb.c,v 1.252 2002/04/29 08:20:10 guy Exp $
+ * $Id: packet-smb.c,v 1.253 2002/04/29 10:23:04 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -6635,13 +6635,12 @@ dissect_security_information_mask(tvbuff_t *tvb, packet_info *pinfo, proto_tree
return offset;
}
-#if 0
+
static void
free_g_string(void *arg)
{
g_string_free(arg, TRUE);
}
-#endif
int
dissect_nt_sid(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, char *name)
@@ -6649,7 +6648,6 @@ dissect_nt_sid(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent
proto_item *item = NULL;
proto_tree *tree = NULL;
int old_offset = offset, sa_offset = offset;
- guint *s_auths = NULL;
guint rid;
guint8 revision;
guint8 num_auth;
@@ -6680,11 +6678,6 @@ dissect_nt_sid(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent
a new FT_xxx thingie? SMB is quite common!*/
/* identifier authorities */
- /* FIXME: We should dynamically allocate the authorities array,
- which is only one thing. Then we don't have to allocate two
- strings below etc ...
- */
-
for(i=0;i<6;i++){
auth = (auth << 8) + tvb_get_guint8(tvb, offset);
@@ -6695,29 +6688,26 @@ dissect_nt_sid(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent
sa_offset = offset;
- CLEANUP_PUSH(free, s_auths);
-
- s_auths = g_malloc(sizeof(guint) * num_auth);
+ gstr = g_string_new("");
+
+ CLEANUP_PUSH(free_g_string, gstr);
/* sub authorities, leave RID to last */
- /* FIXME: If we take an exception now, we lose the whole
- sub-authorities string thang */
for(i=0; i < (num_auth > 4?(num_auth - 1):num_auth); i++){
- /* XXX should not be letohl but native byteorder according to
- samba header files. considering that all non-x86 NT ports
- are dead we can (?) assume that non le byte encodings
- will be "uncommon"?*/
- s_auths[i] = tvb_get_letohl(tvb, offset);
- offset+=4;
+ /*
+ * XXX should not be letohl but native byteorder according to
+ * Samba header files.
+ *
+ * However, considering that there were never any NT ports
+ * to big-endian platforms (PowerPC and MIPS ran little-endian,
+ * and IA-64 runs little-endian, as does x86-64), we can (?)
+ * assume that non le byte encodings will be "uncommon"?
+ */
+ g_string_sprintfa(gstr, (i>0 ? "-%u" : "%u"),
+ tvb_get_letohl(tvb, offset));
+ offset+=4;
}
- CLEANUP_CALL_AND_POP;
-
- gstr = g_string_new("");
-
- for (i = 0; i < (num_auth>4?(num_auth - 1):num_auth); i++)
- g_string_sprintfa(gstr, (i>0 ? "-%u" : "%u"), s_auths[i]);
-
proto_tree_add_text(tree, tvb, sa_offset, num_auth * 4, "Sub-authorities: %s", gstr->str);
if (num_auth > 4) {
@@ -6730,6 +6720,8 @@ dissect_nt_sid(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent
proto_item_append_text(item, ": S-1-%u-%s", auth, gstr->str);
}
+ CLEANUP_CALL_AND_POP;
+
}
proto_item_set_len(item, offset-old_offset);