--- afd-1.3.6/src/tools/set_pw.c	2007-11-13 21:45:23.000000000 +0100
+++ afd-1.3.7pre2/src/tools/set_pw.c	2008-01-24 17:18:39.000000000 +0100
@@ -55,7 +55,7 @@
 #include <termios.h>
 #include <unistd.h>                 /* fstat(), lseek(), write()         */
 #ifdef HAVE_MMAP
-#include <sys/mman.h>               /* mmap()                            */
+# include <sys/mman.h>              /* mmap()                            */
 #endif
 #include <errno.h>
 #include "permission.h"
@@ -101,7 +101,7 @@
    CHECK_FOR_VERSION(argc, argv);
    check_fake_user(&argc, argv, AFD_CONFIG_FILE, fake_user);
 
-   /* First get working directory for the AFD */
+   /* First get working directory for the AFD. */
    if (get_afd_path(&argc, argv, work_dir) < 0) 
    {
       exit(INCORRECT);
@@ -304,7 +304,7 @@
          }
          if ((*ptr == ':') && (*(ptr + 1) == '/') && (*(ptr + 2) == '/'))
          {
-            ptr += 3; /* Away with '://' */
+            ptr += 3; /* Away with '://'. */
          }
          if ((*ptr != MAIL_GROUP_IDENTIFIER) && (*ptr != '\0'))
          {
@@ -343,48 +343,79 @@
 
       for (i = 0; i < no_of_job_ids; i++)
       {
-         if (CHECK_STRCMP(jd[i].host_alias, hostname) == 0)
+         ptr = jd[i].recipient;
+         while ((*ptr != ':') && (*ptr != '\0'))
+         {
+            ptr++;
+         }
+         if ((*ptr == ':') && (*(ptr + 1) == '/') && (*(ptr + 2) == '/'))
          {
-            ptr = jd[i].recipient;
-            while ((*ptr != ':') && (*ptr != '\0'))
+            ptr += 3; /* Away with '://'. */
+         }
+         if ((*ptr != MAIL_GROUP_IDENTIFIER) && (*ptr != '\0'))
+         {
+            int j = 0;
+
+#ifdef WITH_SSH_FINGERPRINT
+            while ((*ptr != ':') && (*ptr != ';') && (*ptr != '@') &&
+#else
+            while ((*ptr != ':') && (*ptr != '@') &&
+#endif
+                   (*ptr != '\0') && (j < MAX_USER_NAME_LENGTH))
             {
-               ptr++;
+               if (*ptr == '\\')
+               {
+                  ptr++;
+               }
+               uh_name[j] = *ptr;
+               ptr++; j++;
             }
-            if ((*ptr == ':') && (*(ptr + 1) == '/') && (*(ptr + 2) == '/'))
+            if ((*ptr == '\0') || (j == MAX_USER_NAME_LENGTH))
             {
-               ptr += 3; /* Away with '://' */
+               (void)fprintf(stderr, "Failed to store user.\n");
+               exit(INCORRECT);
             }
-            if ((*ptr != MAIL_GROUP_IDENTIFIER) && (*ptr != '\0'))
+            else
             {
-               int j = 0;
-
-#ifdef WITH_SSH_FINGERPRINT
-               while ((*ptr != ':') && (*ptr != ';') && (*ptr != '@') &&
-#else
-               while ((*ptr != ':') && (*ptr != '@') &&
-#endif
-                      (*ptr != '\0') && (j < MAX_USER_NAME_LENGTH))
+               uh_name[j] = '\0';
+               if (CHECK_STRCMP(uh_name, user) == 0)
                {
-                  if (*ptr == '\\')
+#ifdef WITH_SSH_FINGERPRINT
+                  if (*ptr == ';')
                   {
-                     ptr++;
+                     while ((*ptr != '@') && (*ptr != '\0'))
+                     {
+                        if (*ptr == '\\')
+                        {
+                           ptr++;
+                        }
+                        ptr++;
+                     }
                   }
-                  uh_name[j] = *ptr;
-                  ptr++; j++;
-               }
-               if ((*ptr == '\0') || (j == MAX_USER_NAME_LENGTH))
-               {
-                  (void)fprintf(stderr, "Failed to store user.\n");
-                  exit(INCORRECT);
-               }
-               else
-               {
-                  uh_name[j] = '\0';
-                  if (CHECK_STRCMP(uh_name, user) == 0)
+#endif
+                  if (*ptr == '@')
                   {
-                     (void)strcpy(&uh_name[j], hostname);
-                     gotcha = YES;
-                     break;
+                     int k = 0;
+
+                     ptr++;
+                     while ((*ptr == hostname[k]) &&
+                            (*ptr != '\0') && (*ptr != '/') &&
+                            (*ptr != ':') && (*ptr != ';') &&
+                            (k < MAX_REAL_HOSTNAME_LENGTH))
+                     {
+                        if (*ptr == '\\')
+                        {
+                           ptr++;
+                        }
+                        uh_name[j] = *ptr;
+                        ptr++; j++; k++;
+                     }
+                     if (hostname[k] == '\0')
+                     {
+                        uh_name[j] = '\0';
+                        gotcha = YES;
+                        break;
+                     }
                   }
                }
             }