From 85680c77c00ec689a701eaa1bc21974fcd1e7dce Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 28 May 2023 11:27:09 +0100 Subject: [PATCH] Make x11_get_auth_from_authfile take a Filename. I think the only reason it currently takes a plain string is because its interesting caller (in unix/x11.c) has just constructed a string out of an environment variable, and it seemed like the path of least effort not to bother wrapping it into a proper Filename. But when Filename on Windows becomes more interesting, we'll need it to take the full version. --- ssh.h | 2 +- unix/x11.c | 5 ++++- utils/x11authfile.c | 4 ++-- windows/x11.c | 6 +++--- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ssh.h b/ssh.h index 2df0e3ed..8eed0662 100644 --- a/ssh.h +++ b/ssh.h @@ -1370,7 +1370,7 @@ char *platform_get_x_display(void); * calling this function to do the rest of the work. */ void x11_get_auth_from_authfile(struct X11Display *display, - const char *authfilename); + Filename *authfilename); void x11_format_auth_for_authfile( BinarySink *bs, SockAddr *addr, int display_no, ptrlen authproto, ptrlen authdata); diff --git a/unix/x11.c b/unix/x11.c index 710ff849..8ec2da07 100644 --- a/unix/x11.c +++ b/unix/x11.c @@ -33,9 +33,12 @@ void platform_get_x11_auth(struct X11Display *disp, Conf *conf) } if (xauthfile) { - x11_get_auth_from_authfile(disp, xauthfile); + Filename *xauthfn = filename_from_str(xauthfile); if (needs_free) sfree(xauthfile); + + x11_get_auth_from_authfile(disp, xauthfn); + filename_free(xauthfn); } } diff --git a/utils/x11authfile.c b/utils/x11authfile.c index e2358a9d..ffc91e9c 100644 --- a/utils/x11authfile.c +++ b/utils/x11authfile.c @@ -27,7 +27,7 @@ static void BinarySink_put_stringpl_xauth(BinarySink *bs, ptrlen pl) BinarySink_put_stringpl_xauth(BinarySink_UPCAST(bs),ptrlen) void x11_get_auth_from_authfile(struct X11Display *disp, - const char *authfilename) + Filename *authfilename) { FILE *authfp; char *buf; @@ -72,7 +72,7 @@ void x11_get_auth_from_authfile(struct X11Display *disp, */ bool localhost = !disp->unixdomain && sk_address_is_local(disp->addr); - authfp = fopen(authfilename, "rb"); + authfp = f_open(authfilename, "rb", false); if (!authfp) return; diff --git a/windows/x11.c b/windows/x11.c index 98bbb627..a6f2676c 100644 --- a/windows/x11.c +++ b/windows/x11.c @@ -11,9 +11,9 @@ void platform_get_x11_auth(struct X11Display *disp, Conf *conf) { - char *xauthpath = conf_get_filename(conf, CONF_xauthfile)->path; - if (xauthpath[0]) - x11_get_auth_from_authfile(disp, xauthpath); + Filename *xauthfn = conf_get_filename(conf, CONF_xauthfile); + if (!filename_is_null(xauthfn)) + x11_get_auth_from_authfile(disp, xauthfn); } const bool platform_uses_x11_unix_by_default = false;