X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udevsend.c;h=246a097f260d30c90b61456ff782479ac29abe59;hp=fd61cb2a2ff989c72c142cf85cbd18b889548ebb;hb=1dadabd79b28a4cd72382abf746e9cf4c0589617;hpb=d5c6d80ff1b617419dfcadb2fea4710d14f34b98 diff --git a/udevsend.c b/udevsend.c index fd61cb2a2..246a097f2 100644 --- a/udevsend.c +++ b/udevsend.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -124,8 +125,11 @@ int main(int argc, char* argv[]) struct timespec tspec; int sock; struct sockaddr_un saddr; + socklen_t addrlen; +#ifdef DEBUG init_logging("udevsend"); +#endif subsystem = argv[1]; if (subsystem == NULL) { @@ -146,11 +150,10 @@ int main(int argc, char* argv[]) } 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) { @@ -160,10 +163,12 @@ int main(int argc, char* argv[]) 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 */ - retval = connect(sock, (struct sockaddr *) &saddr, sizeof(saddr)); + retval = connect(sock, (struct sockaddr *) &saddr, addrlen); if (retval != -1) { goto send; } else {