You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tde-packaging/opensuse/core/tdelibs/use-xauthlocalhostname.diff

241 lines
8.1 KiB

Index: kinit/wrapper.c
===================================================================
--- kinit/wrapper.c.orig
+++ kinit/wrapper.c
@@ -164,7 +164,9 @@ static int openSocket()
sock_file[strlen(sock_file)-1] = 0;
strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file));
- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1);
+ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
{
perror("Warning: Could not determine hostname: ");
return -1;
Index: kinit/lnusertemp.c
===================================================================
--- kinit/lnusertemp.c.orig
+++ kinit/lnusertemp.c
@@ -39,7 +39,7 @@
int check_tmp_dir(const char *tmp_dir);
int create_link(const char *file, const char *tmp_dir);
-int build_link(const char *tmp_prefix, const char *kde_prefix);
+int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname);
int check_tmp_dir(const char *tmp_dir)
{
@@ -89,7 +89,7 @@ int create_link(const char *file, const
}
-int build_link(const char *tmp_prefix, const char *kde_prefix)
+int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname)
{
struct passwd *pw_ent;
char kde_tmp_dir[PATH_MAX+1];
@@ -157,10 +157,21 @@ int build_link(const char *tmp_prefix, c
}
strncat(kde_tmp_dir, kde_prefix, PATH_MAX - strlen(kde_tmp_dir));
- if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0)
+
+ if( kdehostname )
+ {
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strncat(kde_tmp_dir+strlen(kde_tmp_dir), getenv("XAUTHLOCALHOSTNAME"), PATH_MAX - strlen(kde_tmp_dir) - 1);
+ else
+ return 0;
+ }
+ else
{
- perror("Aborting. Could not determine hostname: ");
- exit(255);
+ if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0)
+ {
+ perror("Could not determine hostname: ");
+ return 1;
+ }
}
kde_tmp_dir[sizeof(kde_tmp_dir)-1] = '\0';
@@ -266,7 +277,9 @@ int main(int argc, char **argv)
kde_prefix = "/cache-";
}
- res = build_link(tmp_prefix, kde_prefix);
+ res = build_link(tmp_prefix, kde_prefix, 1);
+ if( build_link(tmp_prefix, kde_prefix, 0))
+ res = 1;
free(tmp_prefix);
Index: kdecore/kstandarddirs.cpp
===================================================================
--- kdecore/kstandarddirs.cpp.orig
+++ kdecore/kstandarddirs.cpp
@@ -719,7 +719,10 @@ void KStandardDirs::createSpecialResourc
{
char hostname[256];
hostname[0] = 0;
- gethostname(hostname, 255);
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strlcpy(hostname, getenv("XAUTHLOCALHOSTNAME"), 255 );
+ else
+ gethostname(hostname, 255);
QString dir = QString("%1%2-%3").arg(localkdedir()).arg(type).arg(hostname);
char link[1024];
link[1023] = 0;
Index: kdecore/kcrash.cpp
===================================================================
--- kdecore/kcrash.cpp.orig
+++ kdecore/kcrash.cpp
@@ -466,7 +466,9 @@ static int openSocket()
sock_file[strlen(sock_file)-1] = 0;
strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file));
- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
+ if( getenv("XAUTHLOCALHOSTNAME"))
+ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1);
+ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0)
{
perror("Warning: Could not determine hostname: ");
return -1;
Index: dcop/dcopserver_shutdown.c
===================================================================
--- dcop/dcopserver_shutdown.c.orig
+++ dcop/dcopserver_shutdown.c
@@ -95,7 +95,9 @@ static void getDCOPFile(char *dcop_file,
strncat(dcop_file, "/.DCOPserver_", n);
n -= strlen("/.DCOPserver_");
- if (gethostname(dcop_file+strlen(dcop_file), n) != 0)
+ if (getenv("XAUTHLOCALHOSTNAME"))
+ strncat(dcop_file+strlen(dcop_file), getenv("XAUTHLOCALHOSTNAME"), n);
+ else if (gethostname(dcop_file+strlen(dcop_file), n) != 0)
{
perror("Error. Could not determine hostname: ");
dcop_file[0] = '\0';
Index: dcop/dcopc.c
===================================================================
--- dcop/dcopc.c.orig
+++ dcop/dcopc.c
@@ -684,7 +684,9 @@ dcop_connect()
}
hostName[0] = '\0';
- if (gethostname(hostName, sizeof(hostName)))
+ if (getenv("XAUTHLOCALHOSTNAME"))
+ strlcpy(hostName, getenv("XAUTHLOCALHOSTNAME"),sizeof(hostName)-1);
+ else if (gethostname(hostName, sizeof(hostName)))
strcpy(hostName, "localhost");
else
hostName[sizeof(hostName)-1] = '\0';
Index: dcop/dcopclient.cpp
===================================================================
--- dcop/dcopclient.cpp.orig
+++ dcop/dcopclient.cpp
@@ -277,7 +277,9 @@ static QCString dcopServerFile(const QCS
{
char hostName[256];
hostName[0] = '\0';
- if (gethostname(hostName, sizeof(hostName)))
+ if (getenv("XAUTHLOCALHOSTNAME"))
+ fName += getenv("XAUTHLOCALHOSTNAME");
+ else if (gethostname(hostName, sizeof(hostName)))
{
fName += "localhost";
}
Index: dcop/KDE-ICE/Xtranssock.c
===================================================================
--- dcop/KDE-ICE/Xtranssock.c.orig
+++ dcop/KDE-ICE/Xtranssock.c
@@ -1444,6 +1444,7 @@ UnixHostReallyLocal (char *host)
{
char hostnamebuf[256];
+ char* xauthlocalname = getenv("XAUTHLOCALHOSTNAME");
TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf));
@@ -1451,6 +1452,10 @@ UnixHostReallyLocal (char *host)
{
return (1);
}
+ else if(xauthlocalname && strcmp (xauthlocalname, host) == 0)
+ {
+ return (1);
+ }
else
{
/*
Index: kded/khostname.cpp
===================================================================
--- kded/khostname.cpp.orig
+++ kded/khostname.cpp
@@ -111,7 +111,8 @@ static QCStringList split(const QCString
void KHostName::changeX()
{
- QString cmd = "xauth list";
+ const char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME");
+ QString cmd = "xauth -n list";
FILE *xFile = popen(QFile::encodeName(cmd), "r");
if (!xFile)
{
@@ -123,6 +124,7 @@ void KHostName::changeX()
char buf[1024+1];
while (!feof(xFile))
{
+ buf[1024]='\0';
QCString line = fgets(buf, 1024, xFile);
if (line.length())
line.truncate(line.length()-1); // Strip LF.
@@ -157,12 +159,17 @@ void KHostName::changeX()
QCString newNetId = newName+netId.mid(i);
QCString oldNetId = netId.left(i);
- if(oldNetId != oldName)
- continue;
+ if(oldNetId != oldName
+ && (!xauthlocalhostname || strcmp(xauthlocalhostname, oldNetId.data()) != 0))
+ continue;
- cmd = "xauth remove "+KProcess::quote(netId);
- system(QFile::encodeName(cmd));
- cmd = "xauth add ";
+ // don't nuke the xauth when XAUTHLOCALHOSTNAME points to it
+ if (!xauthlocalhostname || oldNetId != xauthlocalhostname)
+ {
+ cmd = "xauth -n remove "+KProcess::quote(netId);
+ system(QFile::encodeName(cmd));
+ }
+ cmd = "xauth -n add ";
cmd += KProcess::quote(newNetId);
cmd += " ";
cmd += KProcess::quote(authName);
@@ -276,7 +283,10 @@ void KHostName::changeDcop()
}
}
- // Remove old entries
+ // Remove old entries, but only if XAUTHLOCALHOSTNAME doesn't point
+ // to it
+ char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME");
+ if (!xauthlocalhostname || !oldNetId.contains(xauthlocalhostname))
{
QString cmd = "iceauth remove "+KProcess::quote("netid="+oldNetId);
system(QFile::encodeName(cmd));
@@ -368,9 +378,7 @@ int main(int argc, char **argv)
KHostName hn;
- if(!getenv("XAUTHLOCALHOSTNAME"))
- hn.changeX();
-
+ hn.changeX();
hn.changeDcop();
hn.changeStdDirs("socket");
hn.changeStdDirs("tmp");