Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 May 1999 09:47:40 -0400
From:      Robert Beer <r-beer@onu.edu>
To:        Zheng Bokui <bokui@sin.photronics.com>, "freebsd-questions@FreeBSD.ORG" <freebsd-questions@FreeBSD.ORG>
Subject:   Re: Transfer user accounts
Message-ID:  <l03130323b35748ea2aee@[140.228.15.35]>
In-Reply-To: <37320778.8C56DB90@sin.photronics.com>

next in thread | previous in thread | raw e-mail | index | archive | help

At 4:19 PM -0400 5/6/1999, Zheng Bokui wrote:
>Hi Gurus,
>I'd like to move hundreds of user accounts from an old SunOS 4.1.3
>machine to my FreeBSD 3.1-stable PC. How can I do that? I'd like to keep
>all the old passwords so that the users don't need to key-in again.

OK, here is how I would do this.  Note that your mileage may vary.  On the FreeBSD box insure that your are using DES crypt instead of MD5.  You can look at the links (example from 2.2.8) in /usr/lib:
lrwxrwxrwx  1 root  bin     13 Dec 31 13:07 /usr/lib/libcrypt.a -> libdescrypt.a
lrwxrwxrwx  1 root  bin     18 Dec 31 13:07 /usr/lib/libcrypt.so.2.0 -> libdescr
ypt.so.2.0
lrwxrwxrwx  1 root  bin     15 Dec 31 13:07 /usr/lib/libcrypt_p.a -> libdescrypt
_p.a

Then you need to move a copy of the Sun password file to a scratch area on the FreeBSD box.  Edit the password file to remove duplicate accounts like root (!) and other system accounts.  Then feed this file to the awk script listed in the passwd (5) manpage:

           BEGIN { FS = ":"}
           { print $1 ":" $2 ":" $3 ":" $4 "::0:0:" $5 ":" $6 ":" $7 }

At this point as root you might want to create a copy of /etc/master.passwd in case you experience a problem.  This is your insurance policy in case of disaster.  Do have a couple of root logins going while you do this.

Now append the above editted file to /etc/master.passwd and run:

	pwd_mkdb -c /etc/master.passwd

This will check for syntax errors.  If there are no errors then run:

	pwd_mkdb -p /etc/master.passwd

This will create the hashed password files.  Now you need to create the home directories of the users.  I would use a shell script something like this:

# @(#)mkuser mkuser
#
# Check the number of arguments first
#
if [ $# -lt 3 ]
then
        echo "usage: mkuser HomeDir UserName GroupName"
        exit 1
fi

#
# Create the named directory if it does not already exist
# and set the file ownership and permission
#
if [ ! -d $1 ]
then
        mkdir $1
        chgrp $3 $1
        chown $2 $1
        chmod u=rwx,g=sx,o=x $1
        mkdir $1/www
        chgrp $3 $1/www
        chown $2 $1/www
        chmod u=rwx,g=rsx,o=rx $1/www
fi

Invoking that like this:

for e in `tail -NNNNN /etc/passwd| cut -d: -f1`;do mkuser `grep ^$e: /etc/passwd | awk -F":" '{print $6, $3, $4}'`;done

Where NNNNN is the number of lines you appended to the /etc/master.passwd file.

The above is not real efficient but you are not doing this every day.

At this point you should have users and home directories.  You may also want to copy some of the dot files from /usr/share/skel into the new home directories.  A script like this helps:

#!/bin/sh
# @(#)mkdot     mkdot  Copy dot files for user

## Sanity check
if [ $# -lt 1 ]; then
        echo "usage: mkdot username"
        exit 1
fi

if [  -d /home/austin/$1 ]; then

    echo "Copying Skeleton files for $1"

    ## Do .profile
    echo "Installing .profile"
    cp /usr/share/skel/dot.profile /home/$1/.profile
    chown $1 /home/$1/.profile
    chmod u=rw,go= /home/$1/.profile

    ## Do .cshrc
    echo "Installing .cshrc"
    cp /usr/share/skel/dot.cshrc /home/$1/.cshrc
    chown $1 /home/$1/.cshrc
    chmod u=rw,go= /home/$1/.cshrc

    ## Do .login
    echo "Installing .login"
    cp /usr/share/skel/dot.login /home/$1/.login
    chown $1 /home/austin/$1/.login
    chmod u=rw,go= /home/$1/.login

else

    exit 1

fi

This script assumes that that home directory is of the form /home/UserName.  Good luck and as I stated in the beginning your mileage may vary.


---
Bob Beer <r-beer@onu.edu>
Ohio Northern University, Academic Computer Services, Ada, OH  45810




To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?l03130323b35748ea2aee>