Blob


1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8"/>
5 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
6 <link rel="stylesheet" href="mandoc.css" type="text/css" media="all"/>
7 <title>GOTD.CONF(5)</title>
8 </head>
9 <!-- This is an automatically generated file. Do not edit.
10 Copyright (c) 2022 Stefan Sperling <stsp@openbsd.org>
12 Permission to use, copy, modify, and distribute this software for any
13 purpose with or without fee is hereby granted, provided that the above
14 copyright notice and this permission notice appear in all copies.
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 -->
24 <body>
25 <div class="head" role="doc-pageheader" aria-label="Manual header
26 line"><span class="head-ltitle">GOTD.CONF(5)</span>
27 <span class="head-vol">File Formats Manual</span>
28 <span class="head-rtitle">GOTD.CONF(5)</span></div>
29 <main class="manual-text">
30 <section class="Sh">
31 <h2 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h2>
32 <p class="Pp"><code class="Nm">gotd.conf</code> &#x2014;
33 <span class="Nd" role="doc-subtitle">gotd configuration file</span></p>
34 </section>
35 <section class="Sh">
36 <h2 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h2>
37 <p class="Pp"><code class="Nm">gotd.conf</code> is the run-time configuration
38 file for <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>.</p>
39 <p class="Pp">The file format is line-based, with one configuration directive
40 per line. Any lines beginning with a &#x2018;#&#x2019; are treated as
41 comments and ignored.</p>
42 </section>
43 <section class="Sh">
44 <h2 class="Sh" id="GLOBAL_CONFIGURATION"><a class="permalink" href="#GLOBAL_CONFIGURATION">GLOBAL
45 CONFIGURATION</a></h2>
46 <p class="Pp">The available global configuration directives are as follows:</p>
47 <dl class="Bl-tag">
48 <dt id="connection"><a class="permalink" href="#connection"><code class="Ic">connection</code></a>
49 <var class="Ar">option</var></dt>
50 <dd>Set the specified options and limits for connections to the
51 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> unix socket.
52 <p class="Pp">The <code class="Ic">connection</code> directive may be
53 specified multiple times, and multiple <var class="Ar">option</var>
54 arguments may be specified within curly braces:</p>
55 <p class="Pp"><code class="Ic">connection</code>
56 {<var class="Ar">...</var>}</p>
57 <p class="Pp">Each option should only be specified once. If a given option
58 is listed multiple times, the last line which sets this option wins.</p>
59 <p class="Pp">Valid connection options are:</p>
60 <dl class="Bl-tag">
61 <dt id="request"><a class="permalink" href="#request"><code class="Ic">request
62 timeout</code></a> <var class="Ar">seconds</var></dt>
63 <dd>Specify the inactivity timeout for operations between client and
64 server. If this timeout is exceeded while a Git protocol request is
65 being processed, the request will be aborted and the connection will
66 be terminated.
67 <p class="Pp">The timeout value may also have a suffix indicating its
68 unit of measure. Supported suffixes are:</p>
69 <p class="Pp"></p>
70 <dl class="Bl-tag Bl-compact">
71 <dt><var class="Ar">s</var> <span class="No">or</span>
72 <var class="Ar">S</var></dt>
73 <dd>seconds</dd>
74 <dt><var class="Ar">m</var> <span class="No">or</span>
75 <var class="Ar">M</var></dt>
76 <dd>minutes</dd>
77 <dt><var class="Ar">h</var> <span class="No">or</span>
78 <var class="Ar">H</var></dt>
79 <dd>hours</dd>
80 </dl>
81 <p class="Pp">The default timeout is 1h (3600 seconds, one hour). This
82 should only be changed if legitimate requests are exceeding the
83 default timeout for some reason, such as the server spending an
84 extraordinary amount of time generating a pack file.</p>
85 </dd>
86 <dt id="limit"><a class="permalink" href="#limit"><code class="Ic">limit</code></a>
87 <code class="Ic">user</code> <var class="Ar">identity</var>
88 <var class="Ar">number</var></dt>
89 <dd>Limit the maximum amount of concurrent connections by the user with
90 the username <var class="Ar">identity</var> to
91 <var class="Ar">number</var>. Numeric user IDs are also accepted.
92 <p class="Pp">The default per-user limit is 4. This should only be
93 changed if concurrent connections from a given user are expected to
94 exceed the default limit, for example if an anonymous user is
95 granted read access and many concurrent connections will share this
96 anonymous user identity.</p>
97 </dd>
98 </dl>
99 </dd>
100 <dt id="listen"><a class="permalink" href="#listen"><code class="Ic">listen
101 on</code></a> <var class="Ar">path</var></dt>
102 <dd>Set the path to the unix socket which <a class="Xr" aria-label="gotd,
103 section 8">gotd(8)</a> should listen on. If not specified, the path
104 <span class="Pa">/var/run/gotd.sock</span> will be used.</dd>
105 <dt id="user"><a class="permalink" href="#user"><code class="Ic">user</code></a>
106 <var class="Ar">user</var></dt>
107 <dd>Set the <var class="Ar">user</var> which will run
108 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a>. Initially,
109 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> requires root
110 privileges in order to create its unix socket. Afterwards,
111 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> drops privileges to
112 the specified <var class="Ar">user</var>. If not specified, the user _gotd
113 will be used.</dd>
114 </dl>
115 </section>
116 <section class="Sh">
117 <h2 class="Sh" id="REPOSITORY_CONFIGURATION"><a class="permalink" href="#REPOSITORY_CONFIGURATION">REPOSITORY
118 CONFIGURATION</a></h2>
119 <p class="Pp">At least one repository context must exist for
120 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> to function. For each
121 repository, access rules must be configured using the
122 <code class="Ic">permit</code> and <code class="Ic">deny</code>
123 configuration directives. Multiple access rules can be specified, and the
124 last matching rule determines the action taken. If no rule matches, access
125 to the repository is denied.</p>
126 <p class="Pp">A repository context is declared with a unique
127 <var class="Ar">name</var>, followed by repository-specific configuration
128 directives inside curly braces:</p>
129 <p class="Pp"><code class="Ic">repository</code> <var class="Ar">name</var>
130 {...}</p>
131 <p class="Pp"><a class="Xr" aria-label="got, section 1">got(1)</a> and
132 <a class="Xr" aria-label="git, section 1">git(1)</a> clients can connect to
133 a repository by including the repository's unique <var class="Ar">name</var>
134 in the request URL. Clients appending the string &#x201C;.git&#x201D; to the
135 <var class="Ar">name</var> will also be accepted.</p>
136 <p class="Pp">If desired, the <var class="Ar">name</var> may contain
137 path-separators, &#x201C;/&#x201D;, to expose repositories as part of a
138 virtual client-visible directory hierarchy.</p>
139 <p class="Pp">The available repository configuration directives are as
140 follows:</p>
141 <dl class="Bl-tag">
142 <dt id="deny"><a class="permalink" href="#deny"><code class="Ic">deny</code></a>
143 <var class="Ar">identity</var></dt>
144 <dd>Deny repository access to users with the username
145 <var class="Ar">identity</var>. Group names may be matched by prepending a
146 colon (&#x2018;:&#x2019;) to <var class="Ar">identity</var>. Numeric IDs
147 are also accepted.</dd>
148 <dt id="path"><a class="permalink" href="#path"><code class="Ic">path</code></a>
149 <var class="Ar">path</var></dt>
150 <dd>Set the path to the Git repository. Must be specified.</dd>
151 <dt id="permit"><a class="permalink" href="#permit"><code class="Ic">permit</code></a>
152 <var class="Ar">mode</var> <var class="Ar">identity</var></dt>
153 <dd>Permit repository access to users with the username
154 <var class="Ar">identity</var>. The <var class="Ar">mode</var> argument
155 must be set to either <code class="Ic">ro</code> for read-only access, or
156 <code class="Ic">rw</code> for read-write access. Group names may be
157 matched by prepending a colon (&#x2018;:&#x2019;) to
158 <var class="Ar">identity</var>. Numeric IDs are also accepted.</dd>
159 <dt id="protect"><a class="permalink" href="#protect"><code class="Ic">protect</code></a>
160 {<var class="Ar">...</var>}</dt>
161 <dd>The <code class="Cm">protect</code> directive may be used to protect
162 branches and tags in a repository from being overwritten by potentially
163 destructive client-side commands, such as when <code class="Cm">got send
164 -f</code> and <code class="Cm">git push -f</code> are used to change the
165 history of a branch.
166 <p class="Pp">To build a set of protected branches and tags, multiple
167 <code class="Ic">protect</code> directives may be specified per
168 repository and multiple <code class="Ic">protect</code> directive
169 parameters may be specified within curly braces.</p>
170 <p class="Pp">The available <code class="Cm">protect</code> parameters are
171 as follows:</p>
172 <dl class="Bl-tag">
173 <dt id="branch"><a class="permalink" href="#branch"><code class="Ic">branch</code></a>
174 <var class="Ar">name</var></dt>
175 <dd>Protect the named branch. The branch may be created if it does not
176 exist yet. Attempts to delete the branch or change its history will be
177 denied.
178 <p class="Pp">If the <var class="Ar">name</var> does not already begin
179 with &#x201C;refs/heads/&#x201D; it will be looked up in the
180 &#x201C;refs/heads/&#x201D; reference namespace.</p>
181 </dd>
182 <dt id="branch~2"><a class="permalink" href="#branch~2"><code class="Ic">branch</code></a>
183 <code class="Ic">namespace</code> <var class="Ar">namespace</var></dt>
184 <dd>Protect the given reference namespace, assuming that references in
185 this namespace represent branches. New branches may be created in the
186 namespace. Attempts to change the history of branches or delete them
187 will be denied.
188 <p class="Pp">The <var class="Ar">namespace</var> argument must be
189 absolute, starting with &#x201C;refs/&#x201D;.</p>
190 </dd>
191 <dt id="tag"><a class="permalink" href="#tag"><code class="Ic">tag</code></a>
192 <code class="Ic">namespace</code> <var class="Ar">namespace</var></dt>
193 <dd>Protect the given reference namespace, assuming that references in
194 this namespace represent tags. New tags may be created in the
195 namespace. Attempts to change or delete existing tags will be denied.
196 <p class="Pp">The <var class="Ar">namespace</var> argument must be
197 absolute, starting with &#x201C;refs/&#x201D;.</p>
198 </dd>
199 </dl>
200 <p class="Pp">The special reference namespaces &#x201C;refs/got/&#x201D; and
201 &#x201C;refs/remotes/&#x201D; do not need to be listed in
202 <code class="Nm">gotd.conf</code>. These namespaces are always protected
203 and even attempts to create new references in these namespaces will
204 always be denied.</p>
205 </dd>
206 <dt id="notify"><a class="permalink" href="#notify"><code class="Ic">notify</code></a>
207 {<var class="Ar">...</var>}</dt>
208 <dd>The <code class="Ic">notify</code> directive enables notifications about
209 new commits or tags added to the repository.
210 <p class="Pp">Notifications via email require an SMTP daemon which accepts
211 mail for forwarding without requiring client authentication or
212 encryption. On <span class="Ux">OpenBSD</span> the
213 <a class="Xr" aria-label="smtpd, section 8">smtpd(8)</a> daemon can be
214 used for this purpose. The default content of email notifications looks
215 similar to the output of the <code class="Cm">got log -d</code>
216 command.</p>
217 <p class="Pp">Notifications via HTTP require a HTTP or HTTPS server which is
218 accepting POST requests with or without HTTP Basic authentication.
219 Depending on the use case a custom server-side CGI script may be
220 required for the processing of notifications. HTTP notifications can
221 achieve functionality similar to Git's server-side post-receive hook
222 script with <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> by
223 triggering arbitrary post-commit actions via the HTTP server.</p>
224 <p class="Pp">The <code class="Ic">notify</code> directive expects
225 parameters which must be enclosed in curly braces. The available
226 parameters are as follows:</p>
227 <dl class="Bl-tag">
228 <dt id="branch~3"><a class="permalink" href="#branch~3"><code class="Ic">branch</code></a>
229 <var class="Ar">name</var></dt>
230 <dd>Send notifications about commits to the named branch. The
231 <var class="Ar">name</var> will be looked up in the
232 &#x201C;refs/heads/&#x201D; reference namespace. This directive may be
233 specified multiple times to build a list of branches to send
234 notifications for. If neither a <code class="Ic">branch</code> nor a
235 <code class="Ic">reference namespace</code> are specified then changes
236 to any reference will trigger notifications.</dd>
237 <dt id="reference"><a class="permalink" href="#reference"><code class="Ic">reference</code></a>
238 <code class="Ic">namespace</code> <var class="Ar">namespace</var></dt>
239 <dd>Send notifications about commits or tags within a reference namespace.
240 This directive may be specified multiple times to build a list of
241 namespaces to send notifications for. If neither a
242 <code class="Ic">branch</code> nor a <code class="Ic">reference
243 namespace</code> are specified then changes to any reference will
244 trigger notifications.</dd>
245 <dt id="email"><a class="permalink" href="#email"><code class="Ic">email</code></a>
246 [<code class="Ic">from</code> <var class="Ar">sender</var>]
247 <code class="Ic">to</code> <var class="Ar">recipient</var>
248 [<code class="Ic">reply to</code> <var class="Ar">responder</var>]
249 [<code class="Ic">relay</code> <var class="Ar">hostname</var>
250 [<code class="Ic">port</code> <var class="Ar">port</var>]]</dt>
251 <dd>Send notifications via email to the specified
252 <var class="Ar">recipient</var>. This directive may be specified
253 multiple times to build a list of recipients to send notifications to.
254 <p class="Pp">The <var class="Ar">recipient</var> must be an email
255 addresses that accepts mail. The <var class="Ar">sender</var> will
256 be used as the From address. If not specified, the sender defaults
257 to an email address composed of the user account running
258 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> and the local
259 hostname.</p>
260 <p class="Pp">If a <var class="Ar">responder</var> is specified via the
261 <code class="Ic">reply to</code> directive, the
262 <var class="Ar">responder</var> will be used as the Reply-to
263 address. Setting the Reply-to header can be useful if replies should
264 go to a mailing list instead of the <var class="Ar">sender</var>,
265 for example.</p>
266 <p class="Pp">By default, mail will be sent to the SMTP server listening
267 on the loopback address 127.0.0.1 on port 25. The
268 <code class="Ic">relay</code> and <code class="Ic">port</code>
269 directives can be used to specify a different SMTP server address
270 and port.</p>
271 </dd>
272 <dt id="url"><a class="permalink" href="#url"><code class="Ic">url</code></a>
273 <var class="Ar">URL</var> [<code class="Ic">user</code>
274 <var class="Ar">user</var> <code class="Ic">password</code>
275 <var class="Ar">password</var> [<code class="Ic">insecure</code>]]</dt>
276 <dd>Send notifications via HTTP. This directive may be specified multiple
277 times to build a list of HTTP servers to send notifications to.
278 <p class="Pp">The notification will be sent as a POST request to the
279 given <var class="Ar">URL</var>, which must be a valid HTTP URL and
280 begin with either &#x201C;http://&#x201D; or
281 &#x201C;https://&#x201D;. If HTTPS is used, sending of notifications
282 will only succeed if no TLS errors occur.</p>
283 <p class="Pp">The optional <code class="Ic">user</code> and
284 <code class="Ic">password</code> directives enable HTTP Basic
285 authentication. If used, both a <var class="Ar">user</var> and a
286 <var class="Ar">password</var> must be specified. The
287 <var class="Ar">password</var> must not be an empty string. Unless
288 the <code class="Ic">insecure</code> option is specified the
289 notification target <var class="Ar">URL</var> must be a
290 &#x201C;https://&#x201D; URL to avoid leaking of authentication
291 credentials.</p>
292 <p class="Pp">The request body contains a JSON object with a
293 &#x201C;notifications&#x201D; property containing an array of
294 notification objects. The following notification object properties
295 are always present:</p>
296 <dl class="Bl-tag">
297 <dt id="repo"><a class="permalink" href="#repo"><code class="Dv">repo</code></a></dt>
298 <dd>The repository name as a string.</dd>
299 <dt id="authenticated_user"><a class="permalink" href="#authenticated_user"><code class="Dv">authenticated_user</code></a></dt>
300 <dd>The committer's user account as authenticated by
301 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a> as a
302 string.</dd>
303 <dt id="type"><a class="permalink" href="#type"><code class="Dv">type</code></a></dt>
304 <dd>The notification object type as a string.</dd>
305 </dl>
306 <p class="Pp">Each notification object carries additional type-specific
307 properties. The types and their type-specific properties are:</p>
308 <dl class="Bl-tag">
309 <dt id="commit"><a class="permalink" href="#commit"><code class="Dv">commit</code></a></dt>
310 <dd>The commit notification object has the following fields. Except
311 where noted, all are optional.
312 <dl class="Bl-tag">
313 <dt id="short"><a class="permalink" href="#short"><code class="Dv">short</code></a></dt>
314 <dd>Boolean, indicates whether the object has all the fields set.
315 When several commits are batched in a single send operation,
316 not all of the fields are available for each commit
317 object.</dd>
318 <dt id="id"><a class="permalink" href="#id"><code class="Dv">id</code></a></dt>
319 <dd>The commit ID as string, may be abbreviated.</dd>
320 <dt id="committer"><a class="permalink" href="#committer"><code class="Dv">committer</code></a></dt>
321 <dd>An object with the committer information with the following
322 fields:
323 <p class="Pp"></p>
324 <dl class="Bl-tag Bl-compact">
325 <dt id="full"><a class="permalink" href="#full"><code class="Dv">full</code></a></dt>
326 <dd>Committer's full name.</dd>
327 <dt id="name"><a class="permalink" href="#name"><code class="Dv">name</code></a></dt>
328 <dd>Committer's name.</dd>
329 <dt id="mail"><a class="permalink" href="#mail"><code class="Dv">mail</code></a></dt>
330 <dd>Committer's mail address.</dd>
331 <dt id="user~2"><a class="permalink" href="#user~2"><code class="Dv">user</code></a></dt>
332 <dd>Committer's username. This is the only field guaranteed to
333 be set.</dd>
334 </dl>
335 </dd>
336 <dt id="author"><a class="permalink" href="#author"><code class="Dv">author</code></a></dt>
337 <dd>An object with the author information. Has the same fields as
338 the &#x2018;committer&#x2019; but may be unset.</dd>
339 <dt id="date"><a class="permalink" href="#date"><code class="Dv">date</code></a></dt>
340 <dd>Number, representing the number of seconds since the Epoch in
341 UTC.</dd>
342 <dt id="short_message"><a class="permalink" href="#short_message"><code class="Dv">short_message</code></a></dt>
343 <dd>The first line of the commit message. This field is always
344 set.</dd>
345 <dt id="message"><a class="permalink" href="#message"><code class="Dv">message</code></a></dt>
346 <dd>The complete commit message, may be unset.</dd>
347 <dt id="diffstat"><a class="permalink" href="#diffstat"><code class="Dv">diffstat</code></a></dt>
348 <dd>An object with the summarized changes, may be unset. Contains
349 a &#x2018;files&#x2019; field with an array of objects
350 describing the changes per-file and a &#x2018;total&#x2019;
351 field with the cumulative changes. The changes per-file
352 contains the following fields:
353 <p class="Pp"></p>
354 <dl class="Bl-tag Bl-compact">
355 <dt id="action"><a class="permalink" href="#action"><code class="Dv">action</code></a></dt>
356 <dd>A string describing the action, can be
357 &#x201C;added&#x201D;, &#x201C;deleted&#x201D;,
358 &#x201C;modified&#x201D;, &#x201C;mode changed&#x201D;, or
359 &#x201C;unknown&#x201D;.</dd>
360 <dt id="file"><a class="permalink" href="#file"><code class="Dv">file</code></a></dt>
361 <dd>The file path.</dd>
362 <dt id="added"><a class="permalink" href="#added"><code class="Dv">added</code></a></dt>
363 <dd>The number of lines added.</dd>
364 <dt id="removed"><a class="permalink" href="#removed"><code class="Dv">removed</code></a></dt>
365 <dd>The number of lines removed.</dd>
366 </dl>
367 <p class="Pp">The &#x2018;total&#x2019; object contains two
368 fields: &#x2018;added&#x2019; and &#x2018;removed&#x2019;
369 which are the number of added and removed lines
370 respectively.</p>
371 </dd>
372 </dl>
373 </dd>
374 <dt id="branch-deleted"><a class="permalink" href="#branch-deleted"><code class="Dv">branch-deleted</code></a></dt>
375 <dd>The branch deleted notifications has the following fields, all
376 guaranteed to be set:
377 <dl class="Bl-tag">
378 <dt id="ref"><a class="permalink" href="#ref"><code class="Dv">ref</code></a></dt>
379 <dd>The removed branch reference.</dd>
380 <dt id="id~2"><a class="permalink" href="#id~2"><code class="Dv">id</code></a></dt>
381 <dd>The hash of the commit pointed by the deleted branch.</dd>
382 </dl>
383 </dd>
384 <dt id="tag~2"><a class="permalink" href="#tag~2"><code class="Dv">tag</code></a></dt>
385 <dd>The tag notification has the following fields, all guaranteed to
386 be set:
387 <dl class="Bl-tag">
388 <dt>tag</dt>
389 <dd>The tag reference.</dd>
390 <dt>tagger</dt>
391 <dd>The user information, with the same format of the
392 &#x2018;committer&#x2019; field for the &#x2018;commit&#x2019;
393 notification but with all the field guaranteed to be set.</dd>
394 <dt id="date~2"><a class="permalink" href="#date~2"><code class="Dv">date</code></a></dt>
395 <dd>Number, representing the number of seconds since the Epoch in
396 UTC.</dd>
397 <dt id="object"><a class="permalink" href="#object"><code class="Dv">object</code></a></dt>
398 <dd>The object being tagged. It contains the fields
399 &#x2018;type&#x2019; with the object type and
400 &#x2018;id&#x2019; with the object id being tagged.</dd>
401 <dt id="message~2"><a class="permalink" href="#message~2"><code class="Dv">message</code></a></dt>
402 <dd>The tag message.</dd>
403 </dl>
404 </dd>
405 </dl>
406 </dd>
407 </dl>
408 </dd>
409 </dl>
410 </section>
411 <section class="Sh">
412 <h2 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h2>
413 <dl class="Bl-tag Bl-compact">
414 <dt><span class="Pa">/etc/gotd.conf</span></dt>
415 <dd>Location of the <code class="Nm">gotd.conf</code> configuration file.</dd>
416 </dl>
417 </section>
418 <section class="Sh">
419 <h2 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h2>
420 <div class="Bd Bd-indent Li">
421 <pre># Run as the default user:
422 user _gotd
424 # Listen on the default socket:
425 listen on &quot;/var/run/gotd.sock&quot;
427 # This repository can be accessed via ssh://user@example.com/src
428 repository &quot;src&quot; {
429 path &quot;/var/git/src.git&quot;
430 permit rw flan_hacker
431 permit rw :developers
432 permit ro anonymous
434 protect branch &quot;main&quot;
435 protect tag namespace &quot;refs/tags/&quot;
438 # This repository can be accessed via
439 # ssh://user@example.com/openbsd/ports
440 repository &quot;openbsd/ports&quot; {
441 path &quot;/var/git/ports.git&quot;
442 permit rw :porters
443 permit ro anonymous
444 deny flan_hacker
446 protect {
447 branch &quot;main&quot;
448 tag namespace &quot;refs/tags/&quot;
451 notify {
452 branch &quot;main&quot;
453 reference namespace &quot;refs/tags/&quot;
454 email to openbsd-ports-changes@example.com
458 # Use a larger request timeout value:
459 connection request timeout 2h
461 # Some users are granted a higher concurrent connection limit:
462 connection {
463 limit user flan_hacker 16
464 limit user anonymous 32
465 }</pre>
466 </div>
467 </section>
468 <section class="Sh">
469 <h2 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
470 ALSO</a></h2>
471 <p class="Pp"><a class="Xr" aria-label="got, section 1">got(1)</a>,
472 <a class="Xr" aria-label="gotsh, section 1">gotsh(1)</a>,
473 <a class="Xr" aria-label="gotd, section 8">gotd(8)</a></p>
474 </section>
475 </main>
476 <div class="foot" role="doc-pagefooter" aria-label="Manual footer
477 line"><span class="foot-left"></span><span class="foot-date">June 3,
478 2024</span> <span class="foot-os">OpenBSD 7.5</span></div>
479 </body>
480 </html>