openbsd-ports/net/netatalk/patches/patch-etcafpd-filedirc

314 lines
8.2 KiB
Plaintext

--- etc/afpd/filedir.c.orig Sun Aug 17 09:20:09 1997
+++ etc/afpd/filedir.c Wed Nov 24 15:15:48 1999
@@ -13,7 +13,8 @@
#include <atalk/afp.h>
#include <stdio.h>
#include <stdlib.h>
-#include <strings.h>
+#include <unistd.h>
+#include <string.h>
#include <fcntl.h>
#include <dirent.h>
@@ -27,41 +28,41 @@
char getwdbuf[ MAXPATHLEN ];
+int
afp_getfildirparams( ibuf, ibuflen, rbuf, rbuflen )
char *ibuf, *rbuf;
int ibuflen, *rbuflen;
{
struct stat st;
- struct adouble ad;
struct vol *vol;
struct dir *directory;
- int did, buflen, adret, ret;
+ int did, buflen, ret;
char *path;
- u_short fbitmap, dbitmap, vid;
+ u_int16_t fbitmap, dbitmap, vid;
ibuf += 2;
- bcopy( ibuf, &vid, sizeof( u_short ));
- ibuf += sizeof( u_short );
+ memcpy( &vid, ibuf, sizeof( vid ));
+ ibuf += sizeof( vid );
if (( vol = getvolbyvid( vid )) == NULL ) {
*rbuflen = 0;
return( AFPERR_PARAM );
}
- bcopy( ibuf, &did, sizeof( int ));
- ibuf += sizeof( int );
+ memcpy( &did, ibuf, sizeof( did ));
+ ibuf += sizeof( did );
if (( directory = dirsearch( vol, did )) == NULL ) {
*rbuflen = 0;
return( AFPERR_NOOBJ );
}
- bcopy( ibuf, &fbitmap, sizeof( u_short ));
+ memcpy( &fbitmap, ibuf, sizeof( fbitmap ));
fbitmap = ntohs( fbitmap );
- ibuf += sizeof( u_short );
- bcopy( ibuf, &dbitmap, sizeof( u_short ));
+ ibuf += sizeof( fbitmap );
+ memcpy( &dbitmap, ibuf, sizeof( dbitmap ));
dbitmap = ntohs( dbitmap );
- ibuf += sizeof( u_short );
+ ibuf += sizeof( dbitmap );
if (( path = cname( vol, directory, &ibuf )) == NULL ) {
*rbuflen = 0;
@@ -73,34 +74,35 @@
return( AFPERR_NOOBJ );
}
- buflen = *rbuflen - 3 * sizeof( u_short );
+ buflen = *rbuflen - 3 * sizeof( u_int16_t );
if ( st.st_mode & S_IFDIR ) {
if (( ret = getdirparams( dbitmap, ".", curdir,
- &st, rbuf + 3 * sizeof( u_short ), &buflen )) != AFP_OK ) {
+ &st, rbuf + 3 * sizeof( u_int16_t ), &buflen )) != AFP_OK ) {
*rbuflen = 0;
return( ret );
}
- *(rbuf + 2 * sizeof( u_short )) = 1<<7; /* this is a directory */
+ *(rbuf + 2 * sizeof( u_int16_t )) = 1<<7; /* this is a directory */
} else {
if (( ret = getfilparams( fbitmap, path, curdir, &st,
- rbuf + 3 * sizeof( u_short ), &buflen )) != AFP_OK ) {
+ rbuf + 3 * sizeof( u_int16_t ), &buflen )) != AFP_OK ) {
*rbuflen = 0;
return( ret );
}
- *(rbuf + 2 * sizeof( u_short )) = 0; /* this is a file */
+ *(rbuf + 2 * sizeof( u_int16_t )) = 0; /* this is a file */
}
- *rbuflen = buflen + 3 * sizeof( u_short );
+ *rbuflen = buflen + 3 * sizeof( u_int16_t );
fbitmap = htons( fbitmap );
- bcopy( &fbitmap, rbuf, sizeof( u_short ));
- rbuf += sizeof( u_short );
+ memcpy( rbuf, &fbitmap, sizeof( fbitmap ));
+ rbuf += sizeof( fbitmap );
dbitmap = htons( dbitmap );
- bcopy( &dbitmap, rbuf, sizeof( u_short ));
- rbuf += sizeof( u_short ) + sizeof( u_char );
+ memcpy( rbuf, &dbitmap, sizeof( dbitmap ));
+ rbuf += sizeof( dbitmap ) + sizeof( u_char );
*rbuf = 0;
return( AFP_OK );
}
+int
afp_setfildirparams( ibuf, ibuflen, rbuf, rbuflen )
char *ibuf, *rbuf;
int ibuflen, *rbuflen;
@@ -109,28 +111,29 @@
struct vol *vol;
struct dir *dir;
char *path;
- u_short vid, bitmap;
- int did, rc;
+ u_int16_t vid, bitmap;
+ int rc;
+ int32_t did;
*rbuflen = 0;
ibuf += 2;
- bcopy( ibuf, &vid, sizeof( u_short ));
- ibuf += sizeof( u_short );
+ memcpy( &vid, ibuf, sizeof( vid ));
+ ibuf += sizeof( vid );
if (( vol = getvolbyvid( vid )) == NULL ) {
return( AFPERR_PARAM );
}
- bcopy( ibuf, &did, sizeof( int ));
- ibuf += sizeof( int );
+ memcpy( &did, ibuf, sizeof( did ));
+ ibuf += sizeof( did );
if (( dir = dirsearch( vol, did )) == NULL ) {
return( AFPERR_NOOBJ );
}
- bcopy( ibuf, &bitmap, sizeof( u_short ));
+ memcpy( &bitmap, ibuf, sizeof( bitmap ));
bitmap = ntohs( bitmap );
- ibuf += sizeof( u_short );
+ ibuf += sizeof( bitmap );
if (( path = cname( vol, dir, &ibuf )) == NULL ) {
return( AFPERR_NOOBJ );
@@ -158,6 +161,7 @@
return( rc );
}
+int
afp_rename( ibuf, ibuflen, rbuf, rbuflen )
char *ibuf, *rbuf;
int ibuflen, *rbuflen;
@@ -168,21 +172,22 @@
struct dir *dir, *odir;
char *path, *upath, newpath[ MAXNAMLEN ];
char newadpath[ MAXNAMLEN ];
- int did, isdir = 0;
+ int32_t did;
+ int isdir = 0;
int plen;
- u_short vid;
+ u_int16_t vid;
*rbuflen = 0;
ibuf += 2;
- bcopy( ibuf, &vid, sizeof( u_short ));
- ibuf += sizeof( u_short );
+ memcpy( &vid, ibuf, sizeof( vid ));
+ ibuf += sizeof( vid );
if (( vol = getvolbyvid( vid )) == NULL ) {
return( AFPERR_PARAM );
}
- bcopy( ibuf, &did, sizeof( int ));
- ibuf += sizeof( int );
+ memcpy( &did, ibuf, sizeof( did ));
+ ibuf += sizeof( did );
if (( dir = dirsearch( vol, did )) == NULL ) {
return( AFPERR_NOOBJ );
}
@@ -216,7 +221,7 @@
}
#endif notdef
- strcpy( newpath, mtoupath( ibuf ));
+ (void)strlcpy( newpath, mtoupath( ibuf ), sizeof(newpath));
if ( stat( newpath, &st ) == 0 ) {
return( AFPERR_EXIST );
}
@@ -234,7 +239,8 @@
}
if ( !isdir ) {
- strcpy( newadpath, ad_path( newpath, 0 ));
+ (void)strlcpy( newadpath, ad_path( newpath, 0 ),
+ sizeof(newadpath));
if ( rename( ad_path( upath, 0 ), newadpath ) < 0 ) {
if ( errno == ENOENT ) { /* no adouble header file */
if (( unlink( newadpath ) < 0 ) && ( errno != ENOENT )) {
@@ -257,11 +263,11 @@
syslog( LOG_ERR, "afp_rename: realloc: %m" );
exit( 1 );
}
- strcpy( odir->d_name, ibuf );
+ (void)strlcpy( odir->d_name, ibuf, (plen + 1) );
}
ad_setentrylen( &ad, ADEID_NAME, plen );
- bcopy( ibuf, ad_entry( &ad, ADEID_NAME ), plen );
+ memcpy( ad_entry( &ad, ADEID_NAME ), ibuf, plen );
ad_flush( &ad, ADFLAGS_HF );
ad_close( &ad, ADFLAGS_HF );
out:
@@ -271,6 +277,7 @@
}
+int
afp_delete( ibuf, ibuflen, rbuf, rbuflen )
char *ibuf, *rbuf;
int ibuflen, *rbuflen;
@@ -278,20 +285,21 @@
struct vol *vol;
struct dir *dir;
char *path;
- int did, rc;
- u_short vid;
+ int32_t did;
+ int rc;
+ u_int16_t vid;
*rbuflen = 0;
ibuf += 2;
- bcopy( ibuf, &vid, sizeof( u_short ));
- ibuf += sizeof( u_short );
+ memcpy( &vid, ibuf, sizeof( vid ));
+ ibuf += sizeof( vid );
if (( vol = getvolbyvid( vid )) == NULL ) {
return( AFPERR_PARAM );
}
- bcopy( ibuf, &did, sizeof( int ));
- ibuf += sizeof( int );
+ memcpy( &did, ibuf, sizeof( did ));
+ ibuf += sizeof( did );
if (( dir = dirsearch( vol, did )) == NULL ) {
return( AFPERR_NOOBJ );
}
@@ -311,6 +319,7 @@
return( rc );
}
+int
afp_moveandrename( ibuf, ibuflen, rbuf, rbuflen )
char *ibuf, *rbuf;
int ibuflen, *rbuflen;
@@ -318,38 +327,39 @@
struct vol *vol;
struct dir *dir, *odir;
char newname[ MAXNAMLEN ], *path, *p;
- int sdid, ddid, isdir = 0, rc;
+ int32_t sdid, ddid;
+ int isdir = 0, rc;
int plen;
- short vid;
+ u_int16_t vid;
*rbuflen = 0;
ibuf += 2;
- bcopy( ibuf, &vid, sizeof( short ));
- ibuf += sizeof( short );
+ memcpy( &vid, ibuf, sizeof( vid ));
+ ibuf += sizeof( vid );
if (( vol = getvolbyvid( vid )) == NULL ) {
return( AFPERR_PARAM );
}
- bcopy( ibuf, &sdid, sizeof( int ));
- ibuf += sizeof( int );
+ memcpy( &sdid, ibuf, sizeof( sdid ));
+ ibuf += sizeof( sdid );
if (( dir = dirsearch( vol, sdid )) == NULL ) {
return( AFPERR_PARAM );
}
- bcopy( ibuf, &ddid, sizeof( int ));
- ibuf += sizeof( int );
+ memcpy( &ddid, ibuf, sizeof( ddid ));
+ ibuf += sizeof( ddid );
if (( path = cname( vol, dir, &ibuf )) == NULL ) {
return( AFPERR_NOOBJ );
}
if ( *path != '\0' ) {
- strcpy( newname, path );
+ (void)strlcpy( newname, path, sizeof(newname) );
p = ctoupath( vol, dir, newname );
} else {
odir = curdir;
- strcpy( newname, odir->d_name );
+ (void)strlcpy( newname, odir->d_name, sizeof(newname) );
p = ctoupath( vol, odir->d_parent, newname );
isdir = 1;
}