Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package yast2-auth-server for openSUSE:Factory checked in at 2022-08-23 14:25:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/yast2-auth-server (Old) and /work/SRC/openSUSE:Factory/.yast2-auth-server.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-auth-server" Tue Aug 23 14:25:50 2022 rev:27 rq:991998 version:4.5.1 Changes: -------- --- /work/SRC/openSUSE:Factory/yast2-auth-server/yast2-auth-server.changes 2022-04-14 17:24:00.707161445 +0200 +++ /work/SRC/openSUSE:Factory/.yast2-auth-server.new.2083/yast2-auth-server.changes 2022-08-23 14:26:25.511196866 +0200 @@ -1,0 +2,6 @@ +Wed Jul 27 00:50:39 UTC 2022 - William Brown <william.br...@suse.com> + +- Remove kerberos ldap database support (gh#yast/yast-auth-server#73) +- 4.5.1 + +------------------------------------------------------------------- Old: ---- yast2-auth-server-4.5.0.tar.bz2 New: ---- yast2-auth-server-4.5.1.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ yast2-auth-server.spec ++++++ --- /var/tmp/diff_new_pack.3UWMFf/_old 2022-08-23 14:26:25.935197800 +0200 +++ /var/tmp/diff_new_pack.3UWMFf/_new 2022-08-23 14:26:25.939197809 +0200 @@ -20,7 +20,7 @@ Summary: A tool for creating identity management server instances License: GPL-2.0-or-later Group: System/YaST -Version: 4.5.0 +Version: 4.5.1 Release: 0 URL: https://github.com/yast/yast-auth-server ++++++ yast2-auth-server-4.5.0.tar.bz2 -> yast2-auth-server-4.5.1.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/README.md new/yast2-auth-server-4.5.1/README.md --- old/yast2-auth-server-4.5.0/README.md 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/README.md 2022-08-01 12:44:13.000000000 +0200 @@ -11,8 +11,6 @@ The features are: * Create new directory server instance. - * Create new Kerberos server instance. - * Integrate Kerberos server with directory server. ## Install To install the latest stable version on openSUSE or SLE, use zypper: @@ -22,7 +20,7 @@ ``` # Run -Visit Yast control panel and launch "Create New Kerberos Server" or "Create New Directory Server". +Visit Yast control panel and launch "Create New Directory Server". # Development diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/package/yast2-auth-server.changes new/yast2-auth-server-4.5.1/package/yast2-auth-server.changes --- old/yast2-auth-server-4.5.0/package/yast2-auth-server.changes 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/package/yast2-auth-server.changes 2022-08-01 12:44:13.000000000 +0200 @@ -1,4 +1,10 @@ ------------------------------------------------------------------- +Wed Jul 27 00:50:39 UTC 2022 - William Brown <william.br...@suse.com> + +- Remove kerberos ldap database support (gh#yast/yast-auth-server#73) +- 4.5.1 + +------------------------------------------------------------------- Wed Apr 06 13:24:58 UTC 2022 - Ladislav Slez??k <lsle...@suse.cz> - Bump version to 4.5.0 (bsc#1198109) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/package/yast2-auth-server.spec new/yast2-auth-server-4.5.1/package/yast2-auth-server.spec --- old/yast2-auth-server-4.5.0/package/yast2-auth-server.spec 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/package/yast2-auth-server.spec 2022-08-01 12:44:13.000000000 +0200 @@ -18,7 +18,7 @@ Name: yast2-auth-server Group: System/YaST Summary: A tool for creating identity management server instances -Version: 4.5.0 +Version: 4.5.1 Release: 0 License: GPL-2.0-or-later Url: https://github.com/yast/yast-auth-server diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/clients/krb-server.rb new/yast2-auth-server-4.5.1/src/clients/krb-server.rb --- old/yast2-auth-server-4.5.0/src/clients/krb-server.rb 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/clients/krb-server.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. -# This program is free software; you can redistribute it and/or modify it under -# the terms of version 2 of the GNU General Public License as published by the -# Free Software Foundation. -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# You should have received a copy of the GNU General Public License along with -# this program; if not, contact SUSE LINUX GmbH. - -# Authors: Howard Guo <h...@suse.com> - -require 'authserver/ui/new_krb_inst' -require 'authserver/cli/auth-cli' -if Yast::WFM.Args.empty? - NewKrbInst.new.run -else - AuthServer::CLI.run("krb-server") -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/desktop/org.opensuse.yast.KrbServer.desktop new/yast2-auth-server-4.5.1/src/desktop/org.opensuse.yast.KrbServer.desktop --- old/yast2-auth-server-4.5.0/src/desktop/org.opensuse.yast.KrbServer.desktop 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/desktop/org.opensuse.yast.KrbServer.desktop 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -[Desktop Entry] -Type=Application -Categories=Settings;System;Qt;X-SuSE-YaST;X-SuSE-YaST-Net_advanced; - -X-KDE-ModuleType=Library -X-KDE-HasReadOnlyMode=true -X-SuSE-YaST-Call=krb-server - -X-SuSE-YaST-Group=Net_advanced -X-SuSE-YaST-RootOnly=true -X-SuSE-YaST-Keywords=authentication,kerberos,krb,krb5 - -Icon=yast-kerberos-server -Exec=xdg-su -c "/sbin/yast2 krb-server" - -Name=YaST New Kerberos Server -GenericName=New Kerberos Server -Comment=Create a New Kerberos Server -StartupNotify=true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/icons/hicolor/scalable/apps/yast-kerberos-server.svg new/yast2-auth-server-4.5.1/src/icons/hicolor/scalable/apps/yast-kerberos-server.svg --- old/yast2-auth-server-4.5.0/src/icons/hicolor/scalable/apps/yast-kerberos-server.svg 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/icons/hicolor/scalable/apps/yast-kerberos-server.svg 1970-01-01 01:00:00.000000000 +0100 @@ -1,131 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg version="1.0" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"> -<defs> -<linearGradient id="g" x1="64" x2="64" y1="276" y2="220" gradientUnits="userSpaceOnUse"> -<stop stop-color="#f5c211" offset="0"/> -<stop stop-color="#f6d32d" offset="1"/> -</linearGradient> -<linearGradient id="h" x1="24" x2="104" y1="272" y2="272" gradientUnits="userSpaceOnUse"> -<stop stop-color="#e5a50a" offset="0"/> -<stop stop-color="#f6d32d" offset=".025"/> -<stop stop-color="#e5a50a" offset=".05"/> -<stop stop-color="#e5a50a" offset=".95"/> -<stop stop-color="#f6d32d" offset=".975"/> -<stop stop-color="#e5a50a" offset="1"/> -</linearGradient> -<linearGradient id="a" x1="2" x2="30" y1="27" y2="27" gradientTransform="translate(0,-1)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#5e5c64" offset="0"/> -<stop stop-color="#9a9996" offset=".035714"/> -<stop stop-color="#5e5c64" offset=".071429"/> -<stop stop-color="#5e5c64" offset=".92857"/> -<stop stop-color="#9a9996" offset=".96429"/> -<stop stop-color="#5e5c64" offset="1"/> -</linearGradient> -<radialGradient id="i" cx="64" cy="59.733" r="32" gradientTransform="matrix(1 0 0 1.25 0 -34.667)" gradientUnits="userSpaceOnUse"> -<stop stop-color="#deddda" offset="0"/> -<stop stop-color="#c0bfbc" offset=".5"/> -<stop stop-color="#f6f5f4" offset=".75"/> -<stop stop-color="#deddda" offset="1"/> -</radialGradient> -<linearGradient id="f" x1="62" x2="70" y1="102" y2="50" gradientUnits="userSpaceOnUse"> -<stop stop-color="#f8e45c" offset="0"/> -<stop stop-color="#f9f06b" offset="1"/> -</linearGradient> -</defs> -<g transform="matrix(4 0 0 4 2 0)"> -<rect x="2" y="6" width="28" height="6" ry="1" fill="#5e5c64"/> -<rect x="2" y="12" width="28" height="6" ry="1" fill="#5e5c64"/> -<rect x="2" y="18" width="28" height="6" ry="1.0587" fill="#5e5c64"/> -<rect x="2" y="23" width="28" height="5" ry="1" fill="url(#a)"/> -<rect x="2" y="3" width="28" height="5" ry="1" fill="#9a9996"/> -<rect x="2" y="9" width="28" height="5" ry="1" fill="#9a9996"/> -<rect x="2" y="15" width="28" height="5" ry="1" fill="#9a9996"/> -<rect x="2" y="21" width="28" height="5" ry="1" fill="#9a9996"/> -<rect x="14" y="4" width="15" height="3" ry="0" fill="#3d3846"/> -<rect x="14" y="5" width="15" height="2" ry="0" fill="#5e5c64"/> -<rect x="14" y="10" width="15" height="3" ry="0" fill="#3d3846"/> -<rect x="14" y="11" width="15" height="2" ry="0" fill="#5e5c64"/> -<rect x="14" y="16" width="15" height="3" ry="0" fill="#3d3846"/> -<rect x="14" y="17" width="15" height="2" ry="0" fill="#5e5c64"/> -<rect x="14" y="22" width="15" height="3" ry="0" fill="#3d3846"/> -<rect x="14" y="23" width="15" height="2" ry="0" fill="#5e5c64"/> -<rect x="4" y="4" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="4" y="5" width="1" height="1" ry=".5" fill="#f6d32d"/> -<rect x="6" y="4" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="6" y="5" width="1" height="1" ry=".5" fill="#33d17a"/> -<rect x="4" y="10" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="4" y="11" width="1" height="1" ry=".5" fill="#33d17a"/> -<rect x="6" y="10" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="6" y="11" width="1" height="1" ry=".5" fill="#e01b24"/> -<rect x="4" y="16" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="4" y="17" width="1" height="1" ry=".5" fill="#e01b24"/> -<rect x="6" y="16" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="6" y="17" width="1" height="1" ry=".5" fill="#f6d32d"/> -<rect x="4" y="22" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="4" y="23" width="1" height="1" ry=".5" fill="#f6d32d"/> -<rect x="6" y="22" width="1" height="2" ry=".5" fill="#5e5c64"/> -<rect x="6" y="23" width="1" height="1" ry=".5" fill="#33d17a"/> -<rect x="15" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="15" y="10" width="1" height="1" fill="#241f31"/> -<rect x="17" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="17" y="10" width="1" height="1" fill="#241f31"/> -<rect x="19" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="19" y="10" width="1" height="1" fill="#241f31"/> -<rect x="21" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="21" y="10" width="1" height="1" fill="#241f31"/> -<rect x="23" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="23" y="10" width="1" height="1" fill="#241f31"/> -<rect x="25" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="25" y="10" width="1" height="1" fill="#241f31"/> -<rect x="27" y="11" width="1" height="2" fill="#3d3846"/> -<rect x="27" y="10" width="1" height="1" fill="#241f31"/> -<rect x="15" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="15" y="4" width="1" height="1" fill="#241f31"/> -<rect x="17" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="17" y="4" width="1" height="1" fill="#241f31"/> -<rect x="19" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="19" y="4" width="1" height="1" fill="#241f31"/> -<rect x="21" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="21" y="4" width="1" height="1" fill="#241f31"/> -<rect x="23" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="23" y="4" width="1" height="1" fill="#241f31"/> -<rect x="25" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="25" y="4" width="1" height="1" fill="#241f31"/> -<rect x="27" y="5" width="1" height="2" fill="#3d3846"/> -<rect x="27" y="4" width="1" height="1" fill="#241f31"/> -<rect x="15" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="15" y="16" width="1" height="1" fill="#241f31"/> -<rect x="17" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="17" y="16" width="1" height="1" fill="#241f31"/> -<rect x="19" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="19" y="16" width="1" height="1" fill="#241f31"/> -<rect x="21" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="21" y="16" width="1" height="1" fill="#241f31"/> -<rect x="23" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="23" y="16" width="1" height="1" fill="#241f31"/> -<rect x="25" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="25" y="16" width="1" height="1" fill="#241f31"/> -<rect x="27" y="17" width="1" height="2" fill="#3d3846"/> -<rect x="27" y="16" width="1" height="1" fill="#241f31"/> -<rect x="15" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="15" y="22" width="1" height="1" fill="#241f31"/> -<rect x="17" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="17" y="22" width="1" height="1" fill="#241f31"/> -<rect x="19" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="19" y="22" width="1" height="1" fill="#241f31"/> -<rect x="21" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="21" y="22" width="1" height="1" fill="#241f31"/> -<rect x="23" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="23" y="22" width="1" height="1" fill="#241f31"/> -<rect x="25" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="25" y="22" width="1" height="1" fill="#241f31"/> -<rect x="27" y="23" width="1" height="2" fill="#3d3846"/> -<rect x="27" y="22" width="1" height="1" fill="#241f31"/> -</g> -<g transform="translate(0,-172)"> -<rect x="24" y="260" width="80" height="24" ry="4" fill="url(#h)"/> -<rect x="24" y="220" width="80" height="56" ry="4" fill="url(#g)"/> -<path transform="translate(0,172)" d="m64 8c-17.728 0-32 14.272-32 32v8h16v-8c0-8.864 7.136-16 16-16s16 7.136 16 16v8h16v-8c0-17.728-14.272-32-32-32z" fill="url(#i)"/> -</g> -<path d="m70 50l-4 4v12l24 4v4l4-4v-4l-24-4v-12zm-8 8l-4 4v12l24 4v4l4-4v-4l-24-4v-12zm-8 8l-8 8-8 24 24 4v-8h8l8-8v-4l-24-4v-12z" fill="url(#f)"/> -</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/icons/hicolor/symbolic/apps/yast-kerberos-server-symbolic.svg new/yast2-auth-server-4.5.1/src/icons/hicolor/symbolic/apps/yast-kerberos-server-symbolic.svg --- old/yast2-auth-server-4.5.0/src/icons/hicolor/symbolic/apps/yast-kerberos-server-symbolic.svg 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/icons/hicolor/symbolic/apps/yast-kerberos-server-symbolic.svg 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"> - <path d="M 2 0 C 0.892 0 0 0.892 0 2 L 0 3 L 0 11 L 0 14 C 0 15.108 0.892 16 2 16 L 10 16 L 10 14 L 2 14 L 2 11 L 4 11 L 4 10 L 2 10 L 2 8 L 4 8 L 4 7 L 2 7 L 2 5 L 5 5 L 5 4 L 2 4 L 2 3 L 2 2 L 14 2 L 14 4 L 11 4 L 11 5 L 14 5 L 14 7 L 12 7 L 12 8 L 14 8 L 14 10 L 16 10 L 16 5 L 16 2 C 16 0.892 15.108 0 14 0 L 2 0 z M 8 3 C 6.892 3 6 3.892 6 5 L 6 6 L 5.5 6 C 5.223 6 5 6.223 5 6.5 L 5 9.5 C 5 9.777 5.223 10 5.5 10 L 10.5 10 C 10.777 10 11 9.777 11 9.5 L 11 6.5 C 11 6.223 10.777 6 10.5 6 L 10 6 L 10 5 C 10 3.892 9.108 3 8 3 z M 8 4 C 8.554 4 9 4.446 9 5 L 9 6 L 7 6 L 7 5 C 7 4.446 7.446 4 8 4 z M 11 11 L 11 16 L 16 16 L 16 11 L 11 11 z M 3.5 12 C 3.223 12 3 12.223 3 12.5 C 3 12.777 3.223 13 3.5 13 C 3.777 13 4 12.777 4 12.5 C 4 12.223 3.777 12 3.5 12 z M 5.5 12 C 5.223 12 5 12.223 5 12.5 C 5 12.777 5.223 13 5.5 13 C 5.777 13 6 12.777 6 12.5 C 6 12.223 5.777 12 5.5 12 z M 7.5 12 C 7.223 12 7 12.223 7 12.5 C 7 12.777 7.223 13 7.5 13 L 9.5 13 C 9.777 13 10 12.777 10 12.5 C 10 12.223 9.777 12 9.5 12 L 7.5 12 z M 12 12 L 13 12 L 13 13 L 14 13 L 14 12 L 15 12 L 15 14 L 14 14 L 14 15 L 13 15 L 13 14 L 12 14 L 12 12 z " fill="#c0bfbc" /> -</svg> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/lib/authserver/krb/mit.rb new/yast2-auth-server-4.5.1/src/lib/authserver/krb/mit.rb --- old/yast2-auth-server-4.5.0/src/lib/authserver/krb/mit.rb 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/lib/authserver/krb/mit.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,187 +0,0 @@ -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. -# This program is free software; you can redistribute it and/or modify it under -# the terms of version 2 of the GNU General Public License as published by the -# Free Software Foundation. -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# You should have received a copy of the GNU General Public License along with -# this program; if not, contact SUSE LINUX GmbH. - -# Authors: Howard Guo <h...@suse.com> - -require 'yast' -require 'open3' - -# MITKerberos serves utility functions for setting up a new directory connected KDC. -class MITKerberos - include Yast - include Yast::Logger - - # @see .kdb5_ldap_util_path - OLD_KDB5_LDAP_UTIL = "/usr/lib/mit/sbin/kdb5_ldap_util".freeze - KDB5_LDAP_UTIL = "/usr/sbin/kdb5_ldap_util".freeze - - private_constant :OLD_KDB5_LDAP_UTIL, :KDB5_LDAP_UTIL - - # install_pkgs installs software packages mandatory for setting up MIT Kerberos server. - def self.install_pkgs - Yast.import 'Package' - # DoInstall never fails - Package.DoInstall(['krb5-client', 'krb5-server', 'krb5-plugin-kdb-ldap'].delete_if{|name| Package.Installed(name)}) - end - - # is_configured returns true only if there kerberos configuration has been altered. - def self.is_configured - # If manual changes were made in config files, RPM verification will see them. - _, _, result = Open3.popen2e('rpm', '-V', 'krb5-server') - return result.value.exitstatus == 0 - end - - # gen_client_conf generates /etc/krb5.conf content for setting up a new KDC. - def self.gen_common_conf(realm_name, fqdn) - return "[libdefaults] - # \"dns_canonicalize_hostname\" and \"rdns\" are better set to false for improved security. - # If set to true, the canonicalization mechanism performed by Kerberos client may - # allow service impersonification, the consequence is similar to conducting TLS certificate - # verification without checking host name. - # If left unspecified, the two parameters will have default value true, which is less secure. - dns_canonicalize_hostname = false - rdns = false - default_realm = #{realm_name} - -[realms] - #{realm_name} = { - kdc = #{fqdn} - admin_server = #{fqdn} - } - -[domain_realm] - .#{realm_name.downcase} = #{realm_name} - #{realm_name.downcase} = #{realm_name} - -[logging] - kdc = FILE:/var/log/krb5/krb5kdc.log - admin_server = FILE:/var/log/krb5/kadmind.log - default = SYSLOG:NOTICE:DAEMON -" - end - - # gen_kdc_conf generates /var/lib/kerberos/krb5kdc/kdc.conf content for setting up a new KDC. - def self.gen_kdc_conf(realm_name, kdc_dn, admin_dn, container_dn, pass_file_path, ldaps_addr) - return "[kdcdefaults] - kdc_ports = 750,88 - -[realms] - #{realm_name} = { - database_module = contact_ldap - } - -[dbdefaults] - -[dbmodules] - contact_ldap = { - db_library = kldap - ldap_kdc_dn = \"#{kdc_dn}\" - ldap_kadmind_dn = \"#{admin_dn}\" - ldap_kerberos_container_dn = \"#{container_dn}\" - ldap_service_password_file = #{pass_file_path} - ldap_servers = ldaps://#{ldaps_addr} - } - -[logging] - kdc = FILE:/var/log/krb5/krb5kdc.log - admin_server = FILE:/var/log/krb5/kadmind.log -" - end - - # save_password_into_file saves a password into a password stash file for KDC to consume. - # Returns tuple of command output and boolean (success or not). - def self.save_password_into_file(dn, pass, file_path) - stdin, stdouterr, result = kdb5_ldap_util('stashsrvpw', '-f', file_path, '-w', pass, dn) - - # The utility asks for password input and repeat to verify - stdin.puts(pass) - stdin.puts(pass) - stdin.close - succeeded = result.value.exitstatus == 0 - if !succeeded - return [stdouterr.readlines.join('\n'), false] - end - File.chmod(0600, file_path) - return [stdouterr.readlines.join('\n'), true] - end - - # init_dir uses kerberos LDAP utility to prepare a directory server for kerberos operation. - # Returns tuple of command output and boolean (success or not). - def self.init_dir(ldaps_addr, dir_admin_dn, dir_admin_pass, realm_name, container_dn, master_pass) - log_args = init_dir_args(ldaps_addr, dir_admin_dn, "********", realm_name, container_dn, "********") - log.info(kdb5_ldap_util_path + " " + log_args.join(" ")) - - args = init_dir_args(ldaps_addr, dir_admin_dn, dir_admin_pass, realm_name, container_dn, master_pass) - stdin, stdouterr, result = kdb5_ldap_util(*args) - stdin.close - - return [stdouterr.readlines.join('\n'), result.value.exitstatus == 0] - end - - # restart_kdc restarts KDC system service. Returns true only on success. - def self.restart_kdc - _, _, result = Open3.popen2e('/usr/bin/systemctl', 'restart', 'krb5kdc') - return result.value.exitstatus == 0 - end - - # restart_kadmind restarts kerberos administration service. Returns true only on success. - def self.restart_kadmind - _, _, result = Open3.popen2e('/usr/bin/systemctl', 'restart', 'kadmind') - return result.value.exitstatus == 0 - end - - # append_to_log appends current time and content into log file placed under /root/. - def self.append_to_log(content) - log.info(content) - end - - private - - # Runs kdb5_ldap_util with the given arguments - # - # @params args [Array<String>] list of arguments passed to kdb5_ldap_util binary - # @return [Array(IO, IO, Process::Waiter)] i.e., [stdin, stdouterr, result] - def self.kdb5_ldap_util(*args) - Open3.popen2e(kdb5_ldap_util_path, *args) - end - - # Path to the kdb5_ldap_util binary - # - # Note that the lastest kbr5 package provides the kdb5_ldap_util binary at /usr/sbin, but older kbr5 - # uses the /usr/lib/mit/sbin path. This method checks which one is available in the system. - # - # @return [String] - def self.kdb5_ldap_util_path - File.exist?(KDB5_LDAP_UTIL) ? KDB5_LDAP_UTIL : OLD_KDB5_LDAP_UTIL - end - - # Arguments to use when initializing a dir - # - # @see .init_dir - # - # @param ldaps_addr [String] - # @param dir_admin_dn [String] - # @param dir_admin_pass [String] - # @param realm_name [String] - # @param container_dn [String] - # @param master_pass [String] - # - # @return [Array<String>] list of arguments - def self.init_dir_args(ldaps_addr, dir_admin_dn, dir_admin_pass, realm_name, container_dn, master_pass) - [ - '-H', 'ldaps://'+ldaps_addr, - '-D', dir_admin_dn, - '-w', dir_admin_pass, - 'create', '-r', realm_name, - '-subtrees', container_dn, - '-s', '-P', master_pass - ] - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/lib/authserver/ui/new_dir_inst.rb new/yast2-auth-server-4.5.1/src/lib/authserver/ui/new_dir_inst.rb --- old/yast2-auth-server-4.5.0/src/lib/authserver/ui/new_dir_inst.rb 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/lib/authserver/ui/new_dir_inst.rb 2022-08-01 12:44:13.000000000 +0200 @@ -20,6 +20,10 @@ Yast.import 'Label' Yast.import 'Popup' +def y2log + "/var/log/YaST2/y2log" +end + # NewDirInst dialog collects setup details as input and eventually creates a new directory server instance. class NewDirInst < UI::Dialog include Yast @@ -120,7 +124,7 @@ # Always remove the ini file DS389.remove_setup_ini if !ok - Popup.Error(_('Failed to set up new instance! Log output may be found in /var/log/YaST/y2log')) + Popup.Error(format(_('Failed to set up new instance! Log output may be found in %{y2log}'), y2log: y2log)) UI.ReplaceWidget(Id(:busy), Empty()) return end @@ -129,7 +133,7 @@ UI.ReplaceWidget(Id(:busy), Label(_('Configuring instance TLS ...'))) # Turn on TLS if !DS389.install_tls_in_nss(instance_name, tls_ca, tls_p12) - Popup.Error(_('Failed to set up new instance! Log output may be found in /var/log/YaST/y2log')) + Popup.Error(format(_('Failed to set up new instance! Log output may be found in %{y2log}'), y2log: y2log)) UI.ReplaceWidget(Id(:busy), Empty()) return end @@ -142,7 +146,7 @@ end UI.ReplaceWidget(Id(:busy), Empty()) - Popup.Message(_('New instance has been set up! Log output may be found in /var/log/YaST/y2log')) + Popup.Message(format(_('New instance has been set up! Log output may be found in %{y2log}'), y2log: y2log)) finish_dialog(:next) UI.ReplaceWidget(Id(:busy), Empty()) end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/src/lib/authserver/ui/new_krb_inst.rb new/yast2-auth-server-4.5.1/src/lib/authserver/ui/new_krb_inst.rb --- old/yast2-auth-server-4.5.0/src/lib/authserver/ui/new_krb_inst.rb 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/src/lib/authserver/ui/new_krb_inst.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,255 +0,0 @@ -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. -# This program is free software; you can redistribute it and/or modify it under -# the terms of version 2 of the GNU General Public License as published by the -# Free Software Foundation. -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# You should have received a copy of the GNU General Public License along with -# this program; if not, contact SUSE LINUX GmbH. - -# Authors: Howard Guo <h...@suse.com> - -require 'yast' -require 'ui/dialog' -require 'authserver/dir/ds389' -require 'authserver/dir/client' -require 'authserver/krb/mit' -Yast.import 'UI' -Yast.import 'Icon' -Yast.import 'Label' -Yast.import 'Popup' - -# NewKrbInst dialog collects setup details as input and eventually creates/replaces a new Kerberos server instance. -class NewKrbInst < UI::Dialog - include Yast - include UIShortcuts - include I18n - include Logger - - def initialize - super - textdomain 'authserver' - end - - def dialog_options - Opt(:decorated) - end - - def finish_handler - finish_dialog(:next) - end - - def dialog_content - VBox( - Left(Heading(_('Create New Kerberos Instance'))), - HBox( - VBox( - Frame(_('General options (mandatory)'), - VBox( - InputField(Id(:fqdn), Opt(:hstretch), _('Fully qualified domain name (e.g. krb.example.net)'), ''), - InputField(Id(:realm), Opt(:hstretch), _('Realm name (e.g. EXAMPLE.NET)'), ''), - ), - ), - Frame(_('389 directory server connectivity (mandatory)'), - VBox( - InputField(Id(:dir_addr), Opt(:hstretch), _('Fully qualified domain name (e.g. dir.example.net)'), ''), - InputField(Id(:dir_suffix), Opt(:hstretch), _('Directory suffix (e.g. dc=example,dc=net)'), ''), - Password(Id(:dm_pass), Opt(:hstretch), _('"cn=Directory Manager" password'), ''), - ), - ), - ), - Frame(_('Security options (mandatory)'), - VBox( - Password(Id(:master_pass), Opt(:hstretch), _('Kerberos database master password'), ''), - Password(Id(:master_pass_repeat), Opt(:hstretch), _('Repeat master password'), ''), - InputField(Id(:kdc_dn), Opt(:hstretch), _('KDC account to create (e.g. cn=krbkdc)'), ''), - Password(Id(:kdc_pass), Opt(:hstretch), _('Password of KDC account'), ''), - Password(Id(:kdc_pass_repeat), Opt(:hstretch), _('Repeat password of KDC account'), ''), - InputField(Id(:admin_dn), Opt(:hstretch), _('Admin account to create (e.g. cn=krbadm)'), ''), - Password(Id(:admin_pass), Opt(:hstretch), _('Password of admin account'), ''), - Password(Id(:admin_pass_repeat), Opt(:hstretch), _('Repeat password of admin account'), ''), - InputField(Id(:container_dn), Opt(:hstretch), _('KDC container DN (e.g. cn=kdc)'), ''), - ), - ), - ), - HBox( - PushButton(Id(:help), Label.HelpButton), - PushButton(Id(:ok), Label.OKButton), - PushButton(Id(:finish), Label.CancelButton), - ), - ReplacePoint(Id(:busy), Empty()), - ) - end - - def help_handler - Popup.LongMessage(_('Kerberos is a popular technology for providing authentication services to internal network. -Before setting up Kerberos, please make sure that you have administration rights in a 389 directory server. -You may set one up using "New Directory Instance" program.')) - end - - def ok_handler - fqdn = UI.QueryWidget(Id(:fqdn), :Value) - realm = UI.QueryWidget(Id(:realm), :Value) - - dir_addr = UI.QueryWidget(Id(:dir_addr), :Value) - dir_suffix = UI.QueryWidget(Id(:dir_suffix), :Value) - container_dn = UI.QueryWidget(Id(:container_dn), :Value) + ',' + dir_suffix - dm_dn = 'cn=Directory Manager' - dm_pass = UI.QueryWidget(Id(:dm_pass), :Value) - - master_pass = UI.QueryWidget(Id(:master_pass), :Value) - master_pass_repeat = UI.QueryWidget(Id(:master_pass_repeat), :Value) - kdc_dn_prefix = UI.QueryWidget(Id(:kdc_dn), :Value) - kdc_pass = UI.QueryWidget(Id(:kdc_pass), :Value) - kdc_pass_repeat = UI.QueryWidget(Id(:kdc_pass_repeat), :Value) - admin_dn_prefix = UI.QueryWidget(Id(:admin_dn), :Value) - admin_pass = UI.QueryWidget(Id(:admin_pass), :Value) - admin_pass_repeat = UI.QueryWidget(Id(:admin_pass_repeat), :Value) - - # Validate input - if fqdn == '' || realm == '' || - dir_addr == '' || dir_suffix == '' || container_dn == '' || - master_pass == '' || master_pass_repeat == '' || - dm_dn == '' || dm_pass == '' || - kdc_dn_prefix == '' || kdc_pass == '' || kdc_pass_repeat == '' || - admin_dn_prefix == '' || admin_pass == '' || admin_pass_repeat == '' - Popup.Error(_('Please complete setup details. All input fields are mandatory.')) - return - end - if kdc_pass != kdc_pass_repeat - Popup.Error(_('Two KDC password entries do not match.')) - return - end - if admin_pass != admin_pass_repeat - Popup.Error(_('Two admin password entries do not match.')) - return - end - if master_pass != master_pass_repeat - Popup.Error(_('Two master password entries do not match.')) - return - end - if MITKerberos.is_configured - if !Popup.YesNo(_('You appear to have altered Kerberos configuration. -Continue to use this software will completely overwrite your configuration. -Do you still wish to continue?')) - return - end - end - - UI.ReplaceWidget(Id(:busy), Label(_('Installing new instance, this may take a minute or two.'))) - - MITKerberos.install_pkgs - # Enable kerberos schema on 389 - # By default 389-ds ships with this schema enabled today. - - # Create kerberos users and give them password in LDAP - kdc_dn = kdc_dn_prefix+','+dir_suffix - MITKerberos.append_to_log(kdc_dn) - admin_dn = admin_dn_prefix+','+dir_suffix - MITKerberos.append_to_log(admin_dn) - ldap = LDAPClient.new('ldaps://'+dir_addr, dm_dn, dm_pass) - MITKerberos.append_to_log('Created ldap client') - out, ok = ldap.create_person(kdc_dn_prefix, 'Kerberos KDC Connection', dir_suffix) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to create Kerberos KDC connection user! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - out, ok = ldap.change_password(kdc_dn,kdc_pass) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to create Kerberos KDC connection user! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - out, ok = ldap.create_person(admin_dn_prefix, 'Kerberos Administration Connection', dir_suffix) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to create Kerberos administration user! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - out, ok = ldap.change_password(admin_dn,admin_pass) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to create Kerberos KDC administration user! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - - # Make common and KDC configuration files - # This has to occur the PW files else the default realm is not known - # to the pwstash command below. - pass_file_path = '/var/lib/kerberos/krb5kdc/ldap.creds' - - MITKerberos.append_to_log('Generating /etc/krb5.conf') - open('/etc/krb5.conf', 'w') {|fh| - fh.puts(MITKerberos.gen_common_conf(realm, fqdn)) - } - MITKerberos.append_to_log('Generating /var/lib/kerberos/krb5kdc/kdc.conf') - open('/var/lib/kerberos/krb5kdc/kdc.conf', 'w') {|fh| - fh.puts(MITKerberos.gen_kdc_conf(realm, kdc_dn, admin_dn, container_dn, pass_file_path, dir_addr)) - } - - # Create password file for KDC - MITKerberos.append_to_log('Generating KRBADM/KDC Passwords to %s' % pass_file_path) - out, ok = MITKerberos.save_password_into_file(kdc_dn, kdc_pass, pass_file_path) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to create password file! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - out, ok = MITKerberos.save_password_into_file(admin_dn, admin_pass, pass_file_path) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to create password file! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - - # Let kerberos do its initialisation sequence - out, ok = MITKerberos.init_dir(dir_addr, dm_dn, dm_pass, realm, container_dn, master_pass) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Kerberos initialisation failure! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - - # Give kerberos rights to modify directory, relies on the kdc container existing - out, ok = ldap.aci_allow_modify(container_dn, 'kerberos-admin', admin_dn) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to modify directory permission! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - out, ok = ldap.aci_allow_modify(container_dn, 'kerberos-kdc', kdc_dn) - MITKerberos.append_to_log('%s' % out) - if !ok - Popup.Error(_('Failed to modify directory permission! Log output may be found in /var/log/YaST/y2log')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - - # Kerberos may finally start - if !MITKerberos.restart_kdc - Popup.Error(_('Failed to start KDC, please inspect the journal of krb5kdc.service')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - if !MITKerberos.restart_kadmind - Popup.Error(_('Failed to start kadmind, please inspect the journal of kadmind.service')) - UI.ReplaceWidget(Id(:busy), Empty()) - return - end - - UI.ReplaceWidget(Id(:busy), Empty()) - Popup.Message(_('New instance has been set up! Log output may be found in /var/log/YaST/y2log')) - finish_dialog(:next) - UI.ReplaceWidget(Id(:busy), Empty()) - end -end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-auth-server-4.5.0/test/krb_test.rb new/yast2-auth-server-4.5.1/test/krb_test.rb --- old/yast2-auth-server-4.5.0/test/krb_test.rb 2022-04-12 13:32:46.000000000 +0200 +++ new/yast2-auth-server-4.5.1/test/krb_test.rb 1970-01-01 01:00:00.000000000 +0100 @@ -1,180 +0,0 @@ -#!/usr/bin/env rspec -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. -# This program is free software; you can redistribute it and/or modify it under -# the terms of version 2 of the GNU General Public License as published by the -# Free Software Foundation. -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -# You should have received a copy of the GNU General Public License along with -# this program; if not, contact SUSE LINUX GmbH. - -# Authors: Howard Guo <h...@suse.com> - -require_relative "test_helper.rb" - -require 'pp' -require 'authserver/krb/mit' - -describe MITKerberos do - it 'gen_common_conf' do - match = '[libdefaults] - # "dns_canonicalize_hostname" and "rdns" are better set to false for improved security. - # If set to true, the canonicalization mechanism performed by Kerberos client may - # allow service impersonification, the consequence is similar to conducting TLS certificate - # verification without checking host name. - # If left unspecified, the two parameters will have default value true, which is less secure. - dns_canonicalize_hostname = false - rdns = false - default_realm = EXAMPLE.COM - -[realms] - EXAMPLE.COM = { - kdc = krb.example.com - admin_server = krb.example.com - } - -[domain_realm] - .example.com = EXAMPLE.COM - example.com = EXAMPLE.COM - -[logging] - kdc = FILE:/var/log/krb5/krb5kdc.log - admin_server = FILE:/var/log/krb5/kadmind.log - default = SYSLOG:NOTICE:DAEMON -' - expect(MITKerberos.gen_common_conf('EXAMPLE.COM', 'krb.example.com')).to eq(match) - end - - it 'gen_kdc_comf' do - match = '[kdcdefaults] - kdc_ports = 750,88 - -[realms] - EXAMPLE.COM = { - database_module = contact_ldap - } - -[dbdefaults] - -[dbmodules] - contact_ldap = { - db_library = kldap - ldap_kdc_dn = "cn=kdc" - ldap_kadmind_dn = "cn=adm" - ldap_kerberos_container_dn = "cn=container" - ldap_service_password_file = /pass - ldap_servers = ldaps://dir.example.net - } - -[logging] - kdc = FILE:/var/log/krb5/krb5kdc.log - admin_server = FILE:/var/log/krb5/kadmind.log -' - expect(MITKerberos.gen_kdc_conf('EXAMPLE.COM', 'cn=kdc', 'cn=adm', 'cn=container', '/pass', 'dir.example.net')).to eq(match) - end - - shared_context "kdb5_ldap_util mock" do - before do - allow(File).to receive(:exist?).and_call_original - allow(File).to receive(:exist?).with("/usr/lib/mit/sbin/kdb5_ldap_util").and_return(old_path) - allow(File).to receive(:exist?).with("/usr/sbin/kdb5_ldap_util").and_return(!old_path) - - allow(File).to receive(:chmod) - - allow(Open3).to receive(:popen2e).and_return([stdin, stdouterr, waiter]) - end - - let(:stdin) { instance_double(IO, puts: true, close: true) } - - let(:stdouterr) { instance_double(IO, readlines: outerr) } - - let(:waiter) { instance_double(Process::Waiter, value: status) } - - let(:status) { instance_double(Process::Status, exitstatus: exitstatus) } - - let(:outerr) { [] } - - let(:exitstatus) { 0 } - - let(:old_path) { false } - end - - shared_examples "kdb5_ldap_util" do |method, *args| - context "when the kdb5_ldap_util is found in /usr/sbin" do - let(:old_path) { false } - - it "calls kdb5_ldap_util from /usr/sbin" do - expect(Open3).to receive(:popen2e).with("/usr/sbin/kdb5_ldap_util", any_args) - - MITKerberos.send(method, *args) - end - end - - context "when the kdb5_ldap_util is not found in /usr/sbin" do - let(:old_path) { true } - - it "calls kdb5_ldap_util from /usr/lib/mit/sbin" do - expect(Open3).to receive(:popen2e).with("/usr/lib/mit/sbin/kdb5_ldap_util", any_args) - - MITKerberos.send(method, *args) - end - end - - context "on success" do - let(:outerr) { ["message1", "error1"] } - - let(:exitstatus) { 0 } - - it "returns stdouterr and true" do - result = MITKerberos.send(method, *args) - - expect(result).to eq(["message1\\nerror1", true]) - end - end - - context "on failure" do - let(:outerr) { ["message1", "error1"] } - - let(:exitstatus) { 1 } - - it "returns stdouterr and false" do - result = MITKerberos.send(method, *args) - - expect(result).to eq(["message1\\nerror1", false]) - end - end - end - - describe ".save_password_into_file" do - include_context "kdb5_ldap_util mock" - - it "calls kdb5_ldap_util with correct arguments" do - expect(Open3).to receive(:popen2e) - .with(/kdb5_ldap_util/, "stashsrvpw", "-f", "path/to/file", "-w", "pass", "example") - - MITKerberos.save_password_into_file("example", "pass", "path/to/file") - end - - include_examples "kdb5_ldap_util", :save_password_into_file, "example", "pass", "path/to/file" - end - - describe ".init_dir" do - include_context "kdb5_ldap_util mock" - - it "calls kdb5_ldap_util with correct arguments" do - expect(Open3).to receive(:popen2e) - .with(/kdb5_ldap_util/, - "-H", "ldaps://addr", - "-D", "dn", - "-w", "a_pass", - "create", "-r", "name", - "-subtrees", "c_dn", - "-s", "-P", "m_pass") - - MITKerberos.init_dir("addr", "dn", "a_pass", "name", "c_dn", "m_pass") - end - - include_examples "kdb5_ldap_util", :init_dir, "addr", "dn", "a_pass", "name", "c_dn", "m_pass" - end -end