More ANSI/ISO 9899-1990 to the people!
Now actually builds (not including util) with DEC "cc -std1" and Sun "acc -Xc". There are still major prototype conflicts, but there isn't much to do about this. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@192 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -539,7 +539,6 @@ auth_name(data, cnt)
|
|||||||
unsigned char *data;
|
unsigned char *data;
|
||||||
int cnt;
|
int cnt;
|
||||||
{
|
{
|
||||||
Authenticator *ap;
|
|
||||||
unsigned char savename[256];
|
unsigned char savename[256];
|
||||||
|
|
||||||
if (cnt < 1) {
|
if (cnt < 1) {
|
||||||
|
@@ -111,11 +111,4 @@ void ofb64_session P((Session_Key *, int));
|
|||||||
int ofb64_keyid P((int, unsigned char *, int *));
|
int ofb64_keyid P((int, unsigned char *, int *));
|
||||||
void ofb64_printsub P((unsigned char *, int, unsigned char *, int));
|
void ofb64_printsub P((unsigned char *, int, unsigned char *, int));
|
||||||
|
|
||||||
#if OLD
|
|
||||||
int des_new_random_key P((Block));
|
|
||||||
void des_set_random_generator_seed P((Block));
|
|
||||||
void des_key_sched P((Block, Schedule));
|
|
||||||
void des_ecb_encrypt P((Block, Block, Schedule, int));
|
|
||||||
int des_string_to_key P((char *, Block));
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -46,12 +46,14 @@ static char orig_sccsid[] = "@(#)enc_des.c 5.1 (Berkeley) 3/22/91";
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "encrypt.h"
|
#include "encrypt.h"
|
||||||
#include "key-proto.h"
|
|
||||||
#include "misc-proto.h"
|
#include "misc-proto.h"
|
||||||
|
|
||||||
|
#include <des.h>
|
||||||
|
|
||||||
extern encrypt_debug_mode;
|
extern encrypt_debug_mode;
|
||||||
|
|
||||||
#define CFB 0
|
#define CFB 0
|
||||||
@@ -65,24 +67,26 @@ extern encrypt_debug_mode;
|
|||||||
#define FAILED -1
|
#define FAILED -1
|
||||||
|
|
||||||
|
|
||||||
|
struct stinfo {
|
||||||
|
des_cblock str_output;
|
||||||
|
des_cblock str_feed;
|
||||||
|
des_cblock str_iv;
|
||||||
|
des_cblock str_ikey;
|
||||||
|
des_key_schedule str_sched;
|
||||||
|
int str_index;
|
||||||
|
int str_flagshift;
|
||||||
|
};
|
||||||
|
|
||||||
struct fb {
|
struct fb {
|
||||||
Block krbdes_key;
|
des_cblock krbdes_key;
|
||||||
Schedule krbdes_sched;
|
des_key_schedule krbdes_sched;
|
||||||
Block temp_feed;
|
des_cblock temp_feed;
|
||||||
unsigned char fb_feed[64];
|
unsigned char fb_feed[64];
|
||||||
int need_start;
|
int need_start;
|
||||||
int state[2];
|
int state[2];
|
||||||
int keyid[2];
|
int keyid[2];
|
||||||
int once;
|
int once;
|
||||||
struct stinfo {
|
struct stinfo streams[2];
|
||||||
Block str_output;
|
|
||||||
Block str_feed;
|
|
||||||
Block str_iv;
|
|
||||||
Block str_ikey;
|
|
||||||
Schedule str_sched;
|
|
||||||
int str_index;
|
|
||||||
int str_flagshift;
|
|
||||||
} streams[2];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct fb fb[2];
|
static struct fb fb[2];
|
||||||
@@ -114,18 +118,16 @@ struct keyidlist {
|
|||||||
#define FB64_IV_BAD 3
|
#define FB64_IV_BAD 3
|
||||||
|
|
||||||
|
|
||||||
void fb64_stream_iv P((Block, struct stinfo *));
|
void fb64_stream_iv P((des_cblock, struct stinfo *));
|
||||||
void fb64_init P((struct fb *));
|
void fb64_init P((struct fb *));
|
||||||
static int fb64_start P((struct fb *, int, int));
|
static int fb64_start P((struct fb *, int, int));
|
||||||
int fb64_is P((unsigned char *, int, struct fb *));
|
int fb64_is P((unsigned char *, int, struct fb *));
|
||||||
int fb64_reply P((unsigned char *, int, struct fb *));
|
int fb64_reply P((unsigned char *, int, struct fb *));
|
||||||
static void fb64_session P((Session_Key *, int, struct fb *));
|
static void fb64_session P((Session_Key *, int, struct fb *));
|
||||||
void fb64_stream_key P((Block, struct stinfo *));
|
void fb64_stream_key P((des_cblock, struct stinfo *));
|
||||||
int fb64_keyid P((int, unsigned char *, int *, struct fb *));
|
int fb64_keyid P((int, unsigned char *, int *, struct fb *));
|
||||||
|
|
||||||
void
|
void cfb64_init(int server)
|
||||||
cfb64_init(server)
|
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
fb64_init(&fb[CFB]);
|
fb64_init(&fb[CFB]);
|
||||||
fb[CFB].fb_feed[4] = ENCTYPE_DES_CFB64;
|
fb[CFB].fb_feed[4] = ENCTYPE_DES_CFB64;
|
||||||
@@ -133,9 +135,8 @@ cfb64_init(server)
|
|||||||
fb[CFB].streams[1].str_flagshift = SHIFT_VAL(1, CFB);
|
fb[CFB].streams[1].str_flagshift = SHIFT_VAL(1, CFB);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ofb64_init(server)
|
void ofb64_init(int server)
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
fb64_init(&fb[OFB]);
|
fb64_init(&fb[OFB]);
|
||||||
fb[OFB].fb_feed[4] = ENCTYPE_DES_OFB64;
|
fb[OFB].fb_feed[4] = ENCTYPE_DES_OFB64;
|
||||||
@@ -143,9 +144,7 @@ ofb64_init(server)
|
|||||||
fb[CFB].streams[1].str_flagshift = SHIFT_VAL(1, OFB);
|
fb[CFB].streams[1].str_flagshift = SHIFT_VAL(1, OFB);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void fb64_init(struct fb *fbp)
|
||||||
fb64_init(fbp)
|
|
||||||
register struct fb *fbp;
|
|
||||||
{
|
{
|
||||||
memset((void *)fbp,0, sizeof(*fbp));
|
memset((void *)fbp,0, sizeof(*fbp));
|
||||||
fbp->state[0] = fbp->state[1] = FAILED;
|
fbp->state[0] = fbp->state[1] = FAILED;
|
||||||
@@ -163,28 +162,18 @@ fb64_init(fbp)
|
|||||||
* 2: Not yet. Other things (like getting the key from
|
* 2: Not yet. Other things (like getting the key from
|
||||||
* Kerberos) have to happen before we can continue.
|
* Kerberos) have to happen before we can continue.
|
||||||
*/
|
*/
|
||||||
int
|
int cfb64_start(int dir, int server)
|
||||||
cfb64_start(dir, server)
|
|
||||||
int dir;
|
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
return(fb64_start(&fb[CFB], dir, server));
|
return(fb64_start(&fb[CFB], dir, server));
|
||||||
}
|
}
|
||||||
int
|
|
||||||
ofb64_start(dir, server)
|
int ofb64_start(int dir, int server)
|
||||||
int dir;
|
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
return(fb64_start(&fb[OFB], dir, server));
|
return(fb64_start(&fb[OFB], dir, server));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int fb64_start(struct fb *fbp, int dir, int server)
|
||||||
fb64_start(fbp, dir, server)
|
|
||||||
struct fb *fbp;
|
|
||||||
int dir;
|
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
Block b;
|
|
||||||
int x;
|
int x;
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
register int state;
|
register int state;
|
||||||
@@ -222,7 +211,7 @@ fb64_start(fbp, dir, server)
|
|||||||
* Create a random feed and send it over.
|
* Create a random feed and send it over.
|
||||||
*/
|
*/
|
||||||
#ifndef OLD_DES_RANDOM_KEY
|
#ifndef OLD_DES_RANDOM_KEY
|
||||||
des_new_random_key(fbp->temp_feed);
|
des_new_random_key(&fbp->temp_feed);
|
||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* From des_cryp.man "If the des_check_key flag is non-zero,
|
* From des_cryp.man "If the des_check_key flag is non-zero,
|
||||||
@@ -234,13 +223,14 @@ fb64_start(fbp, dir, server)
|
|||||||
des_set_odd_parity(fbp->temp_feed);
|
des_set_odd_parity(fbp->temp_feed);
|
||||||
} while (des_is_weak_key(fbp->temp_feed));
|
} while (des_is_weak_key(fbp->temp_feed));
|
||||||
#endif
|
#endif
|
||||||
des_ecb_encrypt(fbp->temp_feed, fbp->temp_feed,
|
des_ecb_encrypt(&fbp->temp_feed,
|
||||||
|
&fbp->temp_feed,
|
||||||
fbp->krbdes_sched, 1);
|
fbp->krbdes_sched, 1);
|
||||||
p = fbp->fb_feed + 3;
|
p = fbp->fb_feed + 3;
|
||||||
*p++ = ENCRYPT_IS;
|
*p++ = ENCRYPT_IS;
|
||||||
p++;
|
p++;
|
||||||
*p++ = FB64_IV;
|
*p++ = FB64_IV;
|
||||||
for (x = 0; x < sizeof(Block); ++x) {
|
for (x = 0; x < sizeof(des_cblock); ++x) {
|
||||||
if ((*p++ = fbp->temp_feed[x]) == IAC)
|
if ((*p++ = fbp->temp_feed[x]) == IAC)
|
||||||
*p++ = IAC;
|
*p++ = IAC;
|
||||||
}
|
}
|
||||||
@@ -261,30 +251,21 @@ fb64_start(fbp, dir, server)
|
|||||||
* 0: Successful, initial negotiation all done.
|
* 0: Successful, initial negotiation all done.
|
||||||
* 1: successful, negotiation not done yet.
|
* 1: successful, negotiation not done yet.
|
||||||
*/
|
*/
|
||||||
int
|
|
||||||
cfb64_is(data, cnt)
|
int cfb64_is(unsigned char *data, int cnt)
|
||||||
unsigned char *data;
|
|
||||||
int cnt;
|
|
||||||
{
|
{
|
||||||
return(fb64_is(data, cnt, &fb[CFB]));
|
return(fb64_is(data, cnt, &fb[CFB]));
|
||||||
}
|
}
|
||||||
int
|
|
||||||
ofb64_is(data, cnt)
|
int ofb64_is(unsigned char *data, int cnt)
|
||||||
unsigned char *data;
|
|
||||||
int cnt;
|
|
||||||
{
|
{
|
||||||
return(fb64_is(data, cnt, &fb[OFB]));
|
return(fb64_is(data, cnt, &fb[OFB]));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
fb64_is(data, cnt, fbp)
|
int fb64_is(unsigned char *data, int cnt, struct fb *fbp)
|
||||||
unsigned char *data;
|
|
||||||
int cnt;
|
|
||||||
struct fb *fbp;
|
|
||||||
{
|
{
|
||||||
int x;
|
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
Block b;
|
|
||||||
register int state = fbp->state[DIR_DECRYPT-1];
|
register int state = fbp->state[DIR_DECRYPT-1];
|
||||||
|
|
||||||
if (cnt-- < 1)
|
if (cnt-- < 1)
|
||||||
@@ -292,7 +273,7 @@ fb64_is(data, cnt, fbp)
|
|||||||
|
|
||||||
switch (*data++) {
|
switch (*data++) {
|
||||||
case FB64_IV:
|
case FB64_IV:
|
||||||
if (cnt != sizeof(Block)) {
|
if (cnt != sizeof(des_cblock)) {
|
||||||
if (encrypt_debug_mode)
|
if (encrypt_debug_mode)
|
||||||
printf("CFB64: initial vector failed on size\r\n");
|
printf("CFB64: initial vector failed on size\r\n");
|
||||||
state = FAILED;
|
state = FAILED;
|
||||||
@@ -352,31 +333,20 @@ fb64_is(data, cnt, fbp)
|
|||||||
* 0: Successful, initial negotiation all done.
|
* 0: Successful, initial negotiation all done.
|
||||||
* 1: successful, negotiation not done yet.
|
* 1: successful, negotiation not done yet.
|
||||||
*/
|
*/
|
||||||
int
|
|
||||||
cfb64_reply(data, cnt)
|
int cfb64_reply(unsigned char *data, int cnt)
|
||||||
unsigned char *data;
|
|
||||||
int cnt;
|
|
||||||
{
|
{
|
||||||
return(fb64_reply(data, cnt, &fb[CFB]));
|
return(fb64_reply(data, cnt, &fb[CFB]));
|
||||||
}
|
}
|
||||||
int
|
|
||||||
ofb64_reply(data, cnt)
|
int ofb64_reply(unsigned char *data, int cnt)
|
||||||
unsigned char *data;
|
|
||||||
int cnt;
|
|
||||||
{
|
{
|
||||||
return(fb64_reply(data, cnt, &fb[OFB]));
|
return(fb64_reply(data, cnt, &fb[OFB]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int fb64_reply(unsigned char *data, int cnt, struct fb *fbp)
|
||||||
fb64_reply(data, cnt, fbp)
|
|
||||||
unsigned char *data;
|
|
||||||
int cnt;
|
|
||||||
struct fb *fbp;
|
|
||||||
{
|
{
|
||||||
int x;
|
|
||||||
unsigned char *p;
|
|
||||||
Block b;
|
|
||||||
register int state = fbp->state[DIR_ENCRYPT-1];
|
register int state = fbp->state[DIR_ENCRYPT-1];
|
||||||
|
|
||||||
if (cnt-- < 1)
|
if (cnt-- < 1)
|
||||||
@@ -392,7 +362,7 @@ fb64_reply(data, cnt, fbp)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case FB64_IV_BAD:
|
case FB64_IV_BAD:
|
||||||
memset(fbp->temp_feed, 0, sizeof(Block));
|
memset(fbp->temp_feed, 0, sizeof(des_cblock));
|
||||||
fb64_stream_iv(fbp->temp_feed, &fbp->streams[DIR_ENCRYPT-1]);
|
fb64_stream_iv(fbp->temp_feed, &fbp->streams[DIR_ENCRYPT-1]);
|
||||||
state = FAILED;
|
state = FAILED;
|
||||||
break;
|
break;
|
||||||
@@ -411,27 +381,17 @@ fb64_reply(data, cnt, fbp)
|
|||||||
return(fbp->state[DIR_ENCRYPT-1] = state);
|
return(fbp->state[DIR_ENCRYPT-1] = state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void cfb64_session(Session_Key *key, int server)
|
||||||
cfb64_session(key, server)
|
|
||||||
Session_Key *key;
|
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
fb64_session(key, server, &fb[CFB]);
|
fb64_session(key, server, &fb[CFB]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void ofb64_session(Session_Key *key, int server)
|
||||||
ofb64_session(key, server)
|
|
||||||
Session_Key *key;
|
|
||||||
int server;
|
|
||||||
{
|
{
|
||||||
fb64_session(key, server, &fb[OFB]);
|
fb64_session(key, server, &fb[OFB]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void fb64_session(Session_Key *key, int server, struct fb *fbp)
|
||||||
fb64_session(key, server, fbp)
|
|
||||||
Session_Key *key;
|
|
||||||
int server;
|
|
||||||
struct fb *fbp;
|
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!key || key->type != SK_DES) {
|
if (!key || key->type != SK_DES) {
|
||||||
@@ -440,18 +400,18 @@ fb64_session(key, server, fbp)
|
|||||||
key ? key->type : -1, SK_DES);
|
key ? key->type : -1, SK_DES);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
memcpy((void *)fbp->krbdes_key, (void *)key->data, sizeof(Block));
|
memcpy((void *)fbp->krbdes_key, (void *)key->data, sizeof(des_cblock));
|
||||||
|
|
||||||
fb64_stream_key(fbp->krbdes_key, &fbp->streams[DIR_ENCRYPT-1]);
|
fb64_stream_key(fbp->krbdes_key, &fbp->streams[DIR_ENCRYPT-1]);
|
||||||
fb64_stream_key(fbp->krbdes_key, &fbp->streams[DIR_DECRYPT-1]);
|
fb64_stream_key(fbp->krbdes_key, &fbp->streams[DIR_DECRYPT-1]);
|
||||||
|
|
||||||
if (fbp->once == 0) {
|
if (fbp->once == 0) {
|
||||||
#ifndef OLD_DES_RANDOM_KEY
|
#ifndef OLD_DES_RANDOM_KEY
|
||||||
des_init_random_number_generator(fbp->krbdes_key);
|
des_init_random_number_generator(&fbp->krbdes_key);
|
||||||
#endif
|
#endif
|
||||||
fbp->once = 1;
|
fbp->once = 1;
|
||||||
}
|
}
|
||||||
des_key_sched(fbp->krbdes_key, fbp->krbdes_sched);
|
des_key_sched(&fbp->krbdes_key, fbp->krbdes_sched);
|
||||||
/*
|
/*
|
||||||
* Now look to see if krbdes_start() was was waiting for
|
* Now look to see if krbdes_start() was was waiting for
|
||||||
* the key to show up. If so, go ahead an call it now
|
* the key to show up. If so, go ahead an call it now
|
||||||
@@ -467,27 +427,18 @@ fb64_session(key, server, fbp)
|
|||||||
* We only accept a keyid of 0. If we get a keyid of
|
* We only accept a keyid of 0. If we get a keyid of
|
||||||
* 0, then mark the state as SUCCESS.
|
* 0, then mark the state as SUCCESS.
|
||||||
*/
|
*/
|
||||||
int
|
|
||||||
cfb64_keyid(dir, kp, lenp)
|
int cfb64_keyid(int dir, unsigned char *kp, int *lenp)
|
||||||
int dir, *lenp;
|
|
||||||
unsigned char *kp;
|
|
||||||
{
|
{
|
||||||
return(fb64_keyid(dir, kp, lenp, &fb[CFB]));
|
return(fb64_keyid(dir, kp, lenp, &fb[CFB]));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int ofb64_keyid(int dir, unsigned char *kp, int *lenp)
|
||||||
ofb64_keyid(dir, kp, lenp)
|
|
||||||
int dir, *lenp;
|
|
||||||
unsigned char *kp;
|
|
||||||
{
|
{
|
||||||
return(fb64_keyid(dir, kp, lenp, &fb[OFB]));
|
return(fb64_keyid(dir, kp, lenp, &fb[OFB]));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int fb64_keyid(int dir, unsigned char *kp, int *lenp, struct fb *fbp)
|
||||||
fb64_keyid(dir, kp, lenp, fbp)
|
|
||||||
int dir, *lenp;
|
|
||||||
unsigned char *kp;
|
|
||||||
struct fb *fbp;
|
|
||||||
{
|
{
|
||||||
register int state = fbp->state[dir-1];
|
register int state = fbp->state[dir-1];
|
||||||
|
|
||||||
@@ -504,10 +455,8 @@ fb64_keyid(dir, kp, lenp, fbp)
|
|||||||
return(fbp->state[dir-1] = state);
|
return(fbp->state[dir-1] = state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void fb64_printsub(unsigned char *data, int cnt,
|
||||||
fb64_printsub(data, cnt, buf, buflen, type)
|
unsigned char *buf, int buflen, char *type)
|
||||||
unsigned char *data, *buf, *type;
|
|
||||||
int cnt, buflen;
|
|
||||||
{
|
{
|
||||||
char lbuf[32];
|
char lbuf[32];
|
||||||
register int i;
|
register int i;
|
||||||
@@ -547,47 +496,37 @@ fb64_printsub(data, cnt, buf, buflen, type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void cfb64_printsub(unsigned char *data, int cnt,
|
||||||
cfb64_printsub(data, cnt, buf, buflen)
|
unsigned char *buf, int buflen)
|
||||||
unsigned char *data, *buf;
|
|
||||||
int cnt, buflen;
|
|
||||||
{
|
{
|
||||||
fb64_printsub(data, cnt, buf, buflen, "CFB64");
|
fb64_printsub(data, cnt, buf, buflen, "CFB64");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void ofb64_printsub(unsigned char *data, int cnt,
|
||||||
ofb64_printsub(data, cnt, buf, buflen)
|
unsigned char *buf, int buflen)
|
||||||
unsigned char *data, *buf;
|
|
||||||
int cnt, buflen;
|
|
||||||
{
|
{
|
||||||
fb64_printsub(data, cnt, buf, buflen, "OFB64");
|
fb64_printsub(data, cnt, buf, buflen, "OFB64");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void fb64_stream_iv(des_cblock seed, struct stinfo *stp)
|
||||||
fb64_stream_iv(seed, stp)
|
|
||||||
Block seed;
|
|
||||||
register struct stinfo *stp;
|
|
||||||
{
|
{
|
||||||
|
|
||||||
memcpy((void *)stp->str_iv, (void *)seed,sizeof(Block));
|
memcpy((void *)stp->str_iv, (void *)seed,sizeof(des_cblock));
|
||||||
memcpy((void *)stp->str_output, (void *)seed, sizeof(Block));
|
memcpy((void *)stp->str_output, (void *)seed, sizeof(des_cblock));
|
||||||
|
|
||||||
des_key_sched(stp->str_ikey, stp->str_sched);
|
des_key_sched(&stp->str_ikey, stp->str_sched);
|
||||||
|
|
||||||
stp->str_index = sizeof(Block);
|
stp->str_index = sizeof(des_cblock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void fb64_stream_key(des_cblock key, register struct stinfo *stp)
|
||||||
fb64_stream_key(key, stp)
|
|
||||||
Block key;
|
|
||||||
register struct stinfo *stp;
|
|
||||||
{
|
{
|
||||||
memcpy((void *)stp->str_ikey, (void *)key, sizeof(Block));
|
memcpy((void *)stp->str_ikey, (void *)key, sizeof(des_cblock));
|
||||||
des_key_sched(key, stp->str_sched);
|
des_key_sched((des_cblock*)key, stp->str_sched);
|
||||||
|
|
||||||
memcpy((void *)stp->str_output, (void *)stp->str_iv, sizeof(Block));
|
memcpy((void *)stp->str_output, (void *)stp->str_iv, sizeof(des_cblock));
|
||||||
|
|
||||||
stp->str_index = sizeof(Block);
|
stp->str_index = sizeof(des_cblock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -612,20 +551,17 @@ fb64_stream_key(key, stp)
|
|||||||
* V(n+1) = DES(On, key)
|
* V(n+1) = DES(On, key)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void cfb64_encrypt(unsigned char *s, int c)
|
||||||
cfb64_encrypt(s, c)
|
|
||||||
register unsigned char *s;
|
|
||||||
int c;
|
|
||||||
{
|
{
|
||||||
register struct stinfo *stp = &fb[CFB].streams[DIR_ENCRYPT-1];
|
register struct stinfo *stp = &fb[CFB].streams[DIR_ENCRYPT-1];
|
||||||
register int index;
|
register int index;
|
||||||
|
|
||||||
index = stp->str_index;
|
index = stp->str_index;
|
||||||
while (c-- > 0) {
|
while (c-- > 0) {
|
||||||
if (index == sizeof(Block)) {
|
if (index == sizeof(des_cblock)) {
|
||||||
Block b;
|
des_cblock b;
|
||||||
des_ecb_encrypt(stp->str_output, b, stp->str_sched, 1);
|
des_ecb_encrypt(&stp->str_output, &b,stp->str_sched, 1);
|
||||||
memcpy((void *)stp->str_feed, (void *)b, sizeof(Block));
|
memcpy((void *)stp->str_feed, (void *)b, sizeof(des_cblock));
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -637,9 +573,7 @@ cfb64_encrypt(s, c)
|
|||||||
stp->str_index = index;
|
stp->str_index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int cfb64_decrypt(int data)
|
||||||
cfb64_decrypt(data)
|
|
||||||
int data;
|
|
||||||
{
|
{
|
||||||
register struct stinfo *stp = &fb[CFB].streams[DIR_DECRYPT-1];
|
register struct stinfo *stp = &fb[CFB].streams[DIR_DECRYPT-1];
|
||||||
int index;
|
int index;
|
||||||
@@ -656,10 +590,10 @@ cfb64_decrypt(data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
index = stp->str_index++;
|
index = stp->str_index++;
|
||||||
if (index == sizeof(Block)) {
|
if (index == sizeof(des_cblock)) {
|
||||||
Block b;
|
des_cblock b;
|
||||||
des_ecb_encrypt(stp->str_output, b, stp->str_sched, 1);
|
des_ecb_encrypt(&stp->str_output,&b, stp->str_sched, 1);
|
||||||
memcpy((void *)stp->str_feed, (void *)b, sizeof(Block));
|
memcpy((void *)stp->str_feed, (void *)b, sizeof(des_cblock));
|
||||||
stp->str_index = 1; /* Next time will be 1 */
|
stp->str_index = 1; /* Next time will be 1 */
|
||||||
index = 0; /* But now use 0 */
|
index = 0; /* But now use 0 */
|
||||||
}
|
}
|
||||||
@@ -688,20 +622,18 @@ cfb64_decrypt(data)
|
|||||||
* V(n+1) = DES(Vn, key)
|
* V(n+1) = DES(Vn, key)
|
||||||
* On = Dn ^ Vn
|
* On = Dn ^ Vn
|
||||||
*/
|
*/
|
||||||
void
|
|
||||||
ofb64_encrypt(s, c)
|
void ofb64_encrypt(unsigned char *s, int c)
|
||||||
register unsigned char *s;
|
|
||||||
int c;
|
|
||||||
{
|
{
|
||||||
register struct stinfo *stp = &fb[OFB].streams[DIR_ENCRYPT-1];
|
register struct stinfo *stp = &fb[OFB].streams[DIR_ENCRYPT-1];
|
||||||
register int index;
|
register int index;
|
||||||
|
|
||||||
index = stp->str_index;
|
index = stp->str_index;
|
||||||
while (c-- > 0) {
|
while (c-- > 0) {
|
||||||
if (index == sizeof(Block)) {
|
if (index == sizeof(des_cblock)) {
|
||||||
Block b;
|
des_cblock b;
|
||||||
des_ecb_encrypt(stp->str_feed, b, stp->str_sched, 1);
|
des_ecb_encrypt(&stp->str_feed,&b, stp->str_sched, 1);
|
||||||
memcpy((void *)stp->str_feed, (void *)b, sizeof(Block));
|
memcpy((void *)stp->str_feed, (void *)b, sizeof(des_cblock));
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
*s++ ^= stp->str_feed[index];
|
*s++ ^= stp->str_feed[index];
|
||||||
@@ -710,9 +642,7 @@ ofb64_encrypt(s, c)
|
|||||||
stp->str_index = index;
|
stp->str_index = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int ofb64_decrypt(int data)
|
||||||
ofb64_decrypt(data)
|
|
||||||
int data;
|
|
||||||
{
|
{
|
||||||
register struct stinfo *stp = &fb[OFB].streams[DIR_DECRYPT-1];
|
register struct stinfo *stp = &fb[OFB].streams[DIR_DECRYPT-1];
|
||||||
int index;
|
int index;
|
||||||
@@ -729,10 +659,10 @@ ofb64_decrypt(data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
index = stp->str_index++;
|
index = stp->str_index++;
|
||||||
if (index == sizeof(Block)) {
|
if (index == sizeof(des_cblock)) {
|
||||||
Block b;
|
des_cblock b;
|
||||||
des_ecb_encrypt(stp->str_feed, b, stp->str_sched, 1);
|
des_ecb_encrypt(&stp->str_feed,&b,stp->str_sched, 1);
|
||||||
memcpy((void *)stp->str_feed, (void *)b, sizeof(Block));
|
memcpy((void *)stp->str_feed, (void *)b, sizeof(des_cblock));
|
||||||
stp->str_index = 1; /* Next time will be 1 */
|
stp->str_index = 1; /* Next time will be 1 */
|
||||||
index = 0; /* But now use 0 */
|
index = 0; /* But now use 0 */
|
||||||
}
|
}
|
||||||
|
@@ -581,7 +581,7 @@ encrypt_is(data, cnt)
|
|||||||
} else {
|
} else {
|
||||||
ret = (*ep->is)(data, cnt);
|
ret = (*ep->is)(data, cnt);
|
||||||
if (encrypt_debug_mode)
|
if (encrypt_debug_mode)
|
||||||
printf("(*ep->is)(%x, %d) returned %s(%d)\n", data, cnt,
|
printf("(*ep->is)(%p, %d) returned %s(%d)\n", data, cnt,
|
||||||
(ret < 0) ? "FAIL " :
|
(ret < 0) ? "FAIL " :
|
||||||
(ret == 0) ? "SUCCESS " : "MORE_TO_DO ", ret);
|
(ret == 0) ? "SUCCESS " : "MORE_TO_DO ", ret);
|
||||||
}
|
}
|
||||||
@@ -625,7 +625,7 @@ encrypt_reply(data, cnt)
|
|||||||
} else {
|
} else {
|
||||||
ret = (*ep->reply)(data, cnt);
|
ret = (*ep->reply)(data, cnt);
|
||||||
if (encrypt_debug_mode)
|
if (encrypt_debug_mode)
|
||||||
printf("(*ep->reply)(%x, %d) returned %s(%d)\n",
|
printf("(*ep->reply)(%p, %d) returned %s(%d)\n",
|
||||||
data, cnt,
|
data, cnt,
|
||||||
(ret < 0) ? "FAIL " :
|
(ret < 0) ? "FAIL " :
|
||||||
(ret == 0) ? "SUCCESS " : "MORE_TO_DO ", ret);
|
(ret == 0) ? "SUCCESS " : "MORE_TO_DO ", ret);
|
||||||
@@ -741,27 +741,9 @@ encrypt_request_start(data, cnt)
|
|||||||
|
|
||||||
static unsigned char str_keyid[(MAXKEYLEN*2)+5] = { IAC, SB, TELOPT_ENCRYPT };
|
static unsigned char str_keyid[(MAXKEYLEN*2)+5] = { IAC, SB, TELOPT_ENCRYPT };
|
||||||
|
|
||||||
encrypt_enc_keyid(keyid, len)
|
void encrypt_keyid(struct key_info *kp, unsigned char *keyid, int len)
|
||||||
unsigned char *keyid;
|
|
||||||
int len;
|
|
||||||
{
|
|
||||||
encrypt_keyid(&ki[1], keyid, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
encrypt_dec_keyid(keyid, len)
|
|
||||||
unsigned char *keyid;
|
|
||||||
int len;
|
|
||||||
{
|
|
||||||
encrypt_keyid(&ki[0], keyid, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
encrypt_keyid(kp, keyid, len)
|
|
||||||
struct key_info *kp;
|
|
||||||
unsigned char *keyid;
|
|
||||||
int len;
|
|
||||||
{
|
{
|
||||||
Encryptions *ep;
|
Encryptions *ep;
|
||||||
unsigned char *strp, *cp;
|
|
||||||
int dir = kp->dir;
|
int dir = kp->dir;
|
||||||
register int ret = 0;
|
register int ret = 0;
|
||||||
|
|
||||||
@@ -798,12 +780,18 @@ encrypt_keyid(kp, keyid, len)
|
|||||||
encrypt_send_keyid(dir, kp->keyid, kp->keylen, 0);
|
encrypt_send_keyid(dir, kp->keyid, kp->keylen, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void encrypt_enc_keyid(unsigned char *keyid, int len)
|
||||||
encrypt_send_keyid(dir, keyid, keylen, saveit)
|
{
|
||||||
int dir;
|
encrypt_keyid(&ki[1], keyid, len);
|
||||||
unsigned char *keyid;
|
}
|
||||||
int keylen;
|
|
||||||
int saveit;
|
void encrypt_dec_keyid(unsigned char *keyid, int len)
|
||||||
|
{
|
||||||
|
encrypt_keyid(&ki[0], keyid, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void encrypt_send_keyid(int dir, unsigned char *keyid, int keylen, int saveit)
|
||||||
{
|
{
|
||||||
unsigned char *strp;
|
unsigned char *strp;
|
||||||
|
|
||||||
@@ -954,10 +942,9 @@ encrypt_send_request_end()
|
|||||||
printf(">>>%s: Request input to be clear text\r\n", Name);
|
printf(">>>%s: Request input to be clear text\r\n", Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
encrypt_wait()
|
void encrypt_wait(void)
|
||||||
{
|
{
|
||||||
register int encrypt, decrypt;
|
|
||||||
if (encrypt_debug_mode)
|
if (encrypt_debug_mode)
|
||||||
printf(">>>%s: in encrypt_wait\r\n", Name);
|
printf(">>>%s: in encrypt_wait\r\n", Name);
|
||||||
if (!havesessionkey || !(I_SUPPORT_ENCRYPT & remote_supports_decrypt))
|
if (!havesessionkey || !(I_SUPPORT_ENCRYPT & remote_supports_decrypt))
|
||||||
@@ -974,10 +961,8 @@ encrypt_debug(mode)
|
|||||||
encrypt_debug_mode = mode;
|
encrypt_debug_mode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void encrypt_gen_printsub(unsigned char *data, int cnt,
|
||||||
encrypt_gen_printsub(data, cnt, buf, buflen)
|
unsigned char *buf, int buflen)
|
||||||
unsigned char *data, *buf;
|
|
||||||
int cnt, buflen;
|
|
||||||
{
|
{
|
||||||
char tbuf[16], *cp;
|
char tbuf[16], *cp;
|
||||||
|
|
||||||
|
@@ -62,14 +62,10 @@
|
|||||||
#define DIR_DECRYPT 1
|
#define DIR_DECRYPT 1
|
||||||
#define DIR_ENCRYPT 2
|
#define DIR_ENCRYPT 2
|
||||||
|
|
||||||
typedef unsigned char Block[8];
|
|
||||||
typedef unsigned char *BlockT;
|
|
||||||
typedef struct { Block _B; } Schedule[16];
|
|
||||||
|
|
||||||
#define VALIDKEY(key) ( key[0] | key[1] | key[2] | key[3] | \
|
#define VALIDKEY(key) ( key[0] | key[1] | key[2] | key[3] | \
|
||||||
key[4] | key[5] | key[6] | key[7])
|
key[4] | key[5] | key[6] | key[7])
|
||||||
|
|
||||||
#define SAMEKEY(k1, k2) (!bcmp((void *)k1, (void *)k2, sizeof(Block)))
|
#define SAMEKEY(k1, k2) (!bcmp((void *)k1, (void *)k2, sizeof(des_cblock)))
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
short type;
|
short type;
|
||||||
|
@@ -45,11 +45,9 @@ static char sccsid[] = "@(#)genget.c 8.2 (Berkeley) 5/30/95";
|
|||||||
* the length is returned. If *s1 is a prefix of *s2,
|
* the length is returned. If *s1 is a prefix of *s2,
|
||||||
* the length of *s1 is returned.
|
* the length of *s1 is returned.
|
||||||
*/
|
*/
|
||||||
int
|
|
||||||
isprefix(s1, s2)
|
int isprefix(char *s1, char *s2)
|
||||||
register char *s1, *s2;
|
|
||||||
{
|
{
|
||||||
register int n = 0;
|
|
||||||
char *os1;
|
char *os1;
|
||||||
register char c1, c2;
|
register char c1, c2;
|
||||||
|
|
||||||
|
@@ -131,7 +131,7 @@ static krb5_authenticator authenticator;
|
|||||||
|
|
||||||
#define Voidptr krb5_pointer
|
#define Voidptr krb5_pointer
|
||||||
|
|
||||||
Block session_key;
|
des_cblock session_key;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
Data(ap, type, d, c)
|
Data(ap, type, d, c)
|
||||||
@@ -430,12 +430,12 @@ kerberos5_is(ap, data, cnt)
|
|||||||
authdat->authenticator->subkey->keytype == KEYTYPE_DES) {
|
authdat->authenticator->subkey->keytype == KEYTYPE_DES) {
|
||||||
memmove((Voidptr )session_key,
|
memmove((Voidptr )session_key,
|
||||||
(Voidptr )authdat->authenticator->subkey->contents,
|
(Voidptr )authdat->authenticator->subkey->contents,
|
||||||
sizeof(Block));
|
sizeof(des_cblock));
|
||||||
} else if (authdat->ticket->enc_part2->session->keytype ==
|
} else if (authdat->ticket->enc_part2->session->keytype ==
|
||||||
KEYTYPE_DES) {
|
KEYTYPE_DES) {
|
||||||
memmove((Voidptr )session_key,
|
memmove((Voidptr )session_key,
|
||||||
(Voidptr )authdat->ticket->enc_part2->session->contents,
|
(Voidptr )authdat->ticket->enc_part2->session->contents,
|
||||||
sizeof(Block));
|
sizeof(des_cblock));
|
||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -518,7 +518,7 @@ kerberos5_reply(ap, data, cnt)
|
|||||||
|
|
||||||
tmpkey.keytype = KEYTYPE_DES;
|
tmpkey.keytype = KEYTYPE_DES;
|
||||||
tmpkey.contents = session_key;
|
tmpkey.contents = session_key;
|
||||||
tmpkey.length = sizeof(Block);
|
tmpkey.length = sizeof(des_cblock);
|
||||||
|
|
||||||
if (r = krb5_rd_rep(&inbuf, &tmpkey, &reply)) {
|
if (r = krb5_rd_rep(&inbuf, &tmpkey, &reply)) {
|
||||||
printf("[ Mutual authentication failed: %s ]\n",
|
printf("[ Mutual authentication failed: %s ]\n",
|
||||||
|
@@ -1,71 +0,0 @@
|
|||||||
/*-
|
|
||||||
* Copyright (c) 1991, 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.
|
|
||||||
*
|
|
||||||
* @(#)key-proto.h 8.1 (Berkeley) 6/4/93
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 1990 by the Massachusetts Institute of Technology
|
|
||||||
*
|
|
||||||
* Export of this software from the United States of America is assumed
|
|
||||||
* to require a specific license from the United States Government.
|
|
||||||
* It is the responsibility of any person or organization contemplating
|
|
||||||
* export to obtain such a license before exporting.
|
|
||||||
*
|
|
||||||
* WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
||||||
* distribute this software and its documentation for any purpose and
|
|
||||||
* without fee is hereby granted, provided that the above copyright
|
|
||||||
* notice appear in all copies and that both that copyright notice and
|
|
||||||
* this permission notice appear in supporting documentation, and that
|
|
||||||
* the name of M.I.T. not be used in advertising or publicity pertaining
|
|
||||||
* to distribution of the software without specific, written prior
|
|
||||||
* permission. M.I.T. makes no representations about the suitability of
|
|
||||||
* this software for any purpose. It is provided "as is" without express
|
|
||||||
* or implied warranty.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __KEY_PROTO__
|
|
||||||
#define __KEY_PROTO__
|
|
||||||
|
|
||||||
#if !defined(P)
|
|
||||||
#ifdef __STDC__
|
|
||||||
#define P(x) x
|
|
||||||
#else
|
|
||||||
#define P(x) ()
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int key_file_exists P((void));
|
|
||||||
void key_lookup P((unsigned char *, Block));
|
|
||||||
void key_stream_init P((Block, Block, int));
|
|
||||||
unsigned char key_stream P((int, int));
|
|
||||||
#endif
|
|
@@ -113,7 +113,7 @@ static KTEXT_ST auth;
|
|||||||
static char name[ANAME_SZ];
|
static char name[ANAME_SZ];
|
||||||
static char user_passwd[ANAME_SZ];
|
static char user_passwd[ANAME_SZ];
|
||||||
static AUTH_DAT adat = { 0 };
|
static AUTH_DAT adat = { 0 };
|
||||||
static Schedule sched;
|
static des_key_schedule sched;
|
||||||
static char challenge[REALM_SZ];
|
static char challenge[REALM_SZ];
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -157,7 +157,7 @@ krb4encpwd_init(ap, server)
|
|||||||
int server;
|
int server;
|
||||||
{
|
{
|
||||||
char hostname[80], *cp, *realm;
|
char hostname[80], *cp, *realm;
|
||||||
C_Block skey;
|
des_clock skey;
|
||||||
|
|
||||||
if (server) {
|
if (server) {
|
||||||
str_data[3] = TELQUAL_REPLY;
|
str_data[3] = TELQUAL_REPLY;
|
||||||
@@ -202,7 +202,7 @@ krb4encpwd_is(ap, data, cnt)
|
|||||||
int cnt;
|
int cnt;
|
||||||
{
|
{
|
||||||
Session_Key skey;
|
Session_Key skey;
|
||||||
Block datablock;
|
des_cblock datablock;
|
||||||
char r_passwd[ANAME_SZ], r_user[ANAME_SZ];
|
char r_passwd[ANAME_SZ], r_user[ANAME_SZ];
|
||||||
char lhostname[ANAME_SZ], *cp;
|
char lhostname[ANAME_SZ], *cp;
|
||||||
int r;
|
int r;
|
||||||
@@ -232,7 +232,7 @@ krb4encpwd_is(ap, data, cnt)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memmove((void *)session_key, (void *)adat.session, sizeof(Block));
|
memmove((void *)session_key, (void *)adat.session, sizeof(des_cblock));
|
||||||
Data(ap, KRB4_ENCPWD_ACCEPT, (void *)0, 0);
|
Data(ap, KRB4_ENCPWD_ACCEPT, (void *)0, 0);
|
||||||
auth_finished(ap, AUTH_USER);
|
auth_finished(ap, AUTH_USER);
|
||||||
break;
|
break;
|
||||||
@@ -242,7 +242,7 @@ krb4encpwd_is(ap, data, cnt)
|
|||||||
* Take the received random challenge text and save
|
* Take the received random challenge text and save
|
||||||
* for future authentication.
|
* for future authentication.
|
||||||
*/
|
*/
|
||||||
memmove((void *)challenge, (void *)data, sizeof(Block));
|
memmove((void *)challenge, (void *)data, sizeof(des_cblock));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
@@ -280,7 +280,7 @@ krb4encpwd_reply(ap, data, cnt)
|
|||||||
{
|
{
|
||||||
Session_Key skey;
|
Session_Key skey;
|
||||||
KTEXT_ST krb_token;
|
KTEXT_ST krb_token;
|
||||||
Block enckey;
|
des_cblock enckey;
|
||||||
CREDENTIALS cred;
|
CREDENTIALS cred;
|
||||||
int r;
|
int r;
|
||||||
char randchal[REALM_SZ], instance[ANAME_SZ], *cp;
|
char randchal[REALM_SZ], instance[ANAME_SZ], *cp;
|
||||||
|
@@ -200,7 +200,7 @@ rsaencpwd_is(ap, data, cnt)
|
|||||||
int cnt;
|
int cnt;
|
||||||
{
|
{
|
||||||
Session_Key skey;
|
Session_Key skey;
|
||||||
Block datablock;
|
des_cblock datablock;
|
||||||
char r_passwd[PWD_SZ], r_user[NAME_SZ];
|
char r_passwd[PWD_SZ], r_user[NAME_SZ];
|
||||||
char *cp, key[160];
|
char *cp, key[160];
|
||||||
char chalkey[160], *ptr;
|
char chalkey[160], *ptr;
|
||||||
@@ -321,7 +321,7 @@ rsaencpwd_reply(ap, data, cnt)
|
|||||||
{
|
{
|
||||||
Session_Key skey;
|
Session_Key skey;
|
||||||
KTEXT_ST token;
|
KTEXT_ST token;
|
||||||
Block enckey;
|
des_cblock enckey;
|
||||||
int r, pubkey_len;
|
int r, pubkey_len;
|
||||||
char randchal[CHAL_SZ], *cp;
|
char randchal[CHAL_SZ], *cp;
|
||||||
char chalkey[160], pubkey[128], *ptr;
|
char chalkey[160], pubkey[128], *ptr;
|
||||||
|
@@ -100,8 +100,8 @@ static unsigned char str_name[1024] = { IAC, SB, TELOPT_AUTHENTICATION,
|
|||||||
#define SPX_REJECT 1 /* Rejected (reason might follow) */
|
#define SPX_REJECT 1 /* Rejected (reason might follow) */
|
||||||
#define SPX_ACCEPT 2 /* Accepted */
|
#define SPX_ACCEPT 2 /* Accepted */
|
||||||
|
|
||||||
static Schedule sched;
|
static des_key_schedule sched;
|
||||||
static Block challenge = { 0 };
|
static des_cblock challenge = { 0 };
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************/
|
/*******************************************************************/
|
||||||
@@ -200,7 +200,7 @@ spx_init(ap, server)
|
|||||||
spx_send(ap)
|
spx_send(ap)
|
||||||
Authenticator *ap;
|
Authenticator *ap;
|
||||||
{
|
{
|
||||||
Block enckey;
|
des_cblock enckey;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
gss_OID actual_mech_type, output_name_type;
|
gss_OID actual_mech_type, output_name_type;
|
||||||
@@ -312,7 +312,7 @@ spx_is(ap, data, cnt)
|
|||||||
int cnt;
|
int cnt;
|
||||||
{
|
{
|
||||||
Session_Key skey;
|
Session_Key skey;
|
||||||
Block datablock;
|
des_cblock datablock;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (cnt-- < 1)
|
if (cnt-- < 1)
|
||||||
|
@@ -56,7 +56,7 @@ static char sccsid[] = "@(#)commands.c 8.4 (Berkeley) 5/30/95";
|
|||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <varargs.h>
|
#include <stdarg.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ static char sccsid[] = "@(#)commands.c 8.4 (Berkeley) 5/30/95";
|
|||||||
|
|
||||||
#ifndef MAXHOSTNAMELEN
|
#ifndef MAXHOSTNAMELEN
|
||||||
#define MAXHOSTNAMELEN 64
|
#define MAXHOSTNAMELEN 64
|
||||||
#endif MAXHOSTNAMELEN
|
#endif
|
||||||
|
|
||||||
#if defined(IPPROTO_IP) && defined(IP_TOS)
|
#if defined(IPPROTO_IP) && defined(IP_TOS)
|
||||||
int tos = -1;
|
int tos = -1;
|
||||||
@@ -96,7 +96,8 @@ extern int isprefix();
|
|||||||
extern char **genget();
|
extern char **genget();
|
||||||
extern int Ambiguous();
|
extern int Ambiguous();
|
||||||
|
|
||||||
static call();
|
typedef int (*intrtn_t)(int, char**);
|
||||||
|
static int call(intrtn_t, ...);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *name; /* command name */
|
char *name; /* command name */
|
||||||
@@ -167,9 +168,7 @@ makeargv()
|
|||||||
* Todo: 1. Could take random integers (12, 0x12, 012, 0b1).
|
* Todo: 1. Could take random integers (12, 0x12, 012, 0b1).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static
|
static char special(char *s)
|
||||||
special(s)
|
|
||||||
register char *s;
|
|
||||||
{
|
{
|
||||||
register char c;
|
register char c;
|
||||||
char b;
|
char b;
|
||||||
@@ -289,14 +288,10 @@ static struct sendlist Sendlist[] = {
|
|||||||
#define GETSEND(name) ((struct sendlist *) genget(name, (char **) Sendlist, \
|
#define GETSEND(name) ((struct sendlist *) genget(name, (char **) Sendlist, \
|
||||||
sizeof(struct sendlist)))
|
sizeof(struct sendlist)))
|
||||||
|
|
||||||
static int
|
static int sendcmd(int argc, char **argv)
|
||||||
sendcmd(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
{
|
||||||
int count; /* how many bytes we are going to need to send */
|
int count; /* how many bytes we are going to need to send */
|
||||||
int i;
|
int i;
|
||||||
int question = 0; /* was at least one argument a question */
|
|
||||||
struct sendlist *s; /* pointer to current command */
|
struct sendlist *s; /* pointer to current command */
|
||||||
int success = 0;
|
int success = 0;
|
||||||
int needconnect = 0;
|
int needconnect = 0;
|
||||||
@@ -1085,8 +1080,7 @@ unsetcmd(argc, argv)
|
|||||||
#ifdef KLUDGELINEMODE
|
#ifdef KLUDGELINEMODE
|
||||||
extern int kludgelinemode;
|
extern int kludgelinemode;
|
||||||
|
|
||||||
static int
|
static void dokludgemode(void)
|
||||||
dokludgemode()
|
|
||||||
{
|
{
|
||||||
kludgelinemode = 1;
|
kludgelinemode = 1;
|
||||||
send_wont(TELOPT_LINEMODE, 1);
|
send_wont(TELOPT_LINEMODE, 1);
|
||||||
@@ -1437,11 +1431,7 @@ shell(argc, argv)
|
|||||||
extern int shell();
|
extern int shell();
|
||||||
#endif /* !defined(TN3270) */
|
#endif /* !defined(TN3270) */
|
||||||
|
|
||||||
/*VARARGS*/
|
static int bye(int argc, char **argv)
|
||||||
static
|
|
||||||
bye(argc, argv)
|
|
||||||
int argc; /* Number of arguments */
|
|
||||||
char *argv[]; /* arguments */
|
|
||||||
{
|
{
|
||||||
extern int resettermname;
|
extern int resettermname;
|
||||||
|
|
||||||
@@ -1464,11 +1454,10 @@ bye(argc, argv)
|
|||||||
longjmp(toplevel, 1);
|
longjmp(toplevel, 1);
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
return 1; /* Keep lint, etc., happy */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*VARARGS*/
|
/*VARARGS*/
|
||||||
quit()
|
void quit(void)
|
||||||
{
|
{
|
||||||
(void) call(bye, "bye", "fromquit", 0);
|
(void) call(bye, "bye", "fromquit", 0);
|
||||||
Exit(0);
|
Exit(0);
|
||||||
@@ -1533,10 +1522,7 @@ getslc(name)
|
|||||||
genget(name, (char **) SlcList, sizeof(struct slclist));
|
genget(name, (char **) SlcList, sizeof(struct slclist));
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int slccmd(int argc, char **argv)
|
||||||
slccmd(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
struct slclist *c;
|
struct slclist *c;
|
||||||
|
|
||||||
@@ -1630,9 +1616,7 @@ getenvcmd(name)
|
|||||||
genget(name, (char **) EnvList, sizeof(struct envlist));
|
genget(name, (char **) EnvList, sizeof(struct envlist));
|
||||||
}
|
}
|
||||||
|
|
||||||
env_cmd(argc, argv)
|
int env_cmd(int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
struct envlist *c;
|
struct envlist *c;
|
||||||
|
|
||||||
@@ -1854,7 +1838,7 @@ env_default(init, welldefined)
|
|||||||
|
|
||||||
if (init) {
|
if (init) {
|
||||||
nep = &envlisthead;
|
nep = &envlisthead;
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (nep) {
|
if (nep) {
|
||||||
while (nep = nep->next) {
|
while (nep = nep->next) {
|
||||||
@@ -1961,9 +1945,7 @@ auth_help()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
auth_cmd(argc, argv)
|
int auth_cmd(int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
struct authlist *c;
|
struct authlist *c;
|
||||||
|
|
||||||
@@ -2068,9 +2050,7 @@ EncryptHelp()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
encrypt_cmd(argc, argv)
|
int encrypt_cmd(int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
struct encryptlist *c;
|
struct encryptlist *c;
|
||||||
|
|
||||||
@@ -2148,11 +2128,8 @@ filestuff(fd)
|
|||||||
/*
|
/*
|
||||||
* Print status about the connection.
|
* Print status about the connection.
|
||||||
*/
|
*/
|
||||||
/*ARGSUSED*/
|
|
||||||
static
|
static int status(int argc, char **argv)
|
||||||
status(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
if (connected) {
|
if (connected) {
|
||||||
printf("Connected to %s.\n", hostname);
|
printf("Connected to %s.\n", hostname);
|
||||||
@@ -2230,10 +2207,91 @@ ayt_status()
|
|||||||
|
|
||||||
unsigned long inet_addr();
|
unsigned long inet_addr();
|
||||||
|
|
||||||
int
|
static char *rcname = 0;
|
||||||
tn(argc, argv)
|
static char rcbuf[128];
|
||||||
int argc;
|
|
||||||
char *argv[];
|
static Command *getcmd(char *name);
|
||||||
|
|
||||||
|
static void cmdrc(char *m1, char *m2)
|
||||||
|
{
|
||||||
|
register Command *c;
|
||||||
|
FILE *rcfile;
|
||||||
|
int gotmachine = 0;
|
||||||
|
int l1 = strlen(m1);
|
||||||
|
int l2 = strlen(m2);
|
||||||
|
char m1save[64];
|
||||||
|
|
||||||
|
if (skiprc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
strcpy(m1save, m1);
|
||||||
|
m1 = m1save;
|
||||||
|
|
||||||
|
if (rcname == 0) {
|
||||||
|
rcname = getenv("HOME");
|
||||||
|
if (rcname)
|
||||||
|
strcpy(rcbuf, rcname);
|
||||||
|
else
|
||||||
|
rcbuf[0] = '\0';
|
||||||
|
strcat(rcbuf, "/.telnetrc");
|
||||||
|
rcname = rcbuf;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((rcfile = fopen(rcname, "r")) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
if (fgets(line, sizeof(line), rcfile) == NULL)
|
||||||
|
break;
|
||||||
|
if (line[0] == 0)
|
||||||
|
break;
|
||||||
|
if (line[0] == '#')
|
||||||
|
continue;
|
||||||
|
if (gotmachine) {
|
||||||
|
if (!isspace(line[0]))
|
||||||
|
gotmachine = 0;
|
||||||
|
}
|
||||||
|
if (gotmachine == 0) {
|
||||||
|
if (isspace(line[0]))
|
||||||
|
continue;
|
||||||
|
if (strncasecmp(line, m1, l1) == 0)
|
||||||
|
strncpy(line, &line[l1], sizeof(line) - l1);
|
||||||
|
else if (strncasecmp(line, m2, l2) == 0)
|
||||||
|
strncpy(line, &line[l2], sizeof(line) - l2);
|
||||||
|
else if (strncasecmp(line, "DEFAULT", 7) == 0)
|
||||||
|
strncpy(line, &line[7], sizeof(line) - 7);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
if (line[0] != ' ' && line[0] != '\t' && line[0] != '\n')
|
||||||
|
continue;
|
||||||
|
gotmachine = 1;
|
||||||
|
}
|
||||||
|
makeargv();
|
||||||
|
if (margv[0] == 0)
|
||||||
|
continue;
|
||||||
|
c = getcmd(margv[0]);
|
||||||
|
if (Ambiguous(c)) {
|
||||||
|
printf("?Ambiguous command: %s\n", margv[0]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (c == 0) {
|
||||||
|
printf("?Invalid command: %s\n", margv[0]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* This should never happen...
|
||||||
|
*/
|
||||||
|
if (c->needconnect && !connected) {
|
||||||
|
printf("?Need to be connected first for %s.\n", margv[0]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
(*c->handler)(margc, margv);
|
||||||
|
}
|
||||||
|
fclose(rcfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
int tn(int argc, char **argv)
|
||||||
{
|
{
|
||||||
register struct hostent *host = 0;
|
register struct hostent *host = 0;
|
||||||
struct sockaddr_in sin;
|
struct sockaddr_in sin;
|
||||||
@@ -2444,7 +2502,7 @@ tn(argc, argv)
|
|||||||
|
|
||||||
user = getenv("USER");
|
user = getenv("USER");
|
||||||
if (user == NULL ||
|
if (user == NULL ||
|
||||||
(pw = getpwnam(user)) && pw->pw_uid != getuid()) {
|
((pw = getpwnam(user)) && pw->pw_uid != getuid())) {
|
||||||
if (pw = getpwuid(getuid()))
|
if (pw = getpwuid(getuid()))
|
||||||
user = pw->pw_name;
|
user = pw->pw_name;
|
||||||
else
|
else
|
||||||
@@ -2528,7 +2586,7 @@ static Command cmdtab[] = {
|
|||||||
#endif
|
#endif
|
||||||
{ "environ", envhelp, env_cmd, 0 },
|
{ "environ", envhelp, env_cmd, 0 },
|
||||||
{ "?", helphelp, help, 0 },
|
{ "?", helphelp, help, 0 },
|
||||||
0
|
{ 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static char crmodhelp[] = "deprecated command -- use 'toggle crmod' instead";
|
static char crmodhelp[] = "deprecated command -- use 'toggle crmod' instead";
|
||||||
@@ -2538,7 +2596,7 @@ static Command cmdtab2[] = {
|
|||||||
{ "help", 0, help, 0 },
|
{ "help", 0, help, 0 },
|
||||||
{ "escape", escapehelp, setescape, 0 },
|
{ "escape", escapehelp, setescape, 0 },
|
||||||
{ "crmod", crmodhelp, togcrmod, 0 },
|
{ "crmod", crmodhelp, togcrmod, 0 },
|
||||||
0
|
{ 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -2546,30 +2604,20 @@ static Command cmdtab2[] = {
|
|||||||
* Call routine with argc, argv set from args (terminated by 0).
|
* Call routine with argc, argv set from args (terminated by 0).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*VARARGS1*/
|
static int call(intrtn_t routine, ...)
|
||||||
static
|
|
||||||
call(va_alist)
|
|
||||||
va_dcl
|
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap;
|
||||||
typedef int (*intrtn_t)();
|
|
||||||
intrtn_t routine;
|
|
||||||
char *args[100];
|
char *args[100];
|
||||||
int argno = 0;
|
int argno = 0;
|
||||||
|
|
||||||
va_start(ap);
|
va_start(ap, routine);
|
||||||
routine = (va_arg(ap, intrtn_t));
|
while ((args[argno++] = va_arg(ap, char *)) != 0);
|
||||||
while ((args[argno++] = va_arg(ap, char *)) != 0) {
|
|
||||||
;
|
|
||||||
}
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return (*routine)(argno-1, args);
|
return (*routine)(argno-1, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Command *
|
static Command *getcmd(char *name)
|
||||||
getcmd(name)
|
|
||||||
char *name;
|
|
||||||
{
|
{
|
||||||
Command *cm;
|
Command *cm;
|
||||||
|
|
||||||
@@ -2662,10 +2710,7 @@ command(top, tbuf, cnt)
|
|||||||
/*
|
/*
|
||||||
* Help command.
|
* Help command.
|
||||||
*/
|
*/
|
||||||
static
|
static int help(int argc, char **argv)
|
||||||
help(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
register Command *c;
|
register Command *c;
|
||||||
|
|
||||||
@@ -2692,88 +2737,6 @@ help(argc, argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *rcname = 0;
|
|
||||||
static char rcbuf[128];
|
|
||||||
|
|
||||||
cmdrc(m1, m2)
|
|
||||||
char *m1, *m2;
|
|
||||||
{
|
|
||||||
register Command *c;
|
|
||||||
FILE *rcfile;
|
|
||||||
int gotmachine = 0;
|
|
||||||
int l1 = strlen(m1);
|
|
||||||
int l2 = strlen(m2);
|
|
||||||
char m1save[64];
|
|
||||||
|
|
||||||
if (skiprc)
|
|
||||||
return;
|
|
||||||
|
|
||||||
strcpy(m1save, m1);
|
|
||||||
m1 = m1save;
|
|
||||||
|
|
||||||
if (rcname == 0) {
|
|
||||||
rcname = getenv("HOME");
|
|
||||||
if (rcname)
|
|
||||||
strcpy(rcbuf, rcname);
|
|
||||||
else
|
|
||||||
rcbuf[0] = '\0';
|
|
||||||
strcat(rcbuf, "/.telnetrc");
|
|
||||||
rcname = rcbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((rcfile = fopen(rcname, "r")) == 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
if (fgets(line, sizeof(line), rcfile) == NULL)
|
|
||||||
break;
|
|
||||||
if (line[0] == 0)
|
|
||||||
break;
|
|
||||||
if (line[0] == '#')
|
|
||||||
continue;
|
|
||||||
if (gotmachine) {
|
|
||||||
if (!isspace(line[0]))
|
|
||||||
gotmachine = 0;
|
|
||||||
}
|
|
||||||
if (gotmachine == 0) {
|
|
||||||
if (isspace(line[0]))
|
|
||||||
continue;
|
|
||||||
if (strncasecmp(line, m1, l1) == 0)
|
|
||||||
strncpy(line, &line[l1], sizeof(line) - l1);
|
|
||||||
else if (strncasecmp(line, m2, l2) == 0)
|
|
||||||
strncpy(line, &line[l2], sizeof(line) - l2);
|
|
||||||
else if (strncasecmp(line, "DEFAULT", 7) == 0)
|
|
||||||
strncpy(line, &line[7], sizeof(line) - 7);
|
|
||||||
else
|
|
||||||
continue;
|
|
||||||
if (line[0] != ' ' && line[0] != '\t' && line[0] != '\n')
|
|
||||||
continue;
|
|
||||||
gotmachine = 1;
|
|
||||||
}
|
|
||||||
makeargv();
|
|
||||||
if (margv[0] == 0)
|
|
||||||
continue;
|
|
||||||
c = getcmd(margv[0]);
|
|
||||||
if (Ambiguous(c)) {
|
|
||||||
printf("?Ambiguous command: %s\n", margv[0]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (c == 0) {
|
|
||||||
printf("?Invalid command: %s\n", margv[0]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* This should never happen...
|
|
||||||
*/
|
|
||||||
if (c->needconnect && !connected) {
|
|
||||||
printf("?Need to be connected first for %s.\n", margv[0]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
(*c->handler)(margc, margv);
|
|
||||||
}
|
|
||||||
fclose(rcfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(IP_OPTIONS) && defined(IPPROTO_IP)
|
#if defined(IP_OPTIONS) && defined(IPPROTO_IP)
|
||||||
|
|
||||||
|
@@ -138,7 +138,7 @@ extern int
|
|||||||
crmod,
|
crmod,
|
||||||
netdata, /* Print out network data flow */
|
netdata, /* Print out network data flow */
|
||||||
prettydump, /* Print "netdata" output in user readable format */
|
prettydump, /* Print "netdata" output in user readable format */
|
||||||
#if defined(unix)
|
#if defined(unix) || defined(__unix__) || defined(__unix)
|
||||||
#if defined(TN3270)
|
#if defined(TN3270)
|
||||||
cursesdata, /* Print out curses data flow */
|
cursesdata, /* Print out curses data flow */
|
||||||
apitrace, /* Trace API transactions */
|
apitrace, /* Trace API transactions */
|
||||||
@@ -310,6 +310,8 @@ extern int
|
|||||||
extern cc_t
|
extern cc_t
|
||||||
*tcval P((int));
|
*tcval P((int));
|
||||||
|
|
||||||
|
extern void quit P((void));
|
||||||
|
|
||||||
#ifndef USE_TERMIO
|
#ifndef USE_TERMIO
|
||||||
|
|
||||||
extern struct tchars ntc;
|
extern struct tchars ntc;
|
||||||
|
@@ -101,10 +101,7 @@ static u_long ring_clock = 0;
|
|||||||
|
|
||||||
/* Buffer state transition routines */
|
/* Buffer state transition routines */
|
||||||
|
|
||||||
ring_init(ring, buffer, count)
|
int ring_init(Ring *ring, unsigned char *buffer, int count)
|
||||||
Ring *ring;
|
|
||||||
unsigned char *buffer;
|
|
||||||
int count;
|
|
||||||
{
|
{
|
||||||
memset((char *)ring, 0, sizeof *ring);
|
memset((char *)ring, 0, sizeof *ring);
|
||||||
|
|
||||||
|
@@ -1432,7 +1432,7 @@ startslave(host, autologin, autoname)
|
|||||||
#ifdef ENCRYPTION
|
#ifdef ENCRYPTION
|
||||||
if (encrypt_output == 0 || decrypt_input == 0)
|
if (encrypt_output == 0 || decrypt_input == 0)
|
||||||
#endif
|
#endif
|
||||||
writenet(tbuf, strlen(tbuf));
|
writenet((unsigned char*)tbuf, strlen(tbuf));
|
||||||
}
|
}
|
||||||
#ifndef NEWINIT
|
#ifndef NEWINIT
|
||||||
# ifdef PARENT_DOES_UTMP
|
# ifdef PARENT_DOES_UTMP
|
||||||
|
@@ -165,8 +165,9 @@ char valid_opts[] = {
|
|||||||
'\0'
|
'\0'
|
||||||
};
|
};
|
||||||
|
|
||||||
main(argc, argv)
|
void doit(struct sockaddr_in*);
|
||||||
char *argv[];
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct sockaddr_in from;
|
struct sockaddr_in from;
|
||||||
int on = 1, fromlen;
|
int on = 1, fromlen;
|
||||||
@@ -787,8 +788,7 @@ extern void telnet P((int, int, char *));
|
|||||||
/*
|
/*
|
||||||
* Get a pty, scan input lines.
|
* Get a pty, scan input lines.
|
||||||
*/
|
*/
|
||||||
doit(who)
|
void doit(struct sockaddr_in *who)
|
||||||
struct sockaddr_in *who;
|
|
||||||
{
|
{
|
||||||
char *host, *inet_ntoa();
|
char *host, *inet_ntoa();
|
||||||
int t;
|
int t;
|
||||||
|
@@ -978,7 +978,6 @@ printsub(direction, pointer, length)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
def_case:
|
|
||||||
if (isprint(pointer[i]) && pointer[i] != '"') {
|
if (isprint(pointer[i]) && pointer[i] != '"') {
|
||||||
if (noquote) {
|
if (noquote) {
|
||||||
*nfrontp++ = '"';
|
*nfrontp++ = '"';
|
||||||
|
@@ -34,13 +34,13 @@ SOURCES = cbc_cksm.c cbc_enc.c ecb_enc.c pcbc_enc.c \
|
|||||||
qud_cksm.c read_pwd.c set_key.c str2key.c \
|
qud_cksm.c read_pwd.c set_key.c str2key.c \
|
||||||
cfb_enc.c \
|
cfb_enc.c \
|
||||||
3ecb_enc.c ofb_enc.c 3cbc_enc.c rnd_keys.c key_par.c \
|
3ecb_enc.c ofb_enc.c 3cbc_enc.c rnd_keys.c key_par.c \
|
||||||
enc_read.c enc_writ.c gethostid.c fcrypt.c
|
enc_read.c enc_writ.c fcrypt.c
|
||||||
|
|
||||||
OBJECTS = cbc_cksm.o cbc_enc.o ecb_enc.o pcbc_enc.o \
|
OBJECTS = cbc_cksm.o cbc_enc.o ecb_enc.o pcbc_enc.o \
|
||||||
qud_cksm.o read_pwd.o set_key.o str2key.o \
|
qud_cksm.o read_pwd.o set_key.o str2key.o \
|
||||||
cfb_enc.o \
|
cfb_enc.o \
|
||||||
3ecb_enc.o ofb_enc.o 3cbc_enc.o rnd_keys.o key_par.o \
|
3ecb_enc.o ofb_enc.o 3cbc_enc.o rnd_keys.o key_par.o \
|
||||||
enc_read.o enc_writ.o gethostid.o fcrypt.o
|
enc_read.o enc_writ.o fcrypt.o
|
||||||
|
|
||||||
all: $(LIB)
|
all: $(LIB)
|
||||||
|
|
||||||
|
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* Some systems doesn't have gethostid(2) (e.g Solaris if you don't
|
|
||||||
* link with libucb - and we don't want that...
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef HAVE_GETHOSTID
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <sys/systeminfo.h>
|
|
||||||
|
|
||||||
long gethostid(void)
|
|
||||||
{
|
|
||||||
static int flag=0;
|
|
||||||
static long hostid;
|
|
||||||
if(!flag){
|
|
||||||
char s[32];
|
|
||||||
sysinfo(SI_HW_SERIAL, s, 32);
|
|
||||||
sscanf(s, "%u", &hostid);
|
|
||||||
flag=1;
|
|
||||||
}
|
|
||||||
return hostid;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@@ -72,6 +72,25 @@ des_new_random_key(des_cblock *key)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* this is for broken Solaris */
|
||||||
|
#ifndef HAVE_GETHOSTID
|
||||||
|
|
||||||
|
#include <sys/systeminfo.h>
|
||||||
|
|
||||||
|
static long gethostid(void)
|
||||||
|
{
|
||||||
|
static int flag=0;
|
||||||
|
static long hostid;
|
||||||
|
if(!flag){
|
||||||
|
char s[32];
|
||||||
|
sysinfo(SI_HW_SERIAL, s, 32);
|
||||||
|
sscanf(s, "%u", &hostid);
|
||||||
|
flag=1;
|
||||||
|
}
|
||||||
|
return hostid;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* des_init_random_number_generator:
|
* des_init_random_number_generator:
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user