Sisyphus
: 1 2023 | : 18631 | : 37819524
en ru br
ALT
S:0.8.6-alt2
5.1: 0.5-alt10
4.1: 0.2-alt1.M41.4
www.altlinux.org/Changes

:: //
: alterator-ldap-users

                   Gear   Bugs and FR  Repocop 

alterator-ldap-users-0.8/000075500000000000000000000000001215211612600154265ustar00rootroot00000000000000alterator-ldap-users-0.8/Makefile000064400000000000000000000004621215211612600170700ustar00rootroot00000000000000NAME=ldap-users

INSTALL=/usr/bin/install

all:
clean: clean-po
install: install-module install-data

install-data:
$(INSTALL) -d $(datadir)/alterator/design/images/ldap-users
cp -a design/images/ldap-users/* $(datadir)/alterator/design/images/ldap-users


include /usr/share/alterator/build/module.mak

alterator-ldap-users-0.8/applications/000075500000000000000000000000001215211612600201145ustar00rootroot00000000000000alterator-ldap-users-0.8/applications/ldap-users.desktop000064400000000000000000000003641215211612600235710ustar00rootroot00000000000000[Desktop Entry]
Type=Application
Categories=X-Alterator-Users
Icon=users
Terminal=false
Name=Ldap user accounts
Name[ru]=Пользователи
X-Alterator-URI=/ldap-users
X-Alterator-Weight=30
X-Alterator-Help=ldap-users
X-Alterator-UI=html
alterator-ldap-users-0.8/backend3/000075500000000000000000000000001215211612600171005ustar00rootroot00000000000000alterator-ldap-users-0.8/backend3/ldap-users000075500000000000000000000435021215211612600211110ustar00rootroot00000000000000#!/bin/sh

alterator_api_version=1
po_domain="alterator-ldap-users"

cache_dir="/var/cache/alterator/ldap-users"
image_dir="/usr/share/alterator/design/images/ldap-users"

default_groups="cdwriter cdrom audio proc radio camera floppy xgrp scanner uucp users"
#turn off auto expansion
set -f

. alterator-sh-functions
. alterator-openldap-functions
. shell-quote
. shell-config

# delimeters
rdelim='[[:space:]]\+'
wdelim=' '

# show localized answer from helper
answer_l10n()
{
local str="$1"
run_localized gettext "ldap-user-tools" "${r/[a-z-]*: /}"
}

# test IP address or hostname: local or remote
is_local(){
[ "$(traceroute -m2 $1 | wc -l)" -le 2 ]
}


### cache
reset_cache()
{
rm -rf -- "$cache_dir"
mkdir -p -- "$cache_dir"
}

### e-mail
# read all available emails
email_list()
{
if [ -n "$mode" -a "$mode" == "ldap" ];then
local user="$1";shift
local email_file="$cache_dir/email-$user"

if [ -f "$email_file" ];then
cat "$email_file"
else
ldap-getent passwd "$user" mail|
sed -e 's/,[[:blank:]]*/\n/g'|
tee "$email_file"
fi
fi
}

# add email to list
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"
}

# remove email from list
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"
}

# reset email value
email_reset()
{
local user="$1";shift
local email_file="$cache_dir/email-$user"

rm -f -- "$email_file"
}

# commit email value
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-usermod replace "$user" > /dev/null
else
printf 'mail:\n'|ldap-usermod replace
fi
email_reset "$user"
}

########################
photo_add(){
# echo $(set|grep "in_") >&2
ldapmodify -a -x -D "$rootdn" $rootpw -H "ldap://${host:-127.0.0.1}" >/dev/null<<EOF
dn: uid=$in_user,ou=People,$base
changetype: modify
replace: jpegPhoto
jpegPhoto:< file://$in_photo_file
EOF
}

photo_delete(){
rm -f "$image_dir/last_photo.jpg"
rm -f "$cache_dir/ldapsearch-jpegPhoto*"
rm -f "$cache_dir/last_photo.jpg"
ldapmodify -x -D "$rootdn" $rootpw -H "ldap://${host:-127.0.0.1}" >/dev/null<<EOF
dn: uid=$in_user,ou=People,$base
changetype: modify
delete: jpegPhoto
EOF
}

# list groups for user
group_member(){
local user="$1";shift

# Set group list command
local command=""
case "$mode" in
ldap|krb5)
command="ldap-getent"
;;
local|*)
command="getent"
;;
esac

# Get group list
$command group | grep ":.*$user" | sort |
while IFS=':' read name empty gid members; do
write_enum_item "$name" "$name"
done
}

group_not_member(){
local user="$1";shift
# Set group list command
local command=""
case "$mode" in
ldap|krb5)
command="ldap-getent"
;;
local|*)
command="getent"
;;
esac

# Get group list
$command group | grep -v ":.*$user" | sort |
while IFS=':' read name empty gid members; do
write_enum_item "$name" "$name"
done
}

membership_add(){
local user="$1";shift
local newgrp="$1";shift

# Add to group
case "$mode" in
ldap|krb5)
ldap-groupmod -m "$user" "$newgrp"
;;
local)
gpasswd -a "$user" "$newgrp"
;;
*)
;;
esac
}

membership_del(){
local user="$1";shift
local delgrp="$1";shift

# Remove from group
case "$mode" in
ldap|krb5)
ldap-groupmod -x "$user" "$delgrp"
;;
local)
gpasswd -d "$user" "$delgrp"
;;
*)
;;
esac
}
###

is_defined(){
set | grep -qs "^$1="
}

user_args(){
in_cn="$in_sn"
[ -n "$in_givenname" ] && in_cn="$in_cn $in_givenname"
[ -n "$in_patronym" ] && in_cn="$in_cn $in_patronym"
for attr in givenname sn cn o ou title telephonenumber mobile homedirectory loginshell departmentnumber postaladdress; do
is_defined "in_$attr" && printf '%s:%s\n' "$attr" "$(eval printf %s \"\$in_$attr\")"
done
}

