X-Recipient: archive-cygwin AT delorie DOT com X-Spam-Check-By: sourceware.org X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 324903 DOT 17010 DOT bm AT omp101 DOT mail DOT in2 DOT yahoo DOT com X-YMail-OSG: fCwElqsVM1mPASLGTllcl4bDXyci9dVNg7CZYhg3FHYR96Lf5E.7EGdtKwlF4lOKFiZcHU.NbNHIblrz8toHFZghfHAax5HtHGzuYJTTRBjrlrs_G1CPb50EP34lMB9byxOVjYnZ9eL9zDMtpmnDykYGmg-- X-Mailer: YahooMailWebService/0.7.260.1 Date: Mon, 3 Nov 2008 16:58:41 +0530 (IST) From: Jaspreet Singh Reply-To: jaspreet_online2000 AT yahoo DOT com Subject: SOMETHING NEW FOR CYGWIN USERS - Accounts::Userlib To: cygwin AT cygwin DOT com MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Message-ID: <212301.14255.qm@web94907.mail.in2.yahoo.com> X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id mA3BU7qp018066 hey there get this. -------------------------------------------------------------------------- #!/usr/bin/perl # Accounts::Userlib for CYGWIN # # NOTE: I am not responsible for any kind of harm done to your system or feelings because of this perl module. # # Requirements # 1. Perl on cygwin. # 2. Can only be used by Administrator of the system. # 3. /etc/passwd on cygwin with read, write and modify permission to Administrator. # 4. /usr/bin/mkpasswd on cygwin with execute permission to Administrator. # 5. NET USER command on Windows can be executed from cygwin and by Administrator. # 6. Do not forget to chown by Administrator and chmod 0700, so no other user on # your system can read, write, modify or execute this perl module and any other # script that you create that uses this module. # # Functions List # 1. Userlib::WinCheckUser("") yes | no Verify a user existance in Windows Accounts for given username. # 2. Userlib::CygCheckUser("") yes | no | Error Verify a user existance in Cygwin /etc/passwd for given username. # 3. Userlib::GetUser("") | "" | Error Returns userstring data found in Cygwin /etc/passwd for given username. # 4. Userlib::GetPasswd("") | "" | Error Returns Passwd data from userstring data found in Cygwin /etc/passwd for given username. # 5. Userlib::GetUID("") | "" | Error Returns UID data from userstring data found in Cygwin /etc/passwd for given username. # 6. Userlib::GetGID("") | "" | Error Returns GID data from userstring data found in Cygwin /etc/passwd for given username. # 7. Userlib::GetSID("") | "" | Error Returns SID data from userstring data found in Cygwin /etc/passwd for given username. # 8. Userlib::GetHome("") | "" | Error Returns Home data from userstring data found in Cygwin /etc/passwd for given username. # 9. Userlib::GetShell("") | "" | Error Returns Shell data from userstring data found in Cygwin /etc/passwd for given username. # 10. Userlib::SetPasswd("", "") Done | "" | Error Modify Passwd data from userstring data found in Cygwin /etc/passwd for given username. # 11. Userlib::SetUID("", "") Done | "" | Error Modify UID data from userstring data found in Cygwin /etc/passwd for given username. # 12. Userlib::SetGID("", "") Done | "" | Error Modify GID data from userstring data found in Cygwin /etc/passwd for given username. # 13. Userlib::SetHome("", "") Done | "" | Error Modify Home data from userstring data found in Cygwin /etc/passwd for given username. # 14. Userlib::SetShell("", "") Done | "" | Error Modify Shell data from userstring data found in Cygwin /etc/passwd for given username. # 15. Userlib::DelUser("") Done | Error Delete userstring found in Cygwin /etc/passwd for given username. # 16. Userlib::AddUser("", "", "", "", "", "", "") Done | Error Adds new userstring to Cygwin /etc/passwd. # 17. Userlib::GetWinUser("") | Error Returns default userstring from Cygwin /usr/bin/mkpasswd for given username. # 18. Userlib::GetWinPasswd("") | Error Returns Passwd found in default userstring from Cygwin /usr/bin/mkpasswd for given username. # 19. Userlib::GetWinUID("") | Error Returns UID found in default userstring from Cygwin /usr/bin/mkpasswd for given username. # 20. Userlib::GetWinGID("") | Error Returns GID found in default userstring from Cygwin /usr/bin/mkpasswd for given username. # 21. Userlib::GetWinGCOS("") | Error Returns GCOS found in default userstring from Cygwin /usr/bin/mkpasswd for given username. # 22. Userlib::GetWinHome("") | Error Returns Home found in default userstring from Cygwin /usr/bin/mkpasswd for given username. # 23. Userlib::GetWinShell("") | Error Returns Shell found in default userstring from Cygwin /usr/bin/mkpasswd for given username. # 24. Userlib::GetRealWinUsernameFromCygUsername("") | "" | Error Returns Real Windows Username from Cygwin /usr/bin/mkpasswd for the given Cygwin username found in /etc/passwd. # 25. Userlib::ChangeUserPassword("") Done | Error Changes Password of the Windows User from NET USER for the given Cygwin username in /etc/passwd. # 26. Userlib::UserInfo("") | Error Returns User Information found in the Cygwin /etc/passwd for the given Cygwin username. # 27. Userlib::AddWinUser("", "", "", "") Done | Error Adds New User to Windows Accounts by NET USER for then given data. # 28. Userlib::DelWinUser("") Done | Error Deletes User from Windows Accounts by NET USER for then given Windows username. package Userlib; sub WinCheckUser { my ($user) = @_; my $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; chop ($CMD); if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "no"; } else { return "yes"; } } sub CygCheckUser { my ($user) = @_; my $rtn = "no"; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = "yes"; } } close(PASSWD); return $rtn; } sub GetUser { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = $login.":".$passwd.":".$uid.":".$gid.":".$gcos.":".$home.":".$shell; } } close(PASSWD); return $rtn; } sub GetPasswd { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = $passwd; } } close(PASSWD); return $rtn; } sub GetUID { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = $uid; } } close(PASSWD); return $rtn; } sub GetGID { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = $gid; } } close(PASSWD); return $rtn; } sub GetSID { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @AR, $sid); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); my @AR = split(/,/,$gcos); $sid = $AR[scalar @AR - 1]; if ($login eq $user) { $rtn = $sid; } } close(PASSWD); return $rtn; } sub GetHome { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = $home; } } close(PASSWD); return $rtn; } sub GetShell { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = $shell; } } close(PASSWD); return $rtn; } sub SetPasswd { my ($user,$newpasswd) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @data, $string); open (PASSWD, "+; close PASSWD; open(OUT, ">/etc/passwd") || return "Error"; foreach $string (@data) { chomp; ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { print OUT $login.":".$newpasswd.":".$uid.":".$gid.":".$gcos.":".$home.":".$shell."\n"; $rtn = "Done"; } else { print OUT $string; } } close OUT; return $rtn; } sub SetUID { my ($user,$newuid) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @data, $string); open (PASSWD, "+; close PASSWD; open(OUT, ">/etc/passwd") || return "Error"; foreach $string (@data) { chomp; ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { print OUT $login.":".$passwd.":"..$newuid.":".$gid.":".$gcos.":".$home.":".$shell."\n"; $rtn = "Done"; } else { print OUT $string; } } close OUT; return $rtn; } sub SetGID { my ($user,$newgid) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @data, $string); open (PASSWD, "+; close PASSWD; open(OUT, ">/etc/passwd") || return "Error"; foreach $string (@data) { chomp; ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { print OUT $login.":".$passwd.":"..$uid.":".$newgid.":".$gcos.":".$home.":".$shell."\n"; $rtn = "Done"; } else { print OUT $string; } } close OUT; return $rtn; } sub SetHome { my ($user,$newhome) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @data, $string); open (PASSWD, "+; close PASSWD; open(OUT, ">/etc/passwd") || return "Error"; foreach $string (@data) { chomp; ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { print OUT $login.":".$passwd.":"..$uid.":".$gid.":".$gcos.":".$newhome.":".$shell."\n"; $rtn = "Done"; } else { print OUT $string; } } close OUT; return $rtn; } sub SetShell { my ($user,$newshell) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @data, $string); open (PASSWD, "+; close PASSWD; open(OUT, ">/etc/passwd") || return "Error"; foreach $string (@data) { chomp; ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { print OUT $login.":".$passwd.":"..$uid.":".$gid.":".$gcos.":".$home.":".$newshell."\n"; $rtn = "Done"; } else { print OUT $string; } } close OUT; return $rtn; } sub DelUser { my ($user) = @_; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell, @data, $string); open (PASSWD, "+; close PASSWD; open(OUT, ">/etc/passwd") || return "Error"; foreach $string (@data) { chomp; ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$string); if ($login ne $user) { print OUT $string; } } close OUT; return "Done"; } sub AddUser { my ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = @_; my (@data, $string); open (PASSWD, "+; close PASSWD; $string = $login.":".$passwd.":".$uid.":".$gid.":".$gcos.":".$home.":".$shell."\n"; open(OUT, ">>/etc/passwd") || return "Error"; print OUT $string; close OUT; return "Done"; } sub GetWinUser { my ($user) = @_; my ($CMD) = ""; $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } else { chomp($CMD); return $CMD; } } sub GetWinPasswd { my ($user) = @_; my ($CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } chomp($CMD); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$CMD); return $passwd; } sub GetWinUID { my ($user) = @_; my ($CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } chomp($CMD); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$CMD); return $uid; } sub GetWinGID { my ($user) = @_; my ($CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } chomp($CMD); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$CMD); return $gid; } sub GetWinGCOS { my ($user) = @_; my ($CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } chomp($CMD); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$CMD); return $gcos; } sub GetWinHome { my ($user) = @_; my ($CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } chomp($CMD); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$CMD); return $home; } sub GetWinShell { my ($user) = @_; my ($CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); $CMD = `/usr/bin/mkpasswd -l -u $user 2>&1`; if ($CMD eq "mkpasswd (272): [2221] The user name could not be found.\r") { return "Error"; } chomp($CMD); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$CMD); return $shell; } sub GetRealWinUsernameFromCygUsername { my ($user) = @_; my ($rtn) = ""; my (@AR, $cygusersid, $string, $sid, @data, $login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = "yes"; @AR = split(/,/,$gcos); $cygusersid = $AR[scalar @AR - 1]; } } close(PASSWD); if ($rtn eq "") { return "Error"; } elsif ($rtn eq "yes") { $rtn = ""; @data = `/usr/bin/mkpasswd -l 2>&1`; foreach $string (@data) { chomp($string); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$string); @AR = split(/,/,$gcos); $sid = $AR[scalar @AR - 1]; if ($cygusersid eq $sid) { $rtn = $login; } } } return $rtn; } sub ChangeUserPassword { my ($user, $password) = @_; my ($rtn) = ""; my (@AR, $cygusersid, $string, $sid, @data, $CMD, $login, $passwd, $uid, $gid, $gcos, $home, $shell); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = "yes"; @AR = split(/,/,$gcos); $cygusersid = $AR[scalar @AR - 1]; } } close(PASSWD); if ($rtn eq "") { return "Error"; } elsif ($rtn eq "yes") { $rtn = ""; @data = `/usr/bin/mkpasswd -l 2>&1`; foreach $string (@data) { chomp($string); ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/,$string); @AR = split(/,/,$gcos); $sid = $AR[scalar @AR - 1]; if ($cygusersid eq $sid) { $rtn = $login; } } if ($rtn eq "") { return "Error"; } else { $CMD = `NET USER $rtn $password 2>&1`; if ($CMD = "The command completed successfully.\r\n") { return "Done"; } else { return "Error"; } } } } sub UserInfo { my ($user) = @_; my $rtn = ""; my ($login, $passwd, $uid, $gid, $gcos, $home, $shell); my ($cygusername, $cygpasswd, $cyguid, $cyggid, $cygcomments, $cygdomain, $cygsid, $winuid, $cyghome, $cygshell); my (@AR, $count); open(PASSWD, ") { ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(/:/); if ($login eq $user) { $rtn = "yes"; $cygusername = $login; $cygpasswd = $passwd; $cyguid = $uid; $cyggid = $gid; @AR = split(/,/,$gcos); $count = @AR; if ($count eq "2") { $cygcomments = ""; $cygdomain = $AR[scalar @AR - 2]; $cygsid = $AR[scalar @AR - 1]; } elsif ($count eq "3") { $cygcomments = $AR[scalar @AR - 3]; $cygdomain = $AR[scalar @AR - 2]; $cygsid = $AR[scalar @AR - 1]; } @AR = split(/-/,$cygsid); $winuid = $AR[scalar @AR - 1]; $cyghome = $home; $cygshell = $shell; } } close(PASSWD); if ($rtn ne "yes") { return "Error"; } else { $rtn = "Cygwin User Account Information For ".$user.."\n\n"; $rtn = $rtn."Username\t".$cygusername."\n"; $rtn = $rtn."Password\t".$cygpasswd."\n"; $rtn = $rtn."UID\t".$cyguid."\n"; $rtn = $rtn."Real UID\t".$winuid."\n"; $rtn = $rtn."GID\t".$cyggid."\n"; $rtn = $rtn."Comments\t".$cygcomments."\n"; $rtn = $rtn."Domain\t".$cygdomain."\n"; $rtn = $rtn."SID\t".$cygsid."\n"; $rtn = $rtn."Home\t".$cyghome."\n"; $rtn = $rtn."Shell\t".$cygshell."\n"; return $rtn; } } sub AddWinUser { my ($username, $password, $fullname, $comment) = @_; my ($CMD, $NETUSER); $NETUSER = "NET USER /ADD ".$username; if ($password ne "") { $NETUSER = $NETUSER." ".$password; } if ($fullname ne "") { $NETUSER = $NETUSER." /FULLNAME:\"".$fullname.."\""; } if ($comment ne "") { $NETUSER = $NETUSER." /COMMENT:\"".$comment."\""; } $CMD = `$NETUSER 2>&1`; if ($CMD = "The command completed successfully.\r\n") { return "Done"; } else { return "Error"; } } sub DelWinUser { my ($username) = @_; my ($CMD, $NETUSER); $NETUSER = "NET USER /DELETE ".$username; $CMD = `$NETUSER 2>&1`; if ($CMD = "The command completed successfully.\r\n") { return "Done"; } else { return "Error"; } } 1; --------------------------------------------------------------------------- Connect with friends all over the world. Get Yahoo! India Messenger at http://in.messenger.yahoo.com/?wm=n/ -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/