summaryrefslogtreecommitdiffstats
path: root/cpukit/telnetd
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2009-06-17 22:29:52 +0000
committerChris Johns <chrisj@rtems.org>2009-06-17 22:29:52 +0000
commitc0075af37a0a98d55780fa2f37e12e38ecdfb8cb (patch)
treeb26df22dc1ec57868edb2c8a479bcc621057d29b /cpukit/telnetd
parent2009-06-17 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-c0075af37a0a98d55780fa2f37e12e38ecdfb8cb.tar.bz2
2009-06-18 Chris Johns <chrisj@rtems.org>
* telnetd/des.c: Split the des_f struct into smaller parts so targets that cannot address large structs can be supported.
Diffstat (limited to 'cpukit/telnetd')
-rw-r--r--cpukit/telnetd/des.c60
1 files changed, 40 insertions, 20 deletions
diff --git a/cpukit/telnetd/des.c b/cpukit/telnetd/des.c
index b052fd3a05..aedeb81c04 100644
--- a/cpukit/telnetd/des.c
+++ b/cpukit/telnetd/des.c
@@ -75,29 +75,35 @@
* struct crypt_data to make this really reentrant... */
/* TS; not really - only the stuff in Des_Context */
-static struct fixed {
+static struct fixed1 {
u_char inv_key_perm[64];
u_char inv_comp_perm[56];
u_char u_sbox[8][64];
u_char un_pbox[32];
+} des1_f;
+static struct fixed2 {
u_int32_t ip_maskl[8][256], ip_maskr[8][256];
+} des2_f;
+static struct fixed3 {
u_int32_t fp_maskl[8][256], fp_maskr[8][256];
+} des3_f;
+static struct fixed4 {
u_int32_t key_perm_maskl[8][128], key_perm_maskr[8][128];
u_int32_t comp_maskl[8][128], comp_maskr[8][128];
-} des_f;
-
-#define inv_key_perm des_f.inv_key_perm
-#define inv_comp_perm des_f.inv_comp_perm
-#define u_sbox des_f.u_sbox
-#define un_pbox des_f.un_pbox
-#define ip_maskl des_f.ip_maskl
-#define ip_maskr des_f.ip_maskr
-#define fp_maskl des_f.fp_maskl
-#define fp_maskr des_f.fp_maskr
-#define key_perm_maskl des_f.key_perm_maskl
-#define key_perm_maskr des_f.key_perm_maskr
-#define comp_maskl des_f.comp_maskl
-#define comp_maskr des_f.comp_maskr
+} des4_f;
+
+#define inv_key_perm des1_f.inv_key_perm
+#define inv_comp_perm des1_f.inv_comp_perm
+#define u_sbox des1_f.u_sbox
+#define un_pbox des1_f.un_pbox
+#define ip_maskl des2_f.ip_maskl
+#define ip_maskr des2_f.ip_maskr
+#define fp_maskl des3_f.fp_maskl
+#define fp_maskr des3_f.fp_maskr
+#define key_perm_maskl des4_f.key_perm_maskl
+#define key_perm_maskr des4_f.key_perm_maskr
+#define comp_maskl des4_f.comp_maskl
+#define comp_maskr des4_f.comp_maskr
/* These need to be maintained per-process */
struct Des_Context {
@@ -837,8 +843,16 @@ __des_crypt(const char *key, const char *setting)
void
des_snap(void **pf, void **pd)
{
- *pf = malloc(sizeof(struct fixed));
- memcpy(*pf, &des_f, sizeof(des_f));
+ uint8* pfc;
+ *pf = malloc(sizeof(struct fixed1) + sizeof(struct fixed2) + sizeof(struct fixed3) + sizeof(struct fixed4));
+ pfc = *pf;
+ memcpy(pfc, &des1_f, sizeof(des1_f));
+ pfc += sizeof(des1_f);
+ memcpy(pfc, &des2_f, sizeof(des2_f));
+ pfc += sizeof(des2_f);
+ memcpy(pfc, &des3_f, sizeof(des3_f));
+ pfc += sizeof(des3_f);
+ memcpy(pfc, &des4_f, sizeof(des4_f));
// *pd = malloc(sizeof(struct Des_Context));
// memcpy(*pd, &des_ctx, sizeof(des_ctx));
}
@@ -846,10 +860,16 @@ des_snap(void **pf, void **pd)
void
des_check(void *pf, void *pd)
{
+ uint8* pfc1, pfc2, pfc3, pfc4;
+ pfc1 = pf;
+ pfc2 = pfc1 + sizeof(des1_f);
+ pfc3 = pfc2 + sizeof(des2_f);
+ pfc4 = pfc3 + sizeof(des3_f);
printf("Fixed: do%s differ"/*", Context: do%s differ"*/"\n",
- memcmp(pf, &des_f, sizeof(des_f)) ? "" : "nt"
-// ,memcmp(pd, &des_ctx, sizeof(des_ctx)) ? "" : "nt"
- );
+ (memcmp(pfc1, &des1_f, sizeof(des1_f)) ||
+ memcmp(pfc2, &des2_f, sizeof(des2_f)) ||
+ memcmp(pfc3, &des4_f, sizeof(des3_f)) ||
+ memcmp(pfc4, &des4_f, sizeof(des4_f))) ? "" : "nt");
}
#endif