842ae4bd224140319ae7feec1872b93dfd491143fielding#
842ae4bd224140319ae7feec1872b93dfd491143fielding# SSSD integration test - access the ldb cache
842ae4bd224140319ae7feec1872b93dfd491143fielding#
842ae4bd224140319ae7feec1872b93dfd491143fielding# Copyright (c) 2016 Red Hat, Inc.
842ae4bd224140319ae7feec1872b93dfd491143fielding#
842ae4bd224140319ae7feec1872b93dfd491143fielding# This is free software; you can redistribute it and/or modify it
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding# under the terms of the GNU General Public License as published by
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# the Free Software Foundation; version 2 only
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding#
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# This program is distributed in the hope that it will be useful, but
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# WITHOUT ANY WARRANTY; without even the implied warranty of
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd# General Public License for more details.
ce9621257ef9e54c1bbe5ad8a5f445a1f211c2dcnd#
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding# You should have received a copy of the GNU General Public License
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding# along with this program. If not, see <http://www.gnu.org/licenses/>.
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding#
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding
e8f95a682820a599fe41b22977010636be5c2717jimimport os
0f081398cf0eef8cc7c66a535d450110a92dc8aefieldingimport ldb
e8f95a682820a599fe41b22977010636be5c2717jimimport config
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gsteinclass CacheType(object):
b6055b7832a0e4d0818416252fff5925aaebae4brbb sysdb = 1
694e8dc146faadc46b2455f3bd0998121fc76c5drbb timestamps = 2
688f7d0bc138bb02f92288017920468e7e314f23stoddard
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gsteinclass TsCacheEntry(object):
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein user = 1
024cd9589e52cf11ce765dfddb5b5f0c6e421a48gstein group = 2
9625528fcf4fa27288f3be080a1979c8ef60d7dfrbb
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding
0f081398cf0eef8cc7c66a535d450110a92dc8aefieldingclass SssdLdb(object):
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding def __init__(self, domain_name):
fd0edaa8e3d4dd67d0604ccef2e96b071db96643fielding self._domain_name = domain_name
e9dacb49354baa7346837faad335f27caa7fe1eestoddard self._sysdb = self._create_dbconn(CacheType.sysdb,
8f3ec4772d2aeb347cf40e87c77627bb784dd018rbb domain_name)
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx self._timestamps = self._create_dbconn(CacheType.timestamps,
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx domain_name)
c9d61c89bc925c6d68ba518521069f0c484d431daaron
e8f95a682820a599fe41b22977010636be5c2717jim def _create_dbconn(self, cache_type, domain_name):
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx if cache_type == CacheType.sysdb:
e8f95a682820a599fe41b22977010636be5c2717jim db_path = os.path.join(config.DB_PATH,
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx "cache_%s.ldb" % domain_name)
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx elif cache_type == CacheType.timestamps:
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx db_path = os.path.join(config.DB_PATH,
10a4cdd68ef1ca0e54af296fe1d08ac00150c90bwrowe "timestamps_%s.ldb" % domain_name)
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx else:
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx raise ValueError("Unknown cache type\n")
e8f95a682820a599fe41b22977010636be5c2717jim
d966517aa21082d145889d5486c1bface0629597dirkx pyldb = ldb.Ldb()
3e91d7dbd9861343e0cb06a12bde47066b45afe9dirkx pyldb.connect(db_path)
12b41741aa68f0f4a5d908ca7f7d58a583b17bb0rbb return pyldb
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding
b2c2c8a4bc977c0a6bb937af995efc56dc3879a3wrowe def _get_dbconn(self, cache_type):
12b41741aa68f0f4a5d908ca7f7d58a583b17bb0rbb dbconn = None
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding if cache_type == CacheType.sysdb:
688f7d0bc138bb02f92288017920468e7e314f23stoddard dbconn = self._sysdb
688f7d0bc138bb02f92288017920468e7e314f23stoddard elif cache_type == CacheType.timestamps:
688f7d0bc138bb02f92288017920468e7e314f23stoddard dbconn = self._timestamps
688f7d0bc138bb02f92288017920468e7e314f23stoddard return dbconn
688f7d0bc138bb02f92288017920468e7e314f23stoddard
688f7d0bc138bb02f92288017920468e7e314f23stoddard def _entry_basedn(self, entry_type):
688f7d0bc138bb02f92288017920468e7e314f23stoddard if entry_type == TsCacheEntry.user:
688f7d0bc138bb02f92288017920468e7e314f23stoddard rdn = "users"
b2c2c8a4bc977c0a6bb937af995efc56dc3879a3wrowe elif entry_type == TsCacheEntry.group:
b2c2c8a4bc977c0a6bb937af995efc56dc3879a3wrowe rdn = "groups"
688f7d0bc138bb02f92288017920468e7e314f23stoddard else:
688f7d0bc138bb02f92288017920468e7e314f23stoddard raise ValueError("Unknown entry type\n")
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe return "cn=%s,cn=%s,cn=sysdb" % (rdn, self._domain_name)
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe def _basedn(self, name, domain, entry_type):
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe return "name=%s@%s,%s" % (name, domain.lower(),
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe self._entry_basedn(entry_type))
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding def get_entry_attr(self, cache_type, entry_type, name, domain, attr):
c9d61c89bc925c6d68ba518521069f0c484d431daaron dbconn = self._get_dbconn(cache_type)
c9d61c89bc925c6d68ba518521069f0c484d431daaron basedn = self._basedn(name, domain, entry_type)
f2e16ea0697f128c32da623a0b2b9d0f81c5ebcawrowe print basedn
b2c2c8a4bc977c0a6bb937af995efc56dc3879a3wrowe
12b41741aa68f0f4a5d908ca7f7d58a583b17bb0rbb res = dbconn.search(base=basedn, scope=ldb.SCOPE_BASE, attrs=[attr])
0f081398cf0eef8cc7c66a535d450110a92dc8aefielding if res.count != 1:
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe return None
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe
e8f95a682820a599fe41b22977010636be5c2717jim return res.msgs[0].get(attr).get(0)
6ce942b017db75b559a42bdc2d7b8ea9e869a956wrowe