aboutsummaryrefslogtreecommitdiff
path: root/contrib/osx/addsysuser
blob: 50797f1ab0cf51a67c4e09e369c7ece7e289c4ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/bin/sh
#
# Original adduser 05 Feb 2002 by Jon L. Gardner
#
# Modified for Tor installer by Nick Mathewson
# 2007-06-12 Modified for leopard by Andrew Lewman
# Copyright (c) 2007 Andrew Lewman
#


ROOTPROP=/

if [ "`whoami`" != "root" ]; then
  echo "You must be root to execute this script."
  exit
fi
if [ "x$3" = "x" ]; then
  echo 'Usage: addsysuser <username> "<full name>" <homedir>'
  exit 0
fi

username=$1
realname=$2
homedir=$3

if [ -x /usr/bin/dscl ]; then
  # Determine the gid of the daemon group
  gid=`dscl . -read /groups/daemon gid`
  if [ "x`dscl . -list /users|cut -f2 -d' '|grep $username`" != "x" ]; then
    echo The account $username already exists.
    exit 0
  fi
  if [ -x /usr/bin/nidump ]; then
    uiddef=`nidump passwd / | cut -d: -f3 | sort -n | grep -v '^[56789]..' |grep -v '^....$' | tail -n 1`
  else
    _tmp=/tmp/_dsexport_tmp.txt.$$
    rm -f $_tmp
    dsexport $_tmp '/Local/Default' 'dsRecTypeStandard:Users' > /dev/null 2>&1
    uiddef=`cat $_tmp | sed 's/\\\://g' | cut -d: -f6 | grep '^[0-9]' | sort -n | grep -v '^[56789]..' | grep -v '^....$' | tail -n 1`
    rm -f $_tmp
  fi
  uiddef=`echo $uiddef + 1 | bc`
  dscl . -create /users/$username uid $uiddef
  # home is the local path to the home directory
  home=/Users/$username
  echo Creating account for $username...
  dscl . -create /users/$username
  dscl . -create /users/$username _writers_tim_passwd $username
  dscl . -create /users/$username realname $realname
  dscl . -create /users/$username _writers_passwd $username
  dscl . -create /users/$username gid $gid
  dscl . -create /users/$username home $homedir
  dscl . -create /users/$username name $username
  dscl . -create /users/$username passwd '*'
  dscl . -create /users/$username shell /dev/null
else
  # Determine the gid of the daemon group
  gid=`niutil -readprop $ROOTPROP /groups/daemon gid`
  if [ "x`niutil -list $ROOTPROP /users|cut -f2 -d' '|grep $username`" != "x" ]; then
   echo The account $username already exists.
   exit 0
  fi
  # home is the local path to the home directory
  home=/Users/$username
  # defhome is what goes into NetInfo
  defhome="/Network/Servers/MyServer/Users"
  #echo "Determining next available system uid (please be patient)..."
  # Uids over 500 are for system users.
  uiddef=`nidump passwd / | cut -d: -f3 | sort -n | grep -v '^[56789]..' |grep -v '^....$' | tail -n 1`
  uiddef=`echo $uiddef + 1 |bc`
  echo Creating account for $username...
  niutil -create $ROOTPROP /users/$username
  niutil -createprop $ROOTPROP /users/$username _writers_tim_passwd $username
  niutil -createprop $ROOTPROP /users/$username realname $realname
  niutil -createprop $ROOTPROP /users/$username _writers_passwd $username
  niutil -createprop $ROOTPROP /users/$username uid $uiddef
  #niutil -createprop $ROOTPROP /users/$username home_loc "<home_dir><url>afp://afp.server.com/Users/</url><path>$username</path></home_dir>"
  niutil -createprop $ROOTPROP /users/$username gid $gid
  niutil -createprop $ROOTPROP /users/$username home $homedir
  niutil -createprop $ROOTPROP /users/$username name $username
  niutil -createprop $ROOTPROP /users/$username passwd '*'
  niutil -createprop $ROOTPROP /users/$username shell /dev/null
fi