diff options
author | Artur Grabowski <art@cvs.openbsd.org> | 1998-08-12 23:55:58 +0000 |
---|---|---|
committer | Artur Grabowski <art@cvs.openbsd.org> | 1998-08-12 23:55:58 +0000 |
commit | 36f98f8347f986ee192477e3c971047962571fb1 (patch) | |
tree | 06fdabf5f2094c5fe81997d161a4fbbc0b327f4a | |
parent | dd73b6049dc191cf93c774efbd41854b073e4285 (diff) |
kauth from kth-krb 0.9.9. Fixes the problem with return values from executed programs.
-rw-r--r-- | kerberosIV/kauth/Makefile | 15 | ||||
-rw-r--r-- | kerberosIV/kauth/kauth.c | 65 |
2 files changed, 43 insertions, 37 deletions
diff --git a/kerberosIV/kauth/Makefile b/kerberosIV/kauth/Makefile index ae45686de6b..2fbefa16160 100644 --- a/kerberosIV/kauth/Makefile +++ b/kerberosIV/kauth/Makefile @@ -1,12 +1,15 @@ -# $OpenBSD: Makefile,v 1.2 1998/01/23 08:29:58 art Exp $ +# $OpenBSD: Makefile,v 1.3 1998/08/12 23:55:56 art Exp $ .include <bsd.obj.mk> -SRCS= encdata.c rkinit.c kauth.c marshall.c -PROG= kauth -LDADD+= -lkrb -lkafs -ldes +SRCS= encdata.c rkinit.c kauth.c marshall.c +.PATH: ${.CURDIR}/../roken +SRCS+= simple_exec.c +CFLAGS+= -I${.CURDIR}/../roken +PROG= kauth +LDADD+= -lkrb -lkafs -ldes DPADD+= ${LIBKRB} ${LIBKAFS} -BINDIR=/usr/bin -MAN= kauth.1 +BINDIR= /usr/bin +MAN= kauth.1 .include <bsd.prog.mk> diff --git a/kerberosIV/kauth/kauth.c b/kerberosIV/kauth/kauth.c index 4126ebdef92..dd12d0fc943 100644 --- a/kerberosIV/kauth/kauth.c +++ b/kerberosIV/kauth/kauth.c @@ -1,5 +1,5 @@ -/* $OpenBSD: kauth.c,v 1.1 1997/12/18 22:28:03 art Exp $ */ -/* $KTH: kauth.c,v 1.81 1997/12/09 10:36:33 joda Exp $ */ +/* $OpenBSD: kauth.c,v 1.2 1998/08/12 23:55:57 art Exp $ */ +/* $KTH: kauth.c,v 1.81 1997/12/09 10:36:33 joda Exp $ */ /* * Copyright (c) 1995, 1996, 1997 Kungliga Tekniska Högskolan @@ -48,6 +48,7 @@ */ #include "kauth.h" +#include <simple_exec.h> krb_principal princ; static char srvtab[MAXPATHLEN + 1]; @@ -79,36 +80,26 @@ usage(void) exit(1); } -static void +#define EX_NOEXEC 126 +#define EX_NOTFOUND 127 + +static int doexec(int argc, char **argv) { - int status; - pid_t ret; - - switch (fork()) { - case -1: - err (1, "fork"); - break; - case 0: - /* in child */ - execvp(argv[0], argv); - err (1, "Can't exec program ``%s''", argv[0]); - break; - default: - /* in parent */ - do { - ret = wait(&status); - } while ((ret > 0 && !WIFEXITED(status)) || (ret < 0 && errno == EINTR)); + int ret = simple_execvp(argv[0], argv); + if(ret == -2) + warn ("fork"); + if(ret == -3) + warn("waitpid"); if (ret < 0) - perror("wait"); - dest_tkt(); - if (k_hasafs()) - k_unlog(); - break; - } + return EX_NOEXEC; + if(ret == EX_NOEXEC || ret == EX_NOTFOUND) + warnx("Can't exec program ``%s''", argv[0]); + + return ret; } -void +static void renew(int sig) { int code; @@ -178,6 +169,7 @@ main(int argc, char **argv) memset(srvtab, 0, sizeof(srvtab)); *remoteuser = '\0'; nhost = 0; + host = NULL; /* Look for kerberos name */ if (argc > 1 && @@ -188,8 +180,12 @@ main(int argc, char **argv) strupr(princ.realm); } - while ((c = getopt(argc, argv, "r:t:f:hl:n:c:")) != EOF) + while ((c = getopt(argc, argv, "r:t:f:hdl:n:c:")) != EOF) switch (c) { + case 'd': + krb_enable_debug(); + _kafs_debug = 1; + break; case 'f': strncpy(srvtab, optarg, sizeof(srvtab)); break; @@ -308,7 +304,10 @@ main(int argc, char **argv) if (more_args) k_setpag(); if ((code = krb_afslog(cell, NULL)) != 0 && code != KDC_PR_UNKNOWN) + if(code > 0) warnx ("%s", krb_get_err_text(code)); + else + warnx ("failed to store AFS token"); } for(ret = 0; nhost-- > 0; host++) @@ -317,10 +316,14 @@ main(int argc, char **argv) if (ret) return ret; - if (more_args) - doexec(more_args, &argv[optind]); + if (more_args) { + ret = doexec(more_args, &argv[optind]); + dest_tkt(); + if (k_hasafs()) + k_unlog(); + } else zrefresh(); - return 0; + return ret; } |