Code

* Updated utf-8 handling
[gosa.git] / gosa-si / modules / SIPackages.pm
index 19a4dfcac8e74cbea03a628f789abfddc6eb8aa5..cbd1026ad6201c2f275dd73198f9a1266ca83f58 100644 (file)
@@ -16,7 +16,6 @@ use NetAddr::IP;
 use Net::LDAP;
 use Socket;
 use Net::hostent;
-use Net::DNS;
 use utf8;
 
 my $event_dir = "/usr/lib/gosa-si/server/events";
@@ -401,7 +400,6 @@ sub process_incoming_msg {
     $header =~ s/^CLMSG_//;
 
     &main::daemon_log("DEBUG: SIPackages: msg to process: $header", 7);
-    &main::daemon_log("$msg", 8);
 
     if( 0 == length @target_l){     
         &main::daemon_log("ERROR: no target specified for msg $header", 1);
@@ -428,7 +426,7 @@ sub process_incoming_msg {
 
             # if delivery not possible raise error and return 
             if( not @out_msg_l ) {
-                &main::daemon_log("WARNING: SIPackages got not answer from event handler '$header'", 3);
+                &main::daemon_log("WARNING: SIPackages got no answer from event handler '$header'", 3);
             } elsif( 0 == @out_msg_l) {
                 &main::daemon_log("ERROR: SIPackages: no event handler or core function defined for '$header'", 1);
             } 
@@ -562,8 +560,6 @@ sub here_i_am {
     
     # return acknowledgement to client
     $out_hash = &create_xml_hash("registered", $server_address, $source);
-    my $register_out = &create_xml_string($out_hash);
-    push(@out_msg_l, $register_out);
 
     # notify registered client to bus
     if( $bus_activ eq "on") {
@@ -578,13 +574,21 @@ sub here_i_am {
         &add_content2xml_hash($out_hash, "timestamp", $act_timestamp);
         my $new_client_out = &create_xml_string($out_hash);
         push(@out_msg_l, $new_client_out);
-        &main::daemon_log("INFO: send bus msg that client '$source' has registerd at server '$server_address'", 5);
+        &main::daemon_log("INFO: send bus msg that client '$source' has registered at server '$server_address'", 5);
     }
 
     # give the new client his ldap config
+    # Workaround: Send within the registration response, if the client will get an ldap config later
     my $new_ldap_config_out = &new_ldap_config($source);
     if( $new_ldap_config_out ) {
-        push(@out_msg_l, $new_ldap_config_out);
+            &add_content2xml_hash($out_hash, "ldap_available", "true");
+    }
+    my $register_out = &create_xml_string($out_hash);
+    push(@out_msg_l, $register_out);
+
+    # Really send the ldap config
+    if( $new_ldap_config_out ) {
+            push(@out_msg_l, $new_ldap_config_out);
     }
 
        my $hardware_config_out = &hardware_config($source, $gotoHardwareChecksum);
@@ -644,10 +648,11 @@ sub who_has_i_do {
     print "\ngot msg $header:\nserver $source has client with $search_param $search_value\n";
 }
 
+
 #===  FUNCTION  ================================================================
 #         NAME:  new_ldap_config
 #   PARAMETERS:  address - string - ip address and port of a host
-#      RETURNS:  nothing
+#      RETURNS:  gosa-si conform message
 #  DESCRIPTION:  send to address the ldap configuration found for dn gotoLdapServer
 #===============================================================================
 sub new_ldap_config {
@@ -682,7 +687,7 @@ sub new_ldap_config {
        $mesg = $main::ldap_handle->search( base   => $ldap_base,
                scope  => 'sub',
                attrs => ['dn', 'gotoLdapServer', 'gosaUnitTag', 'FAIclass'],
-               filter => "(&(objectClass=GOhard)(macaddress=$macaddress))");
+               filter => "(&(objectClass=GOhard)(macaddress=$macaddress)(gotoLdapServer=*))");
        #$mesg->code && die $mesg->error;
        if($mesg->code) {
                &main::daemon_log($mesg->error, 1);
@@ -691,11 +696,11 @@ sub new_ldap_config {
 
        # Sanity check
        if ($mesg->count != 1) {
-               &main::daemon_log("WARNING: client mac address $macaddress not found/not unique in ldap search", 1);
+               &main::daemon_log("WARNING: client with mac address $macaddress not found/unique/active - not sending ldap config", 1);
                &main::daemon_log("\tbase: $ldap_base", 1);
                &main::daemon_log("\tscope: sub", 1);
                &main::daemon_log("\tattrs: dn, gotoLdapServer", 1);
-               &main::daemon_log("\tfilter: (&(objectClass=GOhard)(macaddress=$macaddress))", 1);
+               &main::daemon_log("\tfilter: (&(objectClass=GOhard)(macaddress=$macaddress)(gotoLdapServer=*))", 1);
                return;
        }
 
@@ -749,8 +754,10 @@ sub new_ldap_config {
        foreach $server (@servers){
                 # Conversation for backward compatibility
                 if (not $server =~ /^\d+:[^:]+:ldap[^:]*:\/\// ) {
-                    if ($server =~ /^([^:]+):(.*)$/ ) {
+                    if ($server =~ /^([^:]+):([^:]+)$/ ) {
                       $server= "1:dummy:ldap://$1/$2";
+                    } elsif ($server =~ /^(\d+):([^:]+):(.*)$/ ) {
+                      $server= "$1:dummy:ldap://$2/$3";
                     }
                 }