read_ldap_photo(){
mkdir -p "$cache_dir"
mkdir -p "$image_dir"
rm -rf "$cache_dir/ldapsearch-jpegPhoto*"
rm -rf "$image_dir/last_photo.jpg"
ldapsearch -x -H "ldap://${host:-127.0.0.1}" -LLL -b "$base" -t -F "$cache_dir/" -T "$cache_dir/" "(&(objectClass=posixAccount)(uid=$name))" jpegPhoto | \
while read key value; do
if [ "$key" == "jpegPhoto:<" ]; then
cp -f "$value" "$image_dir/last_photo.jpg"
chmod 644 "$image_dir/last_photo.jpg"
#ln -s -f "$cache_dir/last_photo.jpg" -t "$image_dir/"
#cp -f "$cache_dir/last_photo.jpg" "$image_dir/last_photo.jpg"
write_string_param "jpegphoto" "ldap-users/last_photo.jpg"
return
else
[ "$key" == "" ] && write_string_param "jpegphoto" "ldap-users/notfound.png"
fi
done
}

user_read(){
local name="$1";shift
case "$mode" in
ldap|krb5)
ldap-getent passwd "$name" uid userPassword givenName sn cn o ou title telephoneNumber mobile homeDirectory loginShell uidNumber departmentNumber postalAddress|
(IFS=: read name userpassword givenname sn cn o ou title telephonenumber mobile homedirectory loginshell uidNumber departmentnumber postaladdress;
patronym="$(echo ${cn#$sn})"
patronym="$(echo ${patronym#$givenname})"
jpegphoto="$(read_ldap_photo $name)"

for f in userpassword givenname cn sn patronym o ou title telephonenumber mobile homedirectory loginshell uidNumber departmentnumber postaladdress; do
write_string_param "$f" "$(eval printf %s \"\$$f\")"
done
read_ldap_photo $name

[ -n "$userpassword" -a -z "${userpassword##!!*}" ] &&
write_bool_param is_active false ||
write_bool_param is_active true
)
;;
*)
cat /etc/passwd | grep "^$name:" |
(IFS=: read uid userpassword uidNumber gidNumber gecos homedirectory loginshell;
for f in uid userpassword uidNumber gecos homedirectory loginshell; do
write_string_param "$f" "$(eval printf %s \"\$$f\")"
done
echo "$gecos" | while IFS=' ' read sn givenname patronym; do
for i in sn givenname patronym; do
write_string_param "$i" "$(eval printf %s \"\$$i\")"
done
done
)
;;
esac
}

ldap_user_add_default_groups(){
[ -n "$1" ] || return
for i in $default_groups ;do
[ -n "$(ldap-getent group "$i")" ] &&
printf 'memberUid:%s\n' "$1" | ldap-groupmod add "$i" > /dev/null
done
}

user_add_default_groups(){
[ -n "$1" ] || return
groups=$(echo "$default_groups"|tr ' ' ',')
usermod -g "$1" -G "$groups" "$1"
}

ldap_user_del_default_groups(){
[ -n "$1" ] || return
for i in $(ldap-getent group '*' cn memberUid|egrep "(:$1,|:$1$|,$1,|,$1$)"|cut -f1 -d':')
do
printf 'memberUid:%s\n' "$1" | ldap-groupmod del "$i" > /dev/null
done
}

user_chpasswd(){
local r="$(echo "$2" |ldap-passwd "$1" 2>&1)"
[ -n "$r" ] && write_error "$(answer_l10n "$r")" && return 1
:
}

user_new(){
local r="$(ldap-useradd "$1" 2>&1)"
[ -n "$r" ] && write_error "$(answer_l10n "$r")" && return 1
# trying to init user homedir
local init_user="$(su - $1 -s /bin/true > /dev/null 2>&1)"
:
}

user_write(){
case "$mode" in
local)
local in_cn="$in_sn"
[ -n "$in_givenname" ] && in_cn="$in_cn $in_givenname"
[ -n "$in_patronym" ] && in_cn="$in_cn $in_patronym"
usermod -c "$in_cn" -s "$in_loginshell" -d "$in_homedirectory" "$in_user"
;;
ldap|krb5)
local r="$(user_args |
ldap-usermod replace "$1" 2>&1)"
[ -n "$r" ] && write_error "$(answer_l10n "$r")" && return 1
:
;;
*);;
esac

}

user_delete(){
case "$mode" in
local)
userdel -r "$in_user"
:
;;
ldap|krb5)
local r="$(ldap-userdel -r "$1" 2>&1)"
[ -n "$r" ] && write_error "$(answer_l10n "$r")" && return 1
:
;;
*);;
esac
}

parse_uploaded(){
cat $in_passwd_file |
while read line; do
echo $line |
while IFS=':' read login password uid gid gecos home shell; do
if [ "$uid" -ge "$in_minuid" -a "$uid" -le "$in_maxuid" ];then
write_table_item \
name "$login" \
password "$password" \
uid "$uid" \
gid "$gid" \
gecos "$gecos" \
home "$home" \
shell "$shell"
fi
done
done
}

read_userlist(){
[ -z "$in_minuid" -o "$in_minuid" == "#f" ] && in_minuid="4999"
[ -z "$in_maxuid" -o "$in_maxuid" == "#f" ] && in_maxuid="9000"
[ "$in_maxuid" -gt "$in_minuid" ] || in_minuid="$in_maxuid"

case "$mode" in
ldap|krb5)
local IFS=$'\n'
for i in $(ldap-getent passwd '*' uid uidNumber|sort) ;do
echo $i |
while IFS=':' read login uid; do
if [ "$uid" -ge "$in_minuid" -a "$uid" -le "$in_maxuid" ];then
write_enum_item "$login"
fi
done
done
;;
*)
local IFS=$'\n'
cat /etc/passwd | sort |
while IFS=':' read login pass uid gid gecos home shell; do
if [ "$uid" -ge "$in_minuid" -a "$uid" -le "$in_maxuid" ];then
write_enum_item "$login"
fi
done
;;
esac
}

list_bases(){
ldapsearch -x -H "ldap://${in_rem_host:-127.0.0.1}" -LLL -b "" -s base namingContexts \
| grep naming | cut -f2 -d ' '| \
while read base_dn ; do
write_enum_item "$base_dn" "$base_dn"
done 2>/dev/null
}

