home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / user-setup / user-setup-ask < prev   
Encoding:
Text File  |  2007-02-15  |  5.5 KB  |  215 lines

  1. #!/bin/sh -e
  2.  
  3. . /usr/share/debconf/confmodule
  4.  
  5. db_capb "backup"
  6.  
  7. if [ "$1" ]; then
  8.     ROOT="$1"
  9. else
  10.     ROOT=
  11. fi
  12. export ROOT
  13.  
  14. . /usr/lib/user-setup/functions.sh
  15.  
  16. # For the convenience of heavy testers
  17. set_special_users() {
  18.     local realname
  19.     case "$fullname" in
  20.         fjp)    realname="Frans Pop" ;;
  21.         tbm)    realname="Martin Michlmayr" ;;
  22.         *)        return 1 ;;
  23.     esac
  24.     db_set passwd/user-fullname "$realname"
  25.     userdefault=$fullname
  26.     db_fset passwd/username seen true
  27.     return 0
  28. }
  29.  
  30. # Main loop starts here. Use a state machine to allow jumping back to
  31. # previous questions.
  32. STATE=0
  33. while :; do
  34.     case "$STATE" in
  35.     0)
  36.         # Ask how the password files should be set up.
  37.         db_input low passwd/shadow || true
  38.         # Ask if root should be allowed to login.
  39.         db_input medium passwd/root-login || true
  40.     ;;
  41.     1)
  42.         db_get passwd/root-login
  43.         if [ "$RET" = false ]; then
  44.             # root password will be locked
  45.             db_set passwd/root-password ""
  46.             db_set passwd/root-password-crypted "!"
  47.         elif ! root_password; then
  48.             # First check whether the root password was preseeded crypted
  49.             # to an actual password (not locked)
  50.             db_get passwd/root-password-crypted || true
  51.             if ! test "$RET" || [ "x$RET" = "x!" ]; then
  52.                 # No preseed of the root password hash
  53.                 # we will prompt the user
  54.                 db_set passwd/root-password-crypted ""
  55.                 db_input critical passwd/root-password || true
  56.                 db_input critical passwd/root-password-again || true
  57.             fi
  58.         fi
  59.     ;;
  60.     2)
  61.         db_get passwd/root-login
  62.         if [ "$RET" = false ]; then
  63.             # root password will be locked
  64.             db_set passwd/root-password-again ""
  65.         elif ! root_password; then
  66.             # First check whether the root password was preseeded crypted
  67.             db_get passwd/root-password-crypted || true
  68.             if ! test "$RET" ; then
  69.                 # Compare the two passwords, loop back if not
  70.                 # identical, or if empty.
  71.                 db_get passwd/root-password
  72.                 ROOT_PW="$RET"
  73.                 if [ -z "$ROOT_PW" ]; then
  74.                     db_fset user-setup/password-empty seen false
  75.                     db_input critical user-setup/password-empty
  76.                     db_fset passwd/root-password seen false
  77.                     db_fset passwd/root-password-again seen false
  78.                     STATE=1
  79.                     continue
  80.                 fi
  81.                 db_get passwd/root-password-again
  82.                 if [ "$ROOT_PW" != "$RET" ]; then
  83.                     db_fset user-setup/password-mismatch seen false
  84.                     db_input critical user-setup/password-mismatch
  85.                     db_fset passwd/root-password seen false
  86.                     db_fset passwd/root-password-again seen false
  87.                     STATE=1
  88.                     continue
  89.                 fi
  90.                 ROOT_PW=''
  91.             fi
  92.         fi
  93.     ;;
  94.     3)
  95.         # Ask if a non-root user should be made, if there is not
  96.         # already one.
  97.         db_get passwd/root-login
  98.         if [ "$RET" = false ]; then
  99.             # always make non-root user; this user will be able
  100.             # to sudo to root
  101.             db_set passwd/make-user true
  102.         elif ! is_system_user; then
  103.             db_input medium passwd/make-user || true
  104.         fi
  105.     ;;
  106.     4)
  107.         # Prompt for user info.
  108.         db_get passwd/make-user
  109.         if [ "$RET" = true ] && ! is_system_user; then
  110.             db_input critical passwd/user-fullname || true
  111.         fi
  112.     ;;
  113.     5)
  114.         # Prompt for user info.
  115.         db_get passwd/make-user
  116.         if [ "$RET" = true ] && ! is_system_user; then
  117.             LOOP=""
  118.             db_get passwd/username
  119.             if [ -z "$RET" ]; then
  120.                 db_get passwd/user-fullname
  121.                 fullname=$RET
  122.                 if ! set_special_users; then
  123.                     userdefault=$(echo "$fullname" | sed 's/ .*//' | LC_ALL=C tr A-Z a-z)
  124.                 fi
  125.                 if test -n "$userdefault" && \
  126.                     LC_ALL=C expr "$userdefault" : '[a-z][-a-z0-9]*$' >/dev/null; then
  127.                     db_set passwd/username "$userdefault"
  128.                 fi
  129.             fi
  130.             db_input critical passwd/username || true
  131.         fi
  132.     ;;
  133.     6)
  134.         # Verify user.
  135.         db_get passwd/make-user
  136.         if [ "$RET" = true ] && ! is_system_user; then
  137.             # Verify the user name, loop with message if bad.
  138.             db_get passwd/username
  139.             USER="$RET"
  140.             if ! LC_ALL=C expr "$USER" : '[a-z][-a-z0-9]*$' >/dev/null; then
  141.                 db_fset passwd/username seen false
  142.                 db_fset passwd/username-bad seen false
  143.                 db_input critical passwd/username-bad
  144.                 STATE=3
  145.                 continue
  146.             fi
  147.             
  148.             if grep -v '^#' /usr/lib/user-setup/reserved-usernames | \
  149.                grep -q "^$USER\$"; then
  150.                 db_fset passwd/username seen false
  151.                 db_fset passwd/username-reserved seen false
  152.                 db_subst passwd/username-reserved USERNAME "$USER"
  153.                 db_input critical passwd/username-reserved
  154.                 STATE=3
  155.                 continue
  156.             fi
  157.  
  158.             db_get passwd/user-password-crypted || true
  159.             if ! test "$RET" ; then
  160.                 db_input critical passwd/user-password || true
  161.                 db_input critical passwd/user-password-again || true
  162.             fi
  163.         fi
  164.     ;;
  165.     7)
  166.         db_get passwd/make-user
  167.         if [ "$RET" = true ] && ! is_system_user; then
  168.             db_get passwd/user-password-crypted || true
  169.             if ! test "$RET" ; then
  170.                 # Compare the two passwords, loop with message if not
  171.                 # identical, or if empty.
  172.                 db_get passwd/user-password
  173.                 USER_PW="$RET"
  174.                 db_get passwd/user-password-again
  175.                 if [ "$USER_PW" != "$RET" ]; then
  176.                     db_set passwd/user-password ""
  177.                     db_set passwd/user-password-again ""
  178.                     db_fset user-setup/password-mismatch seen false
  179.                     db_input critical user-setup/password-mismatch
  180.                     db_fset passwd/user-password seen false
  181.                     db_fset passwd/user-password-again seen false
  182.                     STATE=6
  183.                     continue
  184.                 fi
  185.                 if [ -z "$USER_PW" ]; then
  186.                     db_set passwd/user-password ""
  187.                     db_set passwd/user-password-again ""
  188.                     db_fset user-setup/password-empty seen false
  189.                     db_input critical user-setup/password-empty
  190.                     db_fset passwd/user-password seen false
  191.                     db_fset passwd/user-password-again seen false
  192.                     STATE=6
  193.                     continue
  194.                 fi
  195.             fi
  196.         fi
  197.     ;;
  198.     *)
  199.         break
  200.     ;;
  201.     esac
  202.  
  203.     if db_go; then
  204.         STATE=$(($STATE + 1))
  205.     else
  206.         STATE=$(($STATE - 1))
  207.     fi
  208.     #echo "ON STATE: $STATE"
  209. done
  210.  
  211. if test "$STATE" = -1 
  212. then
  213.     exit 10
  214. fi
  215.