#ifdef HAVE_SOLARIS_ACLS
#include <sys/acl.h>
#endif /* HAVE_SOLARIS_ACLS */
+#ifdef HAVE_FREEBSD_SUNACL
+#include <sunacl.h>
+#endif
#ifdef HAVE_POSIX_ACLS
#include <sys/types.h>
if ((vol->vol->v_flags & AFPVOL_NODEV))
flags |= CNID_FLAG_NODEV;
- if ((vol->vol->v_cdb = cnid_open(vol->vol->v_path,
- 0000,
+ if ((vol->vol->v_cdb = cnid_open(vol->vol,
"dbd",
- flags,
- vol->vol->v_cnidserver,
- vol->vol->v_cnidport)) == NULL)
+ flags)) == NULL)
ERROR("Cant initialize CNID database connection for %s", vol->vol->v_path);
cnid_getstamp(vol->vol->v_cdb,
void closevol(afpvol_t *vol)
{
- if (vol->vol->v_cdb) {
- cnid_close(vol->vol->v_cdb);
- vol->vol->v_cdb = NULL;
+ if (vol->vol) {
+ if (vol->vol->v_cdb) {
+ cnid_close(vol->vol->v_cdb);
+ vol->vol->v_cdb = NULL;
+ }
}
memset(vol, 0, sizeof(afpvol_t));
}
if ( ! svol->vol->v_path) {
/* no source volume: escape special chars (eg ':') */
from = dvol->vol->v_volcharset; /* src = dst charset */
- flags |= CONV_ESCAPEHEX;
+ if (dvol->vol->v_adouble == AD_VERSION2)
+ flags |= CONV_ESCAPEHEX;
} else {
from = svol->vol->v_volcharset;
}
return 0;
}
-/*!
- * ResolvesCNID of a given paths
- *
- * path might be:
- * (a) relative:
- * "dir/subdir" with cwd: "/afp_volume/topdir"
- * (b) absolute:
- * "/afp_volume/dir/subdir"
- *
- * path MUST be pointing inside vol, this is usually the case as vol has been build from
- * path using loadvolinfo and friends.
- *
- * @param vol (r) pointer to afpvol_t
- * @param path (r) path, see above
- * @param did (rw) parent CNID of returned CNID
- *
- * @returns CNID of path
- */
-cnid_t cnid_for_path(const afpvol_t *vol,
- const char *path,
- cnid_t *did)
-{
- EC_INIT;
-
- cnid_t cnid;
- bstring rpath = NULL;
- bstring statpath = NULL;
- struct bstrList *l = NULL;
- struct stat st;
-
- cnid = htonl(2);
-
- EC_NULL(rpath = rel_path_in_vol(path, vol->vol->v_path));
- EC_NULL(statpath = bfromcstr(vol->vol->v_path));
- EC_ZERO(bcatcstr(statpath, "/"));
-
- l = bsplit(rpath, '/');
- for (int i = 0; i < l->qty ; i++) {
- *did = cnid;
-
- EC_ZERO(bconcat(statpath, l->entry[i]));
- EC_ZERO_LOGSTR(lstat(cfrombstr(statpath), &st),
- "lstat(rpath: %s, elem: %s): %s: %s",
- cfrombstr(rpath), cfrombstr(l->entry[i]),
- cfrombstr(statpath), strerror(errno));
-
- if ((cnid = cnid_add(vol->vol->v_cdb,
- &st,
- *did,
- cfrombstr(l->entry[i]),
- blength(l->entry[i]),
- 0)) == CNID_INVALID) {
- EC_FAIL;
- }
- EC_ZERO(bcatcstr(statpath, "/"));
- }
-
-EC_CLEANUP:
- bdestroy(rpath);
- bstrListDestroy(l);
- bdestroy(statpath);
- if (ret != 0)
- return CNID_INVALID;
-
- return cnid;
-}
-
/*!
* Resolves CNID of a given paths parent directory
*