/* * Function: sys_remove_ea * * Purpose: remove a native EA * * Arguments: * * vol (r) current volume * uname (r) filename * attruname (r) EA name * oflag (r) link and create flag * fd (r) file descriptor * * Returns: AFP code: AFP_OK on success or appropiate AFP error code * * Effects: * * Removes EA attruname from file uname. */ int sys_remove_ea(VFS_FUNC_ARGS_EA_REMOVE) { int ret; /* PBaranski fix */ if ( fd != -1) { LOG(log_debug, logtype_afpd, "sys_remove_ea(%s): file is already opened", uname); ret = sys_fremovexattr(fd, uname, attruname); } else { if ((oflag & O_NOFOLLOW) ) { ret = sys_lremovexattr(uname, attruname); } else { ret = sys_removexattr(uname, attruname); } } /* PBaranski fix */ if (ret == -1) { switch(errno) { case OPEN_NOFOLLOW_ERRNO: /* its a symlink and client requested O_NOFOLLOW */ LOG(log_debug, logtype_afpd, "sys_remove_ea(%s/%s): symlink with kXAttrNoFollow", uname); return AFP_OK; default: LOG(log_debug, logtype_afpd, "sys_remove_ea(%s/%s): error: %s", uname, attruname, strerror(errno)); return AFPERR_MISC; } } return AFP_OK; }
/* * Function: sys_remove_ea * * Purpose: remove a native EA * * Arguments: * * vol (r) current volume * uname (r) filename * attruname (r) EA name * oflag (r) link and create flag * * Returns: AFP code: AFP_OK on success or appropiate AFP error code * * Effects: * * Removes EA attruname from file uname. */ int sys_remove_ea(VFS_FUNC_ARGS_EA_REMOVE) { int ret; if ((oflag & O_NOFOLLOW) ) { ret = sys_lremovexattr(uname, attruname); } else { ret = sys_removexattr(uname, attruname); } if (ret == -1) { switch(errno) { case OPEN_NOFOLLOW_ERRNO: /* its a symlink and client requested O_NOFOLLOW */ LOG(log_debug, logtype_afpd, "sys_remove_ea(%s/%s): encountered symlink with kXAttrNoFollow", uname); return AFP_OK; case EACCES: LOG(log_debug, logtype_afpd, "sys_remove_ea(%s/%s): error: %s", uname, attruname, strerror(errno)); return AFPERR_ACCESS; default: LOG(log_error, logtype_afpd, "sys_remove_ea(%s/%s): error: %s", uname, attruname, strerror(errno)); return AFPERR_MISC; } } return AFP_OK; }
int vfswrap_lremovexattr(struct vfs_handle_struct *handle, struct connection_struct *conn,const char *path, const char *name) { return sys_lremovexattr(path, name); }
static int vfswrap_lremovexattr(struct vfs_handle_struct *handle, const char *path, const char *name) { return sys_lremovexattr(path, name); }