diff options
Diffstat (limited to 'transfugdrake.pm')
-rwxr-xr-x | transfugdrake.pm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/transfugdrake.pm b/transfugdrake.pm new file mode 100755 index 0000000..ade1a13 --- /dev/null +++ b/transfugdrake.pm @@ -0,0 +1,47 @@ +package transfugdrake; + +use strict; +use warnings; +use common; + +sub get_windows_disk() { + require fs; + require fs::type; + + my $fstab = [ fs::read_fstab($::prefix, '/etc/fstab', '') ]; + fs::merge_info_from_mtab($fstab); + + my @win_devices = grep { fs::type::isFat_or_NTFS($_) && fs::type::isMounted($_) } @$fstab; + find { -e "$_/WINDOWS/system32/config/software" } map { $_->{mntpoint} } @win_devices; +} + +sub list_windows_users { + my ($win_prefix) = @_; + my @users = chomp_(split(/,\s*/, run_program::get_stdout("ma-search-users", "windowsxp", $win_prefix))); + my ($standard, $admin) = partition { $_ ne "Administrator" } @users; + sort(@$standard), @$admin; +} + +sub list_windows_items { + my ($win_prefix, $win_user) = @_; + chomp_(split(/,\s*/, run_program::get_stdout("ma-search-items", + "--ostype=windowsxp", + "--path=$win_prefix", + "--user=$win_user"))); +} + +sub import_target { + my ($win_prefix, $win_user, $linux_user, $target) = @_; + my $lc_target = lc($target); + $lc_target =~ s/\s//g; + run_program::raw({ timeout => "never" }, + "ma-import", + "--ostype=windowsxp", + "--fromuser=$win_user", + "--frompath=$win_prefix", + "--touser=$linux_user", + "--topath=/", + "--target=$lc_target"); +} + +1; |