Mail Archives: cygwin/2008/11/03/06:30:10
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("<username>") yes | no Verify a user existance in Windows Accounts for given username.
# 2. Userlib::CygCheckUser("<username>") yes | no | Error Verify a user existance in Cygwin /etc/passwd for given username.
# 3. Userlib::GetUser("<username>") <data> | "" | Error Returns userstring data found in Cygwin /etc/passwd for given username.
# 4. Userlib::GetPasswd("<username>") <data> | "" | Error Returns Passwd data from userstring data found in Cygwin /etc/passwd for given username.
# 5. Userlib::GetUID("<username>") <data> | "" | Error Returns UID data from userstring data found in Cygwin /etc/passwd for given username.
# 6. Userlib::GetGID("<username>") <data> | "" | Error Returns GID data from userstring data found in Cygwin /etc/passwd for given username.
# 7. Userlib::GetSID("<username>") <data> | "" | Error Returns SID data from userstring data found in Cygwin /etc/passwd for given username.
# 8. Userlib::GetHome("<username>") <data> | "" | Error Returns Home data from userstring data found in Cygwin /etc/passwd for given username.
# 9. Userlib::GetShell("<username>") <data> | "" | Error Returns Shell data from userstring data found in Cygwin /etc/passwd for given username.
# 10. Userlib::SetPasswd("<username>", "<passwd>") Done | "" | Error Modify Passwd data from userstring data found in Cygwin /etc/passwd for given username.
# 11. Userlib::SetUID("<username>", "<UID>") Done | "" | Error Modify UID data from userstring data found in Cygwin /etc/passwd for given username.
# 12. Userlib::SetGID("<username>", "<GID>") Done | "" | Error Modify GID data from userstring data found in Cygwin /etc/passwd for given username.
# 13. Userlib::SetHome("<username>", "<home>") Done | "" | Error Modify Home data from userstring data found in Cygwin /etc/passwd for given username.
# 14. Userlib::SetShell("<username>", "<shell>") Done | "" | Error Modify Shell data from userstring data found in Cygwin /etc/passwd for given username.
# 15. Userlib::DelUser("<username>") Done | Error Delete userstring found in Cygwin /etc/passwd for given username.
# 16. Userlib::AddUser("<username>", "<passwd>", "<UID>", "<GID>", "<GCOS>", "<Home>", "<Shell>") Done | Error Adds new userstring to Cygwin /etc/passwd.
# 17. Userlib::GetWinUser("<username>") <data> | Error Returns default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 18. Userlib::GetWinPasswd("<username>") <data> | Error Returns Passwd found in default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 19. Userlib::GetWinUID("<username>") <data> | Error Returns UID found in default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 20. Userlib::GetWinGID("<username>") <data> | Error Returns GID found in default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 21. Userlib::GetWinGCOS("<username>") <data> | Error Returns GCOS found in default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 22. Userlib::GetWinHome("<username>") <data> | Error Returns Home found in default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 23. Userlib::GetWinShell("<username>") <data> | Error Returns Shell found in default userstring from Cygwin /usr/bin/mkpasswd for given username.
# 24. Userlib::GetRealWinUsernameFromCygUsername("<username>") <data> | "" | Error Returns Real Windows Username from Cygwin /usr/bin/mkpasswd for the given Cygwin username found in /etc/passwd.
# 25. Userlib::ChangeUserPassword("<username>") Done | Error Changes Password of the Windows User from NET USER for the given Cygwin username in /etc/passwd.
# 26. Userlib::UserInfo("<username>") <data> | Error Returns User Information found in the Cygwin /etc/passwd for the given Cygwin username.
# 27. Userlib::AddWinUser("<username>", "<password>", "<fullname>", "<comment>") Done | Error Adds New User to Windows Accounts by NET USER for then given data.
# 28. Userlib::DelWinUser("<username>") 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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "+</etc/passwd") || return "Error";
@data = <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, "+</etc/passwd") || return "Error";
@data = <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, "+</etc/passwd") || return "Error";
@data = <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, "+</etc/passwd") || return "Error";
@data = <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, "+</etc/passwd") || return "Error";
@data = <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, "+</etc/passwd") || return "Error";
@data = <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, "+</etc/passwd") || return "Error";
@data = <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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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, "</etc/passwd") || return "Error";
while (<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/
- Raw text -