Skip to content

Commit 81aff9a

Browse files
authored
Merge pull request #744 from memorysafety/release-pre
Add su doc, add machinery for releasing
2 parents db1930c + c4b1f51 commit 81aff9a

File tree

8 files changed

+223
-10
lines changed

8 files changed

+223
-10
lines changed

docs/man/su.1.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<!-- ---
2+
title: SU(1) sudo-rs 0.2.0-dev.20230711 | sudo-rs
3+
--- -->
4+
5+
# NAME
6+
7+
`su` - run a shell or command as another user
8+
9+
# SYNOPSIS
10+
11+
`su` [options] [-] [<*user*> [<*argument*>...]]
12+
13+
# OPTIONS
14+
15+
`-c` *command*, `--command`=*command*
16+
: Pass a single command to the shell with `-c`.
17+
18+
`-g` *group*, `--group`=*group*
19+
: Specify the primary group
20+
21+
`-G` *group*, `--supp-group`=*group*
22+
: Specify a supplemental group
23+
24+
`-h`, `--help`
25+
: Show a help message.
26+
27+
`-`, `-l`, `--login`
28+
: Make the shell a login shell
29+
30+
`-m`, `-p`, `--preserve-environment`
31+
: Do not reset environment variables
32+
33+
`-P`, `--pty`
34+
: Create a new pseudo-terminal when running the shell.
35+
36+
`-w` *list*, `--whitelist-environment`=*list*
37+
: Do not reset the environment variables specified by the *list*. Multiple
38+
variables can be separated by commas.
39+
40+
`-s` *shell*, `--shell`=*shell*
41+
: Run *shell* if `/etc/shells` allows running as that shell instead of the
42+
default shell for the user.
43+
44+
`-V`, `--version`
45+
: Show the program version.
46+
47+
# SEE ALSO
48+
49+
[sudo(8)](sudo.8.md)

docs/man/sudo.8.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
% SUDO(8) sudo-rs 0.2.0-dev.20230711
2-
%
3-
% July 10, 2023
1+
<!-- ---
2+
title: SUDO(8) sudo-rs 0.2.0-dev.20230711 | sudo-rs
3+
--- -->
44

55
# NAME
66

77
`sudo` - execute a command as another user
88

99
# SYNOPSIS
1010

11-
`sudo` [`-u` *user*] [`-g` *group*] [`-D` *directory*] [`-knS`] [`-i` | `-s`] [*command*] \
11+
`sudo` [`-u` *user*] [`-g` *group*] [`-D` *directory*] [`-knS`] [`-i` | `-s`] [<*command*>] \
1212
`sudo` `-h` | `-K` | `-k` | `-V`
1313

1414
# DESCRIPTION
@@ -39,7 +39,7 @@ even if that process runs in its own pseudo terminal.
3939
specified in the password database for the target user.
4040

4141
`-h`, `--help`
42-
: Show this help message.
42+
: Show a help message.
4343

4444
`-i`, `--login`
4545
: Run the shell specified by the target user's password database entry as a
@@ -91,4 +91,5 @@ even if that process runs in its own pseudo terminal.
9191
: Indicates the end of the sudo-rs options and start of the *command*.
9292

9393
# SEE ALSO
94-
su(1), sudoers(5), visudo(8)
94+
95+
[su(1)](su.1.md), sudoers(5), [visudo(8)](visudo.8.md)

docs/man/visudo.8.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<!-- ---
2+
title: VISUDO(8) sudo-rs 0.2.0-dev.20230711 | sudo-rs
3+
--- -->
4+
5+
# NAME
6+
7+
`visudo` - safely edit the sudoers file
8+
9+
# SYNOPSIS
10+
11+
`visudo` [`-chqsV`] [[`-f`] *sudoers*]
12+
13+
# DESCRIPTION
14+
15+
`visudo` edits the *sudoers* file in a safe manner, similar to vipw(8).
16+
17+
# OPTIONS
18+
19+
`-c`, `--check`
20+
: Only check if there are errors in the existing sudoers file.
21+
22+
`-f` *sudoers*, `--file`=*sudoers*
23+
: Instead of editing the default `/etc/sudoers`, edit the file specified as
24+
*sudoers* instead.
25+
26+
`-h`, `--help`
27+
: Show a help message.
28+
29+
`-I`, `--no-includes`
30+
: Do not edit included files.
31+
32+
`-q`, `--quiet`
33+
: Less verbose syntax error messages.
34+
35+
`-s`, `--strict`
36+
: Strict syntax checking.
37+
38+
`-V`, `--version`
39+
: Display version information and exit.
40+
41+
# SEE ALSO
42+
43+
[sudo(8)](sudo.8.md), sudoers(5)