determine_mode(){
[ -n "$mode" ] || set_dn_conf
write_string_param mode "$mode"

if [ "$mode" != "local" ];then
write_string_param DN_CONF "$DN_CONF"
write_string_param host "$host"
write_string_param base "$base"
write_string_param rootdn "$rootdn"
write_string_param rootpw "$rootpw"
method=$(echo "$rootpw"|sed -n -e "s/^.*{\([^}]*\)}.*$/\1/p")
if [ -n "$method" ]; then
write_string_param bind_info "encoded"
else
write_string_param bind_info "present"
fi
[ "$mode" == "krb5" ] && write_string_param enable_krb "yes"

fi
}

check_mode(){
[ -n "$mode" ] || set_dn_conf
write_string_param mode "$mode"
write_string_param host "$host"
write_string_param base "$base"
write_string_param rootdn "$rootdn"
write_string_param rootpw "$rootpw"
write_string_param bind_info "$bind_info"
}

set_new_source(){
case "$in_newmode" in
local)
mode="local"
host="localhost"
base="tcb"
rootdn:root
rootpw:*********
bind_info="present"
export mode host base rootdn rootpw bind_info
;;
ldap)
host="$in_host"
base="$in_new_rem_base"
DN_CONF="remote"
mode="ldap"
bind_info="encoded"
export DN_CONF mode host base rootdn rootpw bind_info
;;
localldap)
mode="ldap"
host="localhost"
base="$in_new_base"
DN_CONF=$(ldap-dn find "$base")
rootdn=$(egrep "rootdn" "$DN_CONF"|cut -f2 -d' '|tr -d '"')
rootpw="-w $(egrep "rootpw" "$DN_CONF"|cut -f2 -d' ')"
method=$(echo "$rootpw"|sed -n -e "s/^.*{\([^}]*\)}.*$/\1/p")
if [ -n "$method" ]; then
bind_info="encoded"
else
bind_info="present"
fi
export DN_CONF mode host base rootdn rootpw bind_info
;;
system)
mode="system"
set_dn_conf
;;
*)
;;
esac
}

get_mode(){
if [ -z "$mode" -o "$mode" == 'system' ]; then
mode="$(/usr/sbin/system-auth status | cut -f1 -d' ')"
role=$(shell_config_get /etc/sysconfig/system SERVER_ROLE)
[ "$mode" == 'ldap' -a "$role" == 'master' ] && mode='krb5'
fi

echo $mode
}


set_dn_conf(){
local data="$(/usr/sbin/system-auth status)"
mode="$(get_mode)"

case "$mode" in
local)
mode="local"
host="localhost"
base="tcb"
rootdn="root"
rootpw="*********"
bind_info="present"
export mode host base rootdn rootpw bind_info
;;
ldap|krb5)
base="$(echo "$data"|cut -f2 -d' ')"
urihost="$(echo "$data"|cut -f3 -d' ')"
host=$(echo "$urihost"|sed -e 's/lda.*\/\///i')
if is_local "$host" ; then
host=127.0.0.1
DN_CONF=$(ldap-dn find "$base")
rootdn=$(egrep "rootdn" "$DN_CONF"|cut -f2 -d' '|tr -d '"')
rootpw="-w $(egrep "rootpw" "$DN_CONF"|cut -f2 -d' ')"
bind_info="present"
export DN_CONF
export mode host base rootdn rootpw
[ "$mode" == 'krb5' ] && export ENABLE_KRB="yes"
fi
;;
*)
;;
esac
}

set_new_bind(){
mode="$in_mode"
base="$in_base"
host="$in_host"
rootdn="$in_rootdn"
rootpw="-w $in_rootpw"
bind_info="$in_bind_info"
DN_CONF="remote"

export DN_CONF mode host base rootdn rootpw bind_info

}

set_dn_conf
reset_cache

on_message(){
[ "$(get_mode)" == 'krb5' ] && export ENABLE_KRB=yes
case "$in_action" in
type)
write_type_item newusername ldap-account-name
write_type_item newemail e-mail
write_type_item telephonenumber telephone-number
write_type_item mobile telephone-number
;;
#object manipulations
list)
case "$in__objects" in
departmentnumber_list)
write_enum_item ""
deppast=""
ldap-getent passwd '*' departmentnumber | sort | while read department
do
if [ -n "$department" ] && [ "$deppast" != "$department" ]; then write_enum_item "$department"; fi
deppast="$department"
done
;;
title_list)
write_enum_item ""
titlepast=""
ldap-getent passwd '*' title | sort | while read title
do
if [ -n "$title" ] && [ "$titlepast" != "$title" ]; then write_enum_item "$title"; fi
titlepast="$title"
done
;;
avail_shell)
write_enum_item "/sbin/nologin"
while read sh; do
[ -x "$sh" ] || continue
write_enum_item "$sh"
done </etc/shells
;;
email_list)
[ -n "$in_user" ] || return
email_list "$in_user"
;;
member_of)
[ -n "$in_user" ] || return
group_member "$in_user"
;;
member_out)
[ -n "$in_user" ] || return
group_not_member "$in_user"
;;
passwd)
in_passwd_file="/etc/passwd"
parse_uploaded "$in_passwd_file" "$in_minuid" "$in_maxuid"
;;
upload)
parse_uploaded "$in_passwd_file" "$in_minuid" "$in_maxuid"
;;
bases)
list_bases
;;
rem_bases)
[ -z "$in_rem_host" ] || list_bases "$in_rem_host"
;;
userlist)
read_userlist "$in_minuid" "$in_maxuid"
;;
avail_users)
local IFS=$'\n'
for i in $(ldap-getent passwd '*' uid|sort) ;do
write_enum_item "$i"
done
;;
mode)
check_mode
;;
*)
;;
esac
;;
read)
case "$in__objects" in
/)
[ -n "$in_user" ] || return
write_string_param passwd_auto "$(pwqgen)"
! test_bool "$in_auto"
write_bool_param auto "$?"
[ -n "$in_user" ] && user_read "$in_user"
;;
mode)
determine_mode
;;
esac
;;
write)
case "$in__objects" in
newgroup)
[ -n "$in_user" -a -n "$in_newgrp" ] && membership_add "$in_user" "$in_newgrp"
;;
delgroup)
[ -n "$in_user" -a -n "$in_delgrp" ] && membership_del "$in_user" "$in_delgrp"
;;
*)
[ -n "$in_user" ] || return
user_write "$in_user" || return
if test_bool "$in_auto" && [ -n "$in_passwd_auto" ]; then
case "$mode" in
local)
echo "$in_user:$in_passwd_auto" | chpasswd
;;
ldap|krb5)
user_chpasswd "$in_user" "$in_passwd_auto"
;;
*);;
esac
elif [ "$in_passwd_1" != "$in_passwd_2" ]; then
write_error "`_ "Passwords mismatch"`"
return
elif ! test_bool "$in_auto" && [ -n "$in_passwd_1" -o -n "$in_passwd_2" ] ; then
case "$mode" in
local)
echo "$in_user:$in_passwd_1" | chpasswd
;;
ldap|krb5)
user_chpasswd "$in_user" "$in_passwd_1"
;;
*);;
esac
fi
;;
esac
;;
new)
case "$in__objects" in
user)
[ -n "$in_newusername" ] || return
case "$mode" in
local)
useradd "$in_newusername"
user_add_default_groups "$in_newusername"
;;
ldap|krb5)
user_new "$in_newusername" || return
email_add "$in_newusername" "$in_newusername@$(dn_2_host "$base")"
email_commit "$in_newusername"
ldap_user_add_default_groups "$in_newusername"
ldap-getent passwd '*' o | while read o_main
do
if [ -n "$o_main" ]; then printf '%s:%s\n%s:%s\n' "cn" "$in_newusername" "o" "$o_main" | ldap-usermod replace "$in_newusername" 2>&1; break; fi
done
;;
*);;
esac

