Made code branch of Libisofs_with_aaiP unconditional

and removed change marks by (co-)copyright claims.
release-1.5.4.branch
Thomas Schmitt 14 years ago
parent c1ba7d93d9
commit 0e0ecc1d00
  1. 3
      libisofs/buffer.c
  2. 21
      libisofs/builder.c
  3. 8
      libisofs/ecma119.c
  4. 5
      libisofs/ecma119.h
  5. 109
      libisofs/fs_image.c
  6. 83
      libisofs/fs_local.c
  7. 1
      libisofs/fsource.c
  8. 84
      libisofs/libisofs.h
  9. 93
      libisofs/node.c
  10. 2
      libisofs/node.h
  11. 79
      libisofs/rockridge.c
  12. 14
      libisofs/rockridge.h
  13. 13
      libisofs/rockridge_read.c

@ -16,9 +16,8 @@
*
*/
/* ts A90218 : libburn.h is not necessarily available */
/*
# include "libburn/libburn.h"
Use the copy of the struct burn_source definition in libisofs.h
*/
#define LIBISOFS_WITHOUT_LIBBURN yes
#include "libisofs.h"

@ -1,29 +1,25 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2009 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 as
* published by the Free Software Foundation. See COPYING file for details.
*/
/* ts A90116 : libisofs.h eventually defines aaip_xinfo_func */
/* libisofs.h defines aaip_xinfo_func */
#include "libisofs.h"
#include "builder.h"
#include "node.h"
#include "fsource.h"
/* ts A90121 : needed for image->builder_ignore_acl */
#include "image.h"
#include "aaip_0_2.h"
#include <stdlib.h>
#include <string.h>
#include <limits.h>
/* ts A90207 */
#ifdef Libisofs_with_aaiP
#include "aaip_0_2.h"
#endif
void iso_node_builder_ref(IsoNodeBuilder *builder)
@ -97,11 +93,8 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image,
struct stat info;
IsoNode *new;
char *name;
#ifdef Libisofs_with_aaiP
unsigned char *aa_string;
char *a_text = NULL, *d_text = NULL;
#endif /* Libisofs_with_aaiP */
if (builder == NULL || src == NULL || node == NULL) {
return ISO_NULL_POINTER;
@ -191,9 +184,6 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image,
iso_node_set_ctime(new, info.st_ctime);
iso_node_set_uid(new, info.st_uid);
#ifdef Libisofs_with_aaiP
/* ts A90207 */
/* Eventually set S_IRWXG from ACL */
if (image->builder_ignore_acl) {
ret = iso_file_source_get_aa_string(src, &aa_string, 4);
@ -207,8 +197,7 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image,
1 << 15); /* free ACL texts */
}
/* ts A90115 */
/* obtain ownership of eventual AA string */
/* Obtain ownership of eventual AA string */
ret = iso_file_source_get_aa_string(src, &aa_string,
1 | (image->builder_ignore_acl << 1) |
(image->builder_ignore_ea << 2 ));
@ -218,8 +207,6 @@ int default_create_node(IsoNodeBuilder *builder, IsoImage *image,
return ret;
}
#endif /* Libisofs_with_aaiP */
*node = new;
return ISO_SUCCESS;

