diff --git a/sources b/sources index a60e94b..cc1111c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (voms-2.1.0-rc5.tar.gz) = 41a2bc249582c84239fbb1b187cc07e84717752665b017e9004969de4062d801c2228a88bfeb8d3d59f18ee4e923df24fa89fdb6a3bf99776ca9db675bd1099d +SHA512 (voms-2.1.3.tar.gz) = c17af601591cd9bdbb678e1db638cd33033cc73b3c5b16e117c8c47e211e5f19e7a105af55095bc2267dc5889c08fba20d340917c61a68b45ba2a76bdffb8f0d diff --git a/voms-openssl4.patch b/voms-openssl4.patch new file mode 100644 index 0000000..5b96532 --- /dev/null +++ b/voms-openssl4.patch @@ -0,0 +1,374 @@ +diff -ruN a/src/ac/validate.cc b/src/ac/validate.cc +--- a/src/ac/validate.cc 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/ac/validate.cc 2026-04-29 15:38:19.136425930 +0200 +@@ -205,8 +205,8 @@ + } + + v.version = 1; +- v.siglen = ac->signature->length; +- v.signature = std::string((char*)ac->signature->data, ac->signature->length); ++ v.siglen = ASN1_STRING_length(ac->signature); ++ v.signature = std::string((char*)ASN1_STRING_get0_data(ac->signature), ASN1_STRING_length(ac->signature)); + bn = ASN1_INTEGER_to_BN(ac->acinfo->serial, NULL); + char *bnstring = BN_bn2hex(bn); + v.serial = std::string(bnstring); +@@ -294,15 +294,15 @@ + if (X509_NAME_cmp(name->d.dirn, X509_get_subject_name(issuer))) + ERROR(AC_ERR_ISSUER_NAME); + +- if (ac->acinfo->serial->length>20) ++ if (ASN1_STRING_length(ac->acinfo->serial)>20) + ERROR(AC_ERR_SERIAL); + } + + b = ac->acinfo->validity->notBefore; + a = ac->acinfo->validity->notAfter; + +- v.date1 = std::string((char*)b->data, b->length); +- v.date2 = std::string((char*)a->data, a->length); ++ v.date1 = std::string((char*)ASN1_STRING_get0_data(b), ASN1_STRING_length(b)); ++ v.date2 = std::string((char*)ASN1_STRING_get0_data(a), ASN1_STRING_length(a)); + + if (valids & VERIFY_DATE) { + time_t ctime, dtime; +@@ -315,8 +315,8 @@ + ctime += 300; + dtime = ctime-600; + +- if ((a->type != V_ASN1_GENERALIZEDTIME) || +- (b->type != V_ASN1_GENERALIZEDTIME)) ++ if ((ASN1_STRING_type(a) != V_ASN1_GENERALIZEDTIME) || ++ (ASN1_STRING_type(b) != V_ASN1_GENERALIZEDTIME)) + ERROR(AC_ERR_DATES); + + if (((X509_cmp_time(b, &vertime) >= 0) && +@@ -379,7 +379,7 @@ + /* put policyAuthority in voms struct */ + data = sk_GENERAL_NAME_value(capattr->names, 0); + if (data->type == GEN_URI) { +- v.voname = std::string((char*)data->d.ia5->data, data->d.ia5->length); ++ v.voname = std::string((char*)ASN1_STRING_get0_data(data->d.ia5), ASN1_STRING_length(data->d.ia5)); + std::string::size_type point = v.voname.find("://"); + + if (point != std::string::npos) { +@@ -398,10 +398,10 @@ + for (int i=0; itype == V_ASN1_OCTET_STRING)) ++ if (!(ASN1_STRING_type(capname) == V_ASN1_OCTET_STRING)) + return AC_ERR_ATTRIB_FQAN; + +- std::string str = std::string((char*)capname->data, capname->length); ++ std::string str = std::string((char*)ASN1_STRING_get0_data(capname), ASN1_STRING_length(capname)); + std::string::size_type top_group_size = top_group.size(); + std::string::size_type str_size = str.size(); + +@@ -556,14 +556,14 @@ + if (key->keyid) { + unsigned char hashed[SHA_DIGEST_LENGTH]; + +- ASN1_BIT_STRING* pubkey = X509_get0_pubkey_bitstr(iss); +- if (!SHA1(pubkey->data, +- pubkey->length, ++ const ASN1_BIT_STRING* pubkey = X509_get0_pubkey_bitstr(iss); ++ if (!SHA1(ASN1_STRING_get0_data(pubkey), ++ ASN1_STRING_length(pubkey), + hashed)) + ret = AC_ERR_EXT_KEY; + +- if ((memcmp(key->keyid->data, hashed, 20) != 0) && +- (key->keyid->length == 20)) ++ if ((memcmp(ASN1_STRING_get0_data(key->keyid), hashed, 20) != 0) && ++ (ASN1_STRING_length(key->keyid) == 20)) + ret = AC_ERR_EXT_KEY; + } + else { +@@ -574,7 +574,7 @@ + (X509_get0_serialNumber(iss)))) + ret = AC_ERR_EXT_KEY; + +- if (key->serial->type != GEN_DIRNAME) ++ if (ASN1_STRING_type(key->serial) != GEN_DIRNAME) + ret = AC_ERR_EXT_KEY; + + if (X509_NAME_cmp(sk_GENERAL_NAME_value((key->issuer), 0)->d.dirn, +@@ -632,15 +632,15 @@ + AC_ATTRIBUTE *at = sk_AC_ATTRIBUTE_value(atts, j); + + struct attribute a; +- a.name = std::string((char*)at->name->data, at->name->length); +- a.value = std::string((char*)at->value->data, at->value->length); +- a.qualifier = std::string((char*)at->qualifier->data, at->qualifier->length); ++ a.name = std::string((char*)ASN1_STRING_get0_data(at->name), ASN1_STRING_length(at->name)); ++ a.value = std::string((char*)ASN1_STRING_get0_data(at->value), ASN1_STRING_length(at->value)); ++ a.qualifier = std::string((char*)ASN1_STRING_get0_data(at->qualifier), ASN1_STRING_length(at->qualifier)); + + al.attributes.push_back(a); + } + + gn = sk_GENERAL_NAME_value(holder->grantor, 0); +- al.grantor = std::string((char*)gn->d.ia5->data, gn->d.ia5->length); ++ al.grantor = std::string((char*)ASN1_STRING_get0_data(gn->d.ia5), ASN1_STRING_length(gn->d.ia5)); + + rd->attributes->push_back(al); + } +diff -ruN a/src/api/ccapi/api_util.cc b/src/api/ccapi/api_util.cc +--- a/src/api/ccapi/api_util.cc 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/api/ccapi/api_util.cc 2026-04-29 16:05:24.239940677 +0200 +@@ -139,7 +139,7 @@ + int index = X509_get_ext_by_NID(cert, nid, -1); + + if (index >= 0) +- return X509_get_ext(cert, index); ++ return const_cast(X509_get_ext(cert, index)); + else + return NULL; + } +@@ -157,17 +157,17 @@ + + ext = get_ext(cert, "incfile"); + if (ext) { +- ASN1_OCTET_STRING* value = X509_EXTENSION_get_data(ext); ++ const ASN1_OCTET_STRING* value = X509_EXTENSION_get_data(ext); + assert(value && "X509_EXTENSION_get_data failed"); +- extra_data = std::string(reinterpret_cast(value->data), value->length); ++ extra_data = std::string(reinterpret_cast(ASN1_STRING_get0_data(value)), ASN1_STRING_length(value)); + found = true; + } + + ext = get_ext(cert, "vo"); + if (ext) { +- ASN1_OCTET_STRING* value = X509_EXTENSION_get_data(ext); ++ const ASN1_OCTET_STRING* value = X509_EXTENSION_get_data(ext); + assert(value && "X509_EXTENSION_get_data failed"); +- workvo = std::string(reinterpret_cast(value->data), value->length); ++ workvo = std::string(reinterpret_cast(ASN1_STRING_get0_data(value)), ASN1_STRING_length(value)); + } + + return found; +@@ -423,7 +423,7 @@ + return NULL; + } + +- std::string voname((const char *)name->d.ia5->data, 0, name->d.ia5->length); ++ std::string voname((const char *)ASN1_STRING_get0_data(name->d.ia5), 0, ASN1_STRING_length(name->d.ia5)); + std::string::size_type cpos = voname.find("://"); + std::string hostname; + +diff -ruN a/src/api/ccapi/voms_api.cc b/src/api/ccapi/voms_api.cc +--- a/src/api/ccapi/voms_api.cc 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/api/ccapi/voms_api.cc 2026-04-29 16:05:14.064784528 +0200 +@@ -1025,8 +1025,8 @@ + AC_TARGET *name = NULL; + name = sk_AC_TARGET_value(target->targets, i); + if (name->name->type == GEN_URI) +- targets.push_back(std::string((char*)(name->name->d.ia5->data), +- name->name->d.ia5->length)); ++ targets.push_back(std::string((char*)ASN1_STRING_get0_data(name->name->d.ia5), ++ ASN1_STRING_length(name->name->d.ia5))); + } + } + AC_TARGETS_free(target); +diff -ruN a/src/include/sslutils.h b/src/include/sslutils.h +--- a/src/include/sslutils.h 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/include/sslutils.h 2026-04-29 14:45:17.997509299 +0200 +@@ -403,8 +403,8 @@ + int + proxy_check_issued( + X509_STORE_CTX * ctx, +- X509 * x, +- X509 * issuer); ++ const X509 * x, ++ const X509 * issuer); + + int + proxy_verify_certchain( +diff -ruN a/src/sslutils/proxy.c b/src/sslutils/proxy.c +--- a/src/sslutils/proxy.c 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/sslutils/proxy.c 2026-04-29 15:21:22.859426069 +0200 +@@ -543,8 +543,9 @@ + oct = ASN1_OCTET_STRING_new(); + assert(oct != NULL && "ASN1_OCTET_STRING_new failed"); + +- oct->data = der; +- oct->length = len; ++ ASN1_STRING_set0(oct, der, len); ++ ++ + ex7 = X509_EXTENSION_create_by_NID(NULL, v3nid, 1 /*critical*/, oct); + + ASN1_OCTET_STRING_free(oct); +@@ -683,8 +684,7 @@ + goto err; + } + +- ex_oct->data = (unsigned char*)data; +- ex_oct->length = datalen; ++ ASN1_STRING_set0(ex_oct, (unsigned char*)data, datalen); + + if (!(ex = X509_EXTENSION_create_by_OBJ(NULL, ex_obj, crit, ex_oct))) { + PRXYerr(PRXYERR_F_PROXY_SIGN,PRXYERR_R_CLASS_ADD_EXT); +@@ -694,8 +694,7 @@ + + if (ex_oct) { + /* avoid spurious free of the contents. */ +- ex_oct->length = 0; +- ex_oct->data = NULL; ++ ASN1_STRING_set0(ex_oct, NULL, 0); + ASN1_OCTET_STRING_free(ex_oct); + } + +@@ -806,10 +805,10 @@ + ASN1_BIT_STRING *usage = X509_get_ext_d2i(cert, NID_key_usage, NULL, NULL); + + if (usage) { +- if (usage->length > 0) +- keyusage = usage->data[0]; +- if (usage->length > 1) +- keyusage |= usage->data[1] << 8; ++ if (ASN1_STRING_length(usage) > 0) ++ keyusage = ASN1_STRING_get0_data(usage)[0]; ++ if (ASN1_STRING_length(usage) > 1) ++ keyusage |= ASN1_STRING_get0_data(usage)[1] << 8; + + ASN1_BIT_STRING_free(usage); + } +diff -ruN a/src/sslutils/proxycertinfo.c b/src/sslutils/proxycertinfo.c +--- a/src/sslutils/proxycertinfo.c 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/sslutils/proxycertinfo.c 2026-04-29 14:44:27.158966391 +0200 +@@ -107,9 +107,9 @@ + BIO_printf(out, "%*sPolicy Language: ", indent, ""); + i2a_ASN1_OBJECT(out, pci->proxyPolicy->policyLanguage); + BIO_puts(out, "\n"); +- if (pci->proxyPolicy->policy && pci->proxyPolicy->policy->data) ++ if (pci->proxyPolicy->policy && ASN1_STRING_get0_data(pci->proxyPolicy->policy)) + BIO_printf(out, "%*sPolicy Text: %s\n", indent, "", +- pci->proxyPolicy->policy->data); ++ ASN1_STRING_get0_data(pci->proxyPolicy->policy)); + return 1; + } + +@@ -142,11 +142,11 @@ + { + if(policy->policy) + { +- (*length) = policy->policy->length; +- if(*length > 0 && policy->policy->data) ++ (*length) = ASN1_STRING_length(policy->policy); ++ if(*length > 0 && ASN1_STRING_get0_data(policy->policy)) + { + unsigned char * copy = malloc(*length); +- memcpy(copy, policy->policy->data, *length); ++ memcpy(copy, ASN1_STRING_get0_data(policy->policy), *length); + return copy; + } + } +diff -ruN a/src/sslutils/sslutils.c b/src/sslutils/sslutils.c +--- a/src/sslutils/sslutils.c 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/sslutils/sslutils.c 2026-04-29 14:45:33.014031670 +0200 +@@ -404,10 +404,12 @@ + void PRIVATE + ERR_set_continue_needed(void) + { ++#if OPENSSL_VERSION_NUMBER < 0x40000000L + ERR_STATE *es; + es = ERR_get_state(); + es->err_data_flags[es->top] = + es->err_data_flags[es->top] | ERR_DISPLAY_CONTINUE_NEEDED; ++#endif + } + + +@@ -1669,8 +1671,8 @@ + + int PRIVATE + proxy_check_issued(UNUSED(X509_STORE_CTX * ctx), +- X509 * x, +- X509 * issuer) ++ const X509 * x, ++ const X509 * issuer) + { + int return_value; + int return_code = 1; +@@ -3268,7 +3270,7 @@ + struct tm tm; + int size = 0; + +- switch (ctm->type) { ++ switch (ASN1_STRING_type(ctm)) { + case V_ASN1_UTCTIME: + size=10; + break; +@@ -3277,8 +3279,8 @@ + break; + } + p = buff1; +- i = ctm->length; +- str = (char *)ctm->data; ++ i = ASN1_STRING_length(ctm); ++ str = (char *)ASN1_STRING_get0_data(ctm); + if ((i < 11) || (i > 17)) { + return 0; + } +@@ -3311,7 +3313,7 @@ + + tm.tm_isdst = 0; + int index = 0; +- if (ctm->type == V_ASN1_UTCTIME) { ++ if (ASN1_STRING_type(ctm) == V_ASN1_UTCTIME) { + tm.tm_year = (buff1[index++]-'0')*10; + tm.tm_year += (buff1[index++]-'0'); + } +diff -ruN a/src/sslutils/voms_cert_type.c b/src/sslutils/voms_cert_type.c +--- a/src/sslutils/voms_cert_type.c 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/sslutils/voms_cert_type.c 2026-04-29 15:05:46.737365952 +0200 +@@ -256,11 +256,11 @@ + + ne_data = X509_NAME_ENTRY_get_data(ne); + +- if (ne_data->length == 5 && !memcmp(ne_data->data,"proxy",5)) ++ if (ASN1_STRING_length(ne_data) == 5 && !memcmp(ASN1_STRING_get0_data(ne_data),"proxy",5)) + { + *cert_type = VOMS_CERT_TYPE_GSI_2_PROXY; + } +- else if (ne_data->length == 13 && !memcmp(ne_data->data,"limited proxy",13)) ++ else if (ASN1_STRING_length(ne_data) == 13 && !memcmp(ASN1_STRING_get0_data(ne_data),"limited proxy",13)) + { + *cert_type = VOMS_CERT_TYPE_GSI_2_LIMITED_PROXY; + } +@@ -293,7 +293,7 @@ + ne_data = X509_NAME_ENTRY_get_data(ne); + + if ((new_ne = X509_NAME_ENTRY_create_by_NID( NULL, NID_commonName, +- ne_data->type, ne_data->data, -1)) == NULL){ ++ ASN1_STRING_type(ne_data), ASN1_STRING_get0_data(ne_data), -1)) == NULL){ + + result = voms_validation_error( + PRXYERR_R_ERROR_BUILDING_SUBJECT, +diff -ruN a/src/utils/voms_proxy_info.cc b/src/utils/voms_proxy_info.cc +--- a/src/utils/voms_proxy_info.cc 2025-12-18 13:39:27.000000000 +0100 ++++ b/src/utils/voms_proxy_info.cc 2026-04-29 16:06:20.035319031 +0200 +@@ -466,18 +466,10 @@ + static ASN1_TIME * + convtime(std::string data) + { +- ASN1_TIME *t= ASN1_TIME_new(); +- +- t->data = (unsigned char*)strdup(data.data()); +- t->length = data.size(); +- switch(t->length) { +- case 10: +- t->type = V_ASN1_UTCTIME; +- break; +- case 15: +- t->type = V_ASN1_GENERALIZEDTIME; +- break; +- default: ++ ASN1_TIME *t = ASN1_TIME_new(); ++ if (!t) ++ return NULL; ++ if (!ASN1_TIME_set_string(t, data.c_str())) { + ASN1_TIME_free(t); + return NULL; + } diff --git a/voms-sysusers.conf b/voms-sysusers.conf new file mode 100644 index 0000000..285c016 --- /dev/null +++ b/voms-sysusers.conf @@ -0,0 +1,2 @@ +# Name ID GECOS Home directory Shell +u voms - "VOMS Server Account" /etc/voms - diff --git a/voms.spec b/voms.spec index cb2c9fb..c501ac4 100644 --- a/voms.spec +++ b/voms.spec @@ -1,21 +1,19 @@ %global _hardened_build 1 -%if %{?fedora}%{!?fedora:0} >= 25 || %{?rhel}%{!?rhel:0} >= 8 -%global use_systemd 1 -%else -%global use_systemd 0 -%endif - Name: voms -Version: 2.1.0 -Release: 0.35.rc5%{?dist} +Version: 2.1.3 +Release: 7%{?dist} Summary: Virtual Organization Membership Service License: Apache-2.0 URL: https://italiangrid.github.io/voms/ -Source0: https://github.com/italiangrid/%{name}/archive/v%{version}-rc5/%{name}-%{version}-rc5.tar.gz +Source0: https://github.com/italiangrid/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz # Post-install setup instructions: Source1: %{name}.INSTALL +# System user creation config +Source2: %{name}-sysusers.conf + +Patch0: voms-openssl4.patch BuildRequires: make BuildRequires: gcc-c++ @@ -27,9 +25,7 @@ BuildRequires: pkgconfig BuildRequires: libxslt BuildRequires: docbook-style-xsl BuildRequires: doxygen -%if %{use_systemd} BuildRequires: systemd-rpm-macros -%endif %description The Virtual Organization Membership Service (VOMS) is an attribute authority @@ -79,7 +75,7 @@ Provides: voms-clients = %{version}-%{release} Obsoletes: voms-clients < 2.0.12-3 Requires(post): %{_sbindir}/update-alternatives -Requires(postun): %{_sbindir}/update-alternatives +Requires(preun): %{_sbindir}/update-alternatives %description clients-cpp The Virtual Organization Membership Service (VOMS) is an attribute authority @@ -95,16 +91,8 @@ services. %package server Summary: Virtual Organization Membership Service Server Requires: %{name}%{?_isa} = %{version}-%{release} - -Requires(pre): shadow-utils -%if %{use_systemd} +%{?sysusers_requires_compat} %{?systemd_requires} -%else -Requires(post): chkconfig -Requires(preun): chkconfig -Requires(preun): initscripts -Requires(postun): initscripts -%endif %description server The Virtual Organization Membership Service (VOMS) is an attribute authority @@ -117,7 +105,8 @@ authorization purposes. This package provides the VOMS service. %prep -%setup -q -n %{name}-%{version}-rc5 +%setup -q +%patch 0 -p1 -b .openssl4 ./autogen.sh @@ -133,21 +122,13 @@ install -m 644 -p %{SOURCE1} README.Fedora rm %{buildroot}%{_libdir}/*.la -%if %{use_systemd} mkdir -p %{buildroot}%{_unitdir} install -m 644 -p systemd/%{name}@.service %{buildroot}%{_unitdir} rm %{buildroot}%{_initrddir}/%{name} rm %{buildroot}%{_sysconfdir}/sysconfig/%{name} -%else -# Turn off default enabling of the service -sed -e 's/\(chkconfig: \)\w*/\1-/' \ - -e '/Default-Start/d' \ - -e 's/\(Default-Stop:\s*\).*/\10 1 2 3 4 5 6/' \ - -i %{buildroot}%{_initrddir}/%{name} -%endif -mkdir -p %{buildroot}%{_pkgdocdir} -install -m 644 -p AUTHORS README.md %{buildroot}%{_pkgdocdir} +mkdir -p %{buildroot}%{_sysusersdir} +install -m 644 -p %{SOURCE2} %{buildroot}%{_sysusersdir}/%{name}.conf mkdir -p %{buildroot}%{_pkgdocdir}/VOMS_C_API cp -pr doc/apidoc/api/VOMS_C_API/html %{buildroot}%{_pkgdocdir}/VOMS_C_API @@ -157,18 +138,18 @@ mkdir -p %{buildroot}%{_pkgdocdir}/VOMS_CC_API cp -pr doc/apidoc/api/VOMS_CC_API/html %{buildroot}%{_pkgdocdir}/VOMS_CC_API rm -f %{buildroot}%{_pkgdocdir}/VOMS_CC_API/html/installdox +mkdir -p %{buildroot}%{_sysconfdir}/alternatives for b in voms-proxy-init voms-proxy-info voms-proxy-destroy; do ## Rename client binaries mv %{buildroot}%{_bindir}/${b} %{buildroot}%{_bindir}/${b}2 - touch %{buildroot}/%{_bindir}/${b} - chmod 755 %{buildroot}/%{_bindir}/${b} + ln -s %{_bindir}/${b}2 %{buildroot}%{_sysconfdir}/alternatives/${b} + ln -s %{_sysconfdir}/alternatives/${b} %{buildroot}%{_bindir}/${b} ## and man pages mv %{buildroot}%{_mandir}/man1/${b}.1 %{buildroot}%{_mandir}/man1/${b}2.1 - touch %{buildroot}%{_mandir}/man1/${b}.1 + ln -s %{_mandir}/man1/${b}2.1.gz %{buildroot}%{_sysconfdir}/alternatives/${b}.1.gz + ln -s %{_sysconfdir}/alternatives/${b}.1.gz %{buildroot}%{_mandir}/man1/${b}.1.gz done -%ldconfig_scriptlets - %posttrans # Recover /etc/vomses... if [ -r %{_sysconfdir}/vomses.rpmsave -a ! -r %{_sysconfdir}/vomses ] ; then @@ -176,17 +157,7 @@ if [ -r %{_sysconfdir}/vomses.rpmsave -a ! -r %{_sysconfdir}/vomses ] ; then fi %pre server -getent group %{name} >/dev/null || groupadd -r %{name} -getent passwd %{name} >/dev/null || useradd -r -g %{name} \ - -d %{_sysconfdir}/%{name} -s /sbin/nologin -c "VOMS Server Account" %{name} - -%if %{use_systemd} -# Remove old init config when systemd is used -/sbin/service voms stop >/dev/null 2>&1 || : -/sbin/chkconfig --del voms >/dev/null 2>&1 || : -%endif - -%if %{use_systemd} +%sysusers_create_compat %{SOURCE2} %post server if [ $1 -eq 1 ] ; then @@ -209,26 +180,6 @@ if [ $1 -ge 1 ] ; then done fi -%else - -%post server -if [ $1 = 1 ]; then - /sbin/chkconfig --add %{name} -fi - -%preun server -if [ $1 = 0 ]; then - /sbin/service %{name} stop >/dev/null 2>&1 || : - /sbin/chkconfig --del %{name} -fi - -%postun server -if [ $1 -ge 1 ]; then - /sbin/service %{name} condrestart >/dev/null 2>&1 || : -fi - -%endif - %pre clients-cpp if [ $1 -gt 1 ]; then for c in voms-proxy-init voms-proxy-info voms-proxy-destroy; do @@ -255,7 +206,7 @@ fi --slave %{_mandir}/man1/voms-proxy-destroy.1.gz voms-proxy-destroy-man \ %{_mandir}/man1/voms-proxy-destroy2.1.gz -%postun clients-cpp +%preun clients-cpp if [ $1 -eq 0 ] ; then %{_sbindir}/update-alternatives --remove voms-proxy-init \ %{_bindir}/voms-proxy-init2 @@ -287,9 +238,8 @@ fi %dir %{_sysconfdir}/grid-security/vomsdir %dir %{_datadir}/%{name} %{_datadir}/%{name}/vomses.template -%doc %dir %{_pkgdocdir} -%doc %{_pkgdocdir}/AUTHORS -%doc %{_pkgdocdir}/README.md +%doc AUTHORS +%doc README.md %license LICENSE %files devel @@ -301,9 +251,9 @@ fi %files doc %doc %dir %{_pkgdocdir} -%doc %{_pkgdocdir}/AUTHORS %doc %{_pkgdocdir}/VOMS_C_API %doc %{_pkgdocdir}/VOMS_CC_API +%doc AUTHORS %license LICENSE %files clients-cpp @@ -316,6 +266,9 @@ fi %ghost %{_bindir}/voms-proxy-destroy %ghost %{_bindir}/voms-proxy-info %ghost %{_bindir}/voms-proxy-init +%ghost %{_sysconfdir}/alternatives/voms-proxy-destroy +%ghost %{_sysconfdir}/alternatives/voms-proxy-info +%ghost %{_sysconfdir}/alternatives/voms-proxy-init %{_mandir}/man1/voms-proxy-destroy2.1* %{_mandir}/man1/voms-proxy-info2.1* %{_mandir}/man1/voms-proxy-init2.1* @@ -324,15 +277,13 @@ fi %ghost %{_mandir}/man1/voms-proxy-destroy.1* %ghost %{_mandir}/man1/voms-proxy-info.1* %ghost %{_mandir}/man1/voms-proxy-init.1* +%ghost %{_sysconfdir}/alternatives/voms-proxy-destroy.1* +%ghost %{_sysconfdir}/alternatives/voms-proxy-info.1* +%ghost %{_sysconfdir}/alternatives/voms-proxy-init.1* %files server %{_sbindir}/%{name} -%if %{use_systemd} %{_unitdir}/%{name}@.service -%else -%{_initrddir}/%{name} -%config(noreplace) %{_sysconfdir}/sysconfig/%{name} -%endif %attr(-,voms,voms) %dir %{_sysconfdir}/%{name} %dir %{_sysconfdir}/grid-security/%{name} %attr(-,voms,voms) %dir %{_localstatedir}/log/%{name} @@ -344,9 +295,55 @@ fi %{_datadir}/%{name}/voms_replica_master_setup.sh %{_datadir}/%{name}/voms_replica_slave_setup.sh %{_mandir}/man8/voms.8* +%{_sysusersdir}/%{name}.conf %doc README.Fedora %changelog +* Fri Jul 17 2026 Fedora Release Engineering - 2.1.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Mon Jun 15 2026 Yaakov Selkowitz - 2.1.3-6 +- Rebuilt for gsoap 2.8.142 + +* Fri Jun 12 2026 Yaakov Selkowitz - 2.1.3-5 +- Rebuilt for openssl 4.0 + +* Wed Apr 29 2026 Dmitry Belyavskiy - 2.1.3-4 +- Fix build with OpenSSL 4.0 (opaque ASN1_STRING, const X509, removed ERR_STATE) + +* Tue Jan 20 2026 Mattias Ellert - 2.1.3-3 +- Rebuild for gsoap 2.8.139 (Fedora 44) + +* Sat Jan 17 2026 Fedora Release Engineering - 2.1.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Sat Dec 20 2025 Mattias Ellert - 2.1.3-1 +- Update to version 2.1.3 + +* Fri Jul 25 2025 Fedora Release Engineering - 2.1.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Mar 27 2025 Mattias Ellert - 2.1.2-1 +- Update to version 2.1.2 +- Drop patch accepted upstream + +* Sat Mar 08 2025 Mattias Ellert - 2.1.0-5 +- Move user/group creation logic to sysusers.d fragment + +* Sun Jan 19 2025 Mattias Ellert - 2.1.0-4 +- Fix compilation with GCC 15 + +* Thu Oct 31 2024 Mattias Ellert - 2.1.0-3 +- Rebuild for gsoap 2.8.135 (Fedora 42) +- Add additional ghost files to package (rpmlint) + +* Sat Jul 20 2024 Fedora Release Engineering - 2.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jul 05 2024 Mattias Ellert - 2.1.0-1 +- Update to version 2.1.0 +- Drop EPEL 7 support from spec file (EOL) + * Tue Jun 18 2024 Mattias Ellert - 2.1.0-0.35.rc5 - Update to version 2.1.0-rc5