summaryrefslogtreecommitdiff
path: root/gnu/system
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-09-21 23:52:45 +0200
committerLudovic Courtès <ludo@gnu.org>2017-09-22 00:05:08 +0200
commitfbc31dc1247d3a494246e69f3cf28476af9eb9d6 (patch)
tree6d84652594ea43264c798e35dd6045894f7417f9 /gnu/system
parentdb4e8fd5d4a07d3be8ce68fb96722ef7077c0eee (diff)
services: Move 'session-environment-service-type' to pam.scm.
* gnu/services/base.scm (environment-variables->environment-file) (session-environment-service-type) (session-environment-service): Move to... * gnu/system/pam.scm: ... here.
Diffstat (limited to 'gnu/system')
-rw-r--r--gnu/system/pam.scm47
1 files changed, 46 insertions, 1 deletions
diff --git a/gnu/system/pam.scm b/gnu/system/pam.scm
index eedf933946..13f76a50ed 100644
--- a/gnu/system/pam.scm
+++ b/gnu/system/pam.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -50,6 +50,9 @@
unix-pam-service
base-pam-services
+ session-environment-service
+ session-environment-service-type
+
pam-root-service-type
pam-root-service))
@@ -278,6 +281,48 @@ authenticate to run COMMAND."
;;;
+;;; System-wide environment variables.
+;;;
+
+(define (environment-variables->environment-file vars)
+ "Return a file for pam_env(8) that contains environment variables VARS."
+ (apply mixed-text-file "environment"
+ (append-map (match-lambda
+ ((key . value)
+ (list key "=" value "\n")))
+ vars)))
+
+(define session-environment-service-type
+ (service-type
+ (name 'session-environment)
+ (extensions
+ (list (service-extension
+ etc-service-type
+ (lambda (vars)
+ (list `("environment"
+ ,(environment-variables->environment-file vars)))))))
+ (compose concatenate)
+ (extend append)
+ (description
+ "Populate @file{/etc/environment}, which is honored by @code{pam_env},
+with the specified environment variables. The value of this service is a list
+of name/value pairs for environments variables, such as:
+
+@example
+'((\"TZ\" . \"Canada/Pacific\"))
+@end example\n")))
+
+(define (session-environment-service vars)
+ "Return a service that builds the @file{/etc/environment}, which can be read
+by PAM-aware applications to set environment variables for sessions.
+
+VARS should be an association list in which both the keys and the values are
+strings or string-valued gexps."
+ (service session-environment-service-type vars))
+
+
+
+;;;
;;; PAM root service.
;;;