sss_certmap_attr_names.c revision db36dca3d45e6eefbb30042ee65876566f1a6014
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek/*
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek SSSD
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek Library for rule based certificate to user mapping - Attribute name
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek mapping for different implementations
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek Authors:
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek Sumit Bose <sbose@redhat.com>
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek Copyright (C) 2017 Red Hat
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek This program is free software; you can redistribute it and/or modify
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek it under the terms of the GNU General Public License as published by
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek the Free Software Foundation; either version 3 of the License, or
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek (at your option) any later version.
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek This program is distributed in the hope that it will be useful,
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek but WITHOUT ANY WARRANTY; without even the implied warranty of
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek GNU General Public License for more details.
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek You should have received a copy of the GNU General Public License
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek along with this program. If not, see <http://www.gnu.org/licenses/>.
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek*/
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek/* NSS data taken from nss-utils:nss/lib/util/secoid.c and
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek * nss:nss/lib/certdb/alg1485.c */
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek/* AD data taken from
27e89b6925334565c73c407a9ae2809358789c81Jakub Hrozek * https://msdn.microsoft.com/en-us/library/windows/desktop/aa376556%28v=vs.85%29.aspx
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek * and wine source code dlls/crypt32/oid.c  and include/wincrypt.h . */
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek#include <stdbool.h>
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek#include <string.h>
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek#include <talloc.h>
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozekstruct oid_attr_name_map {
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek bool nss_ad_differ;
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek const char *oid;
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek const char *nss;
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek const char *ad;
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek} oid_attr_name_map[] = {
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.3", "CN", "CN"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { true, "2.5.4.8", "ST", "S"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.10", "O", "O"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.11", "OU", "OU"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.46", "dnQualifier", "dnQualifier"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.6", "C", "C"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { true, "2.5.4.5", "serialNumber", "SERIALNUMBER"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.7", "L", "L"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { true, "2.5.4.12", "title", "T"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "2.5.4.4", "SN", "SN"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { true, "2.5.4.42", "givenName", "G"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { true, "2.5.4.43", "initials", "I"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { true, "2.5.4.44", "generationQualifier", "OID.2.5.4.44"},
64ea4127f463798410a2c20e0261c6b15f60257fJakub Hrozek { false, "0.9.2342.19200300.100.1.25", "DC", "DC"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "0.9.2342.19200300.100.1.3", "MAIL", "OID,0.9.2342.19200300.100.1.3"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "0.9.2342.19200300.100.1.1", "UID", "OID.0.9.2342.19200300.100.1.1"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.13", "OID.2.5.4.13", "Description"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.16", "postalAddress", "OID.2.5.4.16"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.17", "postalCode", "PostalCode"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.18", "postOfficeBox", "POBox"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.51", "houseIdentifier", "OID.2.5.4.51"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { false, "1.2.840.113549.1.9.1", "E", "E"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { false, "2.5.4.9", "STREET", "STREET"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.65", "pseudonym", "OID.2.5.4.65"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.15", "businessCategory", "OID.2.5.4.15"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { true, "2.5.4.41", "name", "OID.2.5.4.41"},
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek { false, NULL, NULL, NULL}
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek};
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozekchar *check_ad_attr_name(TALLOC_CTX *mem_ctx, const char *rdn)
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek{
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek char *p;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek size_t c;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek size_t len;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek if (rdn == NULL) {
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek return NULL;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek }
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek p = strchr(rdn, '=');
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek if (p == NULL) {
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek return NULL;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek }
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek len = p - rdn;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek if (len == 0) {
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek return NULL;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek }
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek for (c = 0; oid_attr_name_map[c].oid != NULL; c++) {
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek if (!oid_attr_name_map[c].nss_ad_differ) {
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek continue;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek }
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek if (strlen(oid_attr_name_map[c].nss) != len
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek || strncmp(rdn, oid_attr_name_map[c].nss, len) != 0) {
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek continue;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek }
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek return talloc_asprintf(mem_ctx, "%s%s", oid_attr_name_map[c].ad, p);
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek }
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek return NULL;
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek}
05d935cc9d04f03522d0bb44598d22d99b085926Jakub Hrozek