Code

Added config file option gosa-unit-tag (server.conf).
[gosa.git] / gosa-si / modules / SIPackages.pm
index 184c58e57ced7ae7d719ff2f4686ff565691ee89..f8c56e6bf88b4517a087db15677ec31ee466807b 100644 (file)
@@ -21,34 +21,34 @@ use Net::DNS;
 BEGIN{}
 END {}
 
-my ($known_clients_file_name);
-my ($server_activ, $server_ip, $server_mac_address, $server_port, $SIPackages_key, $max_clients, $ldap_uri, $ldap_base, $ldap_admin_dn, $ldap_admin_password, $server_interface);
+my ($server_ip, $server_mac_address, $server_port, $SIPackages_key, $max_clients, $ldap_uri, $ldap_base, $ldap_admin_dn, $ldap_admin_password, $server_interface);
 my ($bus_activ, $bus_key, $bus_ip, $bus_port);
 my $server;
 my $network_interface;
 my $no_bus;
-my (@ldap_cfg, @pam_cfg, @nss_cfg, $goto_admin, $goto_secret);
-
-
-my %cfg_defaults =
-(
-"server" =>
-    {"server_activ" => [\$server_activ, "on"],
-    "server_ip" => [\$server_ip, "0.0.0.0"],
-    "server_mac_address" => [\$server_mac_address, "00:00:00:00:00"],
-    "server_port" => [\$server_port, "20081"],
-    "SIPackages_key" => [\$SIPackages_key, ""],
-    "max_clients" => [\$max_clients, 100],
-    "ldap_uri" => [\$ldap_uri, ""],
-    "ldap_base" => [\$ldap_base, ""],
-    "ldap_admin_dn" => [\$ldap_admin_dn, ""],
-    "ldap_admin_password" => [\$ldap_admin_password, ""],
+my (@ldap_cfg, @pam_cfg, @nss_cfg, $goto_admin, $goto_secret, $gosa_unit_tag);
+
+
+my %cfg_defaults = (
+"bus" => {
+    "activ" => [\$bus_activ, "on"],
+    "key" => [\$bus_key, ""],
+    "ip" => [\$bus_ip, ""],
+    "port" => [\$bus_port, "20080"],
     },
-"bus" =>
-    {"bus_activ" => [\$bus_activ, "on"],
-    "bus_passwd" => [\$bus_key, ""],
-    "bus_ip" => [\$bus_ip, ""],
-    "bus_port" => [\$bus_port, "20080"],
+"server" => {
+    "ip" => [\$server_ip, "0.0.0.0"],
+    "mac-address" => [\$server_mac_address, "00:00:00:00:00"],
+    "port" => [\$server_port, "20081"],
+    "ldap-uri" => [\$ldap_uri, ""],
+    "ldap-base" => [\$ldap_base, ""],
+    "ldap-admin-dn" => [\$ldap_admin_dn, ""],
+    "ldap-admin-password" => [\$ldap_admin_password, ""],
+    "max-clients" => [\$max_clients, 100],
+       "gosa-unit-tag" => [\$gosa_unit_tag, ""],
+    },
+"SIPackages" => {
+    "key" => [\$SIPackages_key, ""],
     },
 );
 
@@ -60,6 +60,32 @@ my %cfg_defaults =
 $network_interface= &get_interface_for_ip($server_ip);
 $server_mac_address= &get_mac($network_interface);
 
+# Unit tag can be defined in config
+if(not defined($gosa_unit_tag) || length($gosa_unit_tag)==0) {
+       # Read gosaUnitTag from LDAP
+       my $tmp_ldap= Net::LDAP->new($ldap_uri);
+       if(defined($tmp_ldap)) {
+               my $mesg= $tmp_ldap->bind($ldap_admin_dn, password => $ldap_admin_password);
+               # Perform search for Unit Tag
+               $mesg = $tmp_ldap->search(
+                       base   => $ldap_base,
+                       scope  => 'sub',
+                       attrs  => ['gosaUnitTag'],
+                       filter => "(macaddress=$server_mac_address)"
+               );
+
+               if ($mesg->count == 1) {
+                       my $entry= $mesg->entry(0);
+                       my $unit_tag= $entry->get_value("gosaUnitTag");
+                       if(defined($unit_tag) && length($unit_tag) > 0) {
+                               &main::daemon_log("Detected gosaUnitTag $unit_tag for creating entries", 4);
+                               $gosa_unit_tag= $unit_tag;
+                       }
+                       $mesg = $tmp_ldap->unbind;
+               }
+       }
+}
+
 # complete addresses
 #if( $server_ip eq "0.0.0.0" ) {
 #    $server_ip = "127.0.0.1";
@@ -97,15 +123,11 @@ my $res = $main::known_server_db->add_dbentry( {table=>'known_server',
 sub get_module_info {
     my @info = ($server_address,
                 $SIPackages_key,
-                $server,
-                $server_activ,
-                "socket",
                 );
     return \@info;
 }
 
 
-
 sub do_wake {
         my $host    = shift;
         my $ipaddr  = shift || '255.255.255.255';
@@ -298,34 +320,6 @@ sub get_mac {
        return $result;
 }
 
-#===  FUNCTION  ================================================================
-#         NAME:  get_ip 
-#   PARAMETERS:  interface name (i.e. eth0)
-#      RETURNS:  (ip address) 
-#  DESCRIPTION:  Uses ioctl to get ip address directly from system.
-#===============================================================================
-sub get_ip {
-       my $ifreq= shift;
-       my $result= "";
-       my $SIOCGIFADDR= 0x8915;       # man 2 ioctl_list
-       my $proto= getprotobyname('ip');
-
-       socket SOCKET, PF_INET, SOCK_DGRAM, $proto
-               or die "socket: $!";
-
-       if(ioctl SOCKET, $SIOCGIFADDR, $ifreq) {
-               my ($if, $sin)    = unpack 'a16 a16', $ifreq;
-               my ($port, $addr) = sockaddr_in $sin;
-               my $ip            = inet_ntoa $addr;
-
-               if ($ip && length($ip) > 0) {
-                       $result = $ip;
-               }
-       }
-
-       return $result;
-}
-
 
 #===  FUNCTION  ================================================================
 #         NAME:  register_at_bus
@@ -776,16 +770,17 @@ sub new_ldap_config {
                $data{'admin_base'}= $entry->dn;
                $data{'department'}= $entry->get_value("ou");
 
-               # Fill release if available
-               my $ou= $entry->get_value("ou");
-               if (defined $ou && $ou =~ /^.* :([A-Za-z0-9\/.]+).*$/) {
-                       $data{'release'}= $1;
-               }
-
                # Append unit Tag
                $data{'unit_tag'}= $unit_tag;
        }
 
+       # Fill release if available
+       my $FAIclass= $entry->get_value("FAIclass");
+       if (defined $FAIclass && $FAIclass =~ /^.* :([A-Za-z0-9\/.]+).*$/) {
+               $data{'release'}= $1;
+       }
+
+
        # Unbind
        $mesg = $ldap->unbind;
 
@@ -850,6 +845,10 @@ sub process_detected_hardware {
                $entry->add("gotomode" => "locked");
                $entry->add("gotoSysStatus" => "new-system");
                $entry->add("ipHostNumber" => $ipaddress);
+               if(defined($gosa_unit_tag) && length($gosa_unit_tag) > 0) {
+                       $entry->add("objectClass" => "gosaAdministrativeUnit");
+                       $entry->add("gosaUnitTag" => $gosa_unit_tag);
+               }
                if(my $res=$entry->update($ldap)) {
                        # Fill $mesg again
                        $mesg = $ldap->search(