Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
nx-libs
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dimbor
nx-libs
Commits
bdcb5a18
Unverified
Commit
bdcb5a18
authored
Nov 01, 2019
by
Mike Gabriel
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'uli42-pr/work_on_xau' into 3.6.x
Attributes GH PR #851:
https://github.com/ArcticaProject/nx-libs/pull/851
parents
e721ba29
c590c647
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
91 additions
and
71 deletions
+91
-71
AuDispose.c
nx-X11/lib/src/AuDispose.c
+4
-6
AuFileName.c
nx-X11/lib/src/AuFileName.c
+33
-17
AuGetBest.c
nx-X11/lib/src/AuGetBest.c
+7
-15
AuRead.c
nx-X11/lib/src/AuRead.c
+47
-33
No files found.
nx-X11/lib/src/AuDispose.c
View file @
bdcb5a18
/*
Copyright 1988, 1998 The Open Group
...
...
@@ -32,13 +31,12 @@ in this Software without prior written authorization from The Open Group.
#include <stdlib.h>
void
XauDisposeAuth
(
auth
)
Xauth
*
auth
;
XauDisposeAuth
(
Xauth
*
auth
)
{
if
(
auth
)
{
if
(
auth
->
address
)
(
void
)
free
(
auth
->
address
);
if
(
auth
->
number
)
(
void
)
free
(
auth
->
number
);
if
(
auth
->
name
)
(
void
)
free
(
auth
->
name
);
free
(
auth
->
address
);
free
(
auth
->
number
);
free
(
auth
->
name
);
if
(
auth
->
data
)
{
(
void
)
bzero
(
auth
->
data
,
auth
->
data_length
);
(
void
)
free
(
auth
->
data
);
...
...
nx-X11/lib/src/AuFileName.c
View file @
bdcb5a18
/*
Copyright 1988, 1998 The Open Group
...
...
@@ -30,44 +29,61 @@ in this Software without prior written authorization from The Open Group.
#endif
#include <nx-X11/Xauth.h>
#include <nx-X11/Xos.h>
#include <assert.h>
#include <stdlib.h>
static
char
*
buf
=
NULL
;
static
void
free_filename_buffer
(
void
)
{
free
(
buf
);
buf
=
NULL
;
}
char
*
XauFileName
()
XauFileName
(
void
)
{
char
*
slashDotXauthority
=
"/.Xauthority"
;
c
onst
c
har
*
slashDotXauthority
=
"/.Xauthority"
;
char
*
name
;
static
char
*
buf
;
static
int
bsize
;
static
size_t
bsize
;
static
int
atexit_registered
=
0
;
#ifdef WIN32
char
dir
[
128
];
#endif
int
size
;
size_t
size
;
if
((
name
=
getenv
(
"XAUTHORITY"
)))
return
name
;
name
=
getenv
(
"HOME"
);
if
(
!
name
)
{
#ifdef WIN32
(
void
)
strcpy
(
dir
,
"/users/"
);
if
((
name
=
getenv
(
"USERNAME"
)))
{
(
void
)
strcat
(
dir
,
name
);
snprintf
(
dir
,
sizeof
(
dir
),
"/users/%s"
,
name
);
name
=
dir
;
}
if
(
!
name
)
#endif
return
0
;
return
NULL
;
}
size
=
strlen
(
name
)
+
strlen
(
&
slashDotXauthority
[
1
])
+
2
;
if
(
size
>
bsize
)
{
if
(
buf
)
free
(
buf
);
buf
=
malloc
((
unsigned
)
size
);
if
(
!
buf
)
return
0
;
if
((
size
>
bsize
)
||
(
buf
==
NULL
))
{
free
(
buf
);
assert
(
size
>
0
);
buf
=
malloc
(
size
);
if
(
!
buf
)
{
bsize
=
0
;
return
NULL
;
}
if
(
!
atexit_registered
)
{
atexit
(
free_filename_buffer
);
atexit_registered
=
1
;
}
bsize
=
size
;
}
s
trcpy
(
buf
,
name
);
strcat
(
buf
,
slashDotXauthority
+
(
name
[
1
]
==
'\0'
?
1
:
0
));
s
nprintf
(
buf
,
bsize
,
"%s%s"
,
name
,
slashDotXauthority
+
(
name
[
0
]
==
'/'
&&
name
[
1
]
==
'\0'
?
1
:
0
));
return
buf
;
}
nx-X11/lib/src/AuGetBest.c
View file @
bdcb5a18
/*
Copyright 1988, 1998 The Open Group
...
...
@@ -34,14 +33,7 @@ in this Software without prior written authorization from The Open Group.
#include <nx-X11/Xthreads.h>
#endif
static
int
binaryEqual
(
_Xconst
char
*
a
,
_Xconst
char
*
b
,
int
len
)
{
while
(
len
--
)
if
(
*
a
++
!=
*
b
++
)
return
0
;
return
1
;
}
#define binaryEqual(a, b, len) (memcmp(a, b, len) == 0)
Xauth
*
XauGetBestAuthByAddr
(
...
...
@@ -72,14 +64,14 @@ XauGetBestAuthByAddr (
auth_name
=
XauFileName
();
if
(
!
auth_name
)
return
0
;
return
NULL
;
if
(
access
(
auth_name
,
R_OK
)
!=
0
)
/* checks REAL id */
return
0
;
return
NULL
;
auth_file
=
fopen
(
auth_name
,
"rb"
);
if
(
!
auth_file
)
return
0
;
return
NULL
;
best
=
0
;
best
=
NULL
;
best_type
=
types_length
;
for
(;;)
{
entry
=
XauReadAuth
(
auth_file
);
...
...
@@ -101,11 +93,11 @@ XauGetBestAuthByAddr (
if
((
family
==
FamilyWild
||
entry
->
family
==
FamilyWild
||
(
entry
->
family
==
family
&&
((
address_length
==
entry
->
address_length
&&
binaryEqual
(
entry
->
address
,
address
,
(
int
)
address_length
))
binaryEqual
(
entry
->
address
,
address
,
address_length
))
)))
&&
(
number_length
==
0
||
entry
->
number_length
==
0
||
(
number_length
==
entry
->
number_length
&&
binaryEqual
(
entry
->
number
,
number
,
(
int
)
number_length
))))
binaryEqual
(
entry
->
number
,
number
,
number_length
))))
{
if
(
best_type
==
0
)
{
...
...
nx-X11/lib/src/AuRead.c
View file @
bdcb5a18
...
...
@@ -30,20 +30,23 @@ in this Software without prior written authorization from The Open Group.
#endif
#include <nx-X11/Xauth.h>
#include <stdlib.h>
#ifdef NX_TRANS_SOCKET
#include <errno.h>
#endif
static
int
read_short
(
unsigned
short
*
shortp
,
FILE
*
file
)
{
unsigned
char
file_short
[
2
];
#ifdef NX_TRANS_SOCKET
/*
* Added a check on EINTR to prevent the fread() call to be
* interrupted by any signal not blocked by OsBlockSignals().
*/
for
(;;)
{
if
(
fread
((
char
*
)
file_short
,
(
int
)
sizeof
(
file_short
),
1
,
file
)
!=
1
)
{
if
(
fread
((
char
*
)
file_short
,
sizeof
(
file_short
),
1
,
file
)
!=
1
)
{
if
(
errno
==
EINTR
&&
ferror
(
file
))
{
perror
(
"Reading from auth file"
);
clearerr
(
file
);
...
...
@@ -53,6 +56,10 @@ read_short (unsigned short *shortp, FILE *file)
}
break
;
}
#else
if
(
fread
((
char
*
)
file_short
,
sizeof
(
file_short
),
1
,
file
)
!=
1
)
return
0
;
#endif
*
shortp
=
file_short
[
0
]
*
256
+
file_short
[
1
];
return
1
;
}
...
...
@@ -61,19 +68,20 @@ static int
read_counted_string
(
unsigned
short
*
countp
,
char
**
stringp
,
FILE
*
file
)
{
unsigned
short
len
;
char
*
data
;
char
*
data
;
if
(
read_short
(
&
len
,
file
)
==
0
)
return
0
;
return
0
;
if
(
len
==
0
)
{
data
=
0
;
data
=
NULL
;
}
else
{
data
=
malloc
((
unsigned
)
len
);
if
(
!
data
)
return
0
;
data
=
malloc
((
unsigned
)
len
);
if
(
!
data
)
return
0
;
#ifdef NX_TRANS_SOCKET
for
(;;)
{
if
(
fread
(
data
,
(
int
)
sizeof
(
char
),
(
int
)
len
,
file
)
!=
len
)
if
(
fread
(
data
,
sizeof
(
char
),
len
,
file
)
!=
len
)
{
if
(
errno
==
EINTR
&&
ferror
(
file
))
{
...
...
@@ -81,12 +89,19 @@ read_counted_string (unsigned short *countp, char **stringp, FILE *file)
clearerr
(
file
);
continue
;
}
bzero
(
data
,
len
);
free
(
data
);
return
0
;
}
bzero
(
data
,
len
);
free
(
data
);
return
0
;
}
break
;
}
#else
if
(
fread
(
data
,
sizeof
(
char
),
len
,
file
)
!=
len
)
{
bzero
(
data
,
len
);
free
(
data
);
return
0
;
}
#endif
}
*
stringp
=
data
;
*
countp
=
len
;
...
...
@@ -94,41 +109,40 @@ read_counted_string (unsigned short *countp, char **stringp, FILE *file)
}
Xauth
*
XauReadAuth
(
auth_file
)
FILE
*
auth_file
;
XauReadAuth
(
FILE
*
auth_file
)
{
Xauth
local
;
Xauth
*
ret
;
if
(
read_short
(
&
local
.
family
,
auth_file
)
==
0
)
return
0
;
return
NULL
;
if
(
read_counted_string
(
&
local
.
address_length
,
&
local
.
address
,
auth_file
)
==
0
)
return
0
;
return
NULL
;
if
(
read_counted_string
(
&
local
.
number_length
,
&
local
.
number
,
auth_file
)
==
0
)
{
if
(
local
.
address
)
free
(
local
.
address
);
return
0
;
free
(
local
.
address
);
return
NULL
;
}
if
(
read_counted_string
(
&
local
.
name_length
,
&
local
.
name
,
auth_file
)
==
0
)
{
if
(
local
.
address
)
free
(
local
.
address
);
if
(
local
.
number
)
free
(
local
.
number
);
return
0
;
free
(
local
.
address
);
free
(
local
.
number
);
return
NULL
;
}
if
(
read_counted_string
(
&
local
.
data_length
,
&
local
.
data
,
auth_file
)
==
0
)
{
if
(
local
.
address
)
free
(
local
.
address
);
if
(
local
.
number
)
free
(
local
.
number
);
if
(
local
.
name
)
free
(
local
.
name
);
return
0
;
free
(
local
.
address
);
free
(
local
.
number
);
free
(
local
.
name
);
return
NULL
;
}
ret
=
(
Xauth
*
)
malloc
(
sizeof
(
Xauth
));
if
(
!
ret
)
{
if
(
local
.
address
)
free
(
local
.
address
);
if
(
local
.
number
)
free
(
local
.
number
);
if
(
local
.
name
)
free
(
local
.
name
);
if
(
local
.
data
)
{
bzero
(
local
.
data
,
local
.
data_length
);
free
(
local
.
data
);
}
return
0
;
free
(
local
.
address
);
free
(
local
.
number
);
free
(
local
.
name
);
if
(
local
.
data
)
{
bzero
(
local
.
data
,
local
.
data_length
);
free
(
local
.
data
);
}
return
NULL
;
}
*
ret
=
local
;
return
ret
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment