d30042773664392ae8aefcadb90d58a3082162a2
[obnox/wireshark/wip.git] / epan / dissectors / packet-kadm5.c
1 /* packet-kadm5.c
2  * Routines for kadm5 dissection
3  *
4  * $Id$
5  *
6  * Wireshark - Network traffic analyzer
7  * By Gerald Combs <gerald@wireshark.org>
8  * Copyright 1998 Gerald Combs
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License
12  * as published by the Free Software Foundation; either version 2
13  * of the License, or (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23  */
24
25 /*
26  * The kadm5 RPC protocol is used to administer Kerberos principals
27  * and policies.  It is not officially documented anywhere.  The
28  * information for this dissector came from the MIT kadmin source.
29  */
30
31 #ifdef HAVE_CONFIG_H
32 #include "config.h"
33 #endif
34
35 #include "packet-rpc.h"
36
37 #define KADM5_PROGRAM                   2112
38 #define KADM5PROC_NULL                  0
39 #define KADM5PROC_CREATE_PRINCIPAL      1
40 #define KADM5PROC_DELETE_PRINCIPAL      2
41 #define KADM5PROC_MODIFY_PRINCIPAL      3
42 #define KADM5PROC_RENAME_PRINCIPAL      4
43 #define KADM5PROC_GET_PRINCIPAL         5
44 #define KADM5PROC_CHPASS_PRINCIPAL      6
45 #define KADM5PROC_CHRAND_PRINCIPAL      7
46 #define KADM5PROC_CREATE_POLICY         8
47 #define KADM5PROC_DELETE_POLICY         9
48 #define KADM5PROC_MODIFY_POLICY         10
49 #define KADM5PROC_GET_POLICY            11
50 #define KADM5PROC_GET_PRIVS             12
51 #define KADM5PROC_INIT                  13
52 #define KADM5PROC_GET_PRINCS            14
53 #define KADM5PROC_GET_POLS              15
54 #define KADM5PROC_SETKEY_PRINCIPAL      16
55 #define KADM5PROC_SETV4KEY_PRINCIPAL    17
56 #define KADM5PROC_CREATE_PRINCIPAL3     18
57 #define KADM5PROC_CHPASS_PRINCIPAL3     19
58 #define KADM5PROC_CHRAND_PRINCIPAL3     20
59 #define KADM5PROC_SETKEY_PRINCIPAL3     21
60
61 static int proto_kadm5 = -1;
62 static int hf_kadm5_procedure_v2 = -1;
63 static gint ett_kadm5 = -1;
64
65 /* proc number, "proc name", dissect_request, dissect_reply */
66 /* NULL as function pointer means: type of arguments is "void". */
67 static const vsff kadm5_v2_proc[] = {
68         { KADM5PROC_NULL,               "NULL",                 NULL,   NULL },
69         { KADM5PROC_CREATE_PRINCIPAL,   "CREATE_PRINCIPAL",     NULL,   NULL },
70         { KADM5PROC_DELETE_PRINCIPAL,   "DELETE_PRINCIPAL",     NULL,   NULL },
71         { KADM5PROC_MODIFY_PRINCIPAL,   "MODIFY_PRINCIPAL",     NULL,   NULL },
72         { KADM5PROC_RENAME_PRINCIPAL,   "RENAME_PRINCIPAL",     NULL,   NULL },
73         { KADM5PROC_GET_PRINCIPAL,      "GET_PRINCIPAL",        NULL,   NULL },
74         { KADM5PROC_CHPASS_PRINCIPAL,   "CHPASS_PRINCIPAL",     NULL,   NULL },
75         { KADM5PROC_CHRAND_PRINCIPAL,   "CHRAND_PRINCIPAL",     NULL,   NULL },
76         { KADM5PROC_CREATE_POLICY,      "CREATE_POLICY",        NULL,   NULL },
77         { KADM5PROC_DELETE_POLICY,      "DELETE_POLICY",        NULL,   NULL },
78         { KADM5PROC_MODIFY_POLICY,      "MODIFY_POLICY",        NULL,   NULL },
79         { KADM5PROC_GET_POLICY,         "GET_POLICY",           NULL,   NULL },
80         { KADM5PROC_GET_PRIVS,          "GET_PRIVS",            NULL,   NULL },
81         { KADM5PROC_INIT,               "INIT",                 NULL,   NULL },
82         { KADM5PROC_GET_PRINCS,         "GET_PRINCS",           NULL,   NULL },
83         { KADM5PROC_GET_POLS,           "GET_POLS",             NULL,   NULL },
84         { KADM5PROC_SETKEY_PRINCIPAL,   "SETKEY_PRINCIPAL",     NULL,   NULL },
85         { KADM5PROC_SETV4KEY_PRINCIPAL, "SETV4KEY_PRINCIPAL",   NULL,   NULL },
86         { KADM5PROC_CREATE_PRINCIPAL3,  "CREATE_PRINCIPAL3",    NULL,   NULL },
87         { KADM5PROC_CHPASS_PRINCIPAL3,  "CHPASS_PRINCIPAL3",    NULL,   NULL },
88         { KADM5PROC_CHRAND_PRINCIPAL3,  "CHRAND_PRINCIPAL3",    NULL,   NULL },
89         { KADM5PROC_SETKEY_PRINCIPAL3,  "SETKEY_PRINCIPAL3",    NULL,   NULL },
90         { 0,                             NULL,                  NULL,   NULL }
91 };
92
93 static const value_string kadm5_v2_proc_vals[] = {
94         { KADM5PROC_NULL,               "NULL" },
95         { KADM5PROC_CREATE_PRINCIPAL,   "CREATE_PRINCIPAL" },
96         { KADM5PROC_DELETE_PRINCIPAL,   "DELETE_PRINCIPAL" },
97         { KADM5PROC_MODIFY_PRINCIPAL,   "MODIFY_PRINCIPAL" },
98         { KADM5PROC_RENAME_PRINCIPAL,   "RENAME_PRINCIPAL" },
99         { KADM5PROC_GET_PRINCIPAL,      "GET_PRINCIPAL" },
100         { KADM5PROC_CHPASS_PRINCIPAL,   "CHPASS_PRINCIPAL" },
101         { KADM5PROC_CHRAND_PRINCIPAL,   "CHRAND_PRINCIPAL" },
102         { KADM5PROC_CREATE_POLICY,      "CREATE_POLICY" },
103         { KADM5PROC_DELETE_POLICY,      "DELETE_POLICY" },
104         { KADM5PROC_MODIFY_POLICY,      "MODIFY_POLICY" },
105         { KADM5PROC_GET_POLICY,         "GET_POLICY" },
106         { KADM5PROC_GET_PRIVS,          "GET_PRIVS" },
107         { KADM5PROC_INIT,               "INIT" },
108         { KADM5PROC_GET_PRINCS,         "GET_PRINCS" },
109         { KADM5PROC_GET_POLS,           "GET_POLS" },
110         { KADM5PROC_SETKEY_PRINCIPAL,   "SETKEY_PRINCIPAL" },
111         { KADM5PROC_SETV4KEY_PRINCIPAL, "SETV4KEY_PRINCIPAL" },
112         { KADM5PROC_CREATE_PRINCIPAL3,  "CREATE_PRINCIPAL3" },
113         { KADM5PROC_CHPASS_PRINCIPAL3,  "CHPASS_PRINCIPAL3" },
114         { KADM5PROC_CHRAND_PRINCIPAL3,  "CHRAND_PRINCIPAL3" },
115         { KADM5PROC_SETKEY_PRINCIPAL3,  "SETKEY_PRINCIPAL3" },
116         { 0,                             NULL }
117 };
118
119 void
120 proto_register_kadm5(void)
121 {
122         static hf_register_info hf[] = {
123                 { &hf_kadm5_procedure_v2, {
124                     "V2 Procedure", "kadm5.procedure_v2", FT_UINT32, BASE_DEC,
125                     VALS(kadm5_v2_proc_vals), 0, "V2 Procedure", HFILL }},
126         };
127
128         static gint *ett[] = {
129                 &ett_kadm5,
130         };
131
132         proto_kadm5 = proto_register_protocol("Kerberos Administration",
133             "KADM5", "kadm5");
134         proto_register_field_array(proto_kadm5, hf, array_length(hf));
135         proto_register_subtree_array(ett, array_length(ett));
136 }
137
138 void
139 proto_reg_handoff_kadm5(void)
140 {
141         /* Register the protocol as RPC */
142         rpc_init_prog(proto_kadm5, KADM5_PROGRAM, ett_kadm5);
143         /* Register the procedure tables */
144         rpc_init_proc_table(KADM5_PROGRAM, 2, kadm5_v2_proc,
145             hf_kadm5_procedure_v2);
146 }