@ -1,15 +1,15 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2007 Mario Danic
* Copyright (c) 2009 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 as
* published by the Free Software Foundation. See COPYING file for details.
*/
/* ts A90218 : libburn.h is not necessarily available */
/*
# include "libburn/libburn.h"
Use the copy of the struct burn_source definition in libisofs.h
*/
#define LIBISOFS_WITHOUT_LIBBURN yes
#include "libisofs.h"
@ -887,10 +887,7 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *opts, Ecma119Image **img)
target->rockridge = opts->rockridge;
target->joliet = opts->joliet;
target->iso1999 = opts->iso1999;
/* ts A90122 */
target->aaip = opts->aaip;
target->always_gmt = opts->always_gmt;
target->ino = 0;
target->omit_version_numbers = opts->omit_version_numbers
@ -1520,7 +1517,6 @@ int iso_write_opts_set_rrip_version_1_10(IsoWriteOpts *opts, int oldvers)
return ISO_SUCCESS;
}
/* ts A90125 */
int iso_write_opts_set_aaip_susp_1_10(IsoWriteOpts *opts, int oldvers)
{
if (opts == NULL) {

@ -1,5 +1,6 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2009 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 as
@ -42,7 +43,6 @@ struct iso_write_opts {
unsigned int joliet :1;
unsigned int iso1999 :1;
/* ts A90122 */
unsigned int aaip :1; /* whether to write eventual ACL and EAs */
/* allways write timestamps in GMT */
@ -115,7 +115,6 @@ struct iso_write_opts {
*/
unsigned int rrip_version_1_10 :1;
/* ts A90125 */
/**
* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12.
* I.e. without announcing it by an ER field and thus without the need
@ -262,7 +261,6 @@ struct ecma119_image
unsigned int eltorito :1;
unsigned int iso1999 :1;
/* ts A90122 */
unsigned int aaip :1; /* whether to write eventual ACLs and EAs */
/* allways write timestamps in GMT */
@ -285,7 +283,6 @@ struct ecma119_image
/** Write old fashioned RRIP-1.10 rather than RRIP-1.12 */
unsigned int rrip_version_1_10 :1;
/* ts A90125 */
/* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12. */
unsigned int aaip_susp_1_10 :1;

@ -1,5 +1,6 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2009 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 as
@ -18,10 +19,7 @@
#include "image.h"
#include "tree.h"
#include "eltorito.h"
#ifdef Libisofs_with_aaiP
#include "aaip_0_2.h"
#endif
#include <stdlib.h>
#include <string.h>
@ -61,11 +59,7 @@ struct iso_read_opts
unsigned int norock : 1; /*< Do not read Rock Ridge extensions */
unsigned int nojoliet : 1; /*< Do not read Joliet extensions */
unsigned int noiso1999 : 1; /*< Do not read ISO 9660:1999 enhanced tree */
#ifdef Libisofs_with_aaiP
/* ts A90121 */
unsigned int noaaip : 1; /* Do not read AAIP extension for EA and ACL */
#endif /* Libisofs_with_aaiP */
unsigned int noaaip : 1; /* Do not read AAIP extension for xattr and ACL */
/**
* When both Joliet and RR extensions are present, the RR tree is used.
@ -222,9 +216,6 @@ typedef struct
/** If ISO 9660:1999 is available on image */
unsigned int iso1999 : 1;
#ifdef Libisofs_with_aaiP
/* ts A90121 */
/** Whether AAIP info shall be loaded if it is present.
* 1 = yes , 0 = no
*/
@ -235,8 +226,6 @@ typedef struct
*/
int aaip_version;
#endif /* ! Libisofs_with_aaiP */
/**
* Number of blocks of the volume, as reported in the PVM.
*/
@ -290,9 +279,6 @@ struct image_fs_data
off_t offset;
} data;
#ifdef Libisofs_with_aaiP
/* ts A90114 */
/**
* malloc() storage for the string of AA fields which represent
* ACLs and XFS-style Extended Attributes. (Not to be confused with
@ -300,9 +286,6 @@ struct image_fs_data
*/
unsigned char *aa_string;
#endif /* Libisofs_with_aaiP */
};
struct child_list
@ -945,21 +928,12 @@ void ifs_free(IsoFileSource *src)
free(data->sections);
free(data->name);
#ifdef Libisofs_with_aaiP
/* ts A90115 */
if (data->aa_string != NULL)
free(data->aa_string);
#endif /* Libisofs_with_aaiP */
free(data);
}
#ifdef Libisofs_with_aaiP
static
int ifs_get_aa_string(IsoFileSource *src, unsigned char **aa_string, int flag)
{
@ -981,17 +955,10 @@ int ifs_get_aa_string(IsoFileSource *src, unsigned char **aa_string, int flag)
return 1;
}
#endif /* Libisofs_with_aaiP */
IsoFileSourceIface ifs_class = {
#ifdef Libisofs_with_aaiP
1, /* version */
#else
0, /* version */
#endif
ifs_get_path,
ifs_get_name,
ifs_lstat,
@ -1004,12 +971,8 @@ IsoFileSourceIface ifs_class = {
ifs_readlink,
ifs_get_filesystem,
ifs_free,
ifs_lseek
#ifdef Libisofs_with_aaiP
,
ifs_lseek,
ifs_get_aa_string
#endif
};
@ -1082,16 +1045,10 @@ int iso_file_source_new_ifs(IsoImageFilesystem *fs, IsoFileSource *parent,
uint32_t relocated_dir = 0;
#ifdef Libisofs_with_aaiP
/* ts A90115 */
unsigned char *aa_string = NULL;
size_t aa_size = 0, aa_len = 0, prev_field = 0;
int aa_done = 0;
#endif /* Libisofs_with_aaiP */
if (fs == NULL || fs->data == NULL || record == NULL || src == NULL) {
return ISO_NULL_POINTER;
}
@ -1332,10 +1289,6 @@ int iso_file_source_new_ifs(IsoImageFilesystem *fs, IsoFileSource *parent,
}
continue;
#ifdef Libisofs_with_aaiP
/* ts A90115 */
/* Need to read AA in any case so it is available for S_IRWXG
mapping in case that fsdata->aaip_load != 1
*/
@ -1350,10 +1303,7 @@ int iso_file_source_new_ifs(IsoImageFilesystem *fs, IsoFileSource *parent,
continue;
}
#endif /* Libisofs_with_aaiP */
/* ts A90112 : this message is inflationary */
/* This message is inflationary */
/*
} else {
ret = iso_msg_submit(fsdata->msgid, ISO_SUSP_UNHANDLED, 0,
@ -1609,14 +1559,8 @@ int iso_file_source_new_ifs(IsoImageFilesystem *fs, IsoFileSource *parent,
}
ifsdata->info = atts;
ifsdata->name = name;
#ifdef Libisofs_with_aaiP
ifsdata->aa_string = aa_string;
#endif /* Libisofs_with_aaiP */
/* save extents */
ifsdata->sections = realloc(ifsdata->sections,
(1 + ifsdata->nsections) * sizeof(struct iso_file_section));
@ -1983,26 +1927,17 @@ int read_root_susp_entries(_ImageFsData *data, uint32_t block)
(strncmp((char*)sue->data.ER.ext_id, "AAIP_0002", 9) == 0 ||
strncmp((char*)sue->data.ER.ext_id, "AAIP_0100", 9) == 0)) {
/* ts A90113 : tolerate AAIP ER even if not supported */
/* Tolerate AAIP ER even if not supported */
iso_msg_debug(data->msgid,
"Suitable AAIP ER found.");
#ifdef Libisofs_with_aaiP
if (((char*)sue->data.ER.ext_id)[6] == '1')
data->aaip_version = 100;
else
data->aaip_version = 2;
if (!data->aaip_load)
iso_msg_submit(data->msgid, ISO_AAIP_IGNORED, 0,
"Identifier for extension AAIP found, but loading is not enabled.");
#else /* Libisofs_with_aaiP */
iso_msg_submit(data->msgid, ISO_AAIP_IGNORED, 0,
"Identifier for future extension AAIP found and ignored.");
#endif /* ! Libisofs_with_aaiP */
"Identifier for extension AAIP found, but loading is not enabled.");
} else {
ret = iso_msg_submit(data->msgid, ISO_SUSP_MULTIPLE_ER, 0,
@ -2170,16 +2105,9 @@ int iso_image_filesystem_new(IsoDataSource *src, struct iso_read_opts *opts,
data->file_mode = opts->file_mode & ~S_IFMT;
data->dir_mode = opts->dir_mode & ~S_IFMT;
data->msgid = msgid;
#ifdef Libisofs_with_aaiP
/* ts A90121 */
data->aaip_load = !opts->noaaip;
data->aaip_version = -1;
#endif /* Libisofs_with_aaiP */
/* ??? ts Nov 25 2008 :
Shouldn't this go to library initialization or even to app ?
*/
@ -2385,10 +2313,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image,
IsoNode *new;
char *name;
ImageFileSourceData *data;
#ifdef Libisofs_with_aaiP
unsigned char *aa_string;
#endif /* Libisofs_with_aaiP */
if (builder == NULL || src == NULL || node == NULL || src->data == NULL) {
return ISO_NULL_POINTER;
@ -2560,10 +2485,7 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image,
new->next = NULL;
*node = new;
#ifdef Libisofs_with_aaiP
/* ts A90115 */
/* obtain ownership of eventual AA string */
/* Obtain ownership of eventual AA string */
ret = iso_file_source_get_aa_string(src, &aa_string, 1);
if (ret == 1 && aa_string != NULL) {
_ImageFsData *fsdata = data->fs->data;
@ -2575,7 +2497,6 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image,
return ret;
} else {
/* ts A90208 */
/* Look for ACL and perform S_IRWXG mapping */
if (aa_string != NULL)
iso_aa_get_acl_text(aa_string, info.st_mode, &a_text, &d_text,
@ -2589,9 +2510,6 @@ int image_builder_create_node(IsoNodeBuilder *builder, IsoImage *image,
aaip_xinfo_func(aa_string, 1);
}
}
#endif /* Libisofs_with_aaiP */
return ISO_SUCCESS;
}
@ -2966,14 +2884,8 @@ int iso_read_opts_new(IsoReadOpts **opts, int profile)
ropts->file_mode = 0444;
ropts->dir_mode = 0555;
#ifdef Libisofs_with_aaiP
/* ts A90121 */
ropts->noaaip= 1;
#endif /* Libisofs_with_aaiP */
*opts = ropts;
return ISO_SUCCESS;
}
@ -3024,22 +2936,15 @@ int iso_read_opts_set_no_iso1999(IsoReadOpts *opts, int noiso1999)
return ISO_SUCCESS;
}
/* ts A90121 */
int iso_read_opts_set_no_aaip(IsoReadOpts *opts, int noaaip)
{
if (opts == NULL) {
return ISO_NULL_POINTER;
}
#ifdef Libisofs_with_aaiP
opts->noaaip = noaaip ? 1 : 0;
#endif /* Libisofs_with_aaiP */
return ISO_SUCCESS;
}
int iso_read_opts_set_preferjoliet(IsoReadOpts *opts, int preferjoliet)
{
if (opts == NULL) {

@ -1,5 +1,6 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2009 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 as
@ -10,15 +11,9 @@
* Filesystem/FileSource implementation to access the local filesystem.
*/
/* ts A90116 : libisofs.h eventually defines Libisofs_with_aaiP */
#include "libisofs.h"
#include "fsource.h"
#include "util.h"
#ifdef Libisofs_with_aaiP
#include "aaip_0_2.h"
#endif
#include <stdlib.h>
#include <sys/types.h>
@ -475,10 +470,6 @@ void lfs_free(IsoFileSource *src)
}
#ifdef Libisofs_with_aaiP
/* ts A90116 */
static
int lfs_get_aa_string(IsoFileSource *src, unsigned char **aa_string, int flag)
{
@ -528,17 +519,10 @@ ex:;
return ret;
}
#endif /* Libisofs_with_aaiP */
IsoFileSourceIface lfs_class = {
#ifdef Libisofs_with_aaiP
1, /* version */
#else
0, /* version */
#endif
lfs_get_path,
lfs_get_name,
lfs_lstat,
@ -551,12 +535,8 @@ IsoFileSourceIface lfs_class = {
lfs_readlink,
lfs_get_filesystem,
lfs_free,
lfs_lseek
#ifdef Libisofs_with_aaiP
,
lfs_lseek,
lfs_get_aa_string
#endif
};
@ -770,55 +750,29 @@ int iso_local_filesystem_new(IsoFilesystem **fs)
}
/* ts A90127 */
int iso_local_get_acl_text(char *disk_path, char **text, int flag)
{
#ifdef Libisofs_with_aaiP
int ret;
ret = aaip_get_acl_text(disk_path, text, flag & (1 | 16 | 32 | (1 << 15)));
return ret;
#else /* Libisofs_with_aaiP */
return 0;
#endif /* ! Libisofs_with_aaiP */
}
/* ts A90118 */
int iso_local_set_acl_text(char *disk_path, char *text, int flag)
{
#ifdef Libisofs_with_aaiP
int ret;
ret = aaip_set_acl_text(disk_path, text, flag & (1 | 32));
if (ret < 0)
return ISO_AAIP_NO_SET_LOCAL;
return ret;
#else /* Libisofs_with_aaiP */
return 0;
#endif /* ! Libisofs_with_aaiP */
}
/* ts A90131 */
int iso_local_get_attrs(char *disk_path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag)
{
#ifdef Libisofs_with_aaiP
int ret;
ret = aaip_get_attr_list(disk_path,
@ -827,26 +781,12 @@ int iso_local_get_attrs(char *disk_path, size_t *num_attrs, char ***names,
if (ret <= 0)
return ISO_AAIP_NO_GET_LOCAL;
return 1;
#else /* Libisofs_with_aaiP */
*num_attrs = 0;
*names = NULL;
*value_lengths = NULL;
*values = NULL;
return 1;
#endif /* ! Libisofs_with_aaiP */
}
/* ts A90131 */
int iso_local_set_attrs(char *disk_path, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag)
{
#ifdef Libisofs_with_aaiP
int ret;
ret = aaip_set_attr_list(disk_path, num_attrs, names, value_lengths,
@ -859,27 +799,14 @@ int iso_local_set_attrs(char *disk_path, size_t num_attrs, char **names,
return ISO_AAIP_NO_SET_LOCAL;
}
return 1;
#else /* Libisofs_with_aaiP */
if (num_attrs > 0)
return ISO_AAIP_NOT_ENABLED;
return 1;
#endif /* ! Libisofs_with_aaiP */
}
/* ts A90207 */
int iso_local_get_perms_wo_acl(char *disk_path, mode_t *st_mode, int flag)
{
struct stat stbuf;
int ret;
#ifdef Libisofs_with_aaiP
char *a_text = NULL;
#endif
if (flag & 32)
ret = stat(disk_path, &stbuf);
@ -888,17 +815,11 @@ int iso_local_get_perms_wo_acl(char *disk_path, mode_t *st_mode, int flag)
if (ret == -1)
return -1;
*st_mode = stbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO);
#ifdef Libisofs_with_aaiP
ret = iso_local_get_acl_text(disk_path, &a_text, 16 | (flag & 32));
if (a_text != NULL) {
aaip_cleanout_st_mode(a_text, st_mode, 4 | 16);
iso_local_get_acl_text(disk_path, &a_text, 1 << 15); /* free a_text */
}
#endif /* Libisofs_with_aaiP */
return 1;
}

@ -117,7 +117,6 @@ IsoFilesystem* iso_file_source_get_filesystem(IsoFileSource *src)
}
/* ts A90115 */
inline
int iso_file_source_get_aa_string(IsoFileSource *src,
unsigned char **aa_string, int flag)

@ -1,5 +1,6 @@
/*
* Copyright (c) 2007-2008 Vreixo Formoso, Mario Danic
* Copyright (c) 2009 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 as
@ -472,7 +473,6 @@ struct iso_filesystem
*/
struct IsoFileSource_Iface
{
/* ts A90114 */
/**
* Tells the version of the interface:
* Version 0 provides functions up to (*lseek)().
@ -683,11 +683,10 @@ struct IsoFileSource_Iface
/* Add-ons of .version 1 begin here */
/* ts A90114 */
/**
* Valid only if .version is > 0. See above.
* Get the AA string with encoded ACL and XFS-style Extended Attributes
* xattr. (Not to be confused with ECMA-119 Extended Attributes).
* Get the AA string with encoded ACL and xattr.
* (Not to be confused with ECMA-119 Extended Attributes).
*
* bit1 and bit2 of flag should be implemented so that freshly fetched
* info does not include the undesired ACL or xattr. Nevertheless if the
@ -935,12 +934,11 @@ char *iso_get_local_charset(int flag);
int iso_image_new(const char *name, IsoImage **image);
/* ts A90121 */
/**
* Control whether ACL and XFS-style Extended Attributes xattr will be
* imported from external filesystems (typically the local POSIX filesystem)
* when new nodes get inserted. If enabled by iso_write_opts_set_aaip() they
* will later be written into the image as AAIP extension fields.
* Control whether ACL and xattr will be imported from external filesystems
* (typically the local POSIX filesystem) when new nodes get inserted. If
* enabled by iso_write_opts_set_aaip() they will later be written into the
* image as AAIP extension fields.
*
* A change of this setting does neither affect existing IsoNode objects
* nor the way how ACL and xattr are handled when loading an ISO image.
@ -1061,7 +1059,7 @@ int iso_lib_is_compatible(int major, int minor, int micro);
* ---> 1 [BACKUP]
* POSIX compatibility for backup. Simple settings, ISO level is set to
* 3 and RR extensions are enabled. Useful for backup purposes.
* Note that ACL and XFS-style xattr are not enabled by default.
* Note that ACL and xattr are not enabled by default.
* If you enable them, expect them not to show up in the mounted image.
* They will have to be retrieved by libisofs applications like xorriso.
* ---> 2 [DISTRIBUTION]
@ -1145,10 +1143,8 @@ int iso_write_opts_set_joliet(IsoWriteOpts *opts, int enable);
*/
int iso_write_opts_set_iso1999(IsoWriteOpts *opts, int enable);
/* ts A90122 */
/**
* Control writing of AAIP informations for ACL and XFS-style Extended
* Attributes xattr.
* Control writing of AAIP informations for ACL and xattr.
* For importing ACL and xattr when inserting nodes from external filesystems
* (e.g. the local POSIX filesystem) see iso_image_set_ignore_aclea().
* For loading of this information from images see iso_read_opts_set_no_aaip().
@ -1251,7 +1247,6 @@ int iso_write_opts_set_joliet_longer_paths(IsoWriteOpts *opts, int allow);
*/
int iso_write_opts_set_rrip_version_1_10(IsoWriteOpts *opts, int oldvers);
/* ts A90125 */
/**
* Write AAIP as extension according to SUSP 1.10 rather than SUSP 1.12.
* I.e. without announcing it by an ER field and thus without the need
@ -1586,8 +1581,8 @@ int iso_read_opts_set_no_joliet(IsoReadOpts *opts, int nojoliet);
int iso_read_opts_set_no_iso1999(IsoReadOpts *opts, int noiso1999);
/**
* Control reading of AAIP informations about ACL and XFS-style Extended
* Attributes xattr when loading existing images.
* Control reading of AAIP informations about ACL and xattr when loading
* existing images.
* For importing ACL and xattr when inserting nodes from external filesystems
* (e.g. the local POSIX filesystem) see iso_image_set_ignore_aclea().
* For eventual writing of this information see iso_write_opts_set_aaip().
@ -3752,7 +3747,7 @@ int iso_file_source_readlink(IsoFileSource *src, char *buf, size_t bufsiz);
/**
* Get the AA string with encoded ACL and XFS-style Extended Attributes xattr.
* Get the AA string with encoded ACL and xattr.
* (Not to be confused with ECMA-119 Extended Attributes).
* @param src The file source object to be inquired.
* @param aa_string Returns a pointer to the AA string data. If no AA
@ -4204,37 +4199,29 @@ void iso_stream_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
#define ISO_DATA_SOURCE_FATAL 0xF030FCFF
/* ts A90121 */
/** AAIP info with ACL or xattr in ISO image will be ignored
(NOTE, HIGH, -336) */
#define ISO_AAIP_IGNORED 0xB030FEB0
/* ts A90130 */
/** Error with decoding ACL from AAIP info (FAILURE, HIGH, -337) */
#define ISO_AAIP_BAD_ACL 0xE830FEAF
/* ts A90130 */
/** Error with encoding ACL for AAIP (FAILURE, HIGH, -338) */
#define ISO_AAIP_BAD_ACL_TEXT 0xE830FEAE
/* ts A90130 */
/** AAIP processing for ACL or xattr not enabled at compile time
(FAILURE, HIGH, -339) */
#define ISO_AAIP_NOT_ENABLED 0xE830FEAD
/* ts A90130 */
/** Error with decoding AAIP info for ACL or xattr (FAILURE, HIGH, -340) */
#define ISO_AAIP_BAD_AASTRING 0xE830FEAC
/* ts A90131 */
/** Error with reading ACL or xattr from local file (FAILURE, HIGH, -341) */
#define ISO_AAIP_NO_GET_LOCAL 0xE830FEAB
/* ts A90131 */
/** Error with attaching ACL or xattr to local file (FAILURE, HIGH, -342) */
#define ISO_AAIP_NO_SET_LOCAL 0xE830FEAA
/* ts A90206 */
/** Unallowed attempt to set an xattr with non-userspace name
(FAILURE, HIGH, -343) */
#define ISO_AAIP_NON_USER_NAME 0xE830FEA9
@ -4242,18 +4229,12 @@ void iso_stream_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
/* --------------------------------- AAIP --------------------------------- */
/* ts A90112 : Enable experiments about xattr and ACL
*/
#define Libisofs_with_aaiP yes
/* ts A90114 */
/**
* Function to identify and manage AA strings as xinfo of IsoNode.
*
* An AA string contains the Attribute List with the xattr and ACL of a node
* in the image tree. It is formatted according to libisofs specification
* AAIP-0.2 and ready to be written into the System Use Area resp. Continuation
* AAIP-1.0 and ready to be written into the System Use Area resp. Continuation
* Area of a directory entry in an ISO image.
*
* Applications are not supposed to manipulate AA strings directly. They should
@ -4272,7 +4253,6 @@ void iso_stream_get_id(IsoStream *stream, unsigned int *fs_id, dev_t *dev_id,
int aaip_xinfo_func(void *data, int flag);
/* ts A90130 */
/**
* Get the eventual ACLs which are associated with the node.
* The result will be in "long" text form as of man acl resp. acl_to_text().
@ -4306,7 +4286,6 @@ int iso_node_get_acl_text(IsoNode *node,
char **access_text, char **default_text, int flag);
/* ts A90130 */
/**
* Set the ACLs of the given node to the lists in parameters access_text and
* default_text or delete them.
@ -4341,7 +4320,6 @@ int iso_node_get_acl_text(IsoNode *node,
int iso_node_set_acl_text(IsoNode *node,
char *access_text, char *default_text, int flag);
/* ts A90206 */
/**
* Like iso_node_get_permissions but reflecting ACL entry "group::" in S_IRWXG
* rather than ACL entry "mask::". This is necessary if the permissions of a
@ -4358,10 +4336,8 @@ int iso_node_set_acl_text(IsoNode *node,
mode_t iso_node_get_perms_wo_acl(const IsoNode *node);
/* ts A90131 */
/**
* Get the list of XFS-style Extended Attributes xattr which is associated
* with the node.
* Get the list of xattr which is associated with the node.
* The resulting data may finally be disposed by a call to this function
* with flag bit15 set, or its components may be freed one-by-one.
* The following values are either NULL or malloc() memory:
@ -4401,10 +4377,8 @@ mode_t iso_node_get_perms_wo_acl(const IsoNode *node);
int iso_node_get_attrs(IsoNode *node, size_t *num_attrs,
char ***names, size_t **value_lengths, char ***values, int flag);
/* ts A90131 */
/**
* Set the list of XFS-style Extended Attributes xattr which is associated
* with the node.
* Set the list of xattr which is associated with the node.
* The data get copied so that you may dispose your input data afterwards.
*
* If enabled by flag bit0 then the submitted list of attributes will not only
@ -4442,16 +4416,17 @@ int iso_node_set_attrs(IsoNode *node, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag);
/* -------- This is an interface to the ACL of the local filesystem -------- */
/* ----- This is an interface to ACL and xattr of the local filesystem ----- */
/**
* libisofs has an internal system dependent adapter to ACL operations. For
* the sake of completeness and simplicity it exposes this functionality to
* its applications which might want to get and set ACLs from local files.
* libisofs has an internal system dependent adapter to ACL and xattr
* operations. For the sake of completeness and simplicity it exposes this
* functionality to its applications which might want to get and set ACLs
* from local files.
*/
/* ts A90127 */
/**
* Get the ACL of the given file in the local filesystem in long text form.
* Get an ACL of the given file in the local filesystem in long text form.
*
* @param disk_path
* Path to the file
@ -4461,7 +4436,7 @@ int iso_node_set_attrs(IsoNode *node, size_t num_attrs, char **names,
* with bit15 set.
* @param flag
* Bitfield for control purposes
* bit0= get default ACL rather than access ACL
* bit0= get "default" ACL rather than "access" ACL
* bit4= set *text = NULL and return 2
* if the ACL matches st_mode permissions.
* bit5= in case of symbolic link: inquire link target
@ -4479,7 +4454,6 @@ int iso_node_set_attrs(IsoNode *node, size_t num_attrs, char **names,
int iso_local_get_acl_text(char *disk_path, char **text, int flag);
/* ts A90118 */
/**
* Set the ACL of the given file in the local filesystem to a given list
* in long text form.
@ -4490,7 +4464,7 @@ int iso_local_get_acl_text(char *disk_path, char **text, int flag);
* The input text (0 terminated, ACL long text form)
* @param flag
* Bitfield for control purposes
* bit0= set default ACL rather than access ACL
* bit0= set "default" ACL rather than "access" ACL
* bit5= in case of symbolic link: manipulate link target
* @return
* > 0 ok
@ -4504,7 +4478,6 @@ int iso_local_get_acl_text(char *disk_path, char **text, int flag);
int iso_local_set_acl_text(char *disk_path, char *text, int flag);
/* ts A90207 */
/**
* Obtain permissions of a file in the local filesystem which shall reflect
* ACL entry "group::" in S_IRWXG rather than ACL entry "mask::". This is
@ -4526,7 +4499,6 @@ int iso_local_set_acl_text(char *disk_path, char *text, int flag);
int iso_local_get_perms_wo_acl(char *disk_path, mode_t *st_mode, int flag);
/* ts A90131 */
/**
* Get xattr and non-trivial ACLs of the given file in the local filesystem.
* The resulting data has finally to be disposed by a call to this function
@ -4564,7 +4536,6 @@ int iso_local_get_attrs(char *disk_path, size_t *num_attrs, char ***names,
size_t **value_lengths, char ***values, int flag);
/* ts A90131 */
/**
* Attach a list of xattr and ACLs to the given file in the local filesystem.
*
@ -4600,7 +4571,6 @@ int iso_local_set_attrs(char *disk_path, size_t num_attrs, char **names,
#ifdef LIBISOFS_WITHOUT_LIBBURN
/* ts A90218 */
/**
This is a copy from the API of libburn-0.6.0 (under GPL).
It is supposed to be as stable as any overall include of libburn.h.
@ -4609,6 +4579,10 @@ int iso_local_set_attrs(char *disk_path, size_t num_attrs, char **names,
Libisofs does not need to be linked with libburn at all. But if it is
linked with libburn then it must be libburn-0.4.2 or later.
An application that provides own struct burn_source objects and does not
include libburn/libburn.h has to define LIBISOFS_WITHOUT_LIBBURN before
including libisofs/libisofs.h in order to make this copy available.
*/
@ -4702,7 +4676,6 @@ struct burn_source {
off_t (*get_size)(struct burn_source *);
/* ts A70125 : BROKE BINARY BACKWARD COMPATIBILITY AT libburn-0.3.1. */
/* @since 0.3.2 */
/** Program the reply of (*get_size) to a fixed value. It is advised
to implement this by a attribute off_t fixed_size; in *data .
@ -4750,7 +4723,6 @@ struct burn_source {
void *data;
/* ts A71222 : Supposed to be binary backwards compatible extension. */
/* @since 0.4.2 */
/** Valid only if above member .(*read)() is NULL. This indicates a
version of struct burn_source younger than 0.

@ -1,5 +1,6 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2009 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 as
@ -9,11 +10,7 @@
#include "libisofs.h"
#include "node.h"
#include "stream.h"
#ifdef Libisofs_with_aaiP
#include "aaip_0_2.h"
#endif
#include <stdlib.h>
#include <string.h>
@ -277,7 +274,6 @@ const char *iso_node_get_name(const IsoNode *node)
return node->name;
}
/* ts A90128 */
/**
* See API function iso_node_set_permissions()
*
@ -290,17 +286,12 @@ int iso_node_set_perms_internal(IsoNode *node, mode_t mode, int flag)
node->mode = (node->mode & S_IFMT) | (mode & ~S_IFMT);
#ifdef Libisofs_with_aaiP
/* ts A90119 */
/* If the node has ACL info : update ACL */
ret = 1;
if (!(flag & 1))
ret = iso_node_set_acl_text(node, "", "", 2);
return ret;
#endif
}
/**
@ -1352,7 +1343,6 @@ int iso_node_new_special(char *name, mode_t mode, dev_t dev,
}
/* ts A90202 */
/* @param flag bit0= inverse: cleanout everything but del_name
*/
static
@ -1380,9 +1370,6 @@ int attrs_cleanout_name(char *del_name, size_t *num_attrs, char **names,
}
#ifdef Libisofs_with_aaiP
/* ts A90207 */
/**
* Backend of iso_node_get_attrs() with parameter node replaced by the
* AA string from where to get the attribute list.
@ -1459,16 +1446,10 @@ ex:;
return ret;
}
#endif /* ! Libisofs_with_aaiP */
/* ts A90116 */
int iso_node_get_attrs(IsoNode *node, size_t *num_attrs,
char ***names, size_t **value_lengths, char ***values, int flag)
{
#ifdef Libisofs_with_aaiP
void *xipt;
unsigned char *aa_string = NULL;
int ret;
@ -1489,21 +1470,9 @@ int iso_node_get_attrs(IsoNode *node, size_t *num_attrs,
ret = iso_aa_get_attrs(aa_string, num_attrs, names, value_lengths, values,
flag);
return ret;
#else /* Libisofs_with_aaiP */
*num_attrs = 0;
*names = NULL;
*value_lengths = NULL;
*values = NULL;
#endif /* ! Libisofs_with_aaiP */
return 1;
}
/* ts A90205 */
/* Enlarge attribute list */
static
int attr_enlarge_list(char ***names, size_t **value_lengths, char ***values,
@ -1527,7 +1496,6 @@ int attr_enlarge_list(char ***names, size_t **value_lengths, char ***values,
}
/* ts A90205 */
/* Merge attribute list of node and given new attribute list into
attribute list returned by m_* parameters.
The m_* paramters have finally to be freed by a call with bit15 set.
@ -1668,13 +1636,9 @@ int iso_node_merge_xattr(IsoNode *node, size_t num_attrs, char **names,
}
/* ts A90121 */
int iso_node_set_attrs(IsoNode *node, size_t num_attrs, char **names,
size_t *value_lengths, char **values, int flag)
{
#ifdef Libisofs_with_aaiP
int ret, acl_saved = 0;
size_t sret, result_len, m_num = 0, *m_value_lengths = NULL, i;
unsigned char *result;
@ -1745,18 +1709,9 @@ ex:;
iso_node_merge_xattr(node, num_attrs, names, value_lengths, values,
&m_num, &m_names, &m_value_lengths, &m_values, 1 << 15);
return ret;
#else /* Libisofs_with_aaiP */
return ISO_AAIP_NOT_ENABLED;
#endif /* ! Libisofs_with_aaiP */
}
#ifdef Libisofs_with_aaiP
static
int iso_decode_acl(unsigned char *v_data, size_t v_len, size_t *consumed,
char **text, size_t *text_fill, int flag)
@ -1784,7 +1739,6 @@ int iso_decode_acl(unsigned char *v_data, size_t v_len, size_t *consumed,
}
/* ts A90207 */
/**
* Backend of iso_node_get_acl_text() with parameter node replaced by the
* attribute list from where to get the ACL and by the associated st_mode
@ -1856,16 +1810,9 @@ bad_decode:;
}
#endif /* ! Libisofs_with_aaiP */
/* ts A90130 */
int iso_node_get_acl_text(IsoNode *node,
char **access_text, char **default_text, int flag)
{
#ifdef Libisofs_with_aaiP
size_t num_attrs = 0, *value_lengths = NULL;
char **names = NULL, **values = NULL;
mode_t st_mode = 0;
@ -1886,20 +1833,9 @@ int iso_node_get_acl_text(IsoNode *node,
iso_node_get_attrs(node, &num_attrs, &names,
&value_lengths, &values, 1 << 15); /* free memory */
return ret;
#else /* Libisofs_with_aaiP */
*access_text = *default_text = NULL;
return ISO_AAIP_NOT_ENABLED;
#endif /* ! Libisofs_with_aaiP */
}
#ifdef Libisofs_with_aaiP
/* ts A90207 */
int iso_aa_get_acl_text(unsigned char *aa_string, mode_t st_mode,
char **access_text, char **default_text, int flag)
{
@ -1924,17 +1860,10 @@ ex:;
return ret;
}
#endif /* Libisofs_with_aaiP */
/* ts A90130 */
int iso_node_set_acl_text(IsoNode *node, char *access_text, char *default_text,
int flag)
{
#ifdef Libisofs_with_aaiP
size_t num_attrs = 0, *value_lengths = NULL, i, j, consumed;
size_t a_text_fill = 0, d_text_fill = 0;
size_t v_len, acl_len= 0;
@ -2109,24 +2038,11 @@ ex:;
bad_decode:;
ret = ISO_AAIP_BAD_ACL;
goto ex;
#else /* Libisofs_with_aaiP */
if (access_text != NULL || default_text != NULL)
return ISO_AAIP_NOT_ENABLED;
return 1;
#endif /* ! Libisofs_with_aaiP */
}
/* ts A90206 */
mode_t iso_node_get_perms_wo_acl(const IsoNode *node)
{
#ifdef Libisofs_with_aaiP
mode_t st_mode;
int ret;
char *a_text = NULL, *d_text = NULL;
@ -2140,12 +2056,5 @@ mode_t iso_node_get_perms_wo_acl(const IsoNode *node)
ex:;
iso_node_get_acl_text((IsoNode *) node, &a_text, &d_text, 1 << 15);
return st_mode;
#else /* Libisofs_with_aaiP */
return iso_node_get_permissions(node);
#endif /* ! Libisofs_with_aaiP */
}

@ -332,7 +332,6 @@ void iso_dir_iter_unregister(IsoDirIter *iter);
void iso_notify_dir_iters(IsoNode *node, int flag);
/* ts A90128 */
/**
* See API function iso_node_set_permissions()
*
@ -342,7 +341,6 @@ void iso_notify_dir_iters(IsoN