|
Lines 319-333
Link Here
|
| 319 |
} |
319 |
} |
| 320 |
|
320 |
|
| 321 |
|
321 |
|
|
|
322 |
static FILE * |
| 323 |
mkTempFile( char *nambuf, int namelen ) |
| 324 |
{ |
| 325 |
FILE *f; |
| 326 |
int r; |
| 327 |
|
| 328 |
for (r = 0; r < 100; r++) { |
| 329 |
randomStr( nambuf + namelen ); |
| 330 |
if ((f = fdOpenW( open( nambuf, O_WRONLY | O_CREAT | O_EXCL, 0600 ) ))) |
| 331 |
return f; |
| 332 |
if (errno != EEXIST) |
| 333 |
break; |
| 334 |
} |
| 335 |
return 0; |
| 336 |
} |
| 337 |
|
| 322 |
#define NAMELEN 255 |
338 |
#define NAMELEN 255 |
| 323 |
|
339 |
|
| 324 |
static FILE * |
340 |
static FILE * |
| 325 |
makeServerAuthFile( struct display *d ) |
341 |
makeServerAuthFile( struct display *d ) |
| 326 |
{ |
342 |
{ |
| 327 |
FILE *f; |
343 |
FILE *f; |
| 328 |
#ifndef HAVE_MKSTEMP |
344 |
int i; |
| 329 |
int r; |
|
|
| 330 |
#endif |
| 331 |
char cleanname[NAMELEN], nambuf[NAMELEN+128]; |
345 |
char cleanname[NAMELEN], nambuf[NAMELEN+128]; |
| 332 |
|
346 |
|
| 333 |
/* |
347 |
/* |
|
Lines 339-360
Link Here
|
| 339 |
if (mkdir( authDir, 0755 ) < 0 && errno != EEXIST) |
353 |
if (mkdir( authDir, 0755 ) < 0 && errno != EEXIST) |
| 340 |
return 0; |
354 |
return 0; |
| 341 |
cleanUpFileName( d->name, cleanname, NAMELEN - 8 ); |
355 |
cleanUpFileName( d->name, cleanname, NAMELEN - 8 ); |
| 342 |
#ifdef HAVE_MKSTEMP |
356 |
i = sprintf( nambuf, "%s/A%s-", authDir, cleanname ); |
| 343 |
sprintf( nambuf, "%s/A%s-XXXXXX", authDir, cleanname ); |
357 |
if ((f = mkTempFile( nambuf, i ))) { |
| 344 |
if ((f = fdOpenW( mkstemp( nambuf ) ))) { |
|
|
| 345 |
strDup( &d->authFile, nambuf ); |
358 |
strDup( &d->authFile, nambuf ); |
| 346 |
return f; |
359 |
return f; |
| 347 |
} |
360 |
} |
| 348 |
#else |
|
|
| 349 |
for (r = 0; r < 100; r++) { |
| 350 |
sprintf( nambuf, "%s/A%s-XXXXXX", authDir, cleanname ); |
| 351 |
(void)mktemp( nambuf ); |
| 352 |
if ((f = fdOpenW( open( nambuf, O_WRONLY | O_CREAT | O_EXCL, 0600 ) ))) { |
| 353 |
strDup( &d->authFile, nambuf ); |
| 354 |
return f; |
| 355 |
} |
| 356 |
} |
| 357 |
#endif |
| 358 |
return 0; |
361 |
return 0; |
| 359 |
} |
362 |
} |
| 360 |
|
363 |
|
|
Lines 1203-1221
Link Here
|
| 1203 |
* temporary - we can assume that we are the only ones |
1206 |
* temporary - we can assume that we are the only ones |
| 1204 |
* knowing about this file anyway. |
1207 |
* knowing about this file anyway. |
| 1205 |
*/ |
1208 |
*/ |
| 1206 |
#ifdef HAVE_MKSTEMP |
1209 |
i = sprintf( name_buf, "%s/.Xauth", d->userAuthDir ); |
| 1207 |
sprintf( name_buf, "%s/.XauthXXXXXX", d->userAuthDir ); |
1210 |
new = mkTempFile( name_buf, i ); |
| 1208 |
new = fdOpenW( mkstemp( name_buf ) ); |
|
|
| 1209 |
#else |
| 1210 |
for (i = 0; i < 100; i++) { |
| 1211 |
sprintf( name_buf, "%s/.XauthXXXXXX", d->userAuthDir ); |
| 1212 |
(void)mktemp( name_buf ); |
| 1213 |
if ((new = |
| 1214 |
fdOpenW( open( name_buf, O_WRONLY | O_CREAT | O_EXCL, |
| 1215 |
0600 ) ))) |
| 1216 |
break; |
| 1217 |
} |
| 1218 |
#endif |
| 1219 |
if (!new) { |
1211 |
if (!new) { |
| 1220 |
logError( "Cannot create authorization file in %s: %m\n", |
1212 |
logError( "Cannot create authorization file in %s: %m\n", |
| 1221 |
d->userAuthDir ); |
1213 |
d->userAuthDir ); |