libXrdVoms(1)
π libXrdVoms(1) β the XRootD plug-in that pulls VOMS attributes out of your proxy π
okay bestie, sit down, hydrate, and let me tell you about libXrdVoms β it's a plug-in for XRootD (you know, the manual page situation, libXrdVoms(1)) and it's genuinely one of those little guys that does a very specific job extremely well. No cap. β¨
πΈ NAME πΈ
libXrdVoms β an XRootD plug-in to extract VOMS attributes π
β¨ SYNOPSIS β¨
sec.protparm gsi -vomsfun:libXrdVoms.so
sec.protparm gsi -vomsfunparms:options
π¦ DESCRIPTION π¦
So the tea is: the libXrdVoms plug-in is basically an implementation of these two functions π
int XrdSecgsiVOMSFun(XrdSecEntity &ent)
int XrdSecgsiVOMSInit(const char *cfg)
and the way it does it is by using the official VOMS API libraries to validate and extract the VOMS attributes from a VOMS proxy. That's the whole vibe. Reliable. Iconic. Doing its little job. π«Ά
π OPTIONS π
here's the full lineup, bestie, no skipping, we're reading every single one like the good students we are πβ¨
certfmt={raw,pem,x509}β picks the certificate format.rawis for using it with XrdCrypto tools;pemis that PEM base64 format (the one you see in cert files, you know the one); andx509gives you aSTACK_OF(X509). The default?raw. πgrpopt=optβ tells it how to use the group names info. Andoptis literallysel * 10 + whichβ math girlies rise π β whereselis either0(consider all the groups chillin' in the VOMS extension) or1(select among those groups specified by thegrpsoption; peep below), andwhichcan be0(take the first one),1(take the last), or2(take all of them, comma separated, and create a vertically sliced tuple β more on that in NOTES, don't worry). πgrps=grp1[,grp2,...]β the group(s) whose info gets extracted. And heads up: if you specify this, thegrpoptselgets set to1regardless of what you set it to. Rude? Maybe. But that's the rule. See NOTES. πvos=vo1[,vo2,...]β the VOs to be considered; the first match is the one that's taken. See NOTES. πgrpfmt=fmtstring,rolefmt=fmtstring,vofmt=fmtstringβ format strings for the content ofXrdSecEntity::grps,XrdSecEntity::role, andXrdSecEntity::vorg, respectively. These are optional and by default they're just empty, no drama. β¨
And the place holders it recognizes in those format strings are:
<r>: role<g>: group<vo>: VO<an>: Full Qualified Attribute Name
For example, rolefmt=<g>|grpfmt=<r>|vofmt="<vo> <an>" will invert the group and the role, and will add a space plus the FQAN in the vorg field of XrdSecEntity. Cute, right? π
dbgβ forces verbose mode. It's giving "tell me everything, I want the lore". π- Multiple options can be specified separated by
'|'. (Yes, the pipe. Our beloved.) π
π NOTES π
If you specify the grps or vos options, it forces a failure if the requested group and/or VO isn't found. π So yeah β in that regard, this plug-in can act as a sort of authorization filter. Lowkey powerful. But also note: the most refined authorization based on VOMS information can be achieved using the libXrdSecgsiAuthzVO plug-in distributed with XRootD. iykyk. π«Ά
Option 'all' for the group selection (which=2) will generate a vertically sliced tuple including VO, group, and role fields. So like, for example, these VOMS attributes right here π
attribute : /atlas/de/Role=production/Capability=NULL
attribute : /atlas/de/Role=NULL/Capability=NULL
attribute : /atlas/Role=NULL/Capability=NULL
would result in this content in the XrdSecEntity fields π
vorg: atlas atlas atlas
grps: /atlas/de /atlas/de /atlas
role: producton NULL NULL
And the default XrdAcc will take its decision by checking, in turn, the triplets you get from slicing this tuple vertically. Slay. π₯
π₯ EXAMPLES π₯
This example shows you how to configure the plug-in to select VO=cms, select the first group, use the PEM format for the proxy, and switch on debugging. It also shows how to specify multiple options β either on the same line or spread across multiple lines. Both valid, both iconic. π
sec.protparm gsi -vomsfun:libXrdVoms.so
sec.protparm gsi -vomsfunparms:grpopt=0|vos=cms|certfmt=pem
sec.protparm gsi -vomsfunparms:dbg
π FILES π
The plug-in files are
lib64/libXrdVoms-4.so (or lib/libXrdVoms-4.so)
include/xrootd/private/XrdVoms/XrdVoms.hh
and they're typically available under /usr. ποΈβ¨
π ENVIRONMENT π
The environment variable X509_VOMS_DIR must be set to a valid directory. Typically it's /etc/grid-security/vomsdir. So like, don't forget it, bestie, or the whole thing is gonna be mad at you. π€
π§ DIAGNOSTICS π§
The libXrdVoms plug-in requires libvomsapi.so and the openssl libraries. And if you hit a load failure, it may be useful to check with ldd whether all the required dependencies are correctly resolved. Classic move, always works. π§
β LICENSE β
LGPL; see http://www.gnu.org/licenses/.
π AUTHOR AND SUPPORT π
The libXrdVoms plug-in has been implemented by Gerardo Ganis (Gerardo.Ganis@cern.ch). If you need support, any request should be addressed via the project main web site
https://github.com/gganis/vomsxrd
or via the XRootD support site
https://github.com/xrootd/xrootd
and that's the whole page, bestie π this was v6.2.0 of the libXrdVoms(1) manual, and honestly? she ate. go forth and extract those VOMS attributes. periodt. πβ¨π¦πΈπ
π¦ where this page comes from
- epel 10: xrootd-voms 1:6.2.0-2.el10_3 Β· LGPL-3.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND curl AND MIT AND Zlib AND Apache-2.0 AND MPL-2.0
- fedora 44: xrootd-voms 1:6.2.0-2.fc44 Β· LGPL-3.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND curl AND MIT AND Zlib AND Apache-2.0 AND MPL-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms