diff --git a/rdesktop.c b/rdesktop.c index 2e928f4..cd35257 100644 --- a/rdesktop.c +++ b/rdesktop.c @@ -79,6 +79,7 @@ BOOL g_rdpsnd = False; extern RDPDR_DEVICE g_rdpdr_device[]; extern uint32 g_num_devices; +extern char * g_rdpdr_clientname; #ifdef RDP2VNC extern int rfb_port; @@ -130,6 +131,8 @@ usage(char *program) fprintf(stderr, " '-r disk:A=/mnt/floppy': enable redirection of /mnt/floppy to A:\n"); fprintf(stderr, " or A=/mnt/floppy,D=/mnt/cdrom'\n"); + fprintf(stderr, " '-r clientname=': Set the client name displayed\n"); + fprintf(stderr, " for redirected disks\n"); fprintf(stderr, " '-r lptport:LPT1=/dev/lp0': enable parallel redirection of /dev/lp0 to LPT1\n"); fprintf(stderr, " or LPT1=/dev/lp0,LPT2=/dev/lp1\n"); @@ -493,6 +496,11 @@ main(int argc, char *argv[]) { printer_enum_devices(&g_num_devices, optarg + 7); } + else if (strncmp("clientname", optarg, 7) == 0) + { + g_rdpdr_clientname = xmalloc(strlen(optarg+11)+1); + strcpy(g_rdpdr_clientname, optarg + 11); + } else { warning("Unknown -r argument\n\n\tPossible arguments are: comport, disk, lptport, printer, sound\n"); diff --git a/rdpdr.c b/rdpdr.c index 41a1886..03d03a5 100644 --- a/rdpdr.c +++ b/rdpdr.c @@ -39,6 +39,7 @@ uint32 g_num_devices; /* Table with information about rdpdr devices */ RDPDR_DEVICE g_rdpdr_device[RDPDR_MAX_DEVICES]; +char * g_rdpdr_clientname = NULL; /* Used to store incoming io request, until they are ready to be completed */ /* using a linked list ensures that they are processed in the right order, */ @@ -168,7 +169,10 @@ void rdpdr_send_name(void) { uint8 magic[4] = "rDNC"; - uint32 hostlen = (strlen(hostname) + 1) * 2; + if (NULL == g_rdpdr_clientname) { + g_rdpdr_clientname = hostname; + } + uint32 hostlen = (strlen(g_rdpdr_clientname) + 1) * 2; STREAM s; s = channel_init(rdpdr_channel, 16 + hostlen); @@ -177,7 +181,7 @@ rdpdr_send_name(void) out_uint16_le(s, 0x72); out_uint32(s, 0); out_uint32_le(s, hostlen); - rdp_out_unistr(s, hostname, hostlen - 2); + rdp_out_unistr(s, g_rdpdr_clientname, hostlen - 2); s_mark_end(s); channel_send(s, rdpdr_channel); }