xref: /freebsd/usr.sbin/periodic/etc/daily/200.backup-passwd (revision e2f6bafc3887c7752986526f3758525d24701fce)
181ea85a8SBrad Davis#!/bin/sh
281ea85a8SBrad Davis#
381ea85a8SBrad Davis#
481ea85a8SBrad Davis
581ea85a8SBrad Davis# If there is a global system configuration file, suck it in.
681ea85a8SBrad Davis#
781ea85a8SBrad Davisif [ -r /etc/defaults/periodic.conf ]
881ea85a8SBrad Davisthen
981ea85a8SBrad Davis    . /etc/defaults/periodic.conf
1081ea85a8SBrad Davis    source_periodic_confs
1181ea85a8SBrad Davisfi
1281ea85a8SBrad Davis
1381ea85a8SBrad Daviscase "$daily_backup_passwd_enable" in
1481ea85a8SBrad Davis    [Yy][Ee][Ss])
1581ea85a8SBrad Davis	if [ ! -f /etc/master.passwd ]
1681ea85a8SBrad Davis	then
1781ea85a8SBrad Davis	    echo '$daily_backup_passwd_enable" is set but /etc/master.passwd' \
1881ea85a8SBrad Davis		"doesn't exist"
1981ea85a8SBrad Davis	    rc=2
2081ea85a8SBrad Davis	elif [ ! -f /etc/group ]
2181ea85a8SBrad Davis	then
2281ea85a8SBrad Davis	    echo '$daily_backup_passwd_enable" is set but /etc/group' \
2381ea85a8SBrad Davis		"doesn't exist"
2481ea85a8SBrad Davis	    rc=2
2581ea85a8SBrad Davis	else
2681ea85a8SBrad Davis	    bak=/var/backups
2781ea85a8SBrad Davis	    rc=0
2881ea85a8SBrad Davis
2981ea85a8SBrad Davis	    echo ""
3081ea85a8SBrad Davis	    echo "Backup passwd and group files:"
3181ea85a8SBrad Davis
3281ea85a8SBrad Davis	    if [ ! -f $bak/master.passwd.bak ]
3381ea85a8SBrad Davis	    then
3481ea85a8SBrad Davis		rc=1
3581ea85a8SBrad Davis		echo "no $bak/master.passwd.bak"
3681ea85a8SBrad Davis		cp -p /etc/master.passwd $bak/master.passwd.bak || rc=3
3781ea85a8SBrad Davis	    fi
3881ea85a8SBrad Davis
3981ea85a8SBrad Davis	    if ! cmp -s $bak/master.passwd.bak /etc/master.passwd
4081ea85a8SBrad Davis	    then
4181ea85a8SBrad Davis		[ $rc -lt 1 ] && rc=1
4281ea85a8SBrad Davis		echo "$host passwd diffs:"
43*e2f6bafcSMichael Osipov		diff ${daily_diff_flags} -I '^#' $bak/master.passwd.bak /etc/master.passwd |\
44e9104c31SKyle Evans			sed 's/^\([-+ ][^:]*\):[^:]*:/\1:(password):/'
4581ea85a8SBrad Davis		mv $bak/master.passwd.bak $bak/master.passwd.bak2
4681ea85a8SBrad Davis		cp -p /etc/master.passwd $bak/master.passwd.bak || rc=3
4781ea85a8SBrad Davis	    fi
4881ea85a8SBrad Davis
4981ea85a8SBrad Davis	    if [ ! -f $bak/group.bak ]
5081ea85a8SBrad Davis	    then
5181ea85a8SBrad Davis		[ $rc -lt 1 ] && rc=1
5281ea85a8SBrad Davis		echo "no $bak/group.bak"
5381ea85a8SBrad Davis		cp -p /etc/group $bak/group.bak || rc=3
5481ea85a8SBrad Davis	    fi
5581ea85a8SBrad Davis
5681ea85a8SBrad Davis	    if ! cmp -s $bak/group.bak /etc/group
5781ea85a8SBrad Davis	    then
5881ea85a8SBrad Davis		[ $rc -lt 1 ] && rc=1
5981ea85a8SBrad Davis		echo "$host group diffs:"
60*e2f6bafcSMichael Osipov		diff ${daily_diff_flags} $bak/group.bak /etc/group
6181ea85a8SBrad Davis		mv $bak/group.bak $bak/group.bak2
6281ea85a8SBrad Davis		cp -p /etc/group $bak/group.bak || rc=3
6381ea85a8SBrad Davis	    fi
6481ea85a8SBrad Davis
6581ea85a8SBrad Davis	    if [ -f /etc/group ]
6681ea85a8SBrad Davis	    then
6781ea85a8SBrad Davis	        echo ""
6881ea85a8SBrad Davis		echo "Verifying group file syntax:"
6981ea85a8SBrad Davis	        chkgrp /etc/group || rc=3
7081ea85a8SBrad Davis	    fi
7181ea85a8SBrad Davis	fi;;
7281ea85a8SBrad Davis
7381ea85a8SBrad Davis    *)  rc=0;;
7481ea85a8SBrad Davisesac
7581ea85a8SBrad Davis
7681ea85a8SBrad Davisexit $rc
77