[1085] in Kerberos-V5-bugs
Re: Kerberos 5 Beta 4 Pl 3 port to SVR4 and Windows
daemon@ATHENA.MIT.EDU (Anthony J. Lill)
Thu Feb 9 15:29:32 1995
To: "Theodore Ts'o" <tytso@MIT.EDU>
Cc: Tony.Lill@matrix.ajlc.waterloo.on.ca, krb5-bugs@MIT.EDU, peter@plus.com
In-Reply-To: Your message of "Tue, 07 Feb 1995 15:02:27 +0500."
<9502072002.AA08100@dcl.MIT.EDU>
Reply-To: Tony.Lill@ajlc.waterloo.on.ca
Date: Thu, 09 Feb 1995 15:28:12 -0500
From: "Anthony J. Lill" <ajlill@ajlc.waterloo.on.ca>
>>>>> "Theodore" == Theodore Ts'o <tytso@MIT.EDU> writes:
Theodore> Thanks!!! Our Krb5 tree has been perturbed a lot
Theodore> lately, and so it's almost certain that your patches
Theodore> won't go in cleanly. (For one thing, we've renamed a
Theodore> lot of files so that the filenames will be unique to
Theodore> 8.3.) I'm sure, though, that your patches will be
Theodore> helpful in pointing out problems that need to be
Theodore> addressed and potential solutions. Thank you!!
Well, that takes care of about 3/4 of the patch!
Theodore> We've actually contracted out to Cygnus Consulting,
Theodore> Inc. to work on doing the port to DOS and Macintosh, so
Theodore> I will be forwarding your changes to them to sort out.
Theodore> They're working in our CVS tree, and when we're done, we
Theodore> plan to have a single source tree that will compile
Theodore> under Unix, Dos, and Macintosh.
Cool
Theodore> If there are any changes in your megapatch set which are
Theodore> unix specific (or platform specific), that you'd
Theodore> definitely like to make sure gets into the next release,
Theodore> I'd appreciate if you could send those separately to
Theodore> krb5-bugs. We will go through your patch set, but if
Theodore> there's somethign that you want to especially flag,
Theodore> please let us know.
Ok, here's some that are important. There are a bunch of patches in
the mega-patch to *.in files that I needed to get this to configure
right on SVR4 as well. We discussed these in a previous exchange.
The patch to os/localaddr.c need an explanation. On NCR SVR4 version
2.03 or earlier (unless you get a patch to 2.03) socket ioctl's are
not fully implemented. To do the SIOC ioctls, you actually have to
packages the command into an I_STR ioctl and and apply it to
/dev/ip. If you define STREAMS_TLI when compiling this, you get that
code. We force it to be defined using --use-ccopts when we
configure. I don't know a good test for it, except to try it the
Berkeley way and if it fails, use the SVR4 method.
Also, there is a bug in fcc_maybe.c. When you call fcc_open with the
option FCC_OPEN_AND_ERASE, you just add O_TRUNC to the open args. What
this does is open the file, truncating it, before you've attempted to
lock it. If some other process has it locked, well, they're SOL. My
patch uses ftruncate, but I problably should have checked for fcntl
options and prefered those, so I wouldn't require the ucb library. I
may get around to fixing that one of these days.
diff -c kerberos/src/kdc/network.c:1.1.1.2 kerberos/src/kdc/network.c:1.3
*** kerberos/src/kdc/network.c:1.1.1.2 Tue Feb 7 14:11:38 1995
--- kerberos/src/kdc/network.c Tue Feb 7 14:11:38 1995
***************
*** 77,82 ****
--- 77,84 ----
return retval;
}
memset((char *)&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = sp->s_port;
if (bind(udp_port_fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
retval = errno;
***************
*** 105,110 ****
--- 107,114 ----
return 0; /* Don't give an error we we can't do this */
}
memset((char *)&sin, 0, sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = sp->s_port;
if (bind(sec_udp_port_fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
com_err(prog, errno, "while trying to bind secondary server socket");
diff -c kerberos/src/lib/krb5/krb/rd_req_dec.c:1.1.1.2 kerberos/src/lib/krb5/krb/rd_req_dec.c:1.3
*** kerberos/src/lib/krb5/krb/rd_req_dec.c:1.1.1.2 Tue Feb 7 14:14:37 1995
--- kerberos/src/lib/krb5/krb/rd_req_dec.c Tue Feb 7 14:14:37 1995
***************
*** 28,35 ****
--- 28,43 ----
#include <krb5/krb5.h>
+ #ifdef MS_DOS
+ #include <krb5/extproto.h>
+ #else
#include <krb5/ext-proto.h>
+ #endif
+ #ifdef MS_DOS
+ #include <krb5/losproto.h>
+ #else
#include <krb5/los-proto.h>
+ #endif
#include <krb5/asn1.h>
/*
***************
*** 74,80 ****
#include <krb5/narrow.h>
extern krb5_deltat krb5_clockskew;
! #define in_clock_skew(date) (abs((date)-currenttime) < krb5_clockskew)
krb5_error_code
krb5_rd_req_decoded(req, server, sender_addr, fetchfrom, keyproc, keyprocarg,
--- 82,88 ----
#include <krb5/narrow.h>
extern krb5_deltat krb5_clockskew;
! #define in_clock_skew(date) (labs((date)-currenttime) < krb5_clockskew)
krb5_error_code
krb5_rd_req_decoded(req, server, sender_addr, fetchfrom, keyproc, keyprocarg,
***************
*** 251,261 ****
else
starttime = req->ticket->enc_part2->times.authtime;
! if (starttime - currenttime > krb5_clockskew) {
retval = KRB5KRB_AP_ERR_TKT_NYV; /* ticket not yet valid */
goto cleanup;
}
! if (currenttime - req->ticket->enc_part2->times.endtime > krb5_clockskew) {
retval = KRB5KRB_AP_ERR_TKT_EXPIRED; /* ticket expired */
goto cleanup;
}
--- 259,269 ----
else
starttime = req->ticket->enc_part2->times.authtime;
! if (starttime - krb5_clockskew > currenttime ) {
retval = KRB5KRB_AP_ERR_TKT_NYV; /* ticket not yet valid */
goto cleanup;
}
! if (req->ticket->enc_part2->times.endtime + krb5_clockskew < currenttime) {
retval = KRB5KRB_AP_ERR_TKT_EXPIRED; /* ticket expired */
goto cleanup;
}
diff -c kerberos/src/lib/krb5/os/configure.in:1.1.1.4 kerberos/src/lib/krb5/os/configure.in:1.2
*** kerberos/src/lib/krb5/os/configure.in:1.1.1.4 Tue Feb 7 14:14:47 1995
--- kerberos/src/lib/krb5/os/configure.in Tue Feb 7 14:14:47 1995
***************
*** 7,12 ****
--- 7,13 ----
AC_TIME_WITH_SYS_TIME
AC_HAVE_HEADERS(sys/time.h)
AC_HEADER_EGREP(time_t, sys/types.h, AC_DEFINE(POSIX_TYPES))
+ AC_HAVE_FUNCS(strcasecmp)
SubdirLibraryRule([${OBJS}])
KRB_INCLUDE
ISODE_INCLUDE
diff -c /dev/null kerberos/src/lib/krb5/os/string.c:1.2
*** /dev/null Tue Feb 7 14:14:58 1995
--- kerberos/src/lib/krb5/os/string.c Tue Feb 7 14:14:58 1995
***************
*** 0 ****
--- 1,67 ----
+ /*
+ * Copyright (c) 1987 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 HAVE_STRCASECMP
+ #include <krb5/config.h>
+ #include <krb5/krb5.h>
+ #include <krb5/sysincl.h>
+ #include <ctype.h>
+
+ int
+ strcasecmp(const char *s1, const char *s2)
+ {
+ register u_char *us1 = (const u_char *)s1,
+ *us2 = (const u_char *)s2;
+
+ while (tolower(*us1) == tolower(*us2++))
+ if (*us1++ == '\0')
+ return (0);
+ return (tolower(*us1) - tolower(*--us2));
+ }
+
+ int
+ strncasecmp(const char *s1, const char *s2, size_t n )
+ {
+ if (n != 0) {
+ register u_char *us1 = (const u_char *)s1,
+ *us2 = (const u_char *)s2;
+
+ do {
+ if (tolower(*us1) != tolower(*us2++))
+ return (tolower(*us1) - tolower(*--us2));
+ if (*us1++ == '\0')
+ break;
+ } while (--n != 0);
+ }
+ return (0);
+ }
+ #endif
diff -c kerberos/src/lib/krb5/os/Makefile.in:1.1.1.3 kerberos/src/lib/krb5/os/Makefile.in:1.2
*** kerberos/src/lib/krb5/os/Makefile.in:1.1.1.3 Tue Feb 7 14:14:46 1995
--- kerberos/src/lib/krb5/os/Makefile.in Tue Feb 7 14:14:46 1995
***************
*** 30,35 ****
--- 30,36 ----
realm_dom.o \
sendto_kdc.o \
sn2princ.o \
+ string.o \
timeofday.o \
unlck_file.o \
ustime.o \
***************
*** 62,67 ****
--- 63,69 ----
$(srcdir)/port2ip.c \
$(srcdir)/sendto_kdc.c \
$(srcdir)/sn2princ.c \
+ $(srcdir)/string.c \
$(srcdir)/timeofday.c \
$(srcdir)/unlck_file.c \
$(srcdir)/ustime.c \
diff -c kerberos/src/lib/krb5/os/gmt_mktime.c:1.1.1.2 kerberos/src/lib/krb5/os/gmt_mktime.c:1.2
*** kerberos/src/lib/krb5/os/gmt_mktime.c:1.1.1.2 Tue Feb 7 14:14:50 1995
--- kerberos/src/lib/krb5/os/gmt_mktime.c Tue Feb 7 14:14:51 1995
***************
*** 1,6 ****
--- 1,16 ----
/* This code placed in the public domain by Mark W. Eichin */
#include <stdio.h>
+ #include <krb5/krb5.h>
+ #include <krb5/osconf.h>
+
+ #ifdef MS_DOS
+ #include <krb5/extproto.h>
+ #include <krb5/losproto.h>
+ #else
+ #include <krb5/ext-proto.h>
+ #include <krb5/los-proto.h>
+ #endif
#include <sys/types.h>
#ifdef HAVE_SYS_TIME_H
***************
*** 33,40 ****
#define hasleapday(year) (year%400?(year%100?(year%4?0:1):0):1)
! time_t gmt_mktime(t)
! struct tm* t;
{
time_t accum;
--- 43,50 ----
#define hasleapday(year) (year%400?(year%100?(year%4?0:1):0):1)
! time_t gmt_mktime(DECLARG(struct tm*, t))
! OLDDECLARG(struct tm*, t)
{
time_t accum;
***************
*** 60,66 ****
accum *= 365; /* 365 days/normal year */
/* add in leap day for all previous years */
! accum += (t->tm_year - 68) / 4;
/* add in leap day for this year */
if(t->tm_mon >= 2) /* march or later */
if(hasleapday(t->tm_year)) accum += 1;
--- 70,76 ----
accum *= 365; /* 365 days/normal year */
/* add in leap day for all previous years */
! accum += (t->tm_year - 69) / 4;
/* add in leap day for this year */
if(t->tm_mon >= 2) /* march or later */
if(hasleapday(t->tm_year)) accum += 1;
diff -c kerberos/src/lib/krb5/os/localaddr.c:1.1.1.2 kerberos/src/lib/krb5/os/localaddr.c:1.3
*** kerberos/src/lib/krb5/os/localaddr.c:1.1.1.2 Tue Feb 7 14:14:52 1995
--- kerberos/src/lib/krb5/os/localaddr.c Tue Feb 7 14:14:52 1995
***************
*** 30,35 ****
--- 30,36 ----
#include <krb5/krb5.h>
#include <krb5/osconf.h>
+ #ifndef MS_DOS
#include <krb5/ext-proto.h>
/* needed for solaris, harmless elsewhere... */
***************
*** 76,81 ****
--- 77,102 ----
* Add more address families here.
*/
+ #ifdef SVR4
+ # include <stropts.h> /* Stream ioctl calls */
+ # include <fcntl.h>
+ #endif
+ /* The Wollongong TCP implementation for NCR System 3000 version of
+ Berkeley sockets doesn't have a proper implementation of the
+ SIOCGIFCONF ioctls. The code ifdef'd WINTCP works around this. The
+ problem is probably endemic to all streams based network implementations.
+ This fix was provided by Marc Staveley */
+ #ifdef STREAMS_TLI /* win-tcp (NCR System 3000) */
+ # include <netinet/ip.h> /* for IPIOC_GET */
+ # define SIOCGIFCONF IPIOC_GETIFCONF
+ # define SIOCGIFFLAGS IPIOC_GETIFFLAGS
+ # define SIOCGIFDSTADDR IPIOC_GETIFDSTADDR
+ # define SIOCGIFBRDADDR IPIOC_GETIFBRDADDR
+ # define SIOCGIFADDR IPIOC_GETIFADDR
+ #else
+ # include <sys/sockio.h>
+ #endif
+
extern int errno;
/*
***************
*** 93,125 ****
krb5_address ***addr;
{
struct ifreq *ifr;
! struct ifconf ifc;
int s, code, n, i;
! char buf[1024];
krb5_address *addr_temp [ 1024/sizeof(struct ifreq) ];
int n_found;
int mem_err = 0;
! ifc.ifc_len = sizeof(buf);
! ifc.ifc_buf = buf;
s = socket (USE_AF, USE_TYPE, USE_PROTO);
if (s < 0)
return errno;
! code = ioctl (s, SIOCGIFCONF, (char *)&ifc);
if (code < 0) {
int retval = errno;
close(s);
return retval;
}
! n = ifc.ifc_len / sizeof (struct ifreq);
! for (n_found=0, i=0; i<n && ! mem_err; i++) {
krb5_address *address;
- ifr = &ifc.ifc_req[i];
! if (ioctl (s, SIOCGIFFLAGS, (char *)ifr) < 0)
continue;
#ifdef IFF_LOOPBACK
--- 114,165 ----
krb5_address ***addr;
{
struct ifreq *ifr;
! struct ifconf *ifc;
int s, code, n, i;
! char ifc_buffer[1024];
! #ifndef STREAMS_TLI
! char ifr_buffer[1024];
! #endif
krb5_address *addr_temp [ 1024/sizeof(struct ifreq) ];
int n_found;
int mem_err = 0;
! ifc = (struct ifconf *) ifc_buffer;
! #ifdef STREAMS_TLI
! ifc->ifc_req = (struct ifreq *) &ifc->ifc_req;
! ifc->ifc_len = sizeof(ifc_buffer) - sizeof( struct ifconf );
! #else
! ifc->ifc_len = sizeof(ifr_buffer);
! ifc->ifc_buf = (struct ifreq *) ifr_buffer;
! #endif
+ #ifdef STREAMS_TLI
+ s = open ("/dev/ip", O_RDWR);
+ #else
s = socket (USE_AF, USE_TYPE, USE_PROTO);
+ #endif
if (s < 0)
return errno;
! code = ioc (s, SIOCGIFCONF, ifc, sizeof(ifc_buffer) );
if (code < 0) {
int retval = errno;
close(s);
return retval;
}
! n = ifc->ifc_len / sizeof (struct ifreq);
! #ifdef STREAMS_TLI
! for (n_found=0, i=0, ifr = (struct ifreq *)&ifc->ifc_req;
! i<n && ! mem_err; i++, ++ifr)
! #else
! for (n_found=0, i=0, ifr = (struct ifreq *)ifc->ifc_req;
! i<n && ! mem_err; i++, ++ifr)
! #endif
! {
krb5_address *address;
! if (ioc (s, SIOCGIFFLAGS, (char *)ifr, sizeof(struct ifreq)) < 0)
continue;
#ifdef IFF_LOOPBACK
***************
*** 131,137 ****
/* interface is down; skip */
continue;
! if (ioctl (s, SIOCGIFADDR, (char *)ifr) < 0)
/* can't get address */
continue;
--- 171,177 ----
/* interface is down; skip */
continue;
! if (ioc (s, SIOCGIFADDR, (char *)ifr, sizeof(struct ifreq)) < 0)
/* can't get address */
continue;
***************
*** 220,222 ****
--- 260,330 ----
(*addr)[n_found] = 0;
return 0;
}
+
+ static int
+ ioc( int fd, int cmd, char *buf, int len ) {
+ #ifdef STREAMS_TLI
+ struct strioctl ioc;
+ /* bundle up the ioctl in an internal message, and pass it
+ down the stream until (hopefully) some module recognizes it
+ and responds */
+ if( isastream(fd) ) {
+ ioc.ic_cmd = cmd;
+ ioc.ic_dp = buf;
+ ioc.ic_len = len;
+ ioc.ic_timout = 0;
+
+ return( ioctl(fd, I_STR, &ioc) );
+ }
+
+ else
+ #endif
+ return( ioctl(fd, cmd, buf) );
+ }
+
+ #else
+ /* No ioctls in dos, but then again, it is unlikely that you will be
+ able to use more than one networking card concurrently, so
+ gethostent is good enough */
+
+ #include <krb5/extproto.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <netdb.h>
+
+ krb5_error_code krb5_os_localaddr(addr)
+ krb5_address ***addr;
+ {
+ char host[64];
+ struct hostent *hostrec;
+
+ if( ( *addr = calloc( 2, sizeof(krb5_address *) ) ) == NULL )
+ return ENOMEM;
+
+ if( gethostname(host,sizeof(host)) ||
+ ( hostrec = gethostbyname(host) ) == NULL )
+ {
+ return 0;
+ }
+
+ if( ( (*addr)[0] = calloc( 1, sizeof(krb5_address) ) ) == NULL )
+ {
+ free(*addr);
+ return ENOMEM;
+ }
+
+ (*addr)[0]->addrtype = ADDRTYPE_INET;
+ (*addr)[0]->length = sizeof(struct in_addr);
+ (*addr)[0]->contents = (unsigned char *)malloc((*addr)[0]->length);
+ if (!(*addr)[0]->contents) {
+ free((*addr)[0]);
+ free(*addr);
+ return ENOMEM;
+ } else {
+ memcpy ((char *)(*addr)[0]->contents,
+ (char *)hostrec->h_addr,
+ (*addr)[0]->length);
+ }
+ return(0);
+ }
+ #endif
diff -c kerberos/src/lib/krb5/ccache/file/fcc_maybe.c:1.1.1.2 kerberos/src/lib/krb5/ccache/file/fcc_maybe.c:1.4
*** kerberos/src/lib/krb5/ccache/file/fcc_maybe.c:1.1.1.2 Tue Feb 7 14:13:35 1995
--- kerberos/src/lib/krb5/ccache/file/fcc_maybe.c Tue Feb 7 14:13:35 1995
***************
*** 32,46 ****
--- 32,58 ----
int krb5_fcc_default_format = KRB5_FCC_DEFAULT_FVNO;
#ifdef KRB5_USE_INET
+ #ifdef TWG_SOCKETS
+ #include <sys/socket.h> /* prototypes for all socket calls
+ here */
+ #endif
#include <netinet/in.h>
#else
#error find some way to use net-byte-order file version numbers.
#endif
#include <krb5/libos.h>
+ #ifdef MS_DOS
+ #include <krb5/losproto.h>
+ #else
#include <krb5/los-proto.h>
+ #endif
#include <stdio.h>
+ #ifdef HAS_UNISTD_H
+ #include <unistd.h>
+ #endif
+ #ifndef MS_DOS
#ifdef POSIX_FILE_LOCKS
#ifndef unicos61
#include <fcntl.h>
***************
*** 56,61 ****
--- 68,74 ----
#define EXCLUSIVE_LOCK LOCK_EX
#define UNLOCK_LOCK LOCK_UN
#endif /* POSIX_FILE_LOCKS */
+ #endif /* !MS_DOS */
#define LOCK_IT 0
#define UNLOCK_IT 1
***************
*** 69,74 ****
--- 82,88 ----
int fd;
int lockunlock;
{
+ #ifndef MS_DOS
/* XXX need to in-line lock_file.c here, but it's sort-of OK since
we're already unix-dependent for file descriptors */
***************
*** 81,86 ****
--- 95,104 ----
int lock_flag = -1;
#endif
+ #ifndef O_BINARY
+ #define O_BINARY 0
+ #endif
+
if (lockunlock == LOCK_IT)
switch (data->mode) {
case FCC_OPEN_RDONLY:
***************
*** 111,116 ****
--- 129,135 ----
if (flock(fd, lock_flag) == -1)
return(errno);
#endif
+ #endif /* not MS_DOS */
return 0;
}
***************
*** 154,167 ****
data->mode = mode;
switch(mode) {
case FCC_OPEN_AND_ERASE:
! open_flag = O_CREAT|O_TRUNC|O_RDWR;
break;
case FCC_OPEN_RDWR:
! open_flag = O_RDWR;
break;
case FCC_OPEN_RDONLY:
default:
! open_flag = O_RDONLY;
break;
}
--- 173,190 ----
data->mode = mode;
switch(mode) {
case FCC_OPEN_AND_ERASE:
! #ifdef HAVE_FTRUNCATE
! open_flag = O_CREAT|O_RDWR|O_BINARY;
! #else
! open_flag = O_CREAT|O_TRUNC|O_RDWR|O_BINARY;
! #endif
break;
case FCC_OPEN_RDWR:
! open_flag = O_RDWR|O_BINARY;
break;
case FCC_OPEN_RDONLY:
default:
! open_flag = O_RDONLY|O_BINARY;
break;
}
***************
*** 175,183 ****
}
if (mode == FCC_OPEN_AND_ERASE) {
- /* write the version number */
int errsave, cnt;
fcc_fvno = htons(krb5_fcc_default_format);
data->version = krb5_fcc_default_format;
if ((cnt = write(fd, (char *)&fcc_fvno, sizeof(fcc_fvno))) !=
--- 198,213 ----
}
if (mode == FCC_OPEN_AND_ERASE) {
int errsave, cnt;
+ #ifdef HAVE_FTRUNCATE
+ if( ftruncate(fd,(off_t)0) == -1 ) {
+ errsave = errno;
+ (void) fcc_lock_file(data, fd, UNLOCK_IT);
+ (void) close(fd);
+ return (cnt == -1) ? krb5_fcc_interpret(errsave) : KRB5_CC_IO;
+ }
+ #endif
fcc_fvno = htons(krb5_fcc_default_format);
data->version = krb5_fcc_default_format;
if ((cnt = write(fd, (char *)&fcc_fvno, sizeof(fcc_fvno))) !=
diff -c kerberos/src/admin/edit/ss_wrapper.c:1.1.1.2 kerberos/src/admin/edit/ss_wrapper.c:1.3
*** kerberos/src/admin/edit/ss_wrapper.c:1.1.1.2 Tue Feb 7 14:10:05 1995
--- kerberos/src/admin/edit/ss_wrapper.c Tue Feb 7 14:10:05 1995
***************
*** 48,59 ****
exit(1);
}
if (request) {
! (void) ss_execute_line(sci_idx, request, &code);
if (code != 0) {
ss_perror(sci_idx, code, request);
exit_status++;
}
} else
! ss_listen(sci_idx, &retval);
return quit() ? 1 : exit_status;
}
--- 48,59 ----
exit(1);
}
if (request) {
! code = ss_execute_line(sci_idx, request);
if (code != 0) {
ss_perror(sci_idx, code, request);
exit_status++;
}
} else
! retval = ss_listen(sci_idx);
return quit() ? 1 : exit_status;
}
--
Tony Lill, Tony.Lill@AJLC.Waterloo.ON.CA
President, A. J. Lill Consultants (519) 241 2461
539 Grand Valley Dr., Cambridge, Ont. fax/data (519) 650 3571
"Welcome to All Things UNIX, where if it's not UNIX, it's CRAP!"