#new
;;
source)
set_new_source
;;
user_photo)
[ -z "$in_photo_file" ] || photo_add
;;
*)
;;
esac
;;
delete)
case "$in__objects" in
user)
if [ -n "$in_user" ]; then
IFS=$'\n'
for user in $(echo $in_user|sed -e 's/;/\n/g')
do
case "$mode" in
local)
userdel "$user" || return
;;
ldap|krb5)
user_delete "$user" || return
ldap_user_del_default_groups "$user"
;;
*);;
esac
done
fi
;;
photo)
[ -z "$in_user" ] || photo_delete
;;
*);;
esac
;;
email_add)
[ -n "$in_user" -a -n "$in_newemail" ] || return
email_add "$in_user" "$in_newemail"
;;
email_del)
[ -n "$in_user" -a -n "$in_email" ] || return
email_del "$in_user" "$in_email"
;;
email_list)
[ -n "$in_user" ] || return
email_list "$in_user" |write_enum
;;
email_commit)
[ -n "$in_user" ] || return
case "$mode" in
local);;
ldap|krb5)
email_commit "$in_user"
;;
*);;
esac
;;
email_reset)
[ -n "$in_user" ] || return
email_reset "$in_user"
;;
generate)
write_string_param passwd_auto "$(pwqgen)"
;;
set_bind)
[ -n "$in_mode" -a -n "$in_base" -a -n "$in_host" -a -n "$in_rootdn" -a -n "$in_rootpw" ] && set_new_bind
;;
esac
}

message_loop
alterator-ldap-users-0.8/design/000075500000000000000000000000001215211612600166775ustar00rootroot00000000000000alterator-ldap-users-0.8/design/images/000075500000000000000000000000001215211612600201445ustar00rootroot00000000000000alterator-ldap-users-0.8/design/images/ldap-users/000075500000000000000000000000001215211612600222235ustar00rootroot00000000000000alterator-ldap-users-0.8/design/images/ldap-users/notfound.png000064400000000000000000000065421215211612600245740ustar00rootroot00000000000000PNG

IHDR^^ңn
OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ,
!{kּ> H3Q5 B.@
$pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB
dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![
b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**|
J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!ku5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ
M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}=Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w%
yg"/6шC\*NH*Mz쑼5y$3,幄'LLݛ:v m2=:1qB!Mggfvˬen/kY-
BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy
+V<*mOW~&zMk^ʂk U
}]OX/Yߵa>(xoʿܔĹdff-[nڴVE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw-6U#pDy :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGDb_ pHYs  tIME 9IDATx;0%DdV `eS\hF3!`;߿"'~@r:,!eDD뺎 ~<xx#<xx#h[\וq$c UUEu]{GXו$ 1s|<֚zyC˅ڶ>m eIu]S®G76ҵ4 MD0֚uZKƘ[ |k Xkix$,wݑ}o T5%I{ZNfYFJg{?B 㙙ڶ4M?BO J) R3V𥡋2_"𥢋_2(wKGE~(b_ ]43ߊz[CC|A?/=8

=|=|=MS/LjQo]>Fm999&96P9F9Vt3d|]*>D|gqkEL?Ÿiqch&[񣂗傂 R׊>s _]۵<ϩi+is{otDD>30\,ޫ<xx#xx#m+#"IENDB`alterator-ldap-users-0.8/type/000075500000000000000000000000001215211612600164075ustar00rootroot00000000000000alterator-ldap-users-0.8/type/ldap-account-name.scm000064400000000000000000000006421215211612600224050ustar00rootroot00000000000000(define-module (type ldap-account-name)
:use-module (alterator woo)
:export (type))

(define *account-regex-str* "^[a-z][\.a-z0-9_-]*$")

(define *account-regex* (make-regexp *account-regex-str* regexp/extended))

(define (type v _)
(or (and (string? v) (string-null? v))
(and (string? v) (regexp-exec *account-regex* v))
(type-error (_ "only small latin letters, digits dot and '_' allowed"))))
alterator-ldap-users-0.8/ui/000075500000000000000000000000001215211612600160435ustar00rootroot00000000000000alterator-ldap-users-0.8/ui/ldap-users/000075500000000000000000000000001215211612600201225ustar00rootroot00000000000000alterator-ldap-users-0.8/ui/ldap-users/ajax.scm000064400000000000000000000316541215211612600215620ustar00rootroot00000000000000(define-module (ui ldap-users ajax)
:use-module (alterator woo)
:use-module (alterator ajax)
:use-module (alterator str)
:use-module (alterator effect)
:export (init))

(define *rootdn* "")
(define *rootpw* "")
(define *bind_info* "present")
(define *host* "localhost")
(define *ldapbase* "")
(define *mode* "local")

