Status SetAuthentication (int count, IceListenObj *listenObjs, IceAuthDataEntry **authDataEntries) { KTemporaryFile addTempFile; remTempFile = new KTemporaryFile; if (!addTempFile.open() || !remTempFile->open()) return 0; if ((*authDataEntries = (IceAuthDataEntry *) malloc ( count * 2 * sizeof (IceAuthDataEntry))) == NULL) return 0; FILE *addAuthFile = fopen(QFile::encodeName(addTempFile.fileName()), "r+"); FILE *remAuthFile = fopen(QFile::encodeName(remTempFile->fileName()), "r+"); for (int i = 0; i < numTransports * 2; i += 2) { (*authDataEntries)[i].network_id = IceGetListenConnectionString (listenObjs[i/2]); (*authDataEntries)[i].protocol_name = (char *) "ICE"; (*authDataEntries)[i].auth_name = (char *) "MIT-MAGIC-COOKIE-1"; (*authDataEntries)[i].auth_data = IceGenerateMagicCookie (MAGIC_COOKIE_LEN); (*authDataEntries)[i].auth_data_length = MAGIC_COOKIE_LEN; (*authDataEntries)[i+1].network_id = IceGetListenConnectionString (listenObjs[i/2]); (*authDataEntries)[i+1].protocol_name = (char *) "XSMP"; (*authDataEntries)[i+1].auth_name = (char *) "MIT-MAGIC-COOKIE-1"; (*authDataEntries)[i+1].auth_data = IceGenerateMagicCookie (MAGIC_COOKIE_LEN); (*authDataEntries)[i+1].auth_data_length = MAGIC_COOKIE_LEN; write_iceauth (addAuthFile, remAuthFile, &(*authDataEntries)[i]); write_iceauth (addAuthFile, remAuthFile, &(*authDataEntries)[i+1]); IceSetPaAuthData (2, &(*authDataEntries)[i]); IceSetHostBasedAuthProc (listenObjs[i/2], HostBasedAuthProc); } fclose(addAuthFile); fclose(remAuthFile); QString iceAuth = KGlobal::dirs()->findExe("iceauth"); if (iceAuth.isEmpty()) { qWarning("KSMServer: could not find iceauth"); return 0; } KProcess p; p << iceAuth << "source" << addTempFile.fileName(); p.execute(); return (1); }
Status SetAuthentication(int count, IceListenObj *listenObjs, IceAuthDataEntry **authDataEntries) { FILE *addfp = NULL; FILE *removefp = NULL; const char *path; mode_t original_umask; char command[256]; int i; #ifdef HAVE_MKSTEMP int fd; #endif original_umask = umask (0077); /* disallow non-owner access */ path = getenv ("SM_SAVE_DIR"); if (!path) { path = getenv ("HOME"); if (!path) path = "."; } #ifndef HAVE_MKSTEMP if ((addAuthFile = unique_filename (path, ".xsm")) == NULL) goto bad; if (!(addfp = fopen (addAuthFile, "w"))) goto bad; fcntl(fileno(addfp), F_SETFD, FD_CLOEXEC); if ((remAuthFile = unique_filename (path, ".xsm")) == NULL) goto bad; if (!(removefp = fopen (remAuthFile, "w"))) goto bad; fcntl(fileno(removefp), F_SETFD, FD_CLOEXEC); #else if ((addAuthFile = unique_filename (path, ".xsm", &fd)) == NULL) goto bad; if (!(addfp = fdopen(fd, "wb"))) goto bad; fcntl(fileno(addfp), F_SETFD, FD_CLOEXEC); if ((remAuthFile = unique_filename (path, ".xsm", &fd)) == NULL) goto bad; if (!(removefp = fdopen(fd, "wb"))) goto bad; fcntl(fileno(removefp), F_SETFD, FD_CLOEXEC); #endif if ((*authDataEntries = (IceAuthDataEntry *) XtMalloc ( count * 2 * sizeof (IceAuthDataEntry))) == NULL) goto bad; for (i = 0; i < count * 2; i += 2) { (*authDataEntries)[i].network_id = IceGetListenConnectionString (listenObjs[i/2]); (*authDataEntries)[i].protocol_name = "ICE"; (*authDataEntries)[i].auth_name = "MIT-MAGIC-COOKIE-1"; (*authDataEntries)[i].auth_data = IceGenerateMagicCookie (MAGIC_COOKIE_LEN); (*authDataEntries)[i].auth_data_length = MAGIC_COOKIE_LEN; (*authDataEntries)[i+1].network_id = IceGetListenConnectionString (listenObjs[i/2]); (*authDataEntries)[i+1].protocol_name = "XSMP"; (*authDataEntries)[i+1].auth_name = "MIT-MAGIC-COOKIE-1"; (*authDataEntries)[i+1].auth_data = IceGenerateMagicCookie (MAGIC_COOKIE_LEN); (*authDataEntries)[i+1].auth_data_length = MAGIC_COOKIE_LEN; write_iceauth (addfp, removefp, &(*authDataEntries)[i]); write_iceauth (addfp, removefp, &(*authDataEntries)[i+1]); IceSetPaAuthData (2, &(*authDataEntries)[i]); IceSetHostBasedAuthProc (listenObjs[i/2], HostBasedAuthProc); } fclose (addfp); fclose (removefp); umask (original_umask); snprintf (command, sizeof(command), "iceauth source %s", addAuthFile); execute_system_command (command); remove (addAuthFile); return (1); bad: if (addfp) fclose (addfp); if (removefp) fclose (removefp); if (addAuthFile) { remove (addAuthFile); free (addAuthFile); } if (remAuthFile) { remove (remAuthFile); free (remAuthFile); } return (0); }
static Status SetAuthentication( int count,FIceListenObj *listenObjs,FIceAuthDataEntry **authDataEntries) { FILE *addfp = NULL; FILE *removefp = NULL; char *path; int original_umask; char command[256]; int i; int fd; if (!SessionSupport) { return 0; } original_umask = umask (0077); /* disallow non-owner access */ path = (char *)getenv("SM_SAVE_DIR"); if (!path) { path = getenv("HOME"); } #ifdef HAVE_GETPWUID if (!path) { struct passwd *pwd; pwd = getpwuid(getuid()); if (pwd) { path = pwd->pw_dir; } } #endif if (!path) { path = "."; } if ((addAuthFile = unique_filename (path, ".fsm-", &fd)) == NULL) { goto bad; } if (!(addfp = fdopen(fd, "wb"))) { goto bad; } if ((remAuthFile = unique_filename (path, ".fsm-", &fd)) == NULL) { goto bad; } if (!(removefp = fdopen(fd, "wb"))) { goto bad; } *authDataEntries = (FIceAuthDataEntry *) safemalloc( count * 2 * sizeof (FIceAuthDataEntry)); for (i = 0; i < count * 2; i += 2) { (*authDataEntries)[i].network_id = FIceGetListenConnectionString(listenObjs[i/2]); (*authDataEntries)[i].protocol_name = "ICE"; (*authDataEntries)[i].auth_name = "MIT-MAGIC-COOKIE-1"; (*authDataEntries)[i].auth_data = FIceGenerateMagicCookie (MAGIC_COOKIE_LEN); (*authDataEntries)[i].auth_data_length = MAGIC_COOKIE_LEN; (*authDataEntries)[i+1].network_id = FIceGetListenConnectionString(listenObjs[i/2]); (*authDataEntries)[i+1].protocol_name = "XSMP"; (*authDataEntries)[i+1].auth_name = "MIT-MAGIC-COOKIE-1"; (*authDataEntries)[i+1].auth_data = FIceGenerateMagicCookie (MAGIC_COOKIE_LEN); (*authDataEntries)[i+1].auth_data_length = MAGIC_COOKIE_LEN; write_iceauth(addfp, removefp, &(*authDataEntries)[i]); write_iceauth(addfp, removefp, &(*authDataEntries)[i+1]); FIceSetPaAuthData(2, &(*authDataEntries)[i]); FIceSetHostBasedAuthProc(listenObjs[i/2], HostBasedAuthProc); } fclose(addfp); fclose(removefp); umask (original_umask); sprintf (command, "iceauth source %s", addAuthFile); { int n; n = system(command); (void)n; } unlink (addAuthFile); return 1; bad: if (addfp) { fclose (addfp); } if (removefp) { fclose (removefp); } if (addAuthFile) { unlink (addAuthFile); free (addAuthFile); } if (remAuthFile) { unlink (remAuthFile); free (remAuthFile); } return 0; }