aboutsummaryrefslogtreecommitdiff
path: root/lib/libgeom/geom_xml2tree.c
Commit message (Collapse)AuthorAgeFilesLines
* GEOM: Fix regression after 7f16b501e25.Alexander Motin2022-03-161-0/+3
| | | | | | | | find_geom() in some classes trim leading "/dev/" from geom names. Lack of that in geom_gettree_geom() broke some existing scripts. PR: 262554 MFC after: 2 months
* GEOM: Introduce partial confxml APIAlexander Motin2022-03-121-14/+36
| | | | | | | | | | | | | | | | | | | | | | Traditionally the GEOM's primary channel of information from kernel to user-space was confxml, fetched by libgeom through kern.geom.confxml sysctl. It is convenient and informative, representing full state of GEOM in a single XML document. But problems start to arise on systems with hundreds of disks, where the full confxml size reaches many megabytes, taking significant time to first write it and then parse. This patch introduces alternative solution, allowing to fetch much smaller XML document, subset of the full confxml, limited to 64KB and representing only one specified geom and optionally its parents. It uses existing GEOM control interface, extended with new "getxml" verb. In case of any error, such as the buffer overflow, it just transparently falls back to traditional full confxml. This patch uses the new API in user-space GEOM tools where it is possible. Reviewed by: imp MFC after: 2 month Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D34529
* [skip ci] correct a few SPDX license tagsAlan Somers2021-07-071-1/+1
| | | | | | | | | These were all incorrectly labeled as 2-clause BSD licenses by a semi-automated process, when in fact they are 3-clause. Discussed with: pfg, imp MFC after: 2 weeks Sponsored by: Axcient
* lib: further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-261-0/+2
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using mis-identified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326219
* Plug memory leaks when running out of memory.Xin LI2015-08-281-1/+3
| | | | | | | | Reported by: clang scan-build MFC after: 2 weeks Notes: svn path=/head/; revision=287247
* Revert part of r280687, reporting "1" (true) for empty value.Alexander Motin2015-08-131-1/+1
| | | | | | | | | | For example, it made gpart partitions without label report "1" as label. PR: 202089 MFC after: 3 days Notes: svn path=/head/; revision=286719
* libgeom: plug memory leak in EndElement.Pedro F. Giffuni2015-04-221-0/+1
| | | | | | | | | CID: 1016696 Found by: Clang static checker MFC after: 1 week Notes: svn path=/head/; revision=281875
* Make GEOM_PART work in presence of previous withered self.Alexander Motin2015-03-261-3/+12
| | | | | | | | MFC after: 2 weeks Sponsored by: iXsystems, Inc. Notes: svn path=/head/; revision=280687
* Since there's no defined schema for the XML that's generated by theScott Long2013-07-191-0/+2
| | | | | | | | | | | | kern.geom.confxml sysctl, it's silly to warn about tags in libgeom, especially since libgeom exists simply to build a tree out of the conf information. Obtained from: Netflix MFC after: 3 days Notes: svn path=/head/; revision=253469
* Revert r253247. This change should be improved based on a lesson learntHiroki Sato2013-07-121-2/+2
| | | | | | | | | from r233646 first. Pointed out by: jmallett Notes: svn path=/head/; revision=253249
* Use strtoumax() instead of strtoul() for id/ref attr in XML elements.Hiroki Sato2013-07-121-2/+2
| | | | | | | | | This improves compatibility when running an ILP32 binary on LP64 kernel. Spotted by: gjb Notes: svn path=/head/; revision=253247
* Improve libgeom XML parsing error handling.Jaakko Heinonen2012-10-261-8/+33
| | | | | | | | | | - Abort parsing and return an error if we run out of memory. - Return EILSEQ from geom_xml2tree() for XML syntax errors. Silence on: freebsd-geom Notes: svn path=/head/; revision=242130
* Back out r233646. Although it fixed most libgeom consumers under 32-bitJuli Mallett2012-04-101-80/+28
| | | | | | | | | | | | | | | | | | | | | | compatibility, it broke programs using devstat, under 32-bit compatibility and not. It's very difficult to fix the identifiers used by devstat, so this change is simply being backed out. Since changes to 3rd-party code seem likely, and may be necessary to properly fix 32-bit binaries on 64-bit kernel, it would seem better to make more invasive changes to fix GEOM's problems with 32-bit compatibility in general. The right thing to do is to replace all of the use of pointers as opaque identifiers with a fixed-size (64-bit or even 32-bit should be enough for tracking unique GEOM elments) field. That probably maintains source compatibility with most GEOM consumers, and allows xml2tree to make better assumptions about how to decode the identifiers. Submitted by: Anton Yuzhaninov Notes: svn path=/head/; revision=234107
* Fix 32-bit libgeom consumers run on 64-bit kernels with COMPAT_FREEBSD32.Juli Mallett2012-03-291-28/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Kernel pointer values are used as opaque unique identifiers, which are then used to reconstruct references between various providers, classes, etc., inside libgeom from the source XML. Unfortunately, they're converted to pointer-width integers (in the form of pointers) to do this, and 32-bit userland pointers cannot hold sensible representations (however opaque) of 64-bit kernel pointers on all systems. In the case where the leading bits are zero and 32 distinct bits of pointer can be identified, this will happen to work. On systems where the upper 32-bits of kernel pointers are non-zero and the same for all kernel pointers, this will result in double frees and all kinds of bizarre crashes and linkage between objects inside libgeom. To mitigate this problem, treat the opaque identifiers in the XML as C strings instead, and internalize them to give unique and consistent per-object pointer values in userland for each identifier in the XML. This allows us to keep the libgeom logic the same with only minor changes to initial setup and parsing. It might be more sensible for speed reasons to treat the identifiers as numbers of a large size (uintmax_t, say) rather than strings, but strings seem fine for now. (As an added side-effect, this makes it slightly easier to identify unresolved references, but nothing has been added to inform the user of those.) Notes: svn path=/head/; revision=233646
* Handle null return from XML_ParserCreate and fix a few memory leaks onEd Maste2010-10-051-4/+10
| | | | | | | | | | error conditions. Submitted by: Mark Johnston <mjohnston at sandvine dot com> MFC after: 2 weeks Notes: svn path=/head/; revision=213451
* Expose stripe offset and stripe size through libgeom and geom(8) userlandXin LI2010-01-171-0/+10
| | | | | | | | | utilities. Reviewed by: pjd, mav (earlier version) Notes: svn path=/head/; revision=202454
* Add sbuf_new_auto as a shortcut for the very common case of creating aDag-Erling Smørgrav2008-08-091-1/+1
| | | | | | | | | | completely dynamic sbuf. Obtained from: Varnish MFC after: 2 weeks Notes: svn path=/head/; revision=181463
* - Simplify the procedure of retrieving XML-data from the kernel.Ulf Lilleengen2008-07-081-1/+36
| | | | | | | | | | | | | | | | - Fix a number of potential memory leaks in libgeom related to doing realloc without freeing old pointer if things go wrong. - Fix a number of places in libgeom where malloc and calloc return values were not checked. - Check malloc return value and provide sufficient warning messages when XML parsing fails. PR: kern/83464 Submitted by: Dan Lukes <dan - at - obluda.cz> Approved by: kib (mentor) Notes: svn path=/head/; revision=180369
* Check for NULL pointer return.Poul-Henning Kamp2005-05-241-0/+2
| | | | | | | Spotted by: marcus Notes: svn path=/head/; revision=146561
* Make libgeom usable by C++ programs:John Baldwin2004-03-091-90/+97
| | | | | | | | | | | | | - Add DECL wrappers to libgeom.h. - Rename structure members in libgeom.h to use a lg_ prefix for member names. This is required because a few structures had members named 'class' which made g++ very unhappy. - Catch gstat(8) and gconcat(8) up to these API changes. Reviewed by: phk Notes: svn path=/head/; revision=126786
* String the consumers into the list of the provider they are attached to.Poul-Henning Kamp2004-03-081-1/+5
| | | | | | | Noticed by: jhb Notes: svn path=/head/; revision=126748
* Constify arg to geom_lookupid().Poul-Henning Kamp2003-03-171-2/+2
| | | | | | | Improve a diagnostic printf. Notes: svn path=/head/; revision=112340
* Leak more stuff into libgeom.Poul-Henning Kamp2003-02-101-0/+428
Notes: svn path=/head/; revision=110603