summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn-Michael Mulesa2020-07-28 13:48:13 +1000
committerJohn-Michael Mulesa2020-07-28 13:48:13 +1000
commit81cf0215664a1dd730a19ca9cba3bffd58058221 (patch)
tree9ee85818e1b2fd380390b5918ce580b129794536
downloadaur-81cf0215664a1dd730a19ca9cba3bffd58058221.tar.gz
Resurrect netatalk-ddp (netatalk 2) from old AUR.
Some patches were sourced from NetBSD and Fedora; many thanks :)
-rw-r--r--.SRCINFO45
-rw-r--r--PKGBUILD62
-rw-r--r--netatalk-current_vol.patch10
-rw-r--r--netatalk-ddp.install15
-rw-r--r--netatalk-invalid_dircache_entries.patch22
-rw-r--r--netatalk-papd_print_cups.patch123
-rw-r--r--netatalk-uams_dhx_pam.patch60
-rw-r--r--netatalk-uams_dhx_passwd.patch42
-rw-r--r--netatalk-uams_randnum.patch104
9 files changed, 483 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..189f21978d19
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,45 @@
+pkgbase = netatalk-ddp
+ pkgdesc = A kernel-level implementation of AppleTalk, AFP, and PAP services
+ pkgver = 2.2.6
+ pkgrel = 1
+ url = http://netatalk.sourceforge.net
+ install = netatalk-ddp.install
+ arch = i686
+ arch = x86_64
+ license = GPL
+ depends = openslp
+ depends = libcups
+ depends = libgcrypt>=1.2.3
+ depends = libtirpc
+ depends = libwrap
+ depends = rpcsvc-proto
+ optdepends = cups: required for PAP support
+ conflicts = netatalk
+ replaces = netatalk-git
+ replaces = netatalk2
+ options = !libtool
+ backup = etc/netatalk/afpd.conf
+ backup = etc/netatalk/afp_ldap.conf
+ backup = etc/netatalk/netatalk.conf
+ backup = etc/netatalk/AppleVolumes.default
+ backup = etc/netatalk/AppleVolumes.system
+ backup = etc/netatalk/atalkd.conf
+ backup = etc/netatalk/papd.conf
+ backup = etc/pam.d/netatalk
+ source = https://svwh.dl.sourceforge.net/project/netatalk/netatalk/2.2.6/netatalk-2.2.6.tar.bz2
+ source = netatalk-invalid_dircache_entries.patch
+ source = netatalk-current_vol.patch
+ source = netatalk-uams_dhx_passwd.patch
+ source = netatalk-uams_dhx_pam.patch
+ source = netatalk-uams_randnum.patch
+ source = netatalk-papd_print_cups.patch
+ md5sums = cd8ca5be7ebb0ac42d5576f401a8a8ba
+ md5sums = e56ca98c7399916d73cd6de1beb4a567
+ md5sums = 3a9237d97a109e1d7923c93e6c91c182
+ md5sums = be2aae358f7e119cac04d0647b313dde
+ md5sums = ced20afc4ac36220efbb452fc8d56881
+ md5sums = e57f9714b04c9b52f40260ed62dce82d
+ md5sums = 6d8c7d17632dcb6d062987dba43089f0
+
+pkgname = netatalk-ddp
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..0fc0e81293a4
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,62 @@
+# Maintainer: John-Michael Mulesa <jmulesa@gmail.com>
+# Contributor: SJ_UnderWater
+# Based on netatalk package:
+# Maintainer: Dominik Dingel <mail at wodar dot de>
+# Contributor: William Udovich <nerdzrule7 at earthlink dot net>
+# Contributor: Farhan Yousaf <farhany at xaviya dot com>
+
+pkgbase=netatalk-ddp
+pkgname=netatalk-ddp
+pkgver=2.2.6
+pkgrel=1
+pkgdesc='A kernel-level implementation of AppleTalk, AFP, and PAP services'
+arch=('i686' 'x86_64')
+url='http://netatalk.sourceforge.net'
+license=('GPL')
+depends=('openslp' 'libcups' 'libgcrypt>=1.2.3' 'libtirpc' 'libwrap' 'rpcsvc-proto')
+optdepends=('cups: required for PAP support')
+replaces=('netatalk-git' 'netatalk2')
+conflicts=('netatalk')
+backup=('etc/netatalk/afpd.conf'
+ 'etc/netatalk/afp_ldap.conf'
+ 'etc/netatalk/netatalk.conf'
+ 'etc/netatalk/AppleVolumes.default'
+ 'etc/netatalk/AppleVolumes.system'
+ 'etc/netatalk/atalkd.conf'
+ 'etc/netatalk/papd.conf'
+ 'etc/pam.d/netatalk')
+options=('!libtool')
+install=$pkgname.install
+source=(https://svwh.dl.sourceforge.net/project/netatalk/netatalk/$pkgver/netatalk-$pkgver.tar.bz2 netatalk-invalid_dircache_entries.patch netatalk-current_vol.patch netatalk-uams_dhx_passwd.patch netatalk-uams_dhx_pam.patch netatalk-uams_randnum.patch netatalk-papd_print_cups.patch)
+md5sums=('cd8ca5be7ebb0ac42d5576f401a8a8ba'
+ 'e56ca98c7399916d73cd6de1beb4a567'
+ '3a9237d97a109e1d7923c93e6c91c182'
+ 'be2aae358f7e119cac04d0647b313dde'
+ 'ced20afc4ac36220efbb452fc8d56881'
+ 'e57f9714b04c9b52f40260ed62dce82d'
+ '6d8c7d17632dcb6d062987dba43089f0')
+
+build() {
+ cd netatalk-$pkgver
+ msg2 'Fixing...'
+ patch --forward --strip=1 --input="${srcdir}/netatalk-invalid_dircache_entries.patch"
+ patch --forward --strip=1 --input="${srcdir}/netatalk-current_vol.patch"
+ patch --forward --strip=0 --input="${srcdir}/netatalk-uams_randnum.patch"
+ patch --forward --strip=0 --input="${srcdir}/netatalk-uams_dhx_passwd.patch"
+ patch --forward --strip=0 --input="${srcdir}/netatalk-uams_dhx_pam.patch"
+ patch --forward --strip=0 --input="${srcdir}/netatalk-papd_print_cups.patch"
+ sed -i 's/#include <unistd.h>/#include <stdlib.h>\n#include <unistd.h>/' contrib/a2boot/a2boot.c
+ sed -i 's:/lib:/usr/lib:' distrib/initscripts/Makefile.{am,in}
+ msg2 'Configuring...'
+ CFLAGS="-O -I/usr/include/tirpc" CPPFLAGS="-DNEED_RQUOTA -D_IPP_PRIVATE_STRUCTURES" LIBS="-ltirpc" ./configure --prefix=/usr --localstatedir=/var --libexecdir='${libdir}' \
+ --disable-static --enable-shared --with-cracklib --with-cnid-cdb-backend --enable-systemd --enable-fhs --enable-ddp --enable-srvloc --enable-timelord --enable-cups --enable-a2boot --enable-tcp-wrappers
+ msg2 'Making...'
+ make
+}
+package() {
+ cd netatalk-$pkgver
+ msg2 'Building...'
+ make DESTDIR="$pkgdir" install
+ msg2 'Moving Files...'
+ rm "$pkgdir"/usr/include/netatalk/at.h
+}
diff --git a/netatalk-current_vol.patch b/netatalk-current_vol.patch
new file mode 100644
index 000000000000..cdd4f570481d
--- /dev/null
+++ b/netatalk-current_vol.patch
@@ -0,0 +1,10 @@
+--- a/etc/afpd/volume.h
++++ b/etc/afpd/volume.h
+@@ -36,6 +36,6 @@
+ /* netatalk functions */
+ extern void close_all_vol (void);
+
+-struct vol *current_vol; /* last volume from getvolbyvid() */
++extern struct vol *current_vol; /* last volume from getvolbyvid() */
+
+ #endif
diff --git a/netatalk-ddp.install b/netatalk-ddp.install
new file mode 100644
index 000000000000..1f9e26cd7d3a
--- /dev/null
+++ b/netatalk-ddp.install
@@ -0,0 +1,15 @@
+post_install() {
+ post_upgrade
+}
+post_upgrade() {
+ if [ "`grep -E '(cnid|atalkd|afpd)' /etc/rc.conf`" ];then
+ echo '>>> Detected old netatalk daemon entries in';
+ echo '>>> /etc/rc.conf, please replace these with';
+ echo '>>> "netatalk" before restarting!';
+ echo '>>>';
+ if [ -f /etc/avahi/services/adisk.service ] ||
+ [ -f /etc/avahi/services/afpd.service ];then
+ echo '>>> Detected old netatalk service files in';
+ echo '>>> /etc/avahi/services, please delete these';
+ echo '>>> before restarting!';fi
+}
diff --git a/netatalk-invalid_dircache_entries.patch b/netatalk-invalid_dircache_entries.patch
new file mode 100644
index 000000000000..8652b68ca154
--- /dev/null
+++ b/netatalk-invalid_dircache_entries.patch
@@ -0,0 +1,22 @@
+From 32df6e155ccfc83216321925273c3e75e631ebe6 Mon Sep 17 00:00:00 2001
+From: Andrew Bauer <zonexpertconsulting@outlook.com>
+Date: Wed, 22 Jan 2020 09:59:47 -0600
+Subject: [PATCH] fix ftbs multiple def of invalid_dircache_entries
+
+---
+ etc/afpd/directory.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/etc/afpd/directory.h b/etc/afpd/directory.h
+index eb89c606..81bfa9cb 100644
+--- a/etc/afpd/directory.h
++++ b/etc/afpd/directory.h
+@@ -91,7 +91,7 @@ struct maccess {
+ #define AR_UWRITE (1<<2)
+ #define AR_UOWN (1<<7)
+
+-q_t *invalid_dircache_entries;
++extern q_t *invalid_dircache_entries;
+
+ typedef int (*dir_loop)(struct dirent *, char *, void *);
+
diff --git a/netatalk-papd_print_cups.patch b/netatalk-papd_print_cups.patch
new file mode 100644
index 000000000000..49915b2ed5cf
--- /dev/null
+++ b/netatalk-papd_print_cups.patch
@@ -0,0 +1,123 @@
+$NetBSD: patch-etc_papd_print_cups.c,v 1.3 2019/11/23 17:55:02 hauke Exp $
+
+Deprecated functions: Remove obsolete define, and disable compiler
+errors for deprecation warnings, as seen in the darktable print code.
+
+Accessors: Cups has abstracted away access to ipp_t fields, use
+accessor functions.
+
+--- etc/papd/print_cups.c.orig 2017-07-09 11:03:31.000000000 +0000
++++ etc/papd/print_cups.c
+@@ -39,11 +39,11 @@
+
+ #ifdef HAVE_CUPS
+
+-/* enable pre-1.6 CUPS API for now */
+-#define _PPD_DEPRECATED
+-
+-/* expose structs that are private post-1.5 CUPS */
+-#define _IPP_PRIVATE_STRUCTURES 1
++/*
++ * Do not error out on deprecation messages
++ * -- darktable does this in their "src/common/cups_print.c"
++ */
++#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
+ #include <cups/ipp.h>
+ #include <cups/cups.h>
+@@ -61,6 +61,11 @@
+ #define MAXCHOOSERLEN 31
+ #define HTTP_MAX_URI 1024
+
++/* Deal with post-1.7 deprecated httpConnect() */
++#define httpConnect(host, port) httpConnect2(host, port, NULL, AF_UNSPEC, HTTP_ENCRYPTION_IF_REQUESTED, 1, 1000, NULL)
++
++/* XXX Also: cupsGetPPD() */
++
+ static const char* cups_status_msg[] = {
+ "status: busy; info: \"%s\" is rejecting jobs; ",
+ "status: idle; info: \"%s\" is stopped, accepting jobs ;",
+@@ -136,12 +141,8 @@ cups_printername_ok(char *name)
+ * requested-attributes
+ * printer-uri
+ */
+-
+- request = ippNew();
+-
+- request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
+- request->request.op.request_id = 1;
+-
++ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
++
+ language = cupsLangDefault();
+
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
+@@ -172,10 +173,11 @@ cups_printername_ok(char *name)
+
+ httpClose(http);
+
+- if (response->request.status.status_code >= IPP_OK_CONFLICT)
++ if ( cupsLastError() >= IPP_OK_CONFLICT)
+ {
+ LOG(log_error, logtype_papd, "Unable to get printer status for %s - %s", name,
+- ippErrorString(response->request.status.status_code));
++ ippErrorString(cupsLastError()));
++
+ ippDelete(response);
+ return (0);
+ }
+@@ -249,10 +251,7 @@ cups_get_printer_status (struct printer
+ * printer-uri
+ */
+
+- request = ippNew();
+-
+- request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
+- request->request.op.request_id = 1;
++ request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES);
+
+ language = cupsLangDefault();
+
+@@ -282,10 +281,11 @@ cups_get_printer_status (struct printer
+ return (0);
+ }
+
+- if (response->request.status.status_code >= IPP_OK_CONFLICT)
++ if (cupsLastError() >= IPP_OK_CONFLICT)
+ {
+- LOG(log_error, logtype_papd, "Unable to get printer status for %s - %s", pr->p_printer,
+- ippErrorString(response->request.status.status_code));
++ LOG(log_error, logtype_papd, "Unable to get printer status for %s - %s", pr->p_printer,
++ ippErrorString(cupsLastError()));
++
+ ippDelete(response);
+ httpClose(http);
+ return (0);
+@@ -299,9 +299,9 @@ cups_get_printer_status (struct printer
+
+ if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL)
+ {
+- if (attr->values[0].integer == IPP_PRINTER_STOPPED)
++ if (ippGetInteger(attr, 0) == IPP_PRINTER_STOPPED)
+ status = 1;
+- else if (attr->values[0].integer == IPP_NOT_ACCEPTING)
++ else if (ippGetInteger(attr,0) == IPP_NOT_ACCEPTING)
+ status = 0;
+ else
+ status = 2;
+@@ -309,14 +309,14 @@ cups_get_printer_status (struct printer
+
+ if ((attr = ippFindAttribute(response, "printer-is-accepting-jobs", IPP_TAG_BOOLEAN)) != NULL)
+ {
+- if ( attr->values[0].integer == 0 )
++ if ( ippGetInteger(attr, 0) == 0 )
+ status = 0;
+ }
+
+ snprintf ( pr->p_status, 255, cups_status_msg[status], pr->p_printer );
+
+ if ((attr = ippFindAttribute(response, "printer-state-message", IPP_TAG_TEXT)) != NULL)
+- strncat ( pr->p_status, attr->values[0].string.text, 255-strlen(pr->p_status));
++ strncat ( pr->p_status, ippGetString(attr, 0, NULL), 255-strlen(pr->p_status));
+
+ ippDelete(response);
diff --git a/netatalk-uams_dhx_pam.patch b/netatalk-uams_dhx_pam.patch
new file mode 100644
index 000000000000..e2090cf3192e
--- /dev/null
+++ b/netatalk-uams_dhx_pam.patch
@@ -0,0 +1,60 @@
+$NetBSD: patch-etc_uams_uams__dhx__pam.c,v 1.1 2019/06/02 20:03:32 rjs Exp $
+
+--- etc/uams/uams_dhx_pam.c.orig 2014-03-16 11:17:48.000000000 +0000
++++ etc/uams/uams_dhx_pam.c
+@@ -190,6 +190,7 @@ static int dhx_setup(void *obj, char *ib
+ u_int16_t sessid;
+ size_t i;
+ BIGNUM *bn, *gbn, *pbn;
++ const BIGNUM *pub_key;
+ DH *dh;
+
+ /* get the client's public key */
+@@ -233,9 +234,16 @@ static int dhx_setup(void *obj, char *ib
+ return AFPERR_PARAM;
+ }
+
++ if (!DH_set0_pqg(dh, pbn, NULL, gbn)) {
++ BN_free(pbn);
++ BN_free(gbn);
++ /* Log Entry */
++ LOG(log_info, logtype_uams, "uams_dhx_pam.c :PAM DH_set0_pqg() mysteriously failed -- %s", strerror(errno));
++ /* Log Entry */
++ goto pam_fail;
++ }
++
+ /* generate key and make sure that we have enough space */
+- dh->p = pbn;
+- dh->g = gbn;
+ if (DH_generate_key(dh) == 0) {
+ unsigned long dherror;
+ char errbuf[256];
+@@ -249,16 +257,17 @@ static int dhx_setup(void *obj, char *ib
+ ERR_free_strings();
+ goto pam_fail;
+ }
+- if (BN_num_bytes(dh->pub_key) > KEYSIZE) {
++ DH_get0_key(dh, &pub_key, NULL);
++ if (BN_num_bytes(pub_key) > KEYSIZE) {
+ LOG(log_info, logtype_uams, "uams_dhx_pam.c :PAM: Err Generating Key -- Not enough Space? -- %s", strerror(errno));
+ goto pam_fail;
+ }
+
+ /* figure out the key. store the key in rbuf for now. */
+- i = DH_compute_key(rbuf, bn, dh);
++ i = DH_compute_key((unsigned char *)rbuf, bn, dh);
+
+ /* set the key */
+- CAST_set_key(&castkey, i, rbuf);
++ CAST_set_key(&castkey, i, (unsigned char *)rbuf);
+
+ /* session id. it's just a hashed version of the object pointer. */
+ sessid = dhxhash(obj);
+@@ -267,7 +276,7 @@ static int dhx_setup(void *obj, char *ib
+ *rbuflen += sizeof(sessid);
+
+ /* public key */
+- BN_bn2bin(dh->pub_key, rbuf);
++ BN_bn2bin(pub_key, (unsigned char *)rbuf);
+ rbuf += KEYSIZE;
+ *rbuflen += KEYSIZE;
diff --git a/netatalk-uams_dhx_passwd.patch b/netatalk-uams_dhx_passwd.patch
new file mode 100644
index 000000000000..3778054d2e69
--- /dev/null
+++ b/netatalk-uams_dhx_passwd.patch
@@ -0,0 +1,42 @@
+$NetBSD: patch-etc_uams_uams__dhx__passwd.c,v 1.1 2019/06/02 20:03:32 rjs Exp $
+
+--- etc/uams/uams_dhx_passwd.c.orig 2014-03-16 11:17:48.000000000 +0000
++++ etc/uams/uams_dhx_passwd.c
+@@ -81,6 +81,7 @@ static int pwd_login(void *obj, char *us
+ struct spwd *sp;
+ #endif /* SHADOWPW */
+ BIGNUM *bn, *gbn, *pbn;
++ const BIGNUM *pub_key;
+ u_int16_t sessid;
+ size_t i;
+ DH *dh;
+@@ -144,10 +145,18 @@ static int pwd_login(void *obj, char *us
+ return AFPERR_PARAM;
+ }
+
++ if (!DH_set0_pqg(dh, pbn, NULL, gbn)) {
++ BN_free(pbn);
++ BN_free(gbn);
++ goto passwd_fail;
++ }
++
+ /* generate key and make sure we have enough space */
+- dh->p = pbn;
+- dh->g = gbn;
+- if (!DH_generate_key(dh) || (BN_num_bytes(dh->pub_key) > KEYSIZE)) {
++ if (!DH_generate_key(dh)) {
++ goto passwd_fail;
++ }
++ DH_get0_key(dh, &pub_key, NULL);
++ if (BN_num_bytes(pub_key) > KEYSIZE) {
+ goto passwd_fail;
+ }
+
+@@ -164,7 +173,7 @@ static int pwd_login(void *obj, char *us
+ *rbuflen += sizeof(sessid);
+
+ /* send our public key */
+- BN_bn2bin(dh->pub_key, (unsigned char *)rbuf);
++ BN_bn2bin(pub_key, (unsigned char *)rbuf);
+ rbuf += KEYSIZE;
+ *rbuflen += KEYSIZE;
diff --git a/netatalk-uams_randnum.patch b/netatalk-uams_randnum.patch
new file mode 100644
index 000000000000..f1e3e1efc612
--- /dev/null
+++ b/netatalk-uams_randnum.patch
@@ -0,0 +1,104 @@
+$NetBSD: patch-etc_uams_uams__randnum.c,v 1.1 2019/06/02 20:03:32 rjs Exp $
+
+--- etc/uams/uams_randnum.c.orig 2017-07-09 11:03:31.000000000 +0000
++++ etc/uams/uams_randnum.c
+@@ -55,8 +55,8 @@ char *strchr (), *strrchr ();
+
+ #define PASSWDLEN 8
+
+-static C_Block seskey;
+-static Key_schedule seskeysched;
++static DES_cblock seskey;
++static DES_key_schedule seskeysched;
+ static struct passwd *randpwd;
+ static u_int8_t randbuf[8];
+
+@@ -146,7 +146,7 @@ static int afppasswd(const struct passwd
+ {
+ u_int8_t key[DES_KEY_SZ*2];
+ char buf[MAXPATHLEN + 1], *p;
+- Key_schedule schedule;
++ DES_key_schedule schedule;
+ FILE *fp;
+ unsigned int i, j;
+ int keyfd = -1, err = 0;
+@@ -203,17 +203,17 @@ afppasswd_found:
+ key[j] = (unhex(key[i]) << 4) | unhex(key[i + 1]);
+ if (j <= DES_KEY_SZ)
+ memset(key + j, 0, sizeof(key) - j);
+- key_sched((C_Block *) key, schedule);
++ DES_key_sched((DES_cblock *) key, &schedule);
+ memset(key, 0, sizeof(key));
+
+ if (set) {
+ /* NOTE: this takes advantage of the fact that passwd doesn't
+ * get used after this call if it's being set. */
+- ecb_encrypt((C_Block *) passwd, (C_Block *) passwd, schedule,
++ DES_ecb_encrypt((DES_cblock *) passwd, (DES_cblock *) passwd, &schedule,
+ DES_ENCRYPT);
+ } else {
+ /* decrypt the password */
+- ecb_encrypt((C_Block *) p, (C_Block *) p, schedule, DES_DECRYPT);
++ DES_ecb_encrypt((DES_cblock *) p, (DES_cblock *) p, &schedule, DES_DECRYPT);
+ }
+ memset(&schedule, 0, sizeof(schedule));
+ }
+@@ -362,10 +362,10 @@ static int randnum_logincont(void *obj,
+
+ /* encrypt. this saves a little space by using the fact that
+ * des can encrypt in-place without side-effects. */
+- key_sched((C_Block *) seskey, seskeysched);
++ DES_key_sched((DES_cblock *) seskey, &seskeysched);
+ memset(seskey, 0, sizeof(seskey));
+- ecb_encrypt((C_Block *) randbuf, (C_Block *) randbuf,
+- seskeysched, DES_ENCRYPT);
++ DES_ecb_encrypt((DES_cblock *) randbuf, (DES_cblock *) randbuf,
++ &seskeysched, DES_ENCRYPT);
+ memset(&seskeysched, 0, sizeof(seskeysched));
+
+ /* test against what the client sent */
+@@ -406,10 +406,10 @@ static int rand2num_logincont(void *obj,
+ seskey[i] <<= 1;
+
+ /* encrypt randbuf */
+- key_sched((C_Block *) seskey, seskeysched);
++ DES_key_sched((DES_cblock *) seskey, &seskeysched);
+ memset(seskey, 0, sizeof(seskey));
+- ecb_encrypt( (C_Block *) randbuf, (C_Block *) randbuf,
+- seskeysched, DES_ENCRYPT);
++ DES_ecb_encrypt((DES_cblock *) randbuf, (DES_cblock *) randbuf,
++ &seskeysched, DES_ENCRYPT);
+
+ /* test against client's reply */
+ if (memcmp(randbuf, ibuf, sizeof(randbuf))) { /* != */
+@@ -421,8 +421,8 @@ static int rand2num_logincont(void *obj,
+ memset(randbuf, 0, sizeof(randbuf));
+
+ /* encrypt client's challenge and send back */
+- ecb_encrypt( (C_Block *) ibuf, (C_Block *) rbuf,
+- seskeysched, DES_ENCRYPT);
++ DES_ecb_encrypt((DES_cblock *) ibuf, (DES_cblock *) rbuf,
++ &seskeysched, DES_ENCRYPT);
+ memset(&seskeysched, 0, sizeof(seskeysched));
+ *rbuflen = sizeof(randbuf);
+
+@@ -457,15 +457,15 @@ static int randnum_changepw(void *obj, c
+ return err;
+
+ /* use old passwd to decrypt new passwd */
+- key_sched((C_Block *) seskey, seskeysched);
++ DES_key_sched((DES_cblock *) seskey, &seskeysched);
+ ibuf += PASSWDLEN; /* new passwd */
+ ibuf[PASSWDLEN] = '\0';
+- ecb_encrypt( (C_Block *) ibuf, (C_Block *) ibuf, seskeysched, DES_DECRYPT);
++ DES_ecb_encrypt((DES_cblock *) ibuf, (DES_cblock *) ibuf, &seskeysched, DES_DECRYPT);
+
+ /* now use new passwd to decrypt old passwd */
+- key_sched((C_Block *) ibuf, seskeysched);
++ DES_key_sched((DES_cblock *) ibuf, &seskeysched);
+ ibuf -= PASSWDLEN; /* old passwd */
+- ecb_encrypt((C_Block *) ibuf, (C_Block *) ibuf, seskeysched, DES_DECRYPT);
++ DES_ecb_encrypt((DES_cblock *) ibuf, (DES_cblock *) ibuf, &seskeysched, DES_DECRYPT);
+ if (memcmp(seskey, ibuf, sizeof(seskey)))
+ err = AFPERR_NOTAUTH;
+ else if (memcmp(seskey, ibuf + PASSWDLEN, sizeof(seskey)) == 0)