jcs's openbsd hax
openbsd
1.\" $OpenBSD: ober_set_header.3,v 1.6 2025/06/13 18:34:00 schwarze Exp $
2.\"
3.\" Copyright (c) 2007, 2012 Reyk Floeter <reyk@openbsd.org>
4.\"
5.\" Permission to use, copy, modify, and distribute this software for any
6.\" purpose with or without fee is hereby granted, provided that the above
7.\" copyright notice and this permission notice appear in all copies.
8.\"
9.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16.\"
17.Dd $Mdocdate: June 13 2025 $
18.Dt OBER_SET_HEADER 3
19.Os
20.Sh NAME
21.Nm ober_set_header ,
22.Nm ober_calc_len ,
23.Nm ober_set_writecallback ,
24.Nm ober_link_elements ,
25.Nm ober_replace_elements ,
26.Nm ober_dup ,
27.Nm ober_unlink_elements ,
28.Nm ober_free_element ,
29.Nm ober_free_elements
30.Nd change and destroy ASN.1 objects for BER encoding
31.Sh SYNOPSIS
32.Lb libutil
33.In sys/types.h
34.In ber.h
35.Ft void
36.Fn "ober_set_header" "struct ber_element *elm" "int class" "unsigned int type"
37.Ft size_t
38.Fn "ober_calc_len" "struct ber_element *root"
39.Ft void
40.Fo "ober_set_writecallback"
41.Fa "struct ber_element *elm"
42.Fa "void (*cb)(void *arg, size_t offs)"
43.Fa "void *arg"
44.Fc
45.Ft void
46.Fn "ober_link_elements" "struct ber_element *prev" "struct ber_element *elm"
47.Ft void
48.Fn "ober_replace_elements" "struct ber_element *prev" "struct ber_element *elm"
49.Ft struct ber_element *
50.Fn "ober_dup" "struct ber_element *orig"
51.Ft struct ber_element *
52.Fn "ober_unlink_elements" "struct ber_element *prev"
53.Ft void
54.Fn "ober_free_element" "struct ber_element *root"
55.Ft void
56.Fn "ober_free_elements" "struct ber_element *root"
57.Pp
58.Fd #define BER_TYPE_BOOLEAN 1
59.Fd #define BER_TYPE_INTEGER 2
60.Fd #define BER_TYPE_BITSTRING 3
61.Fd #define BER_TYPE_OCTETSTRING 4
62.Fd #define BER_TYPE_NULL 5
63.Fd #define BER_TYPE_OBJECT 6
64.Fd #define BER_TYPE_ENUMERATED 10
65.Fd #define BER_TYPE_SEQUENCE 16
66.Fd #define BER_TYPE_SET 17
67.Pp
68.Fd #define BER_TYPE_CONSTRUCTED 0x20
69.Pp
70.Fd #define BER_CLASS_UNIVERSAL 0x0
71.Fd #define BER_CLASS_UNIV BER_CLASS_UNIVERSAL
72.Fd #define BER_CLASS_APPLICATION 0x1
73.Fd #define BER_CLASS_APP BER_CLASS_APPLICATION
74.Fd #define BER_CLASS_CONTEXT 0x2
75.Fd #define BER_CLASS_PRIVATE 0x3
76.Sh DESCRIPTION
77.Fn ober_set_header
78sets the
79.Fa class
80and
81.Fa type
82of
83.Fa elm .
84.Pp
85.Fn ober_calc_len
86determines the total length of
87.Fa root .
88.Pp
89.Fn ober_set_writecallback
90registers the
91.Vt br_cb
92callback function.
93.Pp
94.Fn ober_link_elements
95links
96.Fa prev
97and
98.Fa elm .
99.Pp
100.Fn ober_replace_elements
101replaces
102.Fa prev
103with
104.Fa new
105and frees any dynamically allocated storage associated with
106.Fa prev .
107.Pp
108.Fn ober_dup
109duplicates an element and all linked elements.
110.Pp
111.Fn ober_unlink_elements
112unlinks
113.Fa prev .
114.Pp
115.Fn ober_free_element
116and
117.Fn ober_free_elements
118free any dynamically allocated storage associated with
119.Fa root .
120.Sh RETURN VALUES
121.Fn ober_calc_len
122returns the total length of a fully populated
123.Fa root
124containing one or more
125.Vt ber_element .
126.Pp
127.Fn ober_dup
128returns a pointer to the duplicated element or
129.Dv NULL
130on error.
131.Pp
132.Fn ober_unlink_elements
133returns a pointer to
134.Vt ber_element .
135.Sh SEE ALSO
136.Xr ober_add_string 3 ,
137.Xr ober_get_string 3 ,
138.Xr ober_oid_cmp 3 ,
139.Xr ober_read_elements 3
140.Sh STANDARDS
141ITU-T Recommendation X.690, also known as ISO/IEC 8825-1:
142Information technology - ASN.1 encoding rules.
143.Sh HISTORY
144.Fn ober_dup
145first appeared in
146.Ox 7.0 .
147.Pp
148The other functions first appeared as internal functions in
149.Xr snmpd 8
150in
151.Ox 4.2
152and were moved to libutil in
153.Ox 6.6 .
154.Sh AUTHORS
155.An -nosplit
156The BER library was written by
157.An Claudio Jeker Aq Mt claudio@openbsd.org ,
158.An Marc Balmer Aq Mt marc@openbsd.org
159and
160.An Reyk Floeter Aq Mt reyk@openbsd.org .