1#!/bin/sh 2#- 3# SPDX-License-Identifier: BSD-2-Clause-FreeBSD 4# 5# Copyright (c) 2010 iXsystems, Inc. All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 2. Redistributions in binary form must reproduce the above copyright 13# notice, this list of conditions and the following disclaimer in the 14# documentation and/or other materials provided with the distribution. 15# 16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26# SUCH DAMAGE. 27# 28# $FreeBSD$ 29 30# Functions which runs commands on the system 31 32. ${BACKEND}/functions.sh 33. ${BACKEND}/functions-parse.sh 34 35 36# Function which checks and sets up auto-login for a user if specified 37check_autologin() 38{ 39 get_value_from_cfg autoLoginUser 40 if [ -n "${VAL}" -a "${INSTALLTYPE}" = "PCBSD" ] 41 then 42 AUTOU="${VAL}" 43 # Add the auto-login user line 44 sed -i.bak "s/AutoLoginUser=/AutoLoginUser=${AUTOU}/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc 45 46 # Add the auto-login user line 47 sed -i.bak "s/AutoLoginEnable=false/AutoLoginEnable=true/g" ${FSMNT}/usr/local/kde4/share/config/kdm/kdmrc 48 49 fi 50}; 51 52# Function which actually runs the adduser command on the filesystem 53add_user() 54{ 55 ARGS="${1}" 56 57 if [ -e "${FSMNT}/.tmpPass" ] 58 then 59 # Add a user with a supplied password 60 run_chroot_cmd "cat /.tmpPass | pw useradd ${ARGS}" 61 rc_halt "rm ${FSMNT}/.tmpPass" 62 else 63 # Add a user with no password 64 run_chroot_cmd "cat /.tmpPass | pw useradd ${ARGS}" 65 fi 66 67}; 68 69# Function which reads in the config, and adds any users specified 70setup_users() 71{ 72 73 # We are ready to start setting up the users, lets read the config 74 while read line 75 do 76 77 echo $line | grep -q "^userName=" 2>/dev/null 78 if [ $? -eq 0 ] 79 then 80 get_value_from_string "${line}" 81 USERNAME="$VAL" 82 fi 83 84 echo $line | grep -q "^userComment=" 2>/dev/null 85 if [ $? -eq 0 ] 86 then 87 get_value_from_string "${line}" 88 USERCOMMENT="$VAL" 89 fi 90 91 echo $line | grep -q "^userPass=" 2>/dev/null 92 if [ $? -eq 0 ] 93 then 94 get_value_from_string "${line}" 95 USERPASS="$VAL" 96 fi 97 98 echo $line | grep -q "^userEncPass=" 2>/dev/null 99 if [ $? -eq 0 ] 100 then 101 get_value_from_string "${line}" 102 USERENCPASS="$VAL" 103 fi 104 105 echo $line | grep -q "^userShell=" 2>/dev/null 106 if [ $? -eq 0 ] 107 then 108 get_value_from_string "${line}" 109 strip_white_space "$VAL" 110 USERSHELL="$VAL" 111 fi 112 113 echo $line | grep -q "^userHome=" 2>/dev/null 114 if [ $? -eq 0 ] 115 then 116 get_value_from_string "${line}" 117 USERHOME="$VAL" 118 fi 119 120 echo $line | grep -q "^userGroups=" 2>/dev/null 121 if [ $? -eq 0 ] 122 then 123 get_value_from_string "${line}" 124 USERGROUPS="$VAL" 125 fi 126 127 128 echo $line | grep -q "^commitUser" 2>/dev/null 129 if [ $? -eq 0 ] 130 then 131 # Found our flag to commit this user, lets check and do it 132 if [ -n "${USERNAME}" ] 133 then 134 135 # Now add this user to the system, by building our args list 136 ARGS="-n ${USERNAME}" 137 138 if [ -n "${USERCOMMENT}" ] 139 then 140 ARGS="${ARGS} -c \"${USERCOMMENT}\"" 141 fi 142 143 if [ -n "${USERPASS}" ] 144 then 145 ARGS="${ARGS} -h 0" 146 echo "${USERPASS}" >${FSMNT}/.tmpPass 147 elif [ -n "${USERENCPASS}" ] 148 then 149 ARGS="${ARGS} -H 0" 150 echo "${USERENCPASS}" >${FSMNT}/.tmpPass 151 else 152 ARGS="${ARGS} -h -" 153 rm ${FSMNT}/.tmpPass 2>/dev/null 2>/dev/null 154 fi 155 156 if [ -n "${USERSHELL}" ] 157 then 158 ARGS="${ARGS} -s \"${USERSHELL}\"" 159 else 160 ARGS="${ARGS} -s \"/nonexistant\"" 161 fi 162 163 if [ -n "${USERHOME}" ] 164 then 165 ARGS="${ARGS} -m -d \"${USERHOME}\"" 166 fi 167 168 if [ -n "${USERGROUPS}" ] 169 then 170 ARGS="${ARGS} -G \"${USERGROUPS}\"" 171 fi 172 173 add_user "${ARGS}" 174 175 # Unset our vars before looking for any more users 176 unset USERNAME USERCOMMENT USERPASS USERENCPASS USERSHELL USERHOME USERGROUPS 177 else 178 exit_err "ERROR: commitUser was called without any userName= entry!!!" 179 fi 180 fi 181 182 done <${CFGF} 183 184 185 # Check if we need to enable a user to auto-login to the desktop 186 check_autologin 187 188}; 189