From d9ce6714cd63132ce9cdf0c9702815e8d135693f Mon Sep 17 00:00:00 2001 From: ubq323 Date: Thu, 13 Jan 2022 18:29:01 +0000 Subject: correctly set group and permissions on socket on startup --- thing.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/thing.c b/thing.c index e7c0f53..b3854ae 100644 --- a/thing.c +++ b/thing.c @@ -19,10 +19,12 @@ #define REALNAME ",flappy fly bird man?" #define CHANNEL "#a" +#define SOCKETGROUP "apionet" #include #include #include +#include #include #include #include @@ -183,6 +185,43 @@ int unix_setup() { perror("(unix) bind"); return -1; } + + // set group and permissions on socket + long buflen = sysconf(_SC_GETGR_R_SIZE_MAX); + buflen = (buflen == -1) ? 1024 : buflen; + char *buf = malloc(buflen); + struct group grp; + struct group *res; + errno = 0; + // get group gid from name + getgrnam_r(SOCKETGROUP,&grp,buf,buflen,&res); + if (res == NULL) { + if (errno != 0) + perror("getgrnam_r"); + else + fprintf(stderr,"group %s does not exist",SOCKETGROUP); + free(buf); + return -1; + } + free(buf); + + // set socket's group + if (chown(SOCKETNAME,-1,grp.gr_gid) == -1) { + perror("chown"); + return -1; + } + + struct stat sb; + if (stat(SOCKETNAME,&sb) == -1) { + perror("stat"); + return -1; + } + if (chmod(SOCKETNAME,sb.st_mode|S_IWGRP) == -1) { + perror("chmod"); + return -1; + } + + return sock; } -- cgit v1.2.3