chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] udevd - fix socket path length
[elogind.git]
/
udevsend.c
diff --git
a/udevsend.c
b/udevsend.c
index 415207d8ca26d8108a90d17cff7b83a93abdaf5c..246a097f260d30c90b61456ff782479ac29abe59 100644
(file)
--- a/
udevsend.c
+++ b/
udevsend.c
@@
-29,6
+29,7
@@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
@@
-124,8
+125,11
@@
int main(int argc, char* argv[])
struct timespec tspec;
int sock;
struct sockaddr_un saddr;
struct timespec tspec;
int sock;
struct sockaddr_un saddr;
+ socklen_t addrlen;
+#ifdef DEBUG
init_logging("udevsend");
init_logging("udevsend");
+#endif
subsystem = argv[1];
if (subsystem == NULL) {
subsystem = argv[1];
if (subsystem == NULL) {
@@
-146,11
+150,10
@@
int main(int argc, char* argv[])
}
seqnum = get_seqnum();
}
seqnum = get_seqnum();
- if (seqnum == NULL) {
- dbg("no seqnum");
- goto exit;
- }
- seq = atoi(seqnum);
+ if (seqnum == NULL)
+ seq = 0;
+ else
+ seq = atoi(seqnum);
sock = socket(AF_LOCAL, SOCK_STREAM, 0);
if (sock == -1) {
sock = socket(AF_LOCAL, SOCK_STREAM, 0);
if (sock == -1) {
@@
-160,10
+163,12
@@
int main(int argc, char* argv[])
memset(&saddr, 0x00, sizeof(saddr));
saddr.sun_family = AF_LOCAL;
memset(&saddr, 0x00, sizeof(saddr));
saddr.sun_family = AF_LOCAL;
- strcpy(saddr.sun_path, UDEVD_SOCK);
+ /* use abstract namespace for socket path */
+ strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
+ addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
/* try to connect, if it fails start daemon */
/* try to connect, if it fails start daemon */
- retval = connect(sock,
&saddr, sizeof(saddr)
);
+ retval = connect(sock,
(struct sockaddr *) &saddr, addrlen
);
if (retval != -1) {
goto send;
} else {
if (retval != -1) {
goto send;
} else {
@@
-182,7
+187,7
@@
int main(int argc, char* argv[])
tspec.tv_nsec = 100000000; /* 100 millisec */
loop = UDEVSEND_CONNECT_RETRY;
while (loop--) {
tspec.tv_nsec = 100000000; /* 100 millisec */
loop = UDEVSEND_CONNECT_RETRY;
while (loop--) {
- retval = connect(sock, &saddr, sizeof(saddr));
+ retval = connect(sock,
(struct sockaddr *)
&saddr, sizeof(saddr));
if (retval != -1)
goto send;
else
if (retval != -1)
goto send;
else