int lxc_abstract_unix_open(const char *path, int type, int flags)
{
- int fd;
+ int fd, ret;
size_t len;
struct sockaddr_un addr;
/* addr.sun_path[0] has already been set to 0 by memset() */
strncpy(&addr.sun_path[1], &path[1], strlen(&path[1]));
- if (bind(fd, (struct sockaddr *)&addr, offsetof(struct sockaddr_un, sun_path) + len + 1)) {
+ ret = bind(fd, (struct sockaddr *)&addr,
+ offsetof(struct sockaddr_un, sun_path) + len + 1);
+ if (ret < 0) {
int tmp = errno;
close(fd);
errno = tmp;
return -1;
}
- if (type == SOCK_STREAM && listen(fd, 100)) {
- int tmp = errno;
- close(fd);
- errno = tmp;
- return -1;
+ if (type == SOCK_STREAM) {
+ ret = listen(fd, 100);
+ if (ret < 0) {
+ int tmp = errno;
+ close(fd);
+ errno = tmp;
+ return -1;
+ }
+
}
return fd;
int lxc_abstract_unix_close(int fd)
{
close(fd);
-
return 0;
}
int lxc_abstract_unix_connect(const char *path)
{
- int fd;
+ int fd, ret;
size_t len;
struct sockaddr_un addr;
/* addr.sun_path[0] has already been set to 0 by memset() */
strncpy(&addr.sun_path[1], &path[1], strlen(&path[1]));
- if (connect(fd, (struct sockaddr *)&addr, offsetof(struct sockaddr_un, sun_path) + len + 1)) {
+ ret = connect(fd, (struct sockaddr *)&addr,
+ offsetof(struct sockaddr_un, sun_path) + len + 1);
+ if (ret < 0) {
close(fd);
return -1;
}
int lxc_abstract_unix_send_credential(int fd, void *data, size_t size)
{
- struct msghdr msg = { 0 };
+ struct msghdr msg = {0};
struct iovec iov;
struct cmsghdr *cmsg;
struct ucred cred = {
- .pid = getpid(),
- .uid = getuid(),
- .gid = getgid(),
+ .pid = getpid(), .uid = getuid(), .gid = getgid(),
};
char cmsgbuf[CMSG_SPACE(sizeof(cred))] = {0};
char buf[1] = {0};
int lxc_abstract_unix_rcv_credential(int fd, void *data, size_t size)
{
- struct msghdr msg = { 0 };
+ struct msghdr msg = {0};
struct iovec iov;
struct cmsghdr *cmsg;
struct ucred cred;
cmsg = CMSG_FIRSTHDR(&msg);
if (cmsg && cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred)) &&
- cmsg->cmsg_level == SOL_SOCKET &&
- cmsg->cmsg_type == SCM_CREDENTIALS) {
+ cmsg->cmsg_level == SOL_SOCKET &&
+ cmsg->cmsg_type == SCM_CREDENTIALS) {
memcpy(&cred, CMSG_DATA(cmsg), sizeof(cred));
- if (cred.uid && (cred.uid != getuid() || cred.gid != getgid())) {
+ if (cred.uid &&
+ (cred.uid != getuid() || cred.gid != getgid())) {
INFO("message denied for '%d/%d'", cred.uid, cred.gid);
return -EACCES;
}