diff options
Diffstat (limited to 'gnu/services.scm')
| -rw-r--r-- | gnu/services.scm | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/gnu/services.scm b/gnu/services.scm index 8d413e198e6..2a8114a2196 100644 --- a/gnu/services.scm +++ b/gnu/services.scm | |||
| @@ -4,6 +4,8 @@ | |||
| 4 | ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> | 4 | ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> |
| 5 | ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net> | 5 | ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net> |
| 6 | ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com> | 6 | ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com> |
| 7 | ;;; Copyright © 2020 Christine Lemmer-Webber <cwebber@dustycloud.org> | ||
| 8 | ;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re> | ||
| 7 | ;;; | 9 | ;;; |
| 8 | ;;; This file is part of GNU Guix. | 10 | ;;; This file is part of GNU Guix. |
| 9 | ;;; | 11 | ;;; |
| @@ -40,6 +42,7 @@ | |||
| 40 | #:use-module (gnu packages base) | 42 | #:use-module (gnu packages base) |
| 41 | #:use-module (gnu packages bash) | 43 | #:use-module (gnu packages bash) |
| 42 | #:use-module (gnu packages hurd) | 44 | #:use-module (gnu packages hurd) |
| 45 | #:use-module (gnu system setuid) | ||
| 43 | #:use-module (srfi srfi-1) | 46 | #:use-module (srfi srfi-1) |
| 44 | #:use-module (srfi srfi-9) | 47 | #:use-module (srfi srfi-9) |
| 45 | #:use-module (srfi srfi-9 gnu) | 48 | #:use-module (srfi srfi-9 gnu) |
| @@ -801,15 +804,49 @@ directory." | |||
| 801 | FILES must be a list of name/file-like object pairs." | 804 | FILES must be a list of name/file-like object pairs." |
| 802 | (service etc-service-type files)) | 805 | (service etc-service-type files)) |
| 803 | 806 | ||
| 807 | (define (setuid-program->activation-gexp programs) | ||
| 808 | "Return an activation gexp for setuid-program from PROGRAMS." | ||
| 809 | (let ((programs (map (lambda (program) | ||
| 810 | ;; FIXME This is really ugly, I didn't managed to use | ||
| 811 | ;; "inherit" | ||
| 812 | (let ((program-name (setuid-program-program program)) | ||
| 813 | (setuid? (setuid-program-setuid? program)) | ||
| 814 | (setgid? (setuid-program-setgid? program)) | ||
| 815 | (user (setuid-program-user program)) | ||
| 816 | (group (setuid-program-group program)) ) | ||
| 817 | #~(setuid-program | ||
| 818 | (setuid? #$setuid?) | ||
| 819 | (setgid? #$setgid?) | ||
| 820 | (user #$user) | ||
| 821 | (group #$group) | ||
| 822 | (program #$program-name)))) | ||
| 823 | programs))) | ||
| 824 | (with-imported-modules (source-module-closure | ||
| 825 | '((gnu system setuid))) | ||
| 826 | #~(begin | ||
| 827 | (use-modules (gnu system setuid)) | ||
| 828 | |||
| 829 | (activate-setuid-programs (list #$@programs)))))) | ||
| 830 | |||
| 831 | (define (setuid-program-file-like-deprecated file-like) | ||
| 832 | (match file-like | ||
| 833 | ((? file-like? program) | ||
| 834 | (warning | ||
| 835 | (G_ "representing setuid programs with '~a' is \ | ||
| 836 | deprecated; use 'setuid-program' instead~%") program) | ||
| 837 | (setuid-program (program program))) | ||
| 838 | ((? setuid-program? program) | ||
| 839 | program))) | ||
| 840 | |||
| 804 | (define setuid-program-service-type | 841 | (define setuid-program-service-type |
| 805 | (service-type (name 'setuid-program) | 842 | (service-type (name 'setuid-program) |
| 806 | (extensions | 843 | (extensions |
| 807 | (list (service-extension activation-service-type | 844 | (list (service-extension activation-service-type |
| 808 | (lambda (programs) | 845 | setuid-program->activation-gexp))) |
| 809 | #~(activate-setuid-programs | ||
| 810 | (list #$@programs)))))) | ||
| 811 | (compose concatenate) | 846 | (compose concatenate) |
| 812 | (extend append) | 847 | (extend (lambda (config extensions) |
| 848 | (map setuid-program-file-like-deprecated | ||
| 849 | (append config extensions)))) | ||
| 813 | (description | 850 | (description |
| 814 | "Populate @file{/run/setuid-programs} with the specified | 851 | "Populate @file{/run/setuid-programs} with the specified |
| 815 | executables, making them setuid-root."))) | 852 | executables, making them setuid-root."))) |
