Skip to content

Commit 992c9f2

Browse files
committed
Adding some more documentation, making pledge() take varargs rather than an openarray
Signed-off-by: Euan Torano <[email protected]>
1 parent 0e56f03 commit 992c9f2

File tree

7 files changed

+70
-41
lines changed

7 files changed

+70
-41
lines changed

.editorconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# EditorConfig is awesome: http://EditorConfig.org
2+
3+
# top-most EditorConfig file
4+
root = true
5+
6+
# Unix-style newlines with a newline ending every file
7+
[*]
8+
end_of_line = lf
9+
insert_final_newline = true
10+
11+
[*.{nim,nimble}]
12+
indent_style = space
13+
indent_size = 2

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ before_script:
4141
script:
4242
- nim c --cc:$CC --verbosity:0 -r pledge.nim
4343
# Optional: build docs.
44-
- nim doc --docSeeSrcUrl:https://github.com/euantorano/pledge.nim/blob/master --project pledge.nim
44+
- nim doc2 --docSeeSrcUrl:https://github.com/euantorano/pledge.nim/blob/master --project pledge.nim
4545
cache:
4646
directories:
4747
- nim-master

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# pledge.nim
22

3-
OpenBSD's pledge(2) for Nim.
3+
A wrapper around OpenBSD's pledge(2) systemcall for Nim.
44

55
## Installation
66

@@ -15,7 +15,7 @@ nimble install pledge
1515
```nim
1616
import pledge
1717
18-
if not pledge([Promises.Stdio]):
18+
if not pledge(Promises.Stdio):
1919
# Pledge failed, cannot use stdio
2020
quit(QuitFailure)
2121

pledge.nim

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,26 @@
1-
# pledge(2) for Nim
1+
## A wrapper for the `pledge(2) <http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/pledge.2?query=pledge>`_ systemcall, used to restrict system operations.
2+
##
3+
## On systems other than OpenBSD where `pledge` is not yet implemented, the wrapper has no effect.
4+
##
5+
## Example of making a single promise
6+
## ----------------------------------
7+
##
8+
## In order to pledge to only use the `stdio` promise as described in the `pledge(2) man page <http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/pledge.2?query=pledge>`_, you simply pass the `Promise.Stdio` to `pledge()`:
9+
##
10+
## .. code-block::nim
11+
## import pledge
12+
##
13+
## let pledged = pledge(Promises.Stdio)
14+
##
15+
## Example of making several promises
16+
## ----------------------------------
17+
##
18+
## In order to pledge to use the `stdio` and `rpath` promises as described in the `pledge(2) man page <http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/pledge.2?query=pledge>`_, you simply pass the required promises to `pledge()`:
19+
##
20+
## .. code-block::nim
21+
## import pledge
22+
##
23+
## let pledged = pledge(Promises.Stdio, Promises.Rpath)
224

325
from os import osLastError, raiseOSError
426
from sequtils import map, deduplicate
@@ -32,25 +54,30 @@ type Promise* {.pure.} = enum
3254
Pf = "pf",
3355
Audio = "audio"
3456

35-
when defined(openbsd):
57+
when defined(nimdoc):
58+
proc pledge*(promises: varargs[Promise]): bool {.raises: [OSError].} = discard
59+
## Pledge to use only the defined functions. Always returns true on non-OpenBSD systems.
60+
##
61+
## If the pledge call was successful, this will return true.
62+
##
63+
## If the pledge call is not successful, an `OSError` will be thrown.
64+
elif defined(openbsd):
3665
proc pledge_c(promises: cstring, paths: cstringArray): cint {.importc: "pledge".}
3766

3867
proc promisesToString(promises: openArray[Promise]): string =
3968
## Convert a list of promises to a string for use with the `pledge(2)` function.
4069
let stringPromises = map(promises, proc(p: Promise): string = $p)
4170
return join(deduplicate(stringPromises), " ")
4271

43-
proc pledge*(promises: openArray[Promise]): bool {.raises: [OSError].} =
44-
## Pledge to use only the defined functions, separated by a space. Always returns true on non-OpenBSD systems.
72+
proc pledge*(promises: varargs[Promise]): bool {.raises: [OSError].} =
4573
let promisesString = promisesToString(promises)
4674
let pledged = pledge_c(promisesString, nil)
4775

4876
if pledged != 0:
4977
let errorCode = osLastError()
5078
raiseOSError(errorCode)
5179

52-
return pledged == 0
80+
result = true
81+
5382
else:
54-
proc pledge*(promises: openArray[Promise]): bool =
55-
## Pledge to use only the defined functions, separated by a space. Always returns true on non-OpenBSD systems.
56-
return true
83+
proc pledge*(promises: varargs[Promise]): bool = true

pledge.nimble

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
1-
[Package]
2-
name = "pledge"
3-
version = "1.0.0"
1+
# Package
2+
3+
version = "1.0.1"
44
author = "Euan T"
5-
description = "OpenBSDs pledge(2) for Nim."
5+
description = "A wrapper around OpenBSD's pledge(2) systemcall for Nim."
66
license = "BSD"
7+
8+
# Dependencies
9+
10+
requires "nim >= 0.13.0"
11+
12+
task tests, "Run unit tests":
13+
exec "nim c -r tests/main"
14+
15+
task docs, "Build package documentation":
16+
exec "nim doc2 pledge.nim"

tests/README.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

tests/main.nim

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,12 @@
1-
import pledge, unittest, os
1+
import ../pledge, unittest, os
22

33
suite "pledge tests":
44
test "can pledge":
5-
check pledge([Promise.Stdio])
5+
check pledge(Promise.Stdio, Promise.Rpath)
66

77
when defined(openbsd):
88
test "can not elevate":
9-
check pledge([Promise.Stdio])
9+
check pledge(Promise.Stdio)
1010

11-
try:
12-
check pledge([Promise.Stdio, Promise.Rpath]) == false
13-
# Should never reach here
14-
check false
15-
except OSError:
16-
let msg = getCurrentExceptionMsg()
17-
check msg == "Operation not permitted"
18-
else:
19-
test "can not elevate":
20-
check pledge([Promise.Stdio])
21-
22-
try:
23-
check pledge([Promise.Stdio, Promise.Rpath])
24-
except OSError:
25-
let msg = getCurrentExceptionMsg()
26-
check msg == "Operation not permitted"
11+
expect OSError:
12+
check pledge(Promise.Stdio, Promise.Rpath) == false

0 commit comments

Comments
 (0)