You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
2.0 KiB
50 lines
2.0 KiB
12 years ago
|
#!/usr/bin/env guile
|
||
|
!#
|
||
|
|
||
|
;;;Создан: Сб 10 июл 2010 19:29:10
|
||
|
;;;Изменён: Вс 21 июл 2010 01:40:25
|
||
|
|
||
|
;;;
|
||
|
;;; Скрипт составления команды UNIX Shell для добавления пользователя в группы.
|
||
|
;;; Группы добавляются к уже имеющимся.
|
||
|
;;;
|
||
|
;;; (c) 2010, Maxim Lihachev, <envrm@yandex.ru>
|
||
|
;;;
|
||
|
|
||
|
;;Стандартные группы для пользователей
|
||
|
(define default-groups (list "plugdev" "audio" "video" "cdrom" "scanner" "users"))
|
||
|
|
||
|
;;Получение первого элемента вектора
|
||
|
(define (vector-car vector) (vector-ref vector 0))
|
||
|
|
||
|
;;Получение списка существующих групп
|
||
|
(define (get-all-groups)
|
||
|
(do ( (group (getgr) (getgr))
|
||
|
(groups '() (append groups (list group))))
|
||
|
((not (vector? group)) groups)))
|
||
|
|
||
|
;;Получение списка групп, в которые входит данный пользователь
|
||
|
(define (get-old-groups user groups)
|
||
|
(map vector-car (filter (lambda (g) (member user (group:mem g))) groups)))
|
||
|
|
||
|
;;Получение списка групп, в которые должен входить пользователь
|
||
|
(define (get-new-groups groups)
|
||
|
(filter (lambda (x) (not (member x groups))) default-groups))
|
||
|
|
||
|
;;Создание команды оболочки для добавления пользователя в группы
|
||
|
(define (make-command user groups)
|
||
|
(format #f "usermod -G ~A ~A\n" (string-join groups ",") user))
|
||
|
|
||
|
;;;-----------------------------------------------------------------------------
|
||
|
;;Формирование команд оболочки
|
||
|
(let* ( (all-groups (get-all-groups))
|
||
|
(users (if (< 1 (length (command-line)))
|
||
|
(cdr (command-line))
|
||
|
(list (cuserid))))
|
||
|
(get-command (lambda (user)
|
||
|
(let* ( (oldg (get-old-groups user all-groups))
|
||
|
(newg (get-new-groups oldg)))
|
||
|
(display (make-command user (append oldg newg)))))))
|
||
|
(for-each get-command users))
|
||
|
|