Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:PowerPC
rubygem-webyast-activedirectory
ActiveDirectory.pm
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ActiveDirectory.pm of Package rubygem-webyast-activedirectory
#-- # Copyright (c) 2009-2010 Novell, Inc. # # All Rights Reserved. # # This program is free software; you can redistribute it and/or modify it # under the terms of version 2 of the GNU General Public License # as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, contact Novell, Inc. # # To contact Novell about this file by physical or electronic mail, # you may find current contact information at www.novell.com #++ package YaPI::ActiveDirectory; use strict; use YaST::YCP qw(:LOGGING); use YaPI; use Data::Dumper; # ------------------- imported modules YaST::YCP::Import ("Progress"); YaST::YCP::Import ("Samba"); YaST::YCP::Import ("SambaAD"); YaST::YCP::Import ("SambaConfig"); YaST::YCP::Import ("SambaNetJoin"); # ------------------------------------- our $VERSION = '1.0.0'; our @CAPABILITIES = ('SLES11'); our %TYPEINFO; =item * C<$hash Read ();> Returns the Samba client configuration Can return different kind of result, based on passed arguments: - if "check_membership" key is present in argument hash, check if the machine is member of given domain (the string value of check_membership key); if domain is empty, the one saved in samba config file will be checked =cut BEGIN{$TYPEINFO{Read} = ["function", [ "map", "string", "any" ], [ "map", "string", "any" ]]; } sub Read { my $self = shift; my $args = shift; my $ret = {}; Progress->set (0); Samba->Read (); # only check for domain membership if (defined ($args->{"check_membership"})) { my $domain = $args->{"check_membership"} || Samba->GetWorkgroupOrRealm (); SambaAD->ReadADS ($domain); if (SambaAD->ADS ()) { $domain = SambaAD->GetWorkgroup ($domain); SambaAD->ReadRealm (); # return the parts that could be omited later, like AD server, workgroup, realm? $ret->{"ads"} = SambaAD->ADS (); $ret->{"workgroup"} = $domain; $ret->{"realm"} = SambaAD->Realm (); } $ret->{"result"} = YaST::YCP::Boolean (SambaNetJoin->Test ($domain)); return $ret; } $ret->{"domain"} = Samba->GetWorkgroupOrRealm (); $ret->{"winbind"} = Samba->GetWinbind (); $ret->{"mkhomedir"} = Samba->mkhomedir(); return $ret; } =item * C<$string Write ($argument_hash);> Write Samba configuration or join AD domain Returns error map, empty means success =cut BEGIN{$TYPEINFO{Write} = ["function", [ "map", "string", "any" ], [ "map", "string", "any" ]]; } sub Write { my $self = shift; my $args = shift; my $ret = {}; Progress->set (0); Samba->Read (); # try to join AD domain when credentials are present if ($args->{"administrator"}) { $ret = $args->{"leave"} ? $self->Leave ($args) : $self->Join ($args); if ($ret->{"join_error"}) { y2warning ("join failed, ending write"); return $ret; } elsif ($ret->{"leave_error"}) { y2warning ("leave failed, ending write"); return $ret; } } my $domain = $args->{"domain"} || Samba->GetWorkgroupOrRealm (); # - after join, AD data are already read # - do not do the reads when only disabling if ((! $args->{"administrator"}) && ($args->{"winbind"} || 0)) { if ($args->{"ads"}) { SambaAD->SetADS ($args->{"ads"}); } else { SambaAD->ReadADS ($domain); } # work group = "Pre-Win2k Domain" if ($args->{"workgroup"}) { $domain = $args->{"workgroup"}; } else { $domain = SambaAD->GetWorkgroup ($domain); } Samba->SetWorkgroup ($domain); if ($args->{"realm"}) { SambaAD->SetRealm ($args->{"realm"}); } else { SambaAD->ReadRealm (); } } Samba->SetWinbind ($args->{"winbind"} || 0) if (defined $args->{"winbind"});; Samba->SetMkHomeDir ($args->{"mkhomedir"} || 0) if (defined $args->{"mkhomedir"}); $ret->{"write_error"} = 1 unless Samba->Write (0); return $ret; } # Join given AD domain # Argument map must contain domain and administrator credentials # It may contain information about workgroup (short name), AD server and realm BEGIN{$TYPEINFO{Join} = ["function", [ "map", "string", "any" ], [ "map", "string", "any" ]]; } sub Join { my $self = shift; my $args = shift; my $ret = {}; my $domain = $args->{"domain"} || Samba->GetWorkgroupOrRealm (); if ($args->{"ads"}) { SambaAD->SetADS ($args->{"ads"}); } else { SambaAD->ReadADS ($domain); } # work group = "Pre-Win2k Domain" if ($args->{"workgroup"}) { $domain = $args->{"workgroup"}; } else { $domain = SambaAD->GetWorkgroup ($domain); } Samba->SetWorkgroup ($domain); if ($args->{"realm"}) { SambaAD->SetRealm ($args->{"realm"}); } else { SambaAD->ReadRealm (); } my $result = SambaNetJoin->Join ($domain, "member", $args->{"administrator"}, $args->{"password"} || "", $args->{"machine"}); $ret->{"join_error"} = $result if $result; return $ret; } # Leave current AD domain # Argument map must contain administrator credentials BEGIN{$TYPEINFO{Leave} = ["function", [ "map", "string", "any" ], [ "map", "string", "any" ]]; } sub Leave { my $self = shift; my $args = shift; my $ret = {}; # domain is currently not used in leave command my $domain = $args->{"domain"} || Samba->GetWorkgroupOrRealm (); my $result = SambaNetJoin->Leave ($domain, $args->{"administrator"}, $args->{"password"} || ""); $ret->{"leave_error"} = $result if $result; return $ret; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor