summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
b3c2f65)
simply use ordinary recv_buffer()/send_buffer() in case ucred is
not available.
extern void (*crypt_function_send)(unsigned long len, const unsigned char *indata, unsigned char *outdata);
extern void (*crypt_function_send)(unsigned long len, const unsigned char *indata, unsigned char *outdata);
-#ifndef HAVE_UCRED
- struct ucred {
- uid_t uid, pid, gid;
-};
-#endif /* HAVE_UCRED */
-
/**
* initialize a struct sockaddr_in
* @param addr A pointer to the struct to be initialized
/**
* initialize a struct sockaddr_in
* @param addr A pointer to the struct to be initialized
+#ifndef HAVE_UCRED
+ struct ucred {
+ uid_t uid, pid, gid;
+};
+ssize_t send_cred_buffer(int sock, char *buf)
+{
+ return send_buffer(sock, buf);
+}
+int recv_cred_buffer(int fd, char *buf, size_t size)
+{
+ return recv_buffer(fd, buf, size) > 0? 1 : -E_RECVMSG;
+}
+#else HAVE_UCRED
/**
* send NULL terminated buffer and Unix credentials of the current process
*
/**
* send NULL terminated buffer and Unix credentials of the current process
*
msg.msg_iovlen = 1;
msg.msg_control = control;
msg.msg_controllen = sizeof(control);
msg.msg_iovlen = 1;
msg.msg_control = control;
msg.msg_controllen = sizeof(control);
/* attach the ucred struct */
cmsg = CMSG_FIRSTHDR(&msg);
cmsg->cmsg_level = SOL_SOCKET;
/* attach the ucred struct */
cmsg = CMSG_FIRSTHDR(&msg);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred));
*(struct ucred *)CMSG_DATA(cmsg) = c;
msg.msg_controllen = cmsg->cmsg_len;
cmsg->cmsg_len = CMSG_LEN(sizeof(struct ucred));
*(struct ucred *)CMSG_DATA(cmsg) = c;
msg.msg_controllen = cmsg->cmsg_len;
ret = sendmsg(sock, &msg, 0);
if (ret < 0)
ret = -E_SENDMSG;
ret = sendmsg(sock, &msg, 0);
if (ret < 0)
ret = -E_SENDMSG;
int yes = 1;
struct ucred cred;
int yes = 1;
struct ucred cred;
setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &yes, sizeof(int));
setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &yes, sizeof(int));
memset(&msg, 0, sizeof(msg));
memset(buf, 0, size);
iov.iov_base = buf;
memset(&msg, 0, sizeof(msg));
memset(buf, 0, size);
iov.iov_base = buf;
msg.msg_controllen = sizeof(control);
if (recvmsg(fd, &msg, 0) < 0)
return -E_RECVMSG;
msg.msg_controllen = sizeof(control);
if (recvmsg(fd, &msg, 0) < 0)
return -E_RECVMSG;
result = -E_SCM_CREDENTIALS;
cmsg = CMSG_FIRSTHDR(&msg);
while (cmsg) {
result = -E_SCM_CREDENTIALS;
cmsg = CMSG_FIRSTHDR(&msg);
while (cmsg) {
}
cmsg = CMSG_NXTHDR(&msg, cmsg);
}
}
cmsg = CMSG_NXTHDR(&msg, cmsg);
}
/** how many pending connections queue will hold */
#define BACKLOG 10
/** how many pending connections queue will hold */
#define BACKLOG 10