chiark
/
gitweb
/
~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow the caller to configure the administration socket permissions.
[tripe]
/
server
/
tripe.c
diff --git
a/server/tripe.c
b/server/tripe.c
index 2dc03434de57139c6b8fd9b224081d1b1813f155..1e6d406249d5a98f73105fd84513d65d2787dc66 100644
(file)
--- a/
server/tripe.c
+++ b/
server/tripe.c
@@
-73,7
+73,7
@@
static void interval(struct timeval *tv, void *v)
static void usage(FILE *fp)
{
pquis(fp, "Usage: $ [-DF] [-d DIR] [-b ADDR] [-p PORT] [-n TUNNEL]\n\
static void usage(FILE *fp)
{
pquis(fp, "Usage: $ [-DF] [-d DIR] [-b ADDR] [-p PORT] [-n TUNNEL]\n\
- [-U USER] [-G GROUP] [-a SOCKET] [-T TRACE-OPTS]\n\
+ [-U USER] [-G GROUP] [-a SOCKET] [-
m MODE] [-
T TRACE-OPTS]\n\
[-k PRIV-KEYRING] [-K PUB-KEYRING] [-t KEY-TAG]\n");
}
[-k PRIV-KEYRING] [-K PUB-KEYRING] [-t KEY-TAG]\n");
}
@@
-105,6
+105,7
@@
Options:\n\
-K, --pub-keyring=FILE Get public keys from FILE.\n\
-t, --tag=KEYTAG Use private key labelled TAG.\n\
-a, --admin-socket=FILE Use FILE as the adminstration socket.\n\
-K, --pub-keyring=FILE Get public keys from FILE.\n\
-t, --tag=KEYTAG Use private key labelled TAG.\n\
-a, --admin-socket=FILE Use FILE as the adminstration socket.\n\
+-m, --admin-perms=MODE Permissions to set on admin socket [default 600].\n\
" T( "\
-T, --trace=OPTIONS Turn on tracing options.\n\
" ) "\
" T( "\
-T, --trace=OPTIONS Turn on tracing options.\n\
" ) "\
@@
-116,6
+117,7
@@
int main(int argc, char *argv[])
const char *kr_priv = "keyring", *kr_pub = "keyring.pub";
const char *tag_priv = 0;
const char *csock = SOCKETDIR "/tripesock";
const char *kr_priv = "keyring", *kr_pub = "keyring.pub";
const char *tag_priv = 0;
const char *csock = SOCKETDIR "/tripesock";
+ int csockmode = 0600;
const char *dir = CONFIGDIR;
const char *p;
unsigned port = TRIPE_PORT;
const char *dir = CONFIGDIR;
const char *p;
unsigned port = TRIPE_PORT;
@@
-162,6
+164,7
@@
int main(int argc, char *argv[])
{ "pub-keyring", OPTF_ARGREQ, 0, 'K' },
{ "tag", OPTF_ARGREQ, 0, 't' },
{ "admin-socket", OPTF_ARGREQ, 0, 'a' },
{ "pub-keyring", OPTF_ARGREQ, 0, 'K' },
{ "tag", OPTF_ARGREQ, 0, 't' },
{ "admin-socket", OPTF_ARGREQ, 0, 'a' },
+ { "admin-perms", OPTF_ARGREQ, 0, 'm' },
#ifndef NTRACE
{ "trace", OPTF_ARGREQ, 0, 'T' },
#endif
#ifndef NTRACE
{ "trace", OPTF_ARGREQ, 0, 'T' },
#endif
@@
-169,7
+172,7
@@
int main(int argc, char *argv[])
{ 0, 0, 0, 0 }
};
{ 0, 0, 0, 0 }
};
- i = mdwopt(argc, argv, "hvuDFU:G:b:n:p:d:k:K:t:a:" T("T:"),
+ i = mdwopt(argc, argv, "hvuDFU:G:b:n:p:d:k:K:t:a:
m:
" T("T:"),
opts, 0, 0, 0);
if (i < 0)
break;
opts, 0, 0, 0);
if (i < 0)
break;
@@
-238,6
+241,11
@@
int main(int argc, char *argv[])
case 'a':
csock = optarg;
break;
case 'a':
csock = optarg;
break;
+ case 'm': {
+ char *p;
+ csockmode = strtol(optarg, &p, 8);
+ if (*p) die(EXIT_FAILURE, "bad permissions: `%s'", optarg);
+ } break;
case 't':
tag_priv = optarg;
break;
case 't':
tag_priv = optarg;
break;
@@
-289,7
+297,7
@@
int main(int argc, char *argv[])
a_create(STDIN_FILENO, STDOUT_FILENO, af);
}
ps_split(f & f_daemon);
a_create(STDIN_FILENO, STDOUT_FILENO, af);
}
ps_split(f & f_daemon);
- a_init(csock, u, g);
+ a_init(csock, u, g
, csockmode
);
u_setugid(u, g);
km_init(kr_priv, kr_pub, tag_priv);
if (f & f_daemon) {
u_setugid(u, g);
km_init(kr_priv, kr_pub, tag_priv);
if (f & f_daemon) {