diff -ur samba-4.1.2.ORIG/source3/lib/substitute.c samba-4.1.2/source3/lib/substitute.c --- samba-4.1.2.ORIG/source3/lib/substitute.c 2013-06-13 13:21:02.000000000 +0400 +++ samba-4.1.2/source3/lib/substitute.c 2013-12-17 22:48:30.944741804 +0400 @@ -726,10 +726,21 @@ a_string = realloc_string_sub(a_string, "%N", automount_server(user)); break; case 'H': { + + bool was_mapped; + char *internal_username = NULL; char *h; - if ((h = get_user_home_dir(talloc_tos(), user))) + + was_mapped = map_username(talloc_tos(), user, &internal_username); + if (!internal_username) { + DEBUG(0, ("talloc_sub_advanced: Out of memory!\n")); + return NULL; + } + + if ((h = get_user_home_dir(talloc_tos(), internal_username))) a_string = realloc_string_sub(a_string, "%H", h); TALLOC_FREE(h); + TALLOC_FREE(internal_username); break; } case 'P':