libisofs/libisofs/aaip-os-dummy.c

202 lines
5.1 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
aaip-os-dummy.c
Idle placeholder for:
Arbitrary Attribute Interchange Protocol , system adapter for getting and
setting of ACLs and xattr.
See aaip-os-linux.c for a real implementation of this interface.
To be included by aaip_0_2.c
Copyright (c) 2009 - 2025 Thomas Schmitt
This file is part of the libisofs project; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 2
or later as published by the Free Software Foundation.
See COPYING file for details.
*/
#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif
#include <ctype.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/stat.h>
/* ------------------------------ Inquiry --------------------------------- */
/* See also API iso_local_attr_support().
@param flag
Bitfield for control purposes
bit0= inquire availability of ACL
bit1= inquire availability of xattr
bit2 - bit7= Reserved for future types.
It is permissibile to set them to 1 already now.
bit8 and higher: reserved, submit 0
@return
Bitfield corresponding to flag.
bit0= ACL adapter is enabled
bit1= xattr adapter is enabled
bit2= Linux-like file attribute flags (chattr) adapter is enabled
bit3= inquire availability of XFS-style project id
bit4 - bit7= Reserved for future types.
bit8 and higher: reserved, do not interpret these
*/
int aaip_local_attr_support(int flag)
{
return(0);
}
/* ------------------------------ Getters --------------------------------- */
/* Obtain the ACL of the given file in long text form.
@return 0 ACL support not enabled at compile time
*/
int aaip_get_acl_text(char *path, char **text, int flag)
{
return(0);
}
/* Obtain the Extended Attributes and/or the ACLs of the given file in a form
that is ready for aaip_encode().
@return 1 ok
*/
int aaip_get_attr_list(char *path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag)
{
*num_attrs= 0;
*names= NULL;
*value_lengths= NULL;
*values= NULL;
return(1);
}
/* Obtain the file attribute flags of the given file as bit array in uint64_t.
The bit numbers are compatible to the FS_*_FL definitions in Linux.
*/
int aaip_get_lfa_flags(char *path, uint64_t *lfa_flags, int *max_bit,
int *os_errno, int flag)
{
*lfa_flags= 0;
*max_bit= -1;
*os_errno= 0;
return(0);
}
/* Obtain the project id for XFS-style quota management.
*/
int aaip_get_projid(char *path, uint32_t *projid, int *os_errno, int flag)
{
*projid= 0;
*os_errno= 0;
return(0);
}
/* ------------------------------ Setters --------------------------------- */
/* Set the ACL of the given file to a given list in long text form.
@return 0 ACL support not enabled at compile time
*/
int aaip_set_acl_text(char *path, char *text, int flag)
{
return(0);
}
/* Bring the given attributes and/or ACLs into effect with the given file.
@param flag Bitfield for control purposes
bit0= decode and set ACLs
bit1= first clear all existing attributes of the file
bit2= do not set attributes other than ACLs
@return 1 success (there was nothing to do)
-6 support of xattr not enabled at compile time
-7 support of ACL not enabled at compile time
*/
int aaip_set_attr_list(char *path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int *errnos,
int flag)
{
size_t i;
for(i= 0; i < num_attrs; i++)
errnos[i]= 0;
for(i= 0; i < num_attrs; i++) {
if(names[i] == NULL || values[i] == NULL)
continue;
if(names[i][0] == 0) { /* ACLs */
if(flag & 1)
return(-7);
continue;
}
/* Extended Attribute */
if(flag & 4)
continue;
if(!(flag & 8))
if(strncmp(names[i], "user.", 5))
continue;
return(-6);
}
if(flag & 2)
return(-6);
return(1);
}
int aaip_set_lfa_flags(char *path, uint64_t lfa_flags, int max_bit,
int *os_errno, int flag)
{
*os_errno= 0;
return(0);
}
/* Set the project id for XFS-style quota management.
*/
int aaip_set_projid(char *path, uint32_t projid, int *os_errno, int flag)
{
*os_errno= 0;
return(0);
}
/* -------- API for creating device files in the local filesystem --------- */
/* API */
/* @param flag bit0= do not issue error messages
*/
int iso_local_create_dev(char *disk_path, mode_t st_mode, dev_t dev,
int *os_errno, int flag)
{
/* From man mknod:
POSIX.1-2001 says: "The only portable use of mknod() is to create a
FIFO-special file. If mode is not S_IFIFO or dev is not 0, the behav
ior of mknod() is unspecified."
*/
*os_errno= 0;
if(!(flag & 1))
iso_msg_submit(-1, ISO_DEV_NO_CREATION, 0,
"File \"%s\" cannot be created because device file creation is not enabled",
disk_path);
return ISO_DEV_NO_CREATION;
}