diff options
author | An-Cheng Huang <ancheng@vyatta.com> | 2007-10-19 11:25:38 -0700 |
---|---|---|
committer | An-Cheng Huang <ancheng@vyatta.com> | 2007-10-19 11:25:38 -0700 |
commit | 724e9418e3f6acf81fcc29172de6c1f5e3335fa7 (patch) | |
tree | 384b0be3e93a8de0b0d890f5fee18d04590ea01c /scripts | |
parent | 20c7a06a9dd38fb705a245cb755a351241113461 (diff) | |
download | vyatta-cfg-724e9418e3f6acf81fcc29172de6c1f5e3335fa7.tar.gz vyatta-cfg-724e9418e3f6acf81fcc29172de6c1f5e3335fa7.zip |
move "system" configuration templates/scripts to vyatta-cfg-system.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/system/vyatta_update_login_user.pl | 172 | ||||
-rw-r--r-- | scripts/system/vyatta_update_logrotate.pl | 50 | ||||
-rw-r--r-- | scripts/system/vyatta_update_syslog.pl | 51 |
3 files changed, 0 insertions, 273 deletions
diff --git a/scripts/system/vyatta_update_login_user.pl b/scripts/system/vyatta_update_login_user.pl deleted file mode 100644 index 86c0074..0000000 --- a/scripts/system/vyatta_update_login_user.pl +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/perl - -use strict; -use Fcntl; -use POSIX qw(:unistd_h); - -# arg: login_name -# returns the next available uid if login_name doesn't exist. -# otherwise returns (undef, <passwd fields for login_name>). -sub next_uid_if_not_exist { - my $login = shift; - my $min_uid = 1000; - my $max_uid = 60000; - if (open(LOGIN_DEF, "/etc/login.defs")) { - while (<LOGIN_DEF>) { - if (m/^\s*UID_MIN\s+(\d+)/) { - $min_uid = $1; - next; - } - if (m/^\s*UID_MAX\s+(\d+)/) { - $max_uid = $1; - next; - } - } - close LOGIN_DEF; - } - - open(PASSWD, "/etc/passwd") or exit 1; - while (<PASSWD>) { - chomp; - my @passwd_fields = split /:/; - if ($passwd_fields[0] eq $login) { - close PASSWD; - return (undef, @passwd_fields); - } - if ($min_uid <= $passwd_fields[2]) { - next if ($passwd_fields[2] > $max_uid); - $min_uid = $passwd_fields[2] + 1; - next; - } - } - close PASSWD; - exit 2 if ($min_uid > $max_uid); - return ($min_uid); -} - -# arg: login_name -# returns the corresponding line in shadow or undef if login_name doesn't -# exist. -sub get_shadow_line { - my $login = shift; - open(SHADOW, "/etc/shadow") or exit 3; - while (<SHADOW>) { - chomp; - if (m/^$login:/) { - close SHADOW; - return $_; - } - } - close SHADOW; - return undef; -} - -my $user = shift; -my $full = shift; -my $encrypted = shift; - -# emulate lckpwdf(3). -# difference: we only try to lock it once (non-blocking). lckpwdf will block -# for up to 15 seconds waiting for the lock. -# note that the lock is released when file is closed (e.g., exit), so no need -# for explicit unlock. -my $flock = pack "ssa20", F_WRLCK, SEEK_SET, "\0"; -sysopen(PWDLCK, "/etc/.pwd.lock", O_WRONLY | O_CREAT, 0600) or exit 3; -fcntl(PWDLCK, F_SETLK, $flock) or exit 3; - -if ($user eq "-d") { - $user = $full; - exit 4 if (!defined($user)); - - # check if user is using the system - my @pslines = `ps -U $user -u $user u`; - if ($#pslines != 0) { - # user is using the system - print STDERR "Delete failed: user \"$user\" is using the system\n"; - exit 4; - } - - my $ret = system("sed -i '/^$user:/d' /etc/passwd"); - exit 5 if ($ret >> 8); - $ret = system("sed -i '/^$user:/d' /etc/shadow"); - exit 6 if ($ret >> 8); - $ret = system("rm -rf /home/$user"); - exit 7 if ($ret >> 8); - exit 0; -} - -exit 4 if (!defined($user) || !defined($full) || !defined($encrypted)); - -my $DEF_GROUP = "quagga"; -my $DEF_SHELL = "/bin/bash"; - -open(GRP, "/etc/group") or exit 5; -my $def_gid = undef; -while (<GRP>) { - my @group_fields = split /:/; - if ($group_fields[0] eq $DEF_GROUP) { - $def_gid = $group_fields[2]; - last; - } -} -exit 6 if (!defined($def_gid)); - -my @vals = next_uid_if_not_exist($user); -my ($new_user, $passwd_line, $shadow_line) = (0, "", ""); -if (defined($vals[0])) { - # add new user - $new_user = 1; - $passwd_line = "$user:x:$vals[0]:${def_gid}:$full:/home/$user:$DEF_SHELL"; - my $sline = get_shadow_line($user); - exit 7 if (defined($sline)); - my $seconds = `date +%s`; - my $days = int($seconds / 3600 / 24); - $shadow_line = "$user:$encrypted:$days:0:99999:7:::"; -} else { - # modify existing user - shift @vals; - $vals[4] = $full; - $passwd_line = join(':', @vals); - my $sline = get_shadow_line($user); - exit 8 if (!defined($sline)); - @vals = split /:/, $sline; - $vals[1] = $encrypted; - for (my $padding = (9 - $#vals - 1); $padding > 0; $padding--) { - push @vals, ''; - } - $shadow_line = join(':', @vals); -} - -my $ret = 0; -if (!$new_user) { - $ret = system("sed -i '/^$user:/d' /etc/passwd"); - exit 9 if ($ret >> 8); - $ret = system("sed -i '/^$user:/d' /etc/shadow"); - exit 10 if ($ret >> 8); -} - -open(PASSWD, ">>/etc/passwd") or exit 11; -print PASSWD "$passwd_line\n"; -close PASSWD; -open(SHADOW, ">>/etc/shadow") or exit 12; -print SHADOW "$shadow_line\n"; -close SHADOW; - -if (($new_user) && !(-e "/home/$user")) { - if (-d "/etc/skel") { - $ret = system("cp -a /etc/skel /home/$user"); - exit 13 if ($ret >> 8); - $ret = system("chmod 755 /home/$user"); - exit 14 if ($ret >> 8); - $ret = system("chown -R $user:$DEF_GROUP /home/$user"); - exit 15 if ($ret >> 8); - } else { - $ret = system("mkdir -p /home/$user"); - exit 16 if ($ret >> 8); - $ret = system("chmod 755 /home/$user"); - exit 17 if ($ret >> 8); - } -} - -exit 0; - diff --git a/scripts/system/vyatta_update_logrotate.pl b/scripts/system/vyatta_update_logrotate.pl deleted file mode 100644 index abc4a25..0000000 --- a/scripts/system/vyatta_update_logrotate.pl +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/perl - -use strict; - -my $file = "messages"; -my $log_file = "/var/log/messages"; -if ($#ARGV == 3) { - $file = shift; - $log_file = "/var/log/user/$file"; -} -my $files = shift; -my $size = shift; -my $set = shift; -my $log_conf = "/etc/logrotate.d/$file"; - -if (!defined($files) || !defined($size) || !defined($set)) { - exit 1; -} - -if (!($files =~ m/^\d+$/) || !($size =~ m/^\d+$/)) { - exit 2; -} - -# just remove it and make a new one below -# (the detection mechanism in XORP doesn't work anyway) -unlink $log_conf; - -open(OUT, ">>$log_conf") or exit 3; -if ($set == 1) { - print OUT <<EOF; -$log_file { - missingok - notifempty - rotate $files - size=${size}k - postrotate - kill -HUP `cat /var/run/syslogd.pid` - endscript -} -EOF -} -close OUT; - -sleep 1; -if (system("/usr/sbin/invoke-rc.d sysklogd restart")) { - exit 4; -} - -exit 0; - diff --git a/scripts/system/vyatta_update_syslog.pl b/scripts/system/vyatta_update_syslog.pl deleted file mode 100644 index a55fe61..0000000 --- a/scripts/system/vyatta_update_syslog.pl +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/perl - -use strict; -my $SYSLOG_CONF = '/etc/syslog.conf'; - -my $match1 = shift; -my $match2 = shift; -my $update_line = shift; - -if (!defined($match1) || !defined($match2) || !defined($update_line)) { - exit 1; -} - -if (system("touch $SYSLOG_CONF")) { - exit 2; -} - -my $exp1 = ""; -my $exp2 = ""; -if ($match1 ne "") { - $exp1 = $match1; - if ($match2 ne "") { - $exp2 = $match2; - } -} elsif ($match2 ne "") { - $exp1 = $match2; -} - -if ($exp2 ne "") { - if (system("sed -i '/$exp1/{/$exp2/d}' $SYSLOG_CONF")) { - exit 2; - } -} elsif ($exp1 ne "") { - if (system("sed -i '/$exp1/d' $SYSLOG_CONF")) { - exit 3; - } -} - -open(OUT, ">>$SYSLOG_CONF") or exit 4; -if ($update_line ne "") { - print OUT "$update_line"; -} -close OUT; - -sleep 1; -if (system("/usr/sbin/invoke-rc.d sysklogd restart")) { - exit 5; -} - -exit 0; - |