From 38b2b0be7840d868c21093a406ab98a646212de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Mon, 2 Dec 2019 23:24:31 +0100 Subject: Process the new location of the ICEauthority file + our internal implementation of IceAuthFileName tests whether the ICEauthority file exists in the folder specified by the XDG_RUNTIME_DIR variable + DCOP client tests whether the ICEauthority file for a specific user exists in the user's folder based on the XDG_RUNTIME_DIR variable + tdeinit uses the IceAuthFileName() function instead of building the file name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This relates to bug 3027. Signed-off-by: Slávek Banko --- dcop/KDE-ICE/authutil.c | 78 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 22 deletions(-) (limited to 'dcop/KDE-ICE/authutil.c') diff --git a/dcop/KDE-ICE/authutil.c b/dcop/KDE-ICE/authutil.c index 41a2eefaa..da52b1cf3 100644 --- a/dcop/KDE-ICE/authutil.c +++ b/dcop/KDE-ICE/authutil.c @@ -81,11 +81,13 @@ char * IceAuthFileName () { + static char baseICEauthority[] = "ICEauthority"; #ifdef _WIN32 - static char slashDotICEauthority[] = "\\.ICEauthority"; + static char pathSep[] = "\\"; #else - static char slashDotICEauthority[] = "/.ICEauthority"; + static char pathSep[] = "/"; #endif + char fileSep[2]; char *name; static char *buf; static int bsize; @@ -95,37 +97,70 @@ IceAuthFileName () #endif name = getenv ("ICEAUTHORITY"); - if ( name ) + if (name && name[0]) return (name); - name = getenv ("HOME"); + name = getenv("XDG_RUNTIME_DIR"); + if (name && name[0]) + { + char *testBuf; + strcpy(fileSep, ""); + size = strlen(name) + strlen(pathSep) + strlen(fileSep) + strlen(baseICEauthority) + 1; + testBuf = malloc(size); + if (!testBuf) + { + return (NULL); + } + snprintf(testBuf, size, "%s%s%s%s", name, pathSep, fileSep, baseICEauthority); + if (access(testBuf, F_OK)) + { + name = NULL; + } + free(testBuf); + } - if (!name) + if (!name || !name[0]) { + name = getenv ("HOME"); + strcpy(fileSep, "."); #ifdef _WIN32 - if(name = getenv ("HOMEDRIVE")) + if (!name || !name[0]) { - strcpy (dir, name); - if(name = getenv ("HOMEPATH")) - strcat (dir, name); - } - else + if(name = getenv ("HOMEDRIVE")) + { + strcpy (dir, name); + if(name = getenv ("HOMEPATH")) { - if(name = getenv ("USERPROFILE")) - strcpy (dir, name); - } - name = dir; - if (!name) + strcat (dir, name); + } + name = dir; + } + else + { + name = getenv ("USERPROFILE"); + } + } #endif #ifdef __EMX__ - strcpy (dir,"c:"); - name = dir; - if (!name) + if (!name || !name[0]) + { + strcpy (dir,"c:"); + name = dir; + } #endif + } + if (!name || !name[0]) + { return (NULL); } - size = strlen (name) + strlen (&slashDotICEauthority[1]) + 2; + /* Special case for "/". We will add our own '/' later. */ + if (strcmp(name, pathSep) == 0) + { + name++; + } + + size = strlen(name) + strlen(pathSep) + strlen(fileSep) + strlen(baseICEauthority) + 1; if (size > bsize) { @@ -137,8 +172,7 @@ IceAuthFileName () bsize = size; } - strcpy (buf, name); - strcat (buf, slashDotICEauthority + (name[1] == '\0' ? 1 : 0)); + snprintf(buf, bsize, "%s%s%s%s", name, pathSep, fileSep, baseICEauthority); return (buf); } -- cgit v1.2.1