util/Dockerfile-release

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FROM rust:1-slim-bullseye
2+
RUN apt-get update -y && apt-get install -y clang libclang-dev libpam0g-dev

util/build-release.sh

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#!/usr/bin/env bash
2+
3+
DATE="2023-08-29"
4+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)
5+
PROJECT_DIR=$(dirname "$SCRIPT_DIR")
6+
SUDO_RS_VERSION="$(cargo metadata --format-version 1 --manifest-path "$PROJECT_DIR/Cargo.toml" | jq '.packages[] | select(.name=="sudo-rs") | .version' -r)"
7+
BUILDER_IMAGE_TAG="sudo-rs-release-builder:latest"
8+
TARGET_DIR_BASE="$PROJECT_DIR/target/pkg"
9+
10+
set -eo pipefail
11+
12+
# Build binaries
13+
docker build --pull --tag "$BUILDER_IMAGE_TAG" --file "$SCRIPT_DIR/Dockerfile-release" "$SCRIPT_DIR"
14+
docker run --rm --user "$(id -u):$(id -g)" -v "$PROJECT_DIR:/build" -w "/build" "$BUILDER_IMAGE_TAG" cargo clean
15+
docker run --rm --user "$(id -u):$(id -g)" -v "$PROJECT_DIR:/build" -w "/build" "$BUILDER_IMAGE_TAG" cargo build --release
16+
17+
# Generate man pages
18+
"$PROJECT_DIR/util/generate-docs.sh"
19+
20+
# Set target directories and clear any previous builds
21+
target_dir_sudo="$TARGET_DIR_BASE/sudo"
22+
target_dir_su="$TARGET_DIR_BASE/su"
23+
target_sudo="$TARGET_DIR_BASE/sudo-$SUDO_RS_VERSION.tar.gz"
24+
target_su="$TARGET_DIR_BASE/su-$SUDO_RS_VERSION.tar.gz"
25+
26+
rm -rf "$target_dir_sudo"
27+
rm -rf "$target_dir_su"
28+
rm -rf "$target_su"
29+
rm -rf "$target_sudo"
30+
31+
# Show what is happening
32+
set -x
33+
34+
# Build sudo
35+
mkdir -p "$target_dir_sudo/bin"
36+
mkdir -p "$target_dir_sudo/share/man/man8"
37+
cp "$PROJECT_DIR/target/release/sudo" "$target_dir_sudo/bin/sudo"
38+
cp "$PROJECT_DIR/target/release/visudo" "$target_dir_sudo/bin/visudo"
39+
cp "$PROJECT_DIR/target/docs/man/sudo.8" "$target_dir_sudo/share/man/man8/sudo.8"
40+
cp "$PROJECT_DIR/target/docs/man/visudo.8" "$target_dir_sudo/share/man/man8/visudo.8"
41+
mkdir -p "$target_dir_sudo/share/doc/sudo-rs/sudo"
42+
cp "$PROJECT_DIR/README.md" "$target_dir_sudo/share/doc/sudo-rs/sudo/README.md"
43+
cp "$PROJECT_DIR/CHANGELOG.md" "$target_dir_sudo/share/doc/sudo-rs/sudo/CHANGELOG.md"
44+
cp "$PROJECT_DIR/SECURITY.md" "$target_dir_sudo/share/doc/sudo-rs/sudo/SECURITY.md"
45+
cp "$PROJECT_DIR/COPYRIGHT" "$target_dir_sudo/share/doc/sudo-rs/sudo/COPYRIGHT"
46+
cp "$PROJECT_DIR/LICENSE-APACHE" "$target_dir_sudo/share/doc/sudo-rs/sudo/LICENSE-APACHE"
47+
cp "$PROJECT_DIR/LICENSE-MIT" "$target_dir_sudo/share/doc/sudo-rs/sudo/LICENSE-MIT"
48+
49+
fakeroot -- <<EOF
50+
set -eo pipefail
51+
set -x
52+
chown -R root:root "$target_dir_sudo"
53+
chmod +xs "$target_dir_sudo/bin/sudo"
54+
chmod +x "$target_dir_sudo/bin/visudo"
55+
(cd $target_dir_sudo && tar --mtime="UTC $DATE 00:00:00" --use-compress-program='gzip -9n' -cpvf "$target_sudo" *)
56+
EOF
57+
58+
# Build su
59+
mkdir -p "$target_dir_su/bin"
60+
mkdir -p "$target_dir_su/share/man/man1"
61+
cp "$PROJECT_DIR/target/release/su" "$target_dir_su/bin/su"
62+
cp "$PROJECT_DIR/target/docs/man/su.1" "$target_dir_su/share/man/man1/su.1"
63+
mkdir -p "$target_dir_su/share/doc/sudo-rs/su"
64+
cp "$PROJECT_DIR/README.md" "$target_dir_su/share/doc/sudo-rs/su/README.md"
65+
cp "$PROJECT_DIR/CHANGELOG.md" "$target_dir_su/share/doc/sudo-rs/su/CHANGELOG.md"
66+
cp "$PROJECT_DIR/SECURITY.md" "$target_dir_su/share/doc/sudo-rs/su/SECURITY.md"
67+
cp "$PROJECT_DIR/COPYRIGHT" "$target_dir_su/share/doc/sudo-rs/su/COPYRIGHT"
68+
cp "$PROJECT_DIR/LICENSE-APACHE" "$target_dir_su/share/doc/sudo-rs/su/LICENSE-APACHE"
69+
cp "$PROJECT_DIR/LICENSE-MIT" "$target_dir_su/share/doc/sudo-rs/su/LICENSE-MIT"
70+
71+
fakeroot -- <<EOF
72+
set -eo pipefail
73+
set -x
74+
chown -R root:root "$target_dir_su"
75+
chmod +xs "$target_dir_su/bin/su"
76+
(cd $target_dir_su && tar --mtime="UTC $DATE 00:00:00" --use-compress-program='gzip -9n' -cpvf "$target_su" *)
77+
EOF
78+
79+
(cd $TARGET_DIR_BASE && sha256sum -b *-$SUDO_RS_VERSION.tar.gz > "$TARGET_DIR_BASE/SHA256SUMS")