(define *user-parameter-list*
'("sn" "givenname" "patronym" "homedirectory" "loginshell"
"o" "ou" "title" "telephonenumber" "mobile" "user" "jpegphoto" "uidNumber"
"departmentnumber" "postaladdress"))

(define *passwd-parameter-list*
'("auto" "passwd_1" "passwd_2" "passwd_auto"))

(define (update-users . data)
(let ((user (if (pair? data) (car data) (form-value "user"))))
(if (not (string-contains user ";"))
(begin
(form-update-visibility "update_message" #f)
(form-update-visibility "data_not_saved" #f)
(ui-reset-password)
(form-update-value "username" user)
(form-update-enum "departmentnumber_list" (woo-list "/ldap-users/departmentnumber_list"))
(form-update-enum "title_list" (woo-list "/ldap-users/title_list"))
(form-update-value-list
*user-parameter-list*
(woo-read-first "/ldap-users" 'user user))
(update-group-in-list user)
(update-group-out-list user)
(update-mail-list user)))))


(define (update-group-in-list . data)
(let ((user (if (pair? data) (car data) (form-value "user"))))
(form-update-enum "in_groups" (woo-list "/ldap-users/member_of" 'user user))))

(define (update-group-out-list . data)
(let ((user (if (pair? data) (car data) (form-value "user"))))
(form-update-enum "out_groups" (woo-list "/ldap-users/member_out" 'user user))))

(define (set_filter)
(let ( (type (car (string-cut-repeated (or (form-value "use_filter") "real") #\,))) )
(cond
((string-ci=? type "system")(set_system_filter))
((string-ci=? type "real")(set_real_filter))
(else (set_real_filter))))
)

(define (set_system_filter)
(form-update-value "min_uid" "0")
(form-update-value "max_uid" "499")
(filtered_userlist)
)

(define (set_real_filter)
(form-update-value "min_uid" "499")
(form-update-value "max_uid" "9000")
(filtered_userlist)
)

(define (filtered_userlist)
(catch/message
(lambda() (form-update-enum "user"
(woo-list "/ldap-users/userlist"
'minuid (form-value "min_uid")
'maxuid (form-value "max_uid")
'language (form-value "language")))))
(form-update-visibility "userdelete" #f)
(form-update-visibility "info_frame" #f)
(form-update-visibility "usersave" #f)
(form-update-visibility "update_message" #f)
)

(define (check_mode)
(let* ((data (woo-list "/ldap-users/mode" )))
(set! *bind_info* (woo-get-option (car data) 'bind_info))
(set! *rootdn* (woo-get-option (car data) 'rootdn))
(set! *rootpw* (woo-get-option (car data) 'rootpw))
(set! *mode* (woo-get-option (car data) 'mode))
(set! *ldapbase* (woo-get-option (car data) 'base))
(set! *host* (woo-get-option (car data) 'host)))
(form-update-value "bind_rootdn" *rootdn*)
(form-update-value "base_" *ldapbase*)
(form-update-value "host_" *host*)
(if (equal? *mode* "local")
(begin
(form-update-visibility "photo_frame" #f)
(form-update-visibility "work_h" #f)
(form-update-visibility "mail_h" #f))
(begin
(form-update-visibility "photo_frame" #t)
(form-update-visibility "work_h" #t)
(form-update-visibility "mail_h" #t)))
)

(define (bind_info)
(set! *rootpw* "")
(form-update-value "bind_rootpw" *rootpw*)
(form-update-visibility "need_bind_info" #t)
(form-update-visibility "main_area" #f)
(form-update-visibility "adduser_area" #f)
(form-update-visibility "select_area" #f)
)

(define (main_mode)
(form-update-visibility "need_bind_info" #f)
(form-update-visibility "select_area" #f)
(form-update-visibility "main_area" #t)
(form-update-visibility "nav_buttons" #t)
(form-update-visibility "account_row" #t)
(form-update-visibility "group_row" #f)
(form-update-visibility "adduser_area" #t)
)

(define (ui-init . data)
(check_mode)
(for-each
(lambda(x) (form-update-value x ""))
(append '("newusername" "username") *user-parameter-list*))
;; Show default picture
(form-update-value "jpegphoto" "ldap-users/notfound.png")
(ui-reset-password)
(filtered_userlist)
(form-update-enum "departmentnumber_list" (woo-list "/ldap-users/departmentnumber_list"))
(form-update-enum "title_list" (woo-list "/ldap-users/title_list"))
(form-update-enum "loginshell" (woo-list "/ldap-users/avail_shell"))
(form-update-visibility "update_message" #f)
(form-update-visibility "data_not_saved" #f)
(form-update-enum "email" '() )
(form-update-enum "in_groups" '() )
(form-update-enum "out_groups" '() ))

(define (ui-usersave)
(let ((user (form-value "user")))
(if (string? user)
(catch/message
(lambda()
(form-update-visibility "update_message" #f)
(apply woo-write "/ldap-users" 'user (form-value "user") 'language (form-value "language")
'departmentnumber_list (form-value "departmentnumber_list") 'title_list (form-value "title_list")
(form-value-list (append *passwd-parameter-list* *user-parameter-list*)))
(woo "email_commit" "/ldap-users" 'user user 'language (form-value "language"))
(update-users user)
(saved)
)))))

(define (ui-userdel)
(let ((user (form-value "user")))
(if (string? user)
(catch/message
(lambda()
(woo-delete "/ldap-users/user" 'user user 'language (form-value "language"))
(ui-init))))))

(define (ui-useradd)
(let ((newusername (form-value "newusername")))
(catch/message
(lambda()
(woo-new "/ldap-users/user" 'newusername newusername 'language (form-value "language"))
(filtered_userlist)
(form-update-value "user" newusername)
(form-update-value "newusername" "")
(update-users newusername)))))

(define (ui-emailadd)
(catch/message
(lambda()
(let ((user (form-value "user"))
(newemail (form-value "newemail")))
(cond ((and (string? user) (string? newemail))
(woo "email_add" "/ldap-users" 'user user 'newemail newemail 'language (form-value "language"))
(update-mail-list)))))))

(define (ui-emaildel)
(catch/message
(lambda()
(let ((user (form-value "user"))
(email (form-value "email")))
(cond ((and (string? user) (string? email))
(woo "email_del" "/ldap-users" 'user user 'email email 'language (form-value "language"))
(update-mail-list)))))))

(define (update-mail-list . data)
(let ((user (if (pair? data) (car data) (form-value "user"))))
(form-update-value "newemail" "")
(form-update-enum "email" (woo "email_list" "/ldap-users" 'user user ))))

(define (ui-generate)
(form-update-value-list
'("passwd_auto")
(car (woo "generate" "/ldap-users"))))

(define (ui-reset-password)
(form-update-value "passwd_1" "")
(form-update-value "passwd_2" "")
(form-update-value "auto" #f)
(ui-generate)
(update-effect))

(define (ui-add-to-group)
(let ((newgrp (form-value "out_groups"))
(user (form-value "user")))
(if (string? newgrp)
(catch/message
(lambda()
(woo-write "/ldap-users/newgroup"
'user user 'newgrp newgrp
'language (form-value "language"))
)))
(update-group-in-list user)
(update-group-out-list user))
)

(define (ui-del-from-group)
(let ((delgrp (form-value "in_groups"))
(user (form-value "user")))
(if (string? delgrp)
(catch/message
(lambda()
(woo-write "/ldap-users/delgroup"
'user user 'delgrp delgrp
'language (form-value "language"))
)))
(update-group-in-list user)
(update-group-out-list user))
)

(define (on-migrate)
(form-replace "/ldap-users/migration"))

(define (select_other)
(form-update-visibility "need_bind_info" #f)
(form-update-visibility "main_area" #f)
(form-update-visibility "adduser_area" #f)
(form-update-visibility "select_area" #t)
)

(define (other_selected)
(catch/message
(lambda()
(woo-new "/ldap-users/source"
'newmode (form-value "use_src")
'new_base (form-value "new_base_src")
'host (form-value "rem_host")
'new_base (form-value "new_base_src")
'new_rem_base (form-value "rem_base_src")
'language (form-value "language"))
))
(ui-init)
(bind_request)
)

(define (set_src)
(let ( (src (car (string-cut-repeated (or (form-value "use_src") "local") #\,))) )
(cond
((string-ci=? src "local")(set_local_src))
((string-ci=? src "ldap")(set_ldap_src))
((string-ci=? src "localldap")(set_localldap_src))
(else (set_local_src))))
)

(define (set_local_src)
(form-update-visibility "new_base_src" #f)
(form-update-visibility "rem_base_src_div" #f)
)

(define (set_ldap_src)
(form-update-visibility "new_base_src" #f)
(form-update-visibility "rem_base_src_div" #t)
)

(define (set_localldap_src)
(form-update-enum "new_base_src" (woo-list "/ldap-users/bases" 'language (form-value "language")))
(form-update-visibility "new_base_src" #t)
(form-update-visibility "rem_base_src_div" #f)
)

(define (read_rem_bases)
(form-update-enum "rem_base_src"
(woo-list "/ldap-users/bases" 'rem_host (form-value "rem_host")
'language (form-value "language")))
)

(define (return_to_list)
(form-update-visibility "need_bind_info" #f)
(form-update-visibility "select_area" #f)
(form-update-visibility "main_area" #t)
(form-update-visibility "adduser_area" #t)
)

(define (show-upload)
(form-update-visibility "photo_upload_area" #t)
)
(define (hide-upload)
(form-update-visibility "photo_upload_area" #f)
)
(define (on-upload)
(call-with-form-file "photo_file"
(lambda(path)
(catch/message
(lambda()
(woo-new "/ldap-users/user_photo"
'photo_file path
'user (form-value "user")
))))
)
(form-update-visibility "photo_upload_area" #f)
(update-users)
)

(define (photo_del)
(let ((user (form-value "user")))
(if (string? user)
(catch/message
(lambda()
(woo "delete" "/ldap-users/photo" 'user user 'language (form-value "language"))
(update-users))))))

(define (set_bind)
(if (not (string-null? (form-value "bind_rootpw")))
(begin
(set! *rootpw* (form-value "bind_rootpw"))
(set! *rootdn* (form-value "bind_rootdn"))
(set! *bind_info* "present")))
(woo "set_bind" "/ldap-users"
'mode "ldap"
'base *ldapbase*
'host *host*
'rootpw *rootpw*
'rootdn *rootdn*
'bind_info *bind_info*
'language (form-value "language") )

(bind_request)
)

(define (bind_request)
(if (equal? *bind_info* "present")
(begin
(main_mode))
(begin
(bind_info)
))
)

(define (not_saved)
(form-update-visibility "update_message" #f)
(form-update-visibility "data_not_saved" #t)
)

(define (saved)
(form-update-visibility "update_message" #t)
(form-update-visibility "data_not_saved" #f)
)

;;;
(define (init)
(ui-init)

(effect-hide "userdelete" "user" "")
(effect-hide "usersave" "user" "")
(effect-show "passwd_1" "auto" #f)
(effect-show "passwd_2" "auto" #f)
(effect-show "passwd_auto" "auto" #t)
(effect-show "generate_button" "auto" #t)
(effect-hide "info_frame" "user" "")
(init-effect)

(form-bind "use_filter" "change" set_filter)
(form-bind "use_src" "change" set_src)
(form-bind "generate_button" "click" ui-generate)
(form-bind "emailadd" "click" ui-emailadd)
(form-bind "emaildel" "click" ui-emaildel)
(form-bind "usersave" "click" ui-usersave)
(form-bind "useradd" "click" ui-useradd)
(form-bind "userdelete" "click" ui-userdel)
(form-bind "user" "change" update-users)
(form-bind "sn" "change" not_saved)
(form-bind "givenname" "change" not_saved)
(form-bind "patronym" "change" not_saved)
(form-bind "homedirectory" "change" not_saved)
(form-bind "loginshell" "change" not_saved)
(form-bind "passwd_auto" "change" not_saved)
(form-bind "passwd_1" "change" not_saved)
(form-bind "o" "change" not_saved)
(form-bind "ou" "change" not_saved)
(form-bind "title" "change" not_saved)
(form-bind "title_list" "change" not_saved)
(form-bind "telephonenumber" "change" not_saved)
(form-bind "mobile" "change" not_saved)
(form-bind "departmentnumber" "change" not_saved)
(form-bind "departmentnumber_list" "change" not_saved)
(form-bind "postaladdress" "change" not_saved)
(form-bind "rem_host" "change" read_rem_bases)
(form-bind "add_to_group" "click" ui-add-to-group)
(form-bind "migration" "click" on-migrate)
(form-bind "remove_from_group" "click" ui-del-from-group)
(form-bind "filter" "click" filtered_userlist)
(form-bind "select_btn" "click" select_other)
(form-bind "useit_btn" "click" other_selected)
(form-bind "ret_list" "click" return_to_list)
(form-bind "set_photo" "click" show-upload)
(form-bind "del_photo" "click" photo_del)
(form-bind "cancel_photo" "click" hide-upload)
(form-bind-upload "upload_photo" "click" "photo_file" on-upload)
(form-bind "bind_btn" "click" set_bind)
)
alterator-ldap-users-0.8/ui/ldap-users/index.html000064400000000000000000000320051215211612600221170ustar00rootroot00000000000000 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<!-- ldap user adm-inistration module -->
<html wf="none">
<head>
<title>Users accounts - ALT Linux Console</title>
</head>
<body>
<input type="hidden" name="mode"/>
<input type="hidden" name="ldaphost"/>
<input type="hidden" name="base"/>
<input type="hidden" name="rootdn"/>

<form method="POST">
<div name="need_bind_info" style="display:none">
<table width="98%">
<tr>
<td><img src="/design/images/attention.gif"/></td>
<td>
<span translate="_">You must enter bind data for base</span>&nbsp;
<u><span class="alterator-label" name="base_"/></u>&nbsp;
<span translate="_">on host</span>&nbsp;
<u><span class="alterator-label" name="host_"/></u>
</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<span translate="_">root dn:</span>&nbsp;
<input type="text" class="text" name="bind_rootdn"/>&nbsp;
<span translate="_" nameref="newusername">root pw:</span>&nbsp;
<input type="password" class="text" name="bind_rootpw"/>
</td>
<td>
<input type="button" name="bind_btn" value="Bind" class="btn"/>&nbsp;
<span translate="_">or</span>&nbsp;
<input type="button" name="select_btn" value="Select other" class="btn"/>
</td>
</tr>
</table>
</div>
<div name="select_area" style="display:none">
<table width="100%">
<thead>
<tr>
<th colspan="3"><span translate="_">Select userlist source</span></th>
</tr>
</thead>
<tbody>
<tr>
<td width="20px"><input type="radio" name="use_src" value="system" checked="#t"/></td>
<td style="white-space:nowrap;text-align:left"><span translate="_">Current auth state</span></td>
<td width="100%">&nbsp;</td>
</tr>

<tr>
<td width="20px"><input type="radio" name="use_src" value="local" checked="#f"/></td>
<td style="white-space:nowrap;text-align:left"><span translate="_">/etc/passwd file on this server</span></td>
<td width="100%">&nbsp;</td>
</tr>
<tr>
<td><input type="radio" name="use_src" value="localldap"/></td>
<td align="left"><span translate="_">LDAP base on this server</span></td>
<td><select name="new_base_src" enumref="/ldap-users/bases" style="display:none;width:150px"/></td>
</tr>
<tr>
<td><input type="radio" name="use_src" value="ldap"/></td>
<td align="left"><span translate="_">Other LDAP server</span></td>
<td>
<div name="rem_base_src_div" style="display:none">
<span translate="_">Remote host:</span>&nbsp;
<input type="text" class="text" name="rem_host" style="width:120px"/>&nbsp;
<span translate="_" nameref="newusername">remote base:</span>&nbsp;
<select name="rem_base_src" enumref="/ldap-users/bases" style="width:200px"/>
</div>
</td>
</tr>
</tbody>
</table>
<table width="100%">
<tr>
<td colspan="3" style="padding-top:1em;">
<input type="button" name="useit_btn" value="Use selected source" class="btn"/>
&nbsp;
<input type="button" name="ret_list" value="Return to list" class="btn"/>
</td>
</tr>
</table>
</div>
<!-- create new user begin -->
<table width="100%" name="adduser_area">
<tr><td colspan="2">
<table width="100%">
<tr name="auth_src">
<td width="70%">
<span translate="_">Used base:</span>&nbsp;
<u><span class="alterator-label" name="base_"/></u>&nbsp;
<span translate="_">on host</span>&nbsp;
<u><span class="alterator-label" name="host_"/></u>&nbsp;
</td>
<td style="text-align:right;padding-right:5px">
<input type="button" name="select_btn" value="Source selector" class="btn"/>&nbsp;
<!--<input type="button" name="migration" value="Migration tools" class="btn"/>-->
</td>
</tr>
<tr>
<td colspan="2">
<span translate="_" nameref="newusername">New account:</span>&nbsp;
<input type="text" class="text" name="newusername"/>&nbsp;
<input type="button" name="useradd" value="Create" class="btn"/>
</td>
</tr>
<tr>
<td colspan="2">
<hr/>
</td></tr>
</table>
</td>
</tr>
<tr>
<td align="left" colspan="2">
<table><tr><td>
<span translate="_">Filter:</span>&nbsp;
<input type="radio" name="use_filter" value="system" checked="#f"/>
<span translate="_">System only</span>&nbsp;
<input type="radio" name="use_filter" value="real" checked="#t"/>
<span translate="_">Peoples</span>.&nbsp;
<span translate="_">UID From:</span>&nbsp;
<input type="text" class="text" name="min_uid" value="4999" style="width:40px;"/>&nbsp;
<span translate="_">to</span>&nbsp;
<input type="text" class="text" name="max_uid" value="9000" style="width:40px;"/>&nbsp;
<input type="button" name="filter" value="Select" class="btn"/>
</td>
<td>
<div name="data_not_saved" style="display:none">
<span class="alterator-information-message">
<img src="/design/images/information.gif"/>
<span translate="_">Do not forget save data...</span>
</span>
</div>
<div name="update_message" style="display:none">
<span class="alterator-information-message">
<img src="/design/images/information.gif"/>
<span translate="_">User settings updated</span>
</span>
</div>
</td>
</tr></table></td>
</tr>
</table>
<!-- create new user end -->
<!-- users list begin -->
<table width="100%" name="main_area">
<tr>
<td style="width:150px" rowspan="2">
<select name="user" multiple="true" size="24" style="width:150px"/>
</td>
<td style="padding-left:10px">
<div class="alterator-accordion" name="accordion">
<h3><span translate="_">Account</span></h3>
<div>
<table>
<tr><td>
<table>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Name:</span></td>
<td style="padding-left:5px;padding-bottom: 7px;"><strong><span class="alterator-label" name="username"/></strong>&nbsp;&nbsp;
uid:&nbsp;<strong><span class="alterator-label" name="uidNumber"/></strong></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Last name:</span></td>
<td><input type="text" class="text" name="sn"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">First name:</span></td>
<td><input type="text" class="text" name="givenname"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Patronym:</span></td>
<td><input type="text" class="text" name="patronym"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Home directory:</span></td>
<td><input type="text" class="text" name="homedirectory"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Shell:</span></td>
<td><select name="loginshell"/></td>
</tr>
<tr>
<td style="vertical-align:top;text-align:right;padding-right:5px"><span translate="_">Password:</span></td>
<td>
<table>
<tr>
<td style="text-align:left;" colspan="2">
<input type="checkbox" name="auto" value="#t"/>
<span translate="_">Generate automatically</span>
</td>
</tr>
<tr>
<td><input type="password" name="passwd_1" class="text"/></td>
<td><small><span translate="_" name="passwd_1">(enter passphrase)</span></small></td>
</tr>
<tr>
<td><input type="password" name="passwd_2" class="text"/></td>
<td><small><span translate="_" name="passwd_2">(repeat passphrase)</span></small></td>
</tr>
<tr>
<td><input type="text" name="passwd_auto" class="text" style="display:none" readonly="yes"/></td>
<td><input type="button" name="generate_button" value="Generate" class="btn" style="display:none"/></td>
</tr>
<tr>
<td colspan="2"><span nameref="passwd_auto" style="display:none">&nbsp;</span></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td>
<table name="photo_frame">
<tr><td style="height:96px;width:96px;white-space:nowrap;text-align:center;">
<fieldset name="photo_set" style="height:110px;width:100px;">
<legend align="center"><span translate="_">Photo</span></legend>
<img src="/design/images/ldap-users/notfound.png" class="alterator-img" name="jpegphoto" height="94" width="94"/>
</fieldset>
</td></tr>
<tr>
<td style="text-align:left;padding-left:16px;white-space:pre-line;"><input type="button" name="set_photo" value="Add" class="btn" style="width:94px;"/>
<input type="button" name="del_photo" value="Del" class="btn" style="width:94px;"/></td>
</tr>
</table>
</td>
</tr>
<tr name="photo_upload_area" style="display:none">
<td style="white-space:nowrap;text-align:left">
<span translate="_">Select new user photo:</span>&nbsp;
<input type="file" name="photo_file" class="text"/>
</td>
<td style="white-space:nowrap;text-align:center"><input type="button" name="upload_photo" value="Upload" class="btn"/>
<input type="button" name="cancel_photo" value="Cancel" class="btn"/>
</td>
</tr>
</table><br/><br/>
</div>

<h3><span translate="_">Group membership</span></h3>
<div>
<table>
<thead>
<tr>
<th><span translate="_">Member of</span></th>
<th>&nbsp;</th>
<th><span translate="_">Available groups</span></th>
</tr>
</thead>
<tbody>
<tr style="height:270px;">
<td>
<select name="in_groups" multiple="true" style="width:200px;height:100%;"/>
</td>
<td valign="middle" >
<img src="/design/images/null.gif" name="add_to_group" class="prev-page-button" />
<br/><br/>
<img src="/design/images/null.gif" name="remove_from_group" class="next-page-button" />
</td>
<td>
<select name="out_groups" multiple="true" style="width:200px;height:100%;"/>
</td>
</tr>
</tbody>
</table>
</div>
<!-- common for local and ldap end -->
<h3 name="work_h"><span translate="_">Work</span></h3>
<div >
<table>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Organization:</span></td>
<td><input type="text" class="text" name="o"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px">
<span translate="_">Organisation Unit:</span></td>
<td><input type="text" class="text" name="ou"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_">Title:</span></td>
<td><input type="text" class="text" name="title"/><select name="title_list" onchange="form.title.value = form.title_list.options[form.title_list.selectedIndex].value;form.title_list.value=&#39;&#39;"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_" nameref="telephonenumber">Phone:</span></td>
<td><input type="text" class="text" name="telephonenumber"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_" nameref="mobile">Mobile phone:</span></td>
<td><input type="text" class="text" name="mobile"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_" nameref="departmentnumber">Department:</span></td>
<td><input type="text" class="text" name="departmentnumber"/><select name="departmentnumber_list" onchange="form.departmentnumber.value = form.departmentnumber_list.options[form.departmentnumber_list.selectedIndex].value;form.departmentnumber_list.value=&#39;&#39;"/></td>
</tr>
<tr>
<td style="text-align:right;padding-right:5px"><span translate="_" nameref="postaladdress">Address:</span></td>
<td><input type="text" class="text" name="postaladdress"/></td>
</tr>
</table>
</div>
<h3 name="mail_h"><span translate="_">E-mail</span></h3>
<div style="max-height:250px; overflow: auto">
<table>
<tr>
<td>
<select name="email" multiple="true" size="4" style="width:98%"/>
</td>
<td style="text-align:left;vertical-align:top">
<input type="button" name="emaildel" value="Remove" class="btn"/>
</td>
</tr>
<tr>
<td>
<span translate="_" nameref="newemail">New email:</span>
&nbsp;
<input type="text" class="text" name="newemail"/>
</td>
<td>
<input type="button" name="emailadd" value="Add" class="btn"/>
</td>
</tr>
</table>
</div>
</div> <!-- accordion_end -->
<br/>
</td>
</tr>
<tr><td>
<table>
<tr>
<td style="text-align:left">
<input type="button" name="usersave" value="Save settings" class="btn"/>
&nbsp;&nbsp;&nbsp;
<input type="button" name="userdelete" value="Delete user" class="btn"/>
</td>
</tr>
</table>
</td></tr>
</table>
</form>
<!-- users list end -->
</body>
</html>
 
: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
: Michael Shigorin