diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /usr.bin/rlogin/krcmd.c |
initial import of NetBSD tree
Diffstat (limited to 'usr.bin/rlogin/krcmd.c')
-rw-r--r-- | usr.bin/rlogin/krcmd.c | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/usr.bin/rlogin/krcmd.c b/usr.bin/rlogin/krcmd.c new file mode 100644 index 00000000000..5bcbb4c3312 --- /dev/null +++ b/usr.bin/rlogin/krcmd.c @@ -0,0 +1,164 @@ +/* $NetBSD: krcmd.c,v 1.2 1995/03/21 07:58:36 cgd Exp $ */ + +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +#if 0 +static char sccsid[] = "@(#)krcmd.c 8.1 (Berkeley) 6/6/93"; +#else +static char rcsid[] = "$NetBSD: krcmd.c,v 1.2 1995/03/21 07:58:36 cgd Exp $"; +#endif +#endif /* not lint */ + +/* + * $Source: /a/cvsroot/src/usr.bin/rlogin/krcmd.c,v + * $Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 + * 89/07/25 15:38:44 kfall Exp Locker: kfall + * static char *rcsid_kcmd_c = + * "$Header: /mit/kerberos/ucb/mit/kcmd/RCS/krcmd.c,v 5.1 89/07/25 15:38:44 + * kfall Exp Locker: kfall "; + */ + +#ifdef KERBEROS +#include <sys/types.h> +#ifdef CRYPT +#include <sys/socket.h> +#endif + +#include <netinet/in.h> + +#include <kerberosIV/des.h> +#include <kerberosIV/krb.h> + +#include <stdio.h> + +#define SERVICE_NAME "rcmd" + +int kcmd __P((int *, char **, u_short, char *, char *, char *, int *, + KTEXT, char *, char *, CREDENTIALS *, Key_schedule, MSG_DAT *, + struct sockaddr_in *, struct sockaddr_in *, long)); + +/* + * krcmd: simplified version of Athena's "kcmd" + * returns a socket attached to the destination, -1 or krb error on error + * if fd2p is non-NULL, another socket is filled in for it + */ + +int +krcmd(ahost, rport, remuser, cmd, fd2p, realm) + char **ahost; + u_short rport; + char *remuser, *cmd; + int *fd2p; + char *realm; +{ + int sock = -1, err = 0; + KTEXT_ST ticket; + long authopts = 0L; + + err = kcmd( + &sock, + ahost, + rport, + NULL, /* locuser not used */ + remuser, + cmd, + fd2p, + &ticket, + SERVICE_NAME, + realm, + (CREDENTIALS *) NULL, /* credentials not used */ + (bit_64 *) NULL, /* key schedule not used */ + (MSG_DAT *) NULL, /* MSG_DAT not used */ + (struct sockaddr_in *) NULL, /* local addr not used */ + (struct sockaddr_in *) NULL, /* foreign addr not used */ + authopts + ); + + if (err > KSUCCESS && err < MAX_KRB_ERRORS) { + fprintf(stderr, "krcmd: %s\n", krb_err_txt[err]); + return(-1); + } + if (err < 0) + return(-1); + return(sock); +} + +#ifdef CRYPT +int +krcmd_mutual(ahost, rport, remuser, cmd, fd2p, realm, cred, sched) + char **ahost; + u_short rport; + char *remuser, *cmd; + int *fd2p; + char *realm; + CREDENTIALS *cred; + Key_schedule sched; +{ + int sock, err; + KTEXT_ST ticket; + MSG_DAT msg_dat; + struct sockaddr_in laddr, faddr; + long authopts = KOPT_DO_MUTUAL; + + err = kcmd( + &sock, + ahost, + rport, + NULL, /* locuser not used */ + remuser, + cmd, + fd2p, + &ticket, + SERVICE_NAME, + realm, + cred, /* filled in */ + sched, /* filled in */ + &msg_dat, /* filled in */ + &laddr, /* filled in */ + &faddr, /* filled in */ + authopts + ); + + if (err > KSUCCESS && err < MAX_KRB_ERRORS) { + fprintf(stderr, "krcmd_mutual: %s\n", krb_err_txt[err]); + return(-1); + } + + if (err < 0) + return (-1); + return(sock); +} +#endif /* CRYPT */ +#endif /* KERBEROS */ |