Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#!/usr/local/bin/perl # NIS+ マップにユーザーを登録するためのスクリプト # Programed by TSUCHIYA Masatoshi # Thu Apr 22 17:55:35 JST 1999 require 5.000; use strict; use vars qw/ $USER $GCOS $UID $GID $HOME $BASE $SHELL $SHADOW $MKDIR $MODE $DEBUG $NISCAT $NISADD /; ### 初期値を指定 $USER = ''; $GCOS = ''; $UID = 0; $GID = &getgid( 'user' ); $HOME = 0; $BASE = '/home'; # デフォルトのホームディレクトリを決定するための基準ディレクトリ $SHELL = '/bin/tcsh'; $SHADOW = '::::::'; $MKDIR = 0; $MODE = 0755; $DEBUG = 0; $NISCAT = '/usr/bin/niscat'; $NISADD = '/usr/bin/nistbladm'; ### コマンドラインオプションを解析 while( $_ = shift @ARGV ){ if( $_ eq '-c' ){ $GCOS = shift @ARGV; } elsif( $_ eq '-d' ){ $HOME = shift @ARGV; } elsif( $_ eq '-g' ){ $GID = shift @ARGV; $GID = &getgid( $GID ) unless $GID =~ /^[0-9]+$/; } elsif( $_ eq '-s' ){ $SHELL = shift @ARGV; } elsif( $_ eq '-u' ){ $UID = shift @ARGV; } elsif( $_ eq '-m' ){ $MKDIR = 1; } elsif( $_ eq '-n' ){ $DEBUG = 1; } elsif( /^[a-z0-9]+$/ & ! $USER ){ $USER = $_; } else { &print_usage; exit 1; } } ### コマンドを実行 $UID = &getuid( $GID )+1 unless $UID; $HOME = '/home/' . $USER unless $HOME; $GCOS = $USER unless $GCOS; unless( $USER && $UID && $GID && $GCOS && $HOME && $SHELL && $SHADOW ){ &print_usage; exit 1; } my $com = sprintf( "%s -a name='%s' passwd='%s' uid=%d gid=%d gcos='%s' home=%s shell=%s shadow='%s' passwd.org_dir", $NISADD, $USER, crypt($USER,time), $UID, $GID, $GCOS, $HOME, $SHELL, $SHADOW ); if( $DEBUG ){ print "$com\n"; } else { system($com) && die "Can't add user to NIS+ map : return code=$?\n"; if( $MKDIR ){ mkdir( $HOME, $MODE ) or die "Can't make directory : $!\n"; chown( $UID, $GID, $HOME ) or rmdir($HOME), die "Can't change owner : $!\n"; } } exit(0); # 指定されたグループの GID を調べる関数 sub getgid { my( $group ) = @_; my( $name, $passwd, $gid, $members ) = getgrnam( $group ); $gid; } # 指定されたグループに属している全てのユーザーの UID を調べ、最大の UID を返す関数 sub getuid { my( $group ) = @_; my @uid; open( PASSWD, "$NISCAT passwd.org_dir |" ) or die; while( ){ my( $name,$passwd,$uid,$gid,$gcos,$home,$shell,$shadow ) = split( /:/, $_, 8 ); push( @uid, $uid ) if $gid == $group; } close PASSWD; ( sort { $b <=> $a; } @uid )[$[]; } # 使い方を表示する関数 sub print_usage { my( $program ) = ( $0 =~ m!([^/]+)$! ); print STDERR <<__USAGE__; NAME $program - administer a new user login on the system SYNOPSIS $program [ -c comment ] [ -d dir ] [ -g group ] [ -G gid ] [ -m ] [ -u uid ] [ -s shell ] login DESCRIPTION $program adds a new user entry to the NIS+ map. OPTIONS -c comment Any text string. It is generally a short description of the login, and is currently used as the field for the user's full name. -d dir The home directory of the new user. It defaults to /home/[login], -g group An existing group's integer ID or character- string name. -m Create the new user's home directory if it does not already exist. -s shell Full pathname of the program used as the user's shell on login. It defaults to an empty field causing the system to use /bin/tcsh as the default. The value of [shell] must be a valid executable file. -u uid The UID of the new user. This UID must be a non-negative decimal integer below MAXUID as defined in . The UID defaults to the next available (unique) number above the highest number currently assigned. For example, if UIDs 100, 105, and 200 are assigned, the next default UID number will be 201. (UIDs from 0-99 are reserved by SunOS for future applications.) __USAGE__ }