Code

removed images.
[gosa.git] / gosa-si / modules / ClientPackages.pm
index 77cc61880eb61881eb0c32824115e969e20ddbfd..9c2ac1e579b484f8d5eb029e7d2e23e8ec41a9e1 100644 (file)
@@ -13,6 +13,7 @@ use XML::Simple;
 use Data::Dumper;
 use NetAddr::IP;
 use Net::LDAP;
+use Net::LDAP::Util;
 use Socket;
 use Net::hostent;
 
@@ -31,12 +32,6 @@ my (@ldap_cfg, @pam_cfg, @nss_cfg, $goto_admin, $goto_secret);
 my $mesg;
 
 my %cfg_defaults = (
-#"bus" => {
-#    "activ" => [\$bus_activ, "on"],
-#    "key" => [\$bus_key, ""],
-#    "ip" => [\$bus_ip, ""],
-#    "port" => [\$bus_port, "20080"],
-#    },
 "server" => {
     "ip" => [\$server_ip, "0.0.0.0"],
     "mac-address" => [\$main::server_mac_address, "00:00:00:00:00"],
@@ -66,15 +61,13 @@ $main::server_mac_address= &get_mac($network_interface);
 
 # import local events
 my ($error, $result, $event_hash) = &import_events($event_dir);
-if ($error == 0) {
-    foreach my $log_line (@$result) {
+
+foreach my $log_line (@$result) {
+    if ($log_line =~ / succeed: /) {
         &main::daemon_log("0 DEBUG: ClientPackages - $log_line", 7);
-    }
-} else {
-    foreach my $log_line (@$result) {
+    } else {
         &main::daemon_log("0 ERROR: ClientPackages - $log_line", 1);
     }
-
 }
 
 # Unit tag can be defined in config
@@ -153,43 +146,6 @@ my $server_address = "$server_ip:$server_port";
 $main::server_address = $server_address;
 
 
-#if( inet_aton($bus_ip) ){ $bus_ip = inet_ntoa(inet_aton($bus_ip)); } 
-#######################################################
-## to change
-#if( $bus_ip eq "127.0.1.1" ) { $bus_ip = "127.0.0.1" }
-#######################################################
-#my $bus_address = "$bus_ip:$bus_port";
-#$main::bus_address = $bus_address;
-
-
-#my $hostkey = &create_passwd;
-#my $res = $main::known_server_db->add_dbentry( {table=>$main::known_server_tn, 
-#            primkey=>['hostname'],
-#            hostname=>$main::server_address,
-#            status=>'myself',
-#            hostkey=>$hostkey,
-#            timestamp=>&get_time(),
-#            } );
-#if (not $res == 0) {
-#    &main::daemon_log("0 ERROR: cannot add server to known_server_db: $res", 1);
-#} else {
-#    &main::daemon_log("0 INFO: '$main::server_address' successfully added to known_server_db", 5);
-#}
-
-
-
-## create general settings for this module
-#my $xml = new XML::Simple();
-#
-## register at bus
-#if ($main::no_bus > 0) {
-#    $bus_activ = "off"
-#}
-#if($bus_activ eq "on") {
-#    &register_at_bus();
-#}
-
-
 ### functions #################################################################
 
 
@@ -252,63 +208,6 @@ sub read_configfile {
 
 }
 
-# moved to GosaSupportDaemon: 03-06-2008 rettenbe
-#===  FUNCTION  ================================================================
-#         NAME:  get_interface_for_ip
-#   PARAMETERS:  ip address (i.e. 192.168.0.1)
-#      RETURNS:  array: list of interfaces if ip=0.0.0.0, matching interface if found, undef else
-#  DESCRIPTION:  Uses proc fs (/proc/net/dev) to get list of interfaces.
-#===============================================================================
-#sub get_interface_for_ip {
-#      my $result;
-#      my $ip= shift;
-#      if ($ip && length($ip) > 0) {
-#              my @ifs= &get_interfaces();
-#              if($ip eq "0.0.0.0") {
-#                      $result = "all";
-#              } else {
-#                      foreach (@ifs) {
-#                              my $if=$_;
-#                              if(&main::get_ip($if) eq $ip) {
-#                                      $result = $if;
-#                              }
-#                      }       
-#              }
-#      }       
-#      return $result;
-#}
-
-# moved to GosaSupportDaemon: 03-06-2008 rettenbe
-#===  FUNCTION  ================================================================
-#         NAME:  get_interfaces 
-#   PARAMETERS:  none
-#      RETURNS:  (list of interfaces) 
-#  DESCRIPTION:  Uses proc fs (/proc/net/dev) to get list of interfaces.
-#===============================================================================
-#sub get_interfaces {
-#      my @result;
-#      my $PROC_NET_DEV= ('/proc/net/dev');
-#
-#      open(PROC_NET_DEV, "<$PROC_NET_DEV")
-#              or die "Could not open $PROC_NET_DEV";
-#
-#      my @ifs = <PROC_NET_DEV>;
-#
-#      close(PROC_NET_DEV);
-#
-#      # Eat first two line
-#      shift @ifs;
-#      shift @ifs;
-#
-#      chomp @ifs;
-#      foreach my $line(@ifs) {
-#              my $if= (split /:/, $line)[0];
-#              $if =~ s/^\s+//;
-#              push @result, $if;
-#      }
-#
-#      return @result;
-#}
 
 #===  FUNCTION  ================================================================
 #         NAME:  get_mac 
@@ -348,61 +247,6 @@ sub get_mac {
 }
 
 
-#===  FUNCTION  ================================================================
-#         NAME:  register_at_bus
-#   PARAMETERS:  nothing
-#      RETURNS:  nothing
-#  DESCRIPTION:  creates an entry in known_daemons and send a 'here_i_am' msg to bus
-#===============================================================================
-#sub register_at_bus {
-#
-#    # add bus to known_server_db
-#    my $res = $main::known_server_db->add_dbentry( {table=>'known_server',
-#                                                    primkey=>['hostname'],
-#                                                    hostname=>$bus_address,
-#                                                    status=>'bus',
-#                                                    hostkey=>$bus_key,
-#                                                    timestamp=>&get_time,
-#                                                } );
-#    my $msg_hash = &create_xml_hash("here_i_am", $server_address, $bus_address);
-#    my $msg = &create_xml_string($msg_hash);
-#
-#    &main::send_msg_to_target($msg, $bus_address, $bus_key, "here_i_am");
-#    return $msg;
-#}
-
-
-
-# outcommented from rettenbe: moved to GosaSupportDaemon.pm
-#sub import_events {
-#    if (not -e $event_dir) {
-#        &main::daemon_log("S ERROR: cannot find directory or directory is not readable: $event_dir", 1);   
-#    }
-#    opendir (DIR, $event_dir) or die "ERROR while loading gosa-si-events from directory $event_dir : $!\n";
-#
-#    while (defined (my $event = readdir (DIR))) {
-#        if( $event eq "." || $event eq ".." ) { next; }  
-#        if( $event eq "gosaTriggered.pm" ) { next; }    # only GOsa specific events
-#
-#        eval{ require $event; };
-#        if( $@ ) {
-#            &main::daemon_log("S ERROR: import of event module '$event' failed", 1);
-#            &main::daemon_log("$@", 8);
-#            next;
-#        }
-#
-#        $event =~ /(\S*?).pm$/;
-#        my $event_module = $1;
-#        my $events_l = eval( $1."::get_events()") ;
-#        foreach my $event_name (@{$events_l}) {
-#            $event_hash->{$event_name} = $event_module;
-#        }
-#        my $events_string = join( ", ", @{$events_l});
-#        &main::daemon_log("S DEBUG: ClientPackages imported events $events_string", 8);
-#    }
-#}
-
-
 #===  FUNCTION  ================================================================
 #         NAME:  process_incoming_msg
 #   PARAMETERS:  crypted_msg - string - incoming crypted message
@@ -575,6 +419,21 @@ sub here_i_am {
     my $client_revision = @{$msg_hash->{client_revision}}[0];
     my $key_lifetime = @{$msg_hash->{key_lifetime}}[0];
 
+    # Move forced hostname to heap - if used
+    #FIXME: move to some global POE namespace - please
+    if ( defined($msg_hash->{'force-hostname'}[0]) &&
+       length($msg_hash->{'force-hostname'}[0]) > 0){
+    #      $heap->{force-hostname}->{$mac_address}= $msg_hash->{'force-hostname'}[0];
+           open (TFILE, ">/var/tmp/$mac_address");
+           print TFILE $msg_hash->{'force-hostname'}[0];
+           close (TFILE); 
+    } else {
+    #      $heap->{force-hostname}->{$mac_address}= undef;
+       if ( -e "/var/tmp/$mac_address") {
+               unlink("/var/tmp/$mac_address")
+       }; 
+    }
+
     # number of known clients
     my $nu_clients= $main::known_clients_db->count_dbentries('known_clients');
 
@@ -786,21 +645,24 @@ sub new_ldap_config {
 
        # Do we need to look at an object class?
        if (not @servers){
+            my $escaped_dn = &escape_dn_value($dn);
                $mesg = $ldap_handle->search( base   => $ldap_base,
                        scope  => 'sub',
                        attrs => ['dn', 'gotoLdapServer', 'FAIclass'],
-                       filter => "(&(objectClass=gosaGroupOfNames)(member=$dn))");
-               #$mesg->code && die $mesg->error;
+                       filter => "(&(objectClass=gosaGroupOfNames)(member=$escaped_dn))");
                if($mesg->code) {
-                       &main::daemon_log("$session_id ".$mesg->error, 1);
+                       &main::daemon_log("$session_id ERROR: unable to search for '(&(objectClass=gosaGroupOfNames)(member=$dn))': ".$mesg->error, 1);
                        return;
                }
 
                # Sanity check
-               if ($mesg->count != 1) {
-                       &main::daemon_log("$session_id WARNING: no LDAP information found for client mac $macaddress", 1);
+               if ($mesg->count == 0) {
+                       &main::daemon_log("$session_id WARNING: no LDAP informations found for client  with filter '(&(objectClass=gosaGroupOfNames)(member=$dn))'", 3);
                        return;
-               }
+               } elsif ($mesg->count >= 2) {
+            &main::daemon_log("$session_id ERROR: multiple LDAP informations found for client  with filter '(&(objectClass=gosaGroupOfNames)(member=$dn))'", 1);
+            return;
+        }
 
                $entry= $mesg->entry(0);
                $dn= $entry->dn;
@@ -816,6 +678,11 @@ sub new_ldap_config {
 
        @servers= sort (@servers);
 
+    # complain if no ldap information found
+    if (@servers == 0) {
+        &main::daemon_log("$session_id ERROR: no gotoLdapServer information for LDAP entry with filter '(&(objectClass=gosaGroupOfNames)(member=$dn))'");
+    }
+
        foreach $server (@servers){
                 # Conversation for backward compatibility
                 if (not $server =~ /^\d+:[^:]+:ldap[^:]*:\/\// ) {
@@ -937,6 +804,8 @@ sub hardware_config {
                                xmlmessage=>'none',
                                macaddress=>$macaddress,
                                plainname=>'none',
+                siserver=>'localhost',
+                modified=>'1',
                };
                my $hd_res = $main::job_db->add_dbentry($func_dic);
                &main::daemon_log("$session_id INFO: add '$macaddress' to job queue as an installing job", 5);
@@ -1021,4 +890,5 @@ sub server_matches {
        return $result;
 }
 
+# vim:ts=4:shiftwidth:expandtab
 1;