1#!
2#[[BEGIN PROPERTIES]]
3# Type = Command
4# Order = 2.0
5# Interpreter = perl
6# Caption = chown
7# Descr =Change the owner (user and group) of one or more files and/or
8# Descr =directories.
9# Descr =
10# Descr =Selection details:
11# Descr =
12# Descr =  Source: Ignored.
13# Descr =
14# Descr =  Target: The files and directories whose owner shall be changed.
15# Icon = file_owner.tga
16# Hotkey = Ctrl+O
17#[[END PROPERTIES]]
18
19use strict;
20use warnings;
21BEGIN { require "$ENV{'EM_DIR'}/res/emFileMan/scripts/cmd-util.pl"; }
22
23if (IsFirstPass()) {
24
25	ErrorIfNoTargets();
26
27	ConfirmIfTargetsAcrossDirs();
28
29	my @tgt=GetTgt();
30	my $oldUser;
31	my $oldGroup;
32	for (my $i=0; $i<@tgt; $i++) {
33		my @s=stat($tgt[$i]);
34		if ($i==0) {
35			$oldUser=$s[4];
36			$oldGroup=$s[5];
37		}
38		else {
39			if ($oldUser != $s[4]) {
40				$oldUser=undef;
41				if (!defined($oldGroup)) { last; }
42			}
43			if ($oldGroup != $s[5]) {
44				$oldGroup=undef;
45				if (!defined($oldUser)) { last; }
46			}
47		}
48	}
49	my $oldOwner="";
50	if (defined($oldUser)) { $oldOwner .= getpwuid($oldUser); }
51	if (defined($oldGroup)) { $oldOwner .= ':' . getgrgid($oldGroup); }
52
53	my $newOwner=Edit(
54		"chown",
55		"Please enter a new owner for the target(s). You can give a user\n".
56		"or a group or both. A group has to be preceded by a colon. User\n".
57		"and group can be specified by name or ID.\n".
58		"\n".
59		"Examples:\n".
60		"  root:dialout   Set user and group.\n".
61		"  0              Set user only, by ID.\n".
62		"  :dialout       Set group only.",
63		$oldOwner
64	);
65
66	SetFirstPassResult($newOwner);
67
68	SecondPassInTerminal("chown");
69}
70
71my $e=TermRunAndSync(
72	"chown",
73	($Config{'osname'} eq 'linux' or $Config{'osname'} eq 'cygwin') ? (
74		"-v"
75	)
76	: (
77	),
78	"--",
79	GetFirstPassResult(),
80	GetTgt()
81);
82
83SendUpdate();
84
85TermEnd($e);
86