--- 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 #include /* fstat(), lseek(), write() */ #ifdef HAVE_MMAP -#include /* mmap() */ +# include /* mmap() */ #endif #include #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; + } } } }