int result = AFP_OK;
int ccr;
struct path path;
- char *vpath = vol->v_realpath;
+ char *vpath = vol->v_path;
char *rrbuf = rbuf;
time_t start_time;
int num_rounds = NUM_ROUNDS;
/*
- * $Id: directory.c,v 1.133 2010-02-19 01:26:03 didg Exp $
+ * $Id: directory.c,v 1.134 2010-02-19 10:51:59 franklahm Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
memcpy( p, u, n );
}
if ( d != curdir ) {
- n = strlen( vol->v_realpath );
+ n = strlen( vol->v_path );
if (p -n -1 < path) {
afp_errno = AFPERR_PARAM;
return -1;
}
*--p = '/';
p -= n;
- memcpy( p, vol->v_realpath, n );
+ memcpy( p, vol->v_path, n );
}
if ( (ret = lchdir( p )) != 0 ) {
LOG(log_debug, logtype_afpd, "movecwd('%s'): ret:%d, %u/%s", p, ret, errno, strerror(errno));
/*
- * $Id: filedir.c,v 1.71 2010-02-19 01:26:03 didg Exp $
+ * $Id: filedir.c,v 1.72 2010-02-19 10:51:59 franklahm Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
p -= len;
memcpy( p, u, len );
}
- len = strlen( vol->v_realpath );
+ len = strlen( vol->v_path );
if (p -len -1 < path) {
return NULL;
}
*--p = '/';
p -= len;
- memcpy( p, vol->v_realpath, len );
+ memcpy( p, vol->v_path, len );
return( p );
}
/*
- * $Id: volume.c,v 1.118 2010-02-19 01:26:03 didg Exp $
+ * $Id: volume.c,v 1.119 2010-02-19 10:51:59 franklahm Exp $
*
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
free(vol->v_macname);
vol->v_macname = NULL;
free(vol->v_path);
- free(vol->v_realpath);
free(vol->v_password);
free(vol->v_veto);
free(vol->v_volcodepage);
LOG(log_error, logtype_afpd, "afp_openvol(%s): volume pathlen too long", volume->v_path);
return AFPERR_MISC;
}
- volume->v_realpath = strdup(path);
+
+ /* Normalize volume path */
+#ifdef REALPATH_TAKES_NULL
+ if ((volume->v_path = realpath(path, NULL)) == NULL)
+ return AFPERR_MISC;
+#else
+ if ((volume->v_path = malloc(MAXPATHLEN+1)) == NULL)
+ return AFPERR_MISC;
+ if (realpath(path, volume->v_path) == NULL) {
+ free(volume->v_path);
+ return AFPERR_MISC;
+ }
+ /* Safe some memory */
+ char *tmp;
+ if ((tmp = strdup(volume->v_path)) == NULL) {
+ free(volume->v_path);
+ return AFPERR_MISC;
+ }
+ free(volume->v_path);
+ volume->v_path = tmp;
+#endif
if (volume_codepage(obj, volume) < 0) {
ret = AFPERR_MISC;
/*
- * $Id: volume.h,v 1.14 2010-02-19 01:26:03 didg Exp $
+ * $Id: volume.h,v 1.15 2010-02-19 10:51:59 franklahm Exp $
*
* Copyright (c) 1990,1994 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
u_int16_t v_vid;
int v_flags;
char *v_path;
- char *v_realpath; /* canonical path */
struct dir *v_dir, *v_root;
struct dir *v_curdir; /* cache */
hash_t *v_hash;