fixup! taps: wip: init
This commit is contained in:
parent
ad06eaea1c
commit
a75d0b8e5d
7 changed files with 57 additions and 49 deletions
|
|
@ -1,3 +1,9 @@
|
||||||
project('ch-proxy', 'c')
|
project('ch-proxy', 'c')
|
||||||
|
|
||||||
executable('ch-proxy', 'proxy.c', install: true)
|
pkg = import('pkgconfig')
|
||||||
|
|
||||||
|
sendfd = library('sendfd', [ 'sendfd.c', 'sendfd.h' ], install: true)
|
||||||
|
pkg.generate(sendfd)
|
||||||
|
install_headers('sendfd.h')
|
||||||
|
|
||||||
|
executable('ch-proxy', 'proxy.c', link_with: [sendfd], install: true)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
stdenv.mkDerivation {
|
stdenv.mkDerivation {
|
||||||
pname = "ch-proxy";
|
pname = "ch-proxy";
|
||||||
version = "0.0.0";
|
version = "0.0.0";
|
||||||
|
outputs = [ "out" "lib" ];
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
meson
|
meson
|
||||||
ninja
|
ninja
|
||||||
|
|
@ -19,6 +20,8 @@ stdenv.mkDerivation {
|
||||||
fs.toSource {
|
fs.toSource {
|
||||||
fileset = fs.unions [
|
fileset = fs.unions [
|
||||||
./proxy.c
|
./proxy.c
|
||||||
|
./sendfd.c
|
||||||
|
./sendfd.h
|
||||||
./meson.build
|
./meson.build
|
||||||
];
|
];
|
||||||
root = ./.;
|
root = ./.;
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@
|
||||||
|
|
||||||
#include <linux/vm_sockets.h>
|
#include <linux/vm_sockets.h>
|
||||||
|
|
||||||
struct msghdr mk_msghdr();
|
#include "sendfd.h"
|
||||||
|
|
||||||
int ch_connect(const char*, const char*);
|
int ch_connect(const char*, const char*);
|
||||||
ssize_t send_fd(int, int);
|
|
||||||
|
|
||||||
#define _WRITE_CONFIRM(fd, buf, buflen) {if (write((fd), (buf), (buflen)) != (buflen)) { perror("ch-proxy/write/partial write"); exit(EXIT_FAILURE); }}
|
#define _WRITE_CONFIRM(fd, buf, buflen) {if (write((fd), (buf), (buflen)) != (buflen)) { perror("ch-proxy/write/partial write"); exit(EXIT_FAILURE); }}
|
||||||
|
|
||||||
|
|
@ -168,19 +168,13 @@ int main(int argc, char** argv) {
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (send_fd(1, s) == -1) {
|
if (send_fd(1, s, NULL) == -1) {
|
||||||
perror("ssh-vsock-proxy/main/send_fd");
|
perror("ssh-vsock-proxy/main/send_fd");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct msghdr mk_msghdr() {
|
|
||||||
struct msghdr msg;
|
|
||||||
memset(&msg, 0, sizeof(msg));
|
|
||||||
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
int ch_connect(const char *path, const char *port) {
|
int ch_connect(const char *path, const char *port) {
|
||||||
int s = socket(AF_UNIX, SOCK_STREAM, 0);
|
int s = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
|
|
@ -212,38 +206,3 @@ int ch_connect(const char *path, const char *port) {
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t send_fd(int dst_fd, int fd) {
|
|
||||||
struct msghdr msg = mk_msghdr();
|
|
||||||
|
|
||||||
/* openssh expects to receive a dummy length=1 iovec? */
|
|
||||||
char ch;
|
|
||||||
struct iovec vec;
|
|
||||||
vec.iov_base = &ch;
|
|
||||||
vec.iov_len = 1;
|
|
||||||
msg.msg_iov = &vec;
|
|
||||||
msg.msg_iovlen = 1;
|
|
||||||
|
|
||||||
union {
|
|
||||||
struct cmsghdr align;
|
|
||||||
char buf[CMSG_SPACE(sizeof(int))];
|
|
||||||
} u;
|
|
||||||
|
|
||||||
msg.msg_control = u.buf;
|
|
||||||
msg.msg_controllen = sizeof(u.buf);
|
|
||||||
|
|
||||||
struct cmsghdr *cmptr;
|
|
||||||
cmptr = CMSG_FIRSTHDR(&msg);
|
|
||||||
|
|
||||||
if (cmptr == NULL) {
|
|
||||||
fprintf(stderr, "ch-proxy/send_fd/CMSG_FIRSTHDR: failed to initialize msg_control\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
cmptr->cmsg_len = CMSG_LEN(sizeof(int));
|
|
||||||
cmptr->cmsg_level = SOL_SOCKET;
|
|
||||||
cmptr->cmsg_type = SCM_RIGHTS;
|
|
||||||
*((int*) CMSG_DATA(cmptr)) = fd;
|
|
||||||
|
|
||||||
return (sendmsg(dst_fd, &msg, 0));
|
|
||||||
}
|
|
||||||
|
|
|
||||||
38
pkgs/ch-proxy/sendfd.c
Normal file
38
pkgs/ch-proxy/sendfd.c
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include "sendfd.h"
|
||||||
|
#include "sys/socket.h" /* cmsghdr */
|
||||||
|
#include "stdio.h" /* perror */
|
||||||
|
|
||||||
|
|
||||||
|
ssize_t send_fd(int dst_fd, int fd, const struct iovec *iov) {
|
||||||
|
struct msghdr msg = { 0 };
|
||||||
|
|
||||||
|
/* openssh expects to receive a dummy length=1 iovec? */
|
||||||
|
char ch = 0;
|
||||||
|
struct iovec vecDefault = { 0 };
|
||||||
|
vecDefault.iov_base = &ch;
|
||||||
|
vecDefault.iov_len = 1;
|
||||||
|
msg.msg_iov = iov == NULL ? &vecDefault : iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct cmsghdr align;
|
||||||
|
char buf[CMSG_SPACE(sizeof(int))];
|
||||||
|
} u;
|
||||||
|
|
||||||
|
msg.msg_control = u.buf;
|
||||||
|
msg.msg_controllen = sizeof(u.buf);
|
||||||
|
|
||||||
|
struct cmsghdr *cmptr;
|
||||||
|
cmptr = CMSG_FIRSTHDR(&msg);
|
||||||
|
|
||||||
|
if (cmptr == NULL) {
|
||||||
|
perror("ch-proxy/send_fd/CMSG_FIRSTHDR: failed to initialize msg_control\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
cmptr->cmsg_len = CMSG_LEN(sizeof(int));
|
||||||
|
cmptr->cmsg_level = SOL_SOCKET;
|
||||||
|
cmptr->cmsg_type = SCM_RIGHTS;
|
||||||
|
*((int*) CMSG_DATA(cmptr)) = fd;
|
||||||
|
|
||||||
|
return (sendmsg(dst_fd, &msg, 0));
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
#ifndef _CH_PROXY_SENFD
|
#ifndef _CH_PROXY_SENFD
|
||||||
#define _CH_PROXY_SENFD
|
#define _CH_PROXY_SENFD
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h> /* size_t */
|
||||||
|
#include <sys/types.h> /* ssize_t */
|
||||||
|
#include <sys/uio.h> /* iovec */
|
||||||
|
|
||||||
ssize_t send_fd(int dst_fd, int fd);
|
ssize_t send_fd(int dst_fd, int fd, const struct iovec *);
|
||||||
|
|
||||||
#endif _CH_PROXY_SENFD
|
#endif /* _CH_PROXY_SENFD */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ in
|
||||||
volumes = [
|
volumes = [
|
||||||
{
|
{
|
||||||
image = "swapfile.img";
|
image = "swapfile.img";
|
||||||
|
serial = "swapfiles";
|
||||||
mountPoint = "/var/swapfiles";
|
mountPoint = "/var/swapfiles";
|
||||||
size = 1024;
|
size = 1024;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ in
|
||||||
};
|
};
|
||||||
config = mergeIf cfg.enable [
|
config = mergeIf cfg.enable [
|
||||||
{
|
{
|
||||||
services.getty.autologinUser = "user";
|
|
||||||
security.sudo.wheelNeedsPassword = false;
|
security.sudo.wheelNeedsPassword = false;
|
||||||
users.mutableUsers = false;
|
users.mutableUsers = false;
|
||||||
users.users.user = {
|
users.users.user = {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue