summaryrefslogtreecommitdiffstats
path: root/usr.sbin/keyserv/keyserv.c
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2002-02-06 19:15:34 +0000
committeralfred <alfred@FreeBSD.org>2002-02-06 19:15:34 +0000
commit6a036e317e2e8e5408927c02ab424b3406b49b98 (patch)
tree5208a3e8f5f855ae57faa4958a46d617d684c313 /usr.sbin/keyserv/keyserv.c
parente4eecda8dbaeb25ddc620e97fa6160cc7223bde7 (diff)
downloadFreeBSD-src-6a036e317e2e8e5408927c02ab424b3406b49b98.zip
FreeBSD-src-6a036e317e2e8e5408927c02ab424b3406b49b98.tar.gz
Readded the svc_create() and the registering of the local transport,
now it is fixed. This should get us a working keyserv again, since it depends on local transport for key exchange. Since we do not have any KEYFILE name hardcoded anymore, set the umask that way that the keyserver socket can be created with with the appropriate permissions. Re-add the accidently removed signal(SIGPIPE, SIG_IGN); to the code which makes sense to avoid SIGPIPE when a disconnect on rpc socket occurs. Submitted by: mbr
Diffstat (limited to 'usr.sbin/keyserv/keyserv.c')
-rw-r--r--usr.sbin/keyserv/keyserv.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/usr.sbin/keyserv/keyserv.c b/usr.sbin/keyserv/keyserv.c
index 00f58c2..55c5467 100644
--- a/usr.sbin/keyserv/keyserv.c
+++ b/usr.sbin/keyserv/keyserv.c
@@ -115,6 +115,9 @@ main(argc, argv)
int c;
int warn = 0;
char *path = NULL;
+ void *localhandle;
+ register SVCXPRT *transp;
+ struct netconfig *nconf = NULL;
__key_encryptsession_pk_LOCAL = &key_encrypt_pk_2_svc_prog;
__key_decryptsession_pk_LOCAL = &key_decrypt_pk_2_svc_prog;
@@ -153,12 +156,15 @@ main(argc, argv)
/*
* Initialize
*/
- (void) umask(066); /* paranoia */
+ (void) umask(S_IXUSR|S_IXGRP|S_IXOTH);
if (geteuid() != 0)
errx(1, "keyserv must be run as root");
setmodulus(HEXMODULUS);
getrootkey(&masterkey, nflag);
+ rpcb_unset(KEY_PROG, KEY_VERS, NULL);
+ rpcb_unset(KEY_PROG, KEY_VERS2, NULL);
+
if (svc_create(keyprogram, KEY_PROG, KEY_VERS,
"netpath") == 0) {
(void) fprintf(stderr,
@@ -173,10 +179,38 @@ main(argc, argv)
exit(1);
}
+ localhandle = setnetconfig();
+ while ((nconf = getnetconfig(localhandle)) != NULL) {
+ if (nconf->nc_protofmly != NULL &&
+ strcmp(nconf->nc_protofmly, NC_LOOPBACK) == 0)
+ break;
+ }
+
+ if (nconf == NULL)
+ errx(1, "getnetconfig: %s", nc_sperror());
+
+ unlink(KEYSERVSOCK);
+ rpcb_unset(CRYPT_PROG, CRYPT_VERS, nconf);
+ transp = svcunix_create(RPC_ANYSOCK, 0, 0, KEYSERVSOCK);
+ if (transp == NULL)
+ errx(1, "cannot create AF_LOCAL service");
+ if (!svc_reg(transp, KEY_PROG, KEY_VERS, keyprogram, nconf))
+ errx(1, "unable to register (KEY_PROG, KEY_VERS, unix)");
+ if (!svc_reg(transp, KEY_PROG, KEY_VERS2, keyprogram, nconf))
+ errx(1, "unable to register (KEY_PROG, KEY_VERS2, unix)");
+ if (!svc_reg(transp, CRYPT_PROG, CRYPT_VERS, crypt_prog_1, nconf))
+ errx(1, "unable to register (CRYPT_PROG, CRYPT_VERS, unix)");
+
+ endnetconfig(localhandle);
+
+ (void) umask(066); /* paranoia */
+
if (!debugging) {
daemon(0,0);
}
+ signal(SIGPIPE, SIG_IGN);
+
svc_run();
abort();
/* NOTREACHED */
OpenPOWER on IntegriCloud