Various Linux scripts.
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.
 
 
 
 
 
 

49 lines
2.0 KiB

#!/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))