util/generate-docs.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/usr/bin/env bash
2+
3+
docs_dir="docs/man"
4+
output_dir="target/docs/man"
5+
files=("sudo.8" "visudo.8" "su.1")
6+
7+
mkdir -p "$output_dir"
8+
9+
for f in "${files[@]}"; do
10+
origin_file="$docs_dir/$f.md"
11+
tmp_file="$output_dir/$f.md"
12+
target_file="$output_dir/$f"
13+
14+
echo "Generating man page for $f from '$origin_file' to '$target_file'"
15+
sed '/<!-- ---/s/<!-- ---/---/' "$origin_file" | sed '/--- -->/s/--- -->/---/' > "$tmp_file"
16+
util/pandoc.sh -s -t man "$tmp_file" -o "$target_file"
17+
rm "$tmp_file"
18+
done

util/pandoc.sh

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
22

3-
docspath=docs/man
4-
5-
exec docker run --rm --volume "`pwd`:/data" --user `id -u`:`id -g` pandoc/core -s -t man "$docspath/sudo.8.md" -o "$docspath/sudo.8"
3+
exec docker run --rm -it -v "$(pwd):/data" -u "$(id -u):$(id -g)" pandoc/core "$@"

util/update-version.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
3+
if [ "$#" -lt 1 ]; then
4+
echo "Missing new version"
5+
exit 1
6+
fi
7+
8+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd)
9+
PROJECT_DIR=$(dirname "$SCRIPT_DIR")
10+
NEW_VERSION="$1"
11+
12+
echo "Updating version in Cargo.toml"
13+
sed -i 's/^version\s*=\s*".*"/version = "'"$NEW_VERSION"'"/' "$PROJECT_DIR/Cargo.toml"
14+
15+
echo "Updating version in man pages"
16+
sed -i 's/^title: SU(1) sudo-rs .*/title: SU(1) sudo-rs '"$NEW_VERSION"' | sudo-rs/' "$PROJECT_DIR"/docs/man/su.1.md
17+
sed -i 's/^title: SUDO(8) sudo-rs .*/title: SUDO(8) sudo-rs '"$NEW_VERSION"' | sudo-rs/' "$PROJECT_DIR"/docs/man/sudo.8.md
18+
sed -i 's/^title: VISUDO(8) sudo-rs .*/title: VISUDO(8) sudo-rs '"$NEW_VERSION"' | sudo-rs/' "$PROJECT_DIR"/docs/man/visudo.8.md
19+
20+
echo "Rebuilding project"
21+
(cd $PROJECT_DIR && cargo build --release)
22+
23+
echo "Version changes complete, you must still fill in the changelog entries"

0 commit comments

Comments
 (0)