Adding access control
[yaz-moved-to-github.git] / asn / prt-acc.c
1 /*
2  * Copyright (c) 1995, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: prt-acc.c,v $
7  * Revision 1.1  1995-06-02 09:49:15  quinn
8  * Adding access control
9  *
10  *
11  */
12
13 #include <proto.h>
14
15 int z_Encryption1(ODR o, Z_Encryption1 **p, int opt)
16 {
17     if (!odr_sequence_begin(o, p, sizeof(**p)))
18         return opt && odr_ok(o);
19     return
20         odr_implicit(o, odr_octetstring, &(*p)->cryptType, ODR_CONTEXT, 1, 1) &&
21         odr_implicit(o, odr_octetstring, &(*p)->credential, ODR_CONTEXT, 2,
22             1) &&
23         odr_implicit(o, odr_octetstring, &(*p)->data, ODR_CONTEXT, 3, 0) &&
24         odr_sequence_end(o);
25 }
26
27 int z_EnumeratedPrompt1(ODR o, Z_EnumeratedPrompt1 **p, int opt)
28 {
29     if (!odr_sequence_begin(o, p, sizeof(**p)))
30         return opt && odr_ok(o);
31     return
32         odr_implicit(o, odr_integer, &(*p)->type, ODR_CONTEXT, 1, 0) &&
33         odr_implicit(o, odr_visiblestring, &(*p)->suggestedString, ODR_CONTEXT,
34             2, 1) &&
35         odr_sequence_end(o);
36 }
37
38 int z_PromptId1(ODR o, Z_PromptId1 **p, int opt)
39 {
40     static Odr_arm arm[] =
41     {
42         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptId1_enumeratedPrompt,
43             z_EnumeratedPrompt1},
44         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptId1_nonEnumeratedPrompt,
45             odr_visiblestring},
46         {-1, -1, -1, -1, 0}
47     };
48
49     if (o->direction == ODR_DECODE)
50         *p = odr_malloc(o, sizeof(**p));
51     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
52         return 1;
53     *p = 0;
54     return opt && odr_ok(o);
55 }
56
57 int z_PromptInfo1(ODR o, Z_PromptInfo1 **p, int opt)
58 {
59     static Odr_arm arm[] =
60     {
61         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Challenge1_character,
62             odr_visiblestring},
63         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Challenge1_encrypted,
64             z_Encryption1},
65         {-1, -1, -1, -1, 0}
66     };
67
68     if (o->direction == ODR_DECODE)
69         *p = odr_malloc(o, sizeof(**p));
70     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
71         return 1;
72     *p = 0;
73     return opt && odr_ok(o);
74 }
75
76 int z_ChallengeUnit1(ODR o, Z_ChallengeUnit1 **p, int opt)
77 {
78     if (!odr_sequence_begin(o, p, sizeof(**p)))
79         return opt && odr_ok(o);
80     return
81         odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
82         odr_implicit(o, odr_visiblestring, &(*p)->defaultResponse, ODR_CONTEXT,
83             2, 1) &&
84         odr_explicit(o, z_PromptInfo1, &(*p)->promptInfo, ODR_CONTEXT, 3, 1) &&
85         odr_implicit(o, odr_visiblestring, &(*p)->regExpr, ODR_CONTEXT, 4, 1) &&
86         odr_implicit(o, odr_null, &(*p)->responseRequired, ODR_CONTEXT, 5, 1) &&
87         odr_implicit_settag(o, ODR_CONTEXT, 6) &&
88         (odr_sequence_of(o, odr_visiblestring, &(*p)->allowedValues,
89             &(*p)->num_values) || odr_ok(o)) &&
90         odr_implicit(o, odr_null, &(*p)->shouldSave, ODR_CONTEXT, 7, 1) &&
91         odr_implicit(o, odr_integer, &(*p)->dataType, ODR_CONTEXT, 8, 1) &&
92         odr_sequence_end(o);
93 }
94
95 int z_Challenge1(ODR o, Z_Challenge1 **p, int opt)
96 {
97     if (o->direction == ODR_ENCODE)
98         *p = odr_malloc(o, sizeof(**p));
99     if (odr_sequence_of(o, z_ChallengeUnit1, &(*p)->list,
100         &(*p)->num_challenges))
101         return 1;
102     *p = 0;
103     return opt && odr_ok(o);
104 }
105
106 int z_DiagRec(ODR, Z_DiagRec **, int);
107
108 int z_ResponseUnit1(ODR o, Z_ResponseUnit1 **p, int opt)
109 {
110     static Odr_arm arm[] = 
111     {
112         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_Response1_string, odr_visiblestring},
113         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_Response1_accept, odr_bool},
114         {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_Response1_acknowledge, odr_null},
115         {ODR_EXPLICIT, ODR_CONTEXT, 4, Z_Response1_diagnostic, z_DiagRec},
116         {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_Response1_encrypted, z_Encryption1},
117         {-1, -1, -1, -1, 0}
118     };
119
120     if (odr_sequence_begin(o, p, sizeof(**p)))
121         return opt && odr_ok(o);
122     return
123         odr_explicit(o, z_PromptId1, &(*p)->promptId, ODR_CONTEXT, 1, 0) &&
124         odr_constructed_begin(o, p, ODR_CONTEXT, 2) &&
125         odr_choice(o, arm, &(*p)->u, &(*p)->which) &&
126         odr_constructed_end(o) &&
127         odr_sequence_end(o);
128 }
129
130 int z_Response1(ODR o, Z_Response1 **p, int opt)
131 {
132     if (o->direction == ODR_ENCODE)
133         *p = odr_malloc(o, sizeof(**p));
134     if (odr_sequence_of(o, z_ResponseUnit1, &(*p)->list,
135         &(*p)->num_responses))
136         return 1;
137     *p = 0;
138     return opt && odr_ok(o);
139 }
140
141 int z_PromptObject1(ODR o, Z_PromptObject1 **p, int opt)
142 {
143     static Odr_arm arm[] =
144     {
145         {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_PromptObject1_challenge, z_Challenge1},
146         {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_PromptObject1_response, z_Response1},
147         {-1, -1, -1, -1, 0}
148     };
149
150     if (o->direction == ODR_DECODE)
151         *p = odr_malloc(o, sizeof(**p));
152     if (odr_choice(o, arm, &(*p)->u, &(*p)->which))
153         return 1;
154     *p = 0;
155     return opt && odr_ok(o);
156 }