tazpanel annotate settings.cgi @ rev 336

Add settings/groups
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Dec 31 16:14:48 2012 +0100 (2012-12-31)
parents bfa31f855b8c
children 1bccb526ff67
rev   line source
pankso@42 1 #!/bin/sh
pankso@42 2 #
pankso@42 3 # System settings CGI interface: user, locale, keyboard, date. Since we
paul@205 4 # don't have multiple pages here there is only one case used to get command
paul@205 5 # values and the full content is followed directly.
pankso@42 6 #
pankso@112 7 # Copyright (C) 2011 SliTaz GNU/Linux - BSD License
pankso@42 8 #
pankso@42 9
pankso@42 10 # Common functions from libtazpanel
pankso@42 11 . lib/libtazpanel
pankso@42 12 get_config
pascal@81 13 header
pankso@42 14
al@292 15 TITLE=$(gettext 'TazPanel - Settings')
pankso@42 16
pascal@336 17 # Get system database. LDAP compatible.
pascal@336 18 getdb()
pascal@336 19 {
pascal@336 20 getent $1 2>/dev/null || cat /etc/$1
pascal@336 21 }
pascal@336 22
pascal@336 23 listdb()
pascal@336 24 {
pascal@336 25 for item in $(getdb $1 | cut -d ":" -f 1); do
pascal@336 26 echo "<option>$item</option>\n"
pascal@336 27 done
pascal@336 28 }
pascal@336 29
pankso@42 30 #
pankso@42 31 # Commands executed before page loading.
pankso@42 32 #
pankso@42 33
pascal@81 34 case " $(GET) " in
pascal@115 35 *\ do\ *)
paul@205 36 # Assume no array support in httpd_helper.sh ;^)
pascal@115 37 users=""
pascal@336 38 groups=""
pascal@115 39 IFS="&"
pascal@115 40 for i in $QUERY_STRING ; do
pascal@115 41 case "$i" in
pascal@336 42 user=*) users="$users ${i#user=}" ;;
pascal@336 43 group=*) groups="$groups ${i#group=}" ;;
pascal@115 44 esac
pascal@115 45 done
pascal@115 46 unset IFS
pascal@336 47 for cmd in "Delete group" ; do
pascal@336 48 [ "$(GET do)" == "$(gettext "$cmd")" ] || continue
pascal@336 49 for group in $groups ; do
pascal@336 50 case "$cmd" in
pascal@336 51 Delete*) delgroup $group ;;
pascal@336 52 esac
pascal@336 53 done
pascal@336 54 done
pascal@115 55 for cmd in "Delete user" "Lock user" "Unlock user" \
pascal@115 56 "Change password" ; do
al@303 57 [ "$(GET do)" == "$(gettext "$cmd")" ] || continue # BUGGY
pascal@115 58 for user in $users ; do
pascal@115 59 case "$cmd" in
pascal@115 60 Delete*) deluser $user ;;
pankso@119 61 Lock*) passwd -l $user | log ;;
pankso@119 62 Unlock*) passwd -u $user | log ;;
pascal@252 63 Change*) echo "$user:$(GET password)" | chpasswd -m | log ;;
pascal@115 64 esac
pascal@115 65 done
pascal@115 66 done ;;
pascal@336 67 *\ addmember\ *)
pascal@336 68 addgroup $(GET member) $(GET group) ;;
pascal@336 69 *\ delmember\ *)
pascal@336 70 delgroup $(GET member) $(GET group) ;;
pascal@336 71 *\ addgroup\ *)
pascal@336 72 addgroup $(GET addgroup) ;;
pascal@115 73 *\ adduser\ *)
pankso@42 74 #
pankso@42 75 # Manage system user accounts
pankso@42 76 #
pascal@81 77 user=$(GET adduser)
pascal@115 78 passwd=$(GET passwd)
pascal@81 79 if [ -n "$user" ]; then
slaxemulator@233 80 adduser -D -s /bin/sh -g "SliTaz User" -G users -h /home/$user $user
pascal@252 81 echo "$user:$passwd" | chpasswd -m | log
slaxemulator@233 82 for g in audio cdrom floppy video tty
pascal@81 83 do
pascal@81 84 addgroup $user $g
pascal@81 85 done
pascal@81 86 fi ;;
pascal@81 87 *\ gen_locale\ *)
pascal@81 88 new_locale=$(GET gen_locale) ;;
pascal@141 89 *\ gen_keymap\ *)
pascal@141 90 new_keymap=$(GET gen_keymap) ;;
pascal@142 91 *\ apply_xorg_kbd\ *)
pascal@142 92 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
pascal@142 93 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
pascal@81 94 *\ rdate\ *)
pankso@42 95 rdate -s tick.greyware.com ;;
pascal@81 96 *\ hwclock\ *)
pankso@150 97 hwclock -w -u ;;
pankso@110 98 *\ panel_pass*)
pankso@110 99 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF ;;
pankso@110 100 *\ style*)
pankso@110 101 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
al@292 102 . $CONFIG ;;
pankso@42 103 esac
pankso@42 104
pankso@42 105 #
pankso@42 106 # Default xHTML content
pankso@42 107 #
pankso@42 108 xhtml_header
pankso@67 109
pankso@110 110 case " $(GET) " in
pascal@336 111 *\ group*)
pascal@336 112 #
pascal@336 113 # Groups management
pascal@336 114 #
pascal@336 115 cat <<EOT
pascal@336 116 <h3 id="groups">$(gettext 'Manage groups')</h3>
pascal@336 117
pascal@336 118 <form method="get" action="$SCRIPT_NAME">
pascal@336 119 <input type="hidden" name="groups" />
pascal@336 120 <div id="actions">
pascal@336 121 <div class="float-left">
pascal@336 122 $(gettext 'Selection:')
pascal@336 123 <input type="submit" name="do" value="$(gettext 'Delete group')" />
pascal@336 124 </div>
pascal@336 125 </div>
pascal@336 126
pascal@336 127 <table class="zebra outbox">
pascal@336 128 <thead>
pascal@336 129 <tr class="thead">
pascal@336 130 <td>$(gettext 'Group')</td>
pascal@336 131 <td>$(gettext 'Group ID')</td>
pascal@336 132 <td>$(gettext 'Members')</td>
pascal@336 133 </tr>
pascal@336 134 </thead>
pascal@336 135 </tbody>
pascal@336 136 EOT
pascal@336 137 for group in `getdb group | cut -d ":" -f 1`
pascal@336 138 do
pascal@336 139 IFS=':'
pascal@336 140 set -- $(getdb group | grep "^$group:")
pascal@336 141 unset IFS
pascal@336 142 gid=$3
pascal@336 143 members=$4
pascal@336 144 cat <<EOT
pascal@336 145 <tr>
pascal@336 146 <td><input type='checkbox' name='group' value='$group' />
pascal@336 147 <img src='$IMAGES/users.png' />$group</td>
pascal@336 148 <td>$gid</td>
pascal@336 149 <td>${members//,/, }</td>
pascal@336 150 </tr>
pascal@336 151 EOT
pascal@336 152 done
pascal@336 153 cat << EOT
pascal@336 154 </tbody>
pascal@336 155 </table>
pascal@336 156 </form>
pascal@336 157
pascal@336 158 <section>
pascal@336 159 <h4>$(gettext 'Add a new group')</h4>
pascal@336 160
pascal@336 161 <form method="get" action="$SCRIPT_NAME">
pascal@336 162 <input type="hidden" name="groups" />
pascal@336 163 <table>
pascal@336 164 <tr><td>$(gettext 'Group name:')</td>
pascal@336 165 <td><input type="text" name="addgroup" size="30" /></td>
pascal@336 166 <td>
pascal@336 167 <input type="submit" value="$(gettext 'Create group')" /></td></tr>
pascal@336 168 </table>
pascal@336 169 </form>
pascal@336 170 </section>
pascal@336 171
pascal@336 172 <section>
pascal@336 173 <h4>$(gettext 'Manage group membership')</h4>
pascal@336 174
pascal@336 175 <form method="get" action="$SCRIPT_NAME">
pascal@336 176 <input type="hidden" name="groups" />
pascal@336 177 <table>
pascal@336 178 <tr><td>$(gettext 'Group name:')</td>
pascal@336 179 <td><select name="group">
pascal@336 180 $(listdb group)
pascal@336 181 </select></td>
pascal@336 182 <td>$(gettext 'User name:')</td>
pascal@336 183 <td><select name="member">
pascal@336 184 $(listdb passwd)
pascal@336 185 </select></td></tr>
pascal@336 186 <tr><td colspan="4"><input type="submit" name="addmember" value="$(gettext 'Add user')" />
pascal@336 187 <input type="submit" name="delmember" value="$(gettext 'Remove user')" /></td></tr>
pascal@336 188 </table>
pascal@336 189 </form>
pascal@336 190 </section>
pascal@336 191
pascal@336 192 EOT
pascal@336 193 ;;
pascal@336 194
pankso@110 195 *\ user*)
pankso@110 196 #
pankso@110 197 # Users management
pankso@110 198 #
pankso@110 199 cat <<EOT
al@303 200 <h3 id="users">$(gettext 'Manage users')</h3>
al@303 201
pankso@110 202 <form method="get" action="$SCRIPT_NAME">
pascal@115 203 <div id="actions">
pascal@115 204 <div class="float-left">
al@303 205 $(gettext 'Selection:')
al@303 206 <input type="submit" name="do" value="$(gettext 'Delete user')" />
al@303 207 <input type="submit" name="do" value="$(gettext 'Lock user')" />
al@303 208 <input type="submit" name="do" value="$(gettext 'Unlock user')" />
pascal@115 209 </div>
pascal@115 210 </div>
al@303 211
al@311 212 <table class="zebra outbox">
al@303 213 <thead>
pascal@115 214 <tr class="thead">
al@303 215 <td>$(gettext 'Login')</td>
al@303 216 <td>$(gettext 'User ID')</td>
al@303 217 <td>$(gettext 'Name')</td>
al@303 218 <td>$(gettext 'Home')</td>
al@303 219 <td>$(gettext 'Shell')</td>
pascal@115 220 </tr>
al@303 221 </thead>
al@303 222 </tbody>
pascal@115 223 EOT
pascal@336 224 for login in `getdb passwd | cut -d ":" -f 1`
pankso@110 225 do
pascal@115 226 if [ -d /home/$login ]; then
pascal@115 227 colorlogin=$login
pascal@115 228 grep -qs "^$login:!" /etc/shadow &&
pascal@115 229 colorlogin="<span style='color: red;'>$login</span>"
pascal@115 230 IFS=':'
pascal@336 231 set -- $(getdb passwd | grep "^$login:")
pascal@115 232 unset IFS
pascal@115 233 uid=$3
pascal@115 234 gid=$4
pascal@115 235 name="$(echo $5 | sed s/,.*//)"
pascal@115 236 home="$6"
pascal@115 237 shell=$7
pascal@115 238 cat <<EOT
pascal@115 239 <tr>
pascal@115 240 <td><input type='checkbox' name='user' value='$login' />
pascal@115 241 <img src='$IMAGES/user.png' />$colorlogin</td>
pascal@115 242 <td>$uid:$gid</td>
pascal@115 243 <td>$name</td>
pascal@115 244 <td>$home</td>
pascal@115 245 <td>$shell</td>
pascal@115 246 </tr>
pascal@115 247 EOT
pankso@110 248 fi
pankso@110 249 done
al@303 250 cat << EOT
al@303 251 </tbody>
al@303 252 </table>
al@303 253 EOT
pankso@110 254 cat << EOT
pankso@117 255 <p>
al@303 256 $(gettext 'Password:')
pascal@121 257 <input type="password" name="password" />
al@303 258 <input type="submit" name="do" value="$(gettext 'Change password')" />
pankso@117 259 </p>
pankso@42 260 </form>
pankso@42 261
al@312 262 <section>
al@303 263 <h4>$(gettext 'Add a new user')</h4>
al@303 264
pankso@42 265 <form method="get" action="$SCRIPT_NAME">
pankso@42 266 <input type="hidden" name="user" />
al@303 267 <table>
al@303 268 <tr><td>$(gettext 'User login:')</td>
al@303 269 <td><input type="text" name="adduser" size="30" /></td></tr>
al@303 270 <tr><td>$(gettext 'User password:')</td>
al@303 271 <td><input type="password" name="passwd" size="30" /></td></tr>
al@303 272 <tr><td colspan="2">
al@303 273 <input type="submit" value="$(gettext 'Create user')" /></td></tr>
al@303 274 </table>
pankso@42 275 </form>
al@312 276 </section>
pascal@147 277
al@312 278 <section>
al@303 279 <h4>$(gettext 'Current user sessions')</h4>
pascal@147 280
al@303 281 <pre>$(who)</pre>
al@312 282 </section>
al@303 283
al@312 284 <section>
al@303 285 <h4>$(gettext 'Last user sessions')</h4>
al@303 286
al@303 287 <pre>$(last)</pre>
al@312 288 </section>
pankso@42 289 EOT
pankso@110 290 ;;
al@313 291
al@313 292
al@313 293 *\ locale*)
al@313 294 #
al@313 295 # Choose locale
al@313 296 #
al@313 297 LOADING_MSG="$(gettext 'Please wait...')"
al@313 298 loading_msg
al@313 299 cur_loc=$(locale | grep LANG | cut -d= -f2)
al@318 300 cat << EOT
al@313 301 <h3 id="locale">$(gettext 'Choose locale')</h3>
al@313 302
al@313 303 <p>$(gettext 'Current locale settings:')</p>
al@313 304 <pre>$(locale)</pre>
al@313 305
al@313 306 <p>$(gettext 'Locales that are currently installed on the machine:')</p>
al@313 307 <pre>$(locale -a)</pre>
al@313 308
al@313 309 <p>$(gettext 'Available locales:')</p>
al@318 310 EOT
al@313 311
al@318 312 is_installed "glibc-locale"
al@318 313 [ $? = 1 ] &&
al@318 314 msg tip $(gettext \
paul@319 315 "Can't see your language?<br/>You can \
al@318 316 <a href='/pkgs.cgi?do=Install&glibc-locale'>install glibc-locale</a> \
paul@319 317 to see a larger list of available locales.")
al@318 318
al@318 319 cat << EOT
al@313 320 <form method="get" action="$SCRIPT_NAME">
al@313 321 <div class="outbox">
al@313 322 <table class="zebra fixed">
al@313 323 <thead>
al@313 324 <tr><td style="width:9em">$(gettext 'Code')</td>
al@313 325 <td style="width:10em">$(gettext 'Language')</td>
al@313 326 <td style="width:10em">$(gettext 'Territory')</td>
al@313 327 <td>$(gettext 'Description')</td>
al@313 328 </tr>
al@313 329 </thead>
al@313 330 </table>
al@313 331
al@313 332 <div style="max-height: 16em; overflow:auto">
al@313 333 <table class="zebra fixed">
al@313 334 <col style="width:9em">
al@313 335 <col style="width:10em">
al@313 336 <col style="width:10em">
al@313 337 <col>
al@313 338 <tbody style="max-height:10em; overflow:auto">
al@313 339 EOT
al@313 340 for locale in $(find /usr/share/i18n/locales -type f | sort)
al@313 341 do
al@313 342 locale_name=$(basename $locale)
al@313 343 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
al@313 344 if [ -n "$locale_title" ]; then
al@313 345 sel=""; [ "$locale_name" == "$cur_loc" ] && sel="checked"
al@313 346 cat << EOT
al@313 347 <tr><td><input type="radio" name="gen_locale" value="$locale_name" $sel />$locale_name</td>
al@313 348 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
al@313 349 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
al@313 350 <td>$locale_title</td>
al@313 351 </tr>
al@313 352 EOT
al@313 353 fi
al@313 354 done
al@313 355 cat << EOT
al@313 356 </tbody>
al@313 357 </table>
al@313 358 </div>
al@313 359 </div>
al@313 360 <p><input type="submit" value="$(gettext 'Activate')" /></p>
al@313 361 </form>
al@313 362 EOT
al@313 363 ;;
al@313 364
al@313 365
pankso@110 366 *)
pankso@110 367 #
pankso@110 368 # Defaut system settings page
pankso@110 369 #
pankso@110 370 cat << EOT
pankso@110 371 <div id="wrapper">
al@303 372 <h2>$(gettext 'System settings')</h2>
al@303 373 <p>$(gettext 'Manage system time, users or language settings')<p>
pankso@110 374 </div>
pankso@110 375 <div id="actions">
pankso@110 376 <a class="button" href="$SCRIPT_NAME?users">
pascal@336 377 <img src="$IMAGES/user.png" />$(gettext 'Manage users')</a>
pascal@336 378 <a class="button" href="$SCRIPT_NAME?groups">
pascal@336 379 <img src="$IMAGES/users.png" />$(gettext 'Manage groups')</a>
pankso@110 380 </div>
pankso@42 381
al@312 382 <section>
al@303 383 <h3>$(gettext 'System time')</h3>
al@303 384
al@303 385 <table>
al@313 386 <tr><td>$(gettext 'Time zome:')</td><td>$(cat /etc/TZ)
al@313 387 <a class="button" href="$SCRIPT_NAME">$(gettext 'Change')</a></td></tr>
al@303 388 <tr><td>$(gettext 'System time:')</td><td>$(date)</td></tr>
al@303 389 <tr><td>$(gettext 'Hardware clock:')</td><td>$(hwclock -r)</tr>
al@303 390 </table>
al@303 391 <a class="button" href="$SCRIPT_NAME?rdate">$(gettext 'Sync online')</a>
al@303 392 <a class="button" href="$SCRIPT_NAME?hwclock">$(gettext 'Set hardware clock')</a>
al@312 393 </section>
pankso@110 394 EOT
pankso@110 395 #
pankso@110 396 # Locale settings
pankso@110 397 #
pankso@110 398 cat << EOT
al@312 399 <section>
al@303 400 <h3 id="locale">$(gettext 'System language')</h3>
pankso@42 401 <p>
pankso@42 402 EOT
pankso@42 403 # Check if a new locale was requested
pankso@42 404 if [ -n "$new_locale" ]; then
pankso@42 405 rm -rf /usr/lib/locale/$new_locale
pankso@42 406 localedef -i $new_locale -c -f UTF-8 \
pankso@42 407 /usr/lib/locale/$new_locale
pankso@42 408 # System configuration
pankso@42 409 echo "LANG=$new_locale" > /etc/locale.conf
pankso@42 410 echo "LC_ALL=$new_locale" >> /etc/locale.conf
al@318 411 msg warn "$(eval_gettext \
al@318 412 'You must logout and login again to your current session to use $new_locale locale.')"
pankso@42 413 else
al@313 414 gettext 'Current system locale:'; echo -n " <strong>"
al@313 415 locale | grep LANG | cut -d= -f2
pankso@42 416 fi
pankso@42 417 cat << EOT
al@313 418 </strong> <a class="button" href="$SCRIPT_NAME?locale">$(gettext 'Change')</a></p>
al@312 419 </section>
pankso@110 420
al@312 421 <section>
al@303 422 <h3 id="keymap">$(gettext 'Console keymap')</h3>
pascal@141 423 <p>
pascal@141 424 EOT
pascal@141 425 # Check if a new keymap was requested
pascal@141 426 if [ -n "$new_keymap" ]; then
pascal@141 427 echo "$new_keymap" > /etc/keymap.conf
pascal@141 428 if [ -x /bin/loadkeys ]; then
pascal@141 429 loadkeys $new_keymap
pascal@141 430 else
pascal@141 431 loadkmap < /usr/share/kmap/$new_keymap.kmap
pascal@141 432 fi
pascal@141 433 fi
pascal@142 434 keymap=$(cat /etc/keymap.conf)
al@303 435 eval_gettext 'Current console keymap: $keymap'
pascal@142 436 echo "</p>"
pascal@142 437 if [ -n "$keymap" ]; then
pascal@142 438 case "$keymap" in
pascal@142 439 fr_CH*)
pascal@142 440 keymap="ch" ;;
pascal@142 441 ru)
pascal@142 442 keymap="us,ru(winkeys)" ;;
pascal@142 443 slovene)
pascal@142 444 keymap=si ;;
pascal@142 445 *)
pascal@142 446 keymap=${keymap%-lat*}
pascal@142 447 keymap=${keymap%-abnt2} ;;
pascal@142 448 esac
pascal@142 449 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
pascal@142 450 cat << EOT
pascal@142 451 <form method="get" action="$SCRIPT_NAME">
al@303 452 $(gettext 'Suggested keymap for Xorg:')
pascal@142 453 <input type="submit" name "apply_xorg_kbd" value="$keymap" />
pascal@142 454 <a class="button" href="index.cgi?file=$keyboard_config">
al@303 455 <img src="$IMAGES/edit.png" />$(gettext 'Edit')</a>
pascal@142 456 </form>
pascal@142 457 EOT
pascal@142 458 fi
pascal@141 459 cat << EOT
pascal@141 460 <form method="get" action="$SCRIPT_NAME">
al@303 461 $(gettext 'Available keymaps:')
pascal@141 462 <select name="gen_keymap">
pascal@141 463 $(list_keymaps)
pascal@141 464 </select>
al@303 465 <input type="submit" value="$(gettext 'Activate')" />
pascal@141 466 </form>
al@312 467 </section>
pascal@141 468
al@312 469 <section>
al@303 470 <h2>$(gettext 'Panel configuration')</h2>
al@303 471
pankso@110 472 <form method="get" action="$SCRIPT_NAME">
pankso@110 473 <p>
al@303 474 $(gettext 'Style:')
pankso@110 475 <select name="style">
pankso@110 476 $(list_styles)
pankso@110 477 </select>
al@303 478 <input type="submit" value="$(gettext 'Activate')" />
pankso@110 479 </p>
pankso@110 480 </form>
pankso@110 481 <form method="get" action="$SCRIPT_NAME">
pankso@110 482 <p>
al@303 483 $(gettext 'Panel password:')
pankso@110 484 <input type="password" name="panel_pass"/>
al@303 485 <input type="submit" value="$(gettext 'Change')" />
pankso@110 486 </p>
pankso@110 487 </form>
pankso@110 488 <p>
al@303 489 $(gettext 'Configuration files:')
pankso@110 490 <a class="button" href="index.cgi?file=$CONFIG">
al@303 491 <img src="$IMAGES/edit.png" />$(gettext 'Panel')</a>
pankso@110 492 <a class="button" href="index.cgi?file=$HTTPD_CONF">
al@303 493 <img src="$IMAGES/edit.png" />$(gettext 'Server')</a>
pankso@110 494 </p>
pankso@110 495 <p>
al@303 496 $(gettext 'TazPanel provides a debuging mode and page:')
al@303 497 <a href="/index.cgi?debug">debug</a>
pankso@110 498 </p>
al@312 499 </section>
pankso@42 500 EOT
pankso@110 501 ;;
pankso@110 502 esac
pankso@42 503
pankso@42 504 xhtml_footer
pankso@42 505 exit 0