From Didier Gautheron: add FPGetUserInfo.

svn path=/trunk/; revision=5911
This commit is contained in:
Guy Harris 2002-07-29 06:35:12 +00:00
parent 3365355534
commit ff0df5d8a4
1 changed files with 107 additions and 1 deletions

View File

@ -2,7 +2,7 @@
* Routines for afp packet dissection
* Copyright 2002, Didier Gautheron <dgautheron@magic.fr>
*
* $Id: packet-afp.c,v 1.18 2002/07/17 00:42:40 guy Exp $
* $Id: packet-afp.c,v 1.19 2002/07/29 06:35:12 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -126,6 +126,7 @@
#define AFP_GETFLDRPARAM 34
#define AFP_SETFLDRPARAM 35
#define AFP_CHANGEPW 36
#define AFP_GETUSERINFO 37
#define AFP_GETSRVRMSG 38
#define AFP_CREATEID 39
#define AFP_DELETEID 40
@ -341,6 +342,7 @@ static const value_string CommandCode_vals[] = {
{AFP_GETFLDRPARAM, "FPGetFileDirParms" },
{AFP_SETFLDRPARAM, "FPSetFileDirParms" },
{AFP_CHANGEPW, "FPChangePassword" },
{AFP_GETUSERINFO, "FPGetUserInfo" },
{AFP_GETSRVRMSG, "FPGetSrvrMsg" },
{AFP_CREATEID, "FPCreateID" },
{AFP_DELETEID, "FPDeleteID" },
@ -582,6 +584,20 @@ static int hf_afp_dir_ar_u_write = -1;
static int hf_afp_dir_ar_blank = -1;
static int hf_afp_dir_ar_u_own = -1;
static int hf_afp_user_flag = -1;
static int hf_afp_user_ID = -1;
static int hf_afp_group_ID = -1;
static int hf_afp_user_bitmap = -1;
static int hf_afp_user_bitmap_UID = -1;
static int hf_afp_user_bitmap_GID = -1;
static gint ett_afp_user_bitmap = -1;
static const value_string user_flag_vals[] = {
{0, "Use user ID" },
{1, "Default user" },
{0, NULL } };
/*
file bitmap AFP3.0.pdf
Table 1-7 p. 36
@ -2664,6 +2680,62 @@ int len;
return offset;
}
/* ************************** */
static gint
dissect_query_afp_get_user_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
proto_tree *sub_tree = NULL;
proto_item *item;
guint16 bitmap;
proto_tree_add_item(tree, hf_afp_user_flag, tvb, offset, 1,FALSE);
offset++;
proto_tree_add_item(tree, hf_afp_user_ID, tvb, offset, 4,FALSE);
offset += 4;
bitmap = tvb_get_ntohs(tvb, offset);
if (tree) {
item = proto_tree_add_item(tree, hf_afp_user_bitmap, tvb, offset, 2,FALSE);
sub_tree = proto_item_add_subtree(item, ett_afp_user_bitmap);
proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UID, tvb, offset, 2,FALSE);
proto_tree_add_item(sub_tree, hf_afp_user_bitmap_GID, tvb, offset, 2,FALSE);
}
offset += 2;
return offset;
}
/* -------------------------- */
static gint
dissect_reply_afp_get_user_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
proto_tree *sub_tree = NULL;
proto_item *item;
guint16 bitmap;
bitmap = tvb_get_ntohs(tvb, offset);
if (tree) {
item = proto_tree_add_item(tree, hf_afp_user_bitmap, tvb, offset, 2,FALSE);
sub_tree = proto_item_add_subtree(item, ett_afp_user_bitmap);
proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UID, tvb, offset, 2,FALSE);
proto_tree_add_item(sub_tree, hf_afp_user_bitmap_GID, tvb, offset, 2,FALSE);
}
offset += 2;
if ((bitmap & 1)) {
proto_tree_add_item(tree, hf_afp_user_ID, tvb, offset, 4,FALSE);
offset += 4;
}
if ((bitmap & 2)) {
proto_tree_add_item(tree, hf_afp_group_ID, tvb, offset, 4,FALSE);
offset += 4;
}
return offset;
}
/* ************************** */
static void
dissect_afp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
@ -2768,6 +2840,8 @@ dissect_afp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset = dissect_query_afp_get_fork_param(tvb, pinfo, afp_tree, offset);break;
case AFP_GETSESSTOKEN:
offset = dissect_query_afp_get_session_token(tvb, pinfo, afp_tree, offset);break;
case AFP_GETUSERINFO:
offset = dissect_query_afp_get_user_info(tvb, pinfo, afp_tree, offset);break;
case AFP_GETSRVINFO:
/* offset = dissect_query_afp_get_server_info(tvb, pinfo, afp_tree, offset);break; */
case AFP_GETSRVPARAM:
@ -2871,6 +2945,8 @@ dissect_afp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
case AFP_RESOLVEID:
case AFP_GETFORKPARAM:
offset =dissect_reply_afp_get_fork_param(tvb, pinfo, afp_tree, offset);break;
case AFP_GETUSERINFO:
offset = dissect_reply_afp_get_user_info(tvb, pinfo, afp_tree, offset);break;
case AFP_GETSRVPARAM:
offset = dissect_reply_afp_get_server_param(tvb, pinfo, afp_tree, offset);break;
case AFP_CREATEDIR:
@ -3874,6 +3950,35 @@ proto_register_afp(void)
FT_BYTES, BASE_HEX, NULL, 0x0,
"Session token", HFILL }},
{ &hf_afp_user_flag,
{ "Flag", "afp.user_flag",
FT_UINT8, BASE_HEX, VALS(user_flag_vals), 0x01,
"User Info flag", HFILL }},
{ &hf_afp_user_ID,
{ "User ID", "afp.user_ID",
FT_UINT32, BASE_DEC, NULL, 0x0,
"User ID", HFILL }},
{ &hf_afp_group_ID,
{ "Group ID", "afp.group_ID",
FT_UINT32, BASE_DEC, NULL, 0x0,
"Group ID", HFILL }},
{ &hf_afp_user_bitmap,
{ "Bitmap", "afp.user_bitmap",
FT_UINT16, BASE_HEX, NULL, 0,
"User Info bitmap", HFILL }},
{ &hf_afp_user_bitmap_UID,
{ "User ID", "afp.user_bitmap.UID",
FT_BOOLEAN, 16, NULL, 0x01,
"User ID", HFILL }},
{ &hf_afp_user_bitmap_GID,
{ "Primary group ID", "afp.user_bitmap.GID",
FT_BOOLEAN, 16, NULL, 0x02,
"Primary group ID", HFILL }},
};
static gint *ett[] = {
@ -3898,6 +4003,7 @@ proto_register_afp(void)
&ett_afp_cat_r_bitmap,
&ett_afp_cat_spec,
&ett_afp_vol_did,
&ett_afp_user_bitmap,
};
proto_afp = proto_register_protocol("AppleTalk Filing Protocol", "AFP", "afp");