alterator-ldap-groups-0.4/000075500000000000000000000000001127130000600155715ustar00rootroot00000000000000alterator-ldap-groups-0.4/Makefile000064400000000000000000000005271127130000600172350ustar00rootroot00000000000000NAME=ldap-groups INSTALL=/usr/bin/install all: clean: clean-po install: install-module install-data include /usr/share/alterator/build/module.mak install-data: install -Dpm 644 group-init-list $(sysconfdir)/alterator/ldap-groups/group-init-list install -Dpm 755 hooks/ldap-groups $(libexecdir)/alterator/hooks/firsttime.d/91-ldap-groups alterator-ldap-groups-0.4/applications/000075500000000000000000000000001127130000600202575ustar00rootroot00000000000000alterator-ldap-groups-0.4/applications/ldap-groups.desktop000064400000000000000000000003531127130000600241100ustar00rootroot00000000000000[Desktop Entry] Type=Application Categories=X-Alterator-Users Icon=users Terminal=false Name=Ldap group accounts X-Alterator-URI=/ldap-groups X-Alterator-Weight=30 X-Alterator-Help=ldap-groups X-Alterator-UI=html Name[ru]=Группы alterator-ldap-groups-0.4/backend3/000075500000000000000000000000001127130000600172435ustar00rootroot00000000000000alterator-ldap-groups-0.4/backend3/ldap-groups000075500000000000000000000127471127130000600214410ustar00rootroot00000000000000#!/bin/sh -f alterator_api_version=1 cache_dir="/var/cache/alterator/ldap-groups" . alterator-sh-functions . alterator-openldap-functions ### cache reset_cache() { rm -rf -- "$cache_dir" mkdir -p -- "$cache_dir" } ### member member_list() { local group="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" ldap-getent group "$group" memberUid| sed -e 's/,[[:blank:]]*/\n/g'>"$member_in_file" ldap-getent passwd '*' uid| while read user;do fgrep -wqs "$user" "$member_in_file" || echo "$user" done>"$member_out_file" } member_list_in() { local group="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" [ -f "$member_in_file" -a -f "$member_out_file" ] || member_list "$group" cat "$member_in_file" } member_list_out() { local group="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" [ -f "$member_in_file" -a -f "$member_out_file" ] || member_list "$group" cat "$member_out_file" } member_add() { local group="$1";shift local user="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" [ -f "$member_in_file" -a -f "$member_out_file" ] || member_list "$group" file_list_add "$member_in_file" "$user" file_list_del "$member_out_file" "$user" } member_del() { local group="$1";shift local user="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" [ -f "$member_in_file" -a -f "$member_out_file" ] || member_list "$group" file_list_del "$member_in_file" "$user" file_list_add "$member_out_file" "$user" } member_reset() { local group="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" rm -f -- "$member_in_file" "$member_out_file" } member_commit() { local group="$1";shift local member_in_file="$cache_dir/member-in-$group" local member_out_file="$cache_dir/member-out-$group" [ -f "$member_in_file" -a -f "$member_out_file" ] || member_list "$group" if [ -s "$member_in_file" ]; then sed 's/.*/memberUid:&/' "$member_in_file"|ldap-groupmod replace "$group" > /dev/null else printf 'memberUid:\n'|ldap-groupmod replace "$group" > /dev/null fi member_reset "$group" } ### e-mail email_list() { local user="$1";shift local email_file="$cache_dir/email-$user" if [ -f "$email_file" ];then cat "$email_file" else ldap-getent group "$user" mail| sed -e 's/,[[:blank:]]*/\n/g'| tee "$email_file" fi } email_add() { local user="$1";shift local email="$1";shift local email_file="$cache_dir/email-$user" [ -f "$email_file" ] || email_list >/dev/null file_list_add "$email_file" "$email" } email_del() { local user="$1";shift local email="$1";shift local email_file="$cache_dir/email-$user" [ -f "$email_file" ] || email_list >/dev/null file_list_del "$email_file" "$email" } email_reset() { local user="$1";shift local email_file="$cache_dir/email-$user" rm -f -- "$email_file" } email_commit() { local user="$1";shift local email_file="$cache_dir/email-$user" [ -f "$email_file" ] || return 0 if [ -s "$email_file" ]; then sed 's/.*/mail:&/' "$email_file"|ldap-groupmod replace "$user" > /dev/null else printf 'mail:\n'|ldap-groupmod replace fi email_reset "$user" } ### group group_new() { local r="$(ldap-groupadd "$1" 2>&1)" [ -n "$r" ] && write_error "$r" && return 1 : } group_delete() { local r="$(ldap-groupdel "$1" 2>&1)" [ -n "$r" ] && write_error "$r" && return 1 : } set_dn_conf() { local dn="$(system-auth status|cut -f2 -d' ')" [ -n "$dn" ] || fatal "set_dn_conf: couldn't detect dn" DN_CONF="$(/usr/sbin/ldap-dn find "$dn")" [ -f "$DN_CONF" ] || fatal "set_dn_conf: $DN_CONF doesn't exist" export DN_CONF base_rootdn_rootpw } set_dn_conf reset_cache on_message() { case "$in_action" in type) write_type_item new_group system-account-name write_type_item new_email e-mail ;; list) ldap-getent group '*' cn|sort|write_enum ;; delete) [ -n "$in_group" ] || return group_delete "$in_group" ;; new) [ -n "$in_new_group" ] || return group_new "$in_new_group" || return ;; member_list_in) [ -n "$in_group" ] || return member_list_in "$in_group"|write_enum ;; member_list_out) [ -n "$in_group" ] || return member_list_out "$in_group"|write_enum ;; member_add) [ -n "$in_group" -a -n "$in_member_out" ] || return member_add "$in_group" "$in_member_out" ;; member_del) [ -n "$in_group" -a -n "$in_member_in" ] || return member_del "$in_group" "$in_member_in" ;; member_commit) [ -n "$in_group" ] || return member_commit "$in_group" ;; member_reset) [ -n "$in_group" ] || return member_reset "$in_group" ;; email_list) [ -n "$in_group" ] || return email_list "$in_group" |write_enum ;; email_add) [ -n "$in_group" -a -n "$in_new_email" ] || return email_add "$in_group" "$in_new_email" ;; email_del) [ -n "$in_group" -a -n "$in_email" ] || return email_del "$in_group" "$in_email" ;; email_commit) [ -n "$in_group" ] || return email_commit "$in_group" ;; email_reset) [ -n "$in_group" ] || return email_reset "$in_group" ;; esac } message_loop alterator-ldap-groups-0.4/group-init-list000064400000000000000000000001061127130000600205570ustar00rootroot00000000000000wheel cdwriter cdrom audio proc radio camera floppy xgrp scanner uucp alterator-ldap-groups-0.4/hooks/000075500000000000000000000000001127130000600167145ustar00rootroot00000000000000alterator-ldap-groups-0.4/hooks/ldap-groups000064400000000000000000000013611127130000600210750ustar00rootroot00000000000000#!/bin/sh -ef . alterator-openldap-functions init_groups_file=/etc/alterator/ldap-groups/group-init-list system_groups_file=/etc/group set_dn_conf() { local dn="$(system-auth status|cut -f2 -d' ')" [ -n "$dn" ] || fatal "set_dn_conf: couldn't detect dn" DN_CONF="$(/usr/sbin/ldap-dn find "$dn")" [ -f "$DN_CONF" ] || fatal "set_dn_conf: $DN_CONF doesn't exist" export DN_CONF base_rootdn_rootpw } set_dn_conf write_init_groups() { local temp_file="$(mktemp -t ldap-groups.XXXXXX)" sort "$init_groups_file" >"$temp_file" sort -t: -k1,1 "$system_groups_file"|join -j1 -t: - "$temp_file" rm -f -- "$temp_file" } write_init_groups| while IFS=: read group _ gid _ ;do ldap-groupadd "$group" "$gid" done alterator-ldap-groups-0.4/ui/000075500000000000000000000000001127130000600162065ustar00rootroot00000000000000alterator-ldap-groups-0.4/ui/ldap-groups/000075500000000000000000000000001127130000600204435ustar00rootroot00000000000000alterator-ldap-groups-0.4/ui/ldap-groups/ajax.scm000064400000000000000000000103251127130000600220730ustar00rootroot00000000000000(define-module (ui ldap-groups ajax) :use-module (alterator woo) :use-module (alterator ajax) :export (init)) ;;; members (define (update-member-list . data) (let ((group (if (pair? data) (car data) (form-value "group")))) (form-update-enum "member_in" (woo "member_list_in" "/ldap-groups" 'group group)) (form-update-enum "member_out" (woo "member_list_out" "/ldap-groups" 'group group)))) (define (ui-member-add) (let ((group (form-value "group")) (member_out (form-value "member_out"))) (and (string? group) (string? member_out) (catch/message (lambda() (woo "member_add" "/ldap-groups" 'language (form-value "language") 'group group 'member_out member_out) (update-member-list (form-value "group"))))))) (define (ui-member-del) (let ((group (form-value "group")) (member_in (form-value "member_in"))) (and (string? group) (string? member_in) (catch/message (lambda() (woo "member_del" "/ldap-groups" 'language (form-value "language") 'group group 'member_in member_in) (update-member-list (form-value "group"))))))) ;;; emails (define (update-email-list . data) (let ((group (if (pair? data) (car data) (form-value "group")))) (form-update-enum "email" (woo "email_list" "/ldap-groups" 'group group)))) (define (ui-email-add) (let ((group (form-value "group")) (new_email (form-value "new_email"))) (and (string? group) (string? new_email) (catch/message (lambda() (woo "email_add" "/ldap-groups" 'language (form-value "language") 'group group 'new_email new_email) (form-update-value "new_email" "") (update-email-list (form-value "group"))))))) (define (ui-email-del) (let ((group (form-value "group")) (email (form-value "email"))) (and (string? group) (string? email) (catch/message (lambda() (woo "email_del" "/ldap-groups" 'language (form-value "language") 'group group 'email email) (update-email-list (form-value "group"))))))) ;;; groups (define (update-groups . data) (let ((group (if (pair? data) (car data) (form-value "group")))) (if (not (string-contains group ";")) (begin (form-update-visibility "update_message" #f) (form-update-value "group_name" group) (woo "member_reset" "/ldap-groups" 'group group) (woo "email_reset" "/ldap-groups" 'group group) (update-member-list group) (update-email-list group))))) (define (ui-group-del) (let ((group (form-value "group"))) (and (string? group) (catch/message (lambda() (woo-delete "/ldap-groups" 'group group 'language (form-value "language")) (ui-init)))))) (define (ui-group-add) (let ((new_group (form-value "new_group"))) (and (string? new_group) (catch/message (lambda() (woo-new "/ldap-groups" 'new_group new_group 'language (form-value "language")) (ui-init) (form-update-value "group" new_group) (update-groups new_group)))))) (define (ui-group-save) (let ((group (form-value "group"))) (and (string? group) (catch/message (lambda() (form-update-visibility "update_message" #f) (woo "member_commit" "/ldap-groups" 'language (form-value "language") 'group group) (woo "email_commit" "/ldap-groups" 'language (form-value "language") 'group group) (update-groups group) (form-update-visibility "update_message" #t)))))) (define (ui-init) (form-update-value "new_group" "") (form-update-value "group_name" "") (form-update-enum "member_in" '()) (form-update-enum "member_out" '()) (form-update-value "new_email" "") (form-update-visibility "update_message" #f) (form-update-enum "group" (woo-list "/ldap-groups"))) (define (init) (ui-init) (form-bind "group" "change" update-groups) (form-bind "member_add_button" "click" ui-member-add) (form-bind "member_del_button" "click" ui-member-del) (form-bind "email_add_button" "click" ui-email-add) (form-bind "email_del_button" "click" ui-email-del) (form-bind "group_save_button" "click" ui-group-save) (form-bind "group_del_button" "click" ui-group-del) (form-bind "group_add_button" "click" ui-group-add)) alterator-ldap-groups-0.4/ui/ldap-groups/index.html000064400000000000000000000054631127130000600224500ustar00rootroot00000000000000 Group accounts - ALT Linux Console
New group:    

 

Account

Name:  
Members:
New member:  

E-mail

New email:  

Group settings